aboutsummaryrefslogtreecommitdiffstats
path: root/src/app
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2016-04-22 11:20:57 -0700
committerJake Petroules <jake.petroules@qt.io>2016-05-23 17:16:17 +0000
commit8819fab638f8b41a92f425088228d583a3f6d4df (patch)
tree7b1538247eff3835388529544d65040089534a61 /src/app
parentbf1667e8e1aae74ff85583452afc06caa4a01d22 (diff)
Determine compiler version automatically for GCC.
Change-Id: I27b6bcea0fdb43b1c36d42235121a43553341fce Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Diffstat (limited to 'src/app')
-rw-r--r--src/app/qbs-setup-toolchains/compilerversion.cpp66
1 files changed, 7 insertions, 59 deletions
diff --git a/src/app/qbs-setup-toolchains/compilerversion.cpp b/src/app/qbs-setup-toolchains/compilerversion.cpp
index cf3c20887..5e4fc66ac 100644
--- a/src/app/qbs-setup-toolchains/compilerversion.cpp
+++ b/src/app/qbs-setup-toolchains/compilerversion.cpp
@@ -92,56 +92,6 @@ static QByteArray runProcess(const QString &exeFilePath, const QStringList &args
return process.readAllStandardOutput().trimmed();
}
-static Version getGccVersion(const QString &compilerFilePath, const QStringList &qbsToolchain)
-{
- QByteArray majorKey;
- QByteArray minorKey;
- QByteArray patchKey;
- if (qbsToolchain.contains(QLatin1String("clang"))) {
- majorKey = "__clang_major__";
- minorKey = "__clang_minor__";
- patchKey = "__clang_patchlevel__";
- } else {
- majorKey = "__GNUC__";
- minorKey = "__GNUC_MINOR__";
- patchKey = "__GNUC_PATCHLEVEL__";
- }
- QTemporaryFile dummyFile;
- if (!dummyFile.open())
- throw ErrorInfo(mkStr("Could not create temporary file (%1)").arg(dummyFile.errorString()));
- dummyFile.close();
- const QStringList compilerArgs = QStringList() << QLatin1String("-E") << QLatin1String("-dM")
- << QLatin1String("-x") << QLatin1String("c")
- << QLatin1String("-c") << dummyFile.fileName();
- const QByteArray compilerOutput = runProcess(compilerFilePath, compilerArgs);
- if (compilerOutput.isEmpty())
- throw ErrorInfo(mkStr("Could not extract version from compiler output."));
- const QList<QByteArray> lines = compilerOutput.split('\n');
- QList<QByteArray> keyParts = QList<QByteArray>() << majorKey << minorKey << patchKey;
- QStringList versionParts = QStringList() << QString() << QString() << QString();
- int partsFound = 0;
- foreach (const QByteArray &line, lines) {
- for (int i = 0; i < keyParts.count() && partsFound < keyParts.count(); ++i) {
- QString &versionPart = versionParts[i];
- if (!versionPart.isEmpty())
- continue;
- const QByteArray cleanLine = line.simplified();
- const QByteArray keyPart = "#define " + keyParts.at(i) + ' ';
- if (!cleanLine.startsWith(keyPart))
- continue;
- versionPart = QString::fromLatin1(cleanLine.mid(keyPart.count()));
- ++partsFound;
- }
- }
- if (partsFound < keyParts.count())
- throw ErrorInfo(mkStr("Failed to extract version from compiler output."));
- const Version version = Version::fromString(versionParts.at(0) + QLatin1Char('.')
- + versionParts.at(1) + QLatin1Char('.') + versionParts.at(2));
- if (!version.isValid())
- throw ErrorInfo(mkStr("Failed to extract version from compiler output."));
- return version;
-}
-
class DummyFile {
public:
DummyFile(const QString &fp) : filePath(fp) { }
@@ -205,15 +155,13 @@ void setCompilerVersion(const QString &compilerFilePath, const QStringList &qbsT
Profile &profile, const QProcessEnvironment &compilerEnv)
{
try {
- Version version;
- if (qbsToolchain.contains(QLatin1String("gcc")))
- version = getGccVersion(compilerFilePath, qbsToolchain);
- else if (qbsToolchain.contains(QLatin1String("msvc")))
- version = getMsvcVersion(compilerFilePath, compilerEnv);
- if (version.isValid()) {
- profile.setValue(QLatin1String("cpp.compilerVersionMajor"), version.majorVersion());
- profile.setValue(QLatin1String("cpp.compilerVersionMinor"), version.minorVersion());
- profile.setValue(QLatin1String("cpp.compilerVersionPatch"), version.patchLevel());
+ if (qbsToolchain.contains(QLatin1String("msvc"))) {
+ const Version version = getMsvcVersion(compilerFilePath, compilerEnv);
+ if (version.isValid()) {
+ profile.setValue(QLatin1String("cpp.compilerVersionMajor"), version.majorVersion());
+ profile.setValue(QLatin1String("cpp.compilerVersionMinor"), version.minorVersion());
+ profile.setValue(QLatin1String("cpp.compilerVersionPatch"), version.patchLevel());
+ }
}
} catch (const ErrorInfo &e) {
qDebug("Warning: Failed to retrieve compiler version: %s", qPrintable(e.toString()));