aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2017-06-26 17:04:30 -0700
committerJake Petroules <jake.petroules@qt.io>2017-06-29 08:36:50 +0000
commit8112ca60323e8342627bffe92ca8f00bfc5812cc (patch)
tree56fe93817b6657cd866d782ac4ddb3c541b1665a
parentdb351f78a672cc9ecf50eae01385675348cd1920 (diff)
Move the compiler version detection into a separate Probe
The compiler version is needed in the GccProbe itself (to determine which compiler flags are available to use) so it cannot be done in a single probe. This change will be taken advantage of in a subsequent patch. This patch also fixes a silent failure that caused the wrong compiler flags to be used in the GccProbe due to the compiler version being undefined at the point where feature checks based on the compiler version were being made... specifically, that the -target flag was assumed to be unavailable due to the missing compiler version. Change-Id: I13626c37f3fd21b5b8b6632714ba9dd9373b7838 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--share/qbs/imports/qbs/Probes/GccProbe.qbs14
-rw-r--r--share/qbs/imports/qbs/Probes/GccVersionProbe.qbs68
-rw-r--r--share/qbs/modules/cpp/GenericGCC.qbs19
3 files changed, 83 insertions, 18 deletions
diff --git a/share/qbs/imports/qbs/Probes/GccProbe.qbs b/share/qbs/imports/qbs/Probes/GccProbe.qbs
index 7214ffacb..b153f89c0 100644
--- a/share/qbs/imports/qbs/Probes/GccProbe.qbs
+++ b/share/qbs/imports/qbs/Probes/GccProbe.qbs
@@ -40,15 +40,11 @@ PathProbe {
property var environment
property string _nullDevice: qbs.nullDevice
- property stringList _toolchain: qbs.toolchain
property string _pathListSeparator: qbs.pathListSeparator
property string _sysroot: qbs.sysroot
// Outputs
property string architecture
- property int versionMajor
- property int versionMinor
- property int versionPatch
property stringList includePaths
property stringList libraryPaths
property stringList frameworkPaths
@@ -71,15 +67,5 @@ PathProbe {
// We have to dump the compiler's macros; -dumpmachine is not suitable because it is not
// always complete (for example, the subarch is not included for arm architectures).
architecture = ModUtils.guessArchitecture(macros);
-
- if (_toolchain.contains("clang")) {
- versionMajor = parseInt(macros["__clang_major__"], 10);
- versionMinor = parseInt(macros["__clang_minor__"], 10);
- versionPatch = parseInt(macros["__clang_patchlevel__"], 10);
- } else {
- versionMajor = parseInt(macros["__GNUC__"], 10);
- versionMinor = parseInt(macros["__GNUC_MINOR__"], 10);
- versionPatch = parseInt(macros["__GNUC_PATCHLEVEL__"], 10);
- }
}
}
diff --git a/share/qbs/imports/qbs/Probes/GccVersionProbe.qbs b/share/qbs/imports/qbs/Probes/GccVersionProbe.qbs
new file mode 100644
index 000000000..c0044f307
--- /dev/null
+++ b/share/qbs/imports/qbs/Probes/GccVersionProbe.qbs
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing
+**
+** This file is part of the Qt Build Suite.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms and
+** conditions see http://www.qt.io/terms-conditions. For further information
+** use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+import qbs
+import qbs.File
+import "../../../modules/cpp/gcc.js" as Gcc
+
+PathProbe {
+ // Inputs
+ property string compilerFilePath
+ property var environment
+
+ property string _nullDevice: qbs.nullDevice
+ property stringList _toolchain: qbs.toolchain
+
+ // Outputs
+ property int versionMajor
+ property int versionMinor
+ property int versionPatch
+
+ configure: {
+ if (!File.exists(compilerFilePath)) {
+ found = false;
+ return;
+ }
+
+ var macros = Gcc.dumpMacros(environment, compilerFilePath, undefined, _nullDevice);
+
+ if (_toolchain.contains("clang")) {
+ versionMajor = parseInt(macros["__clang_major__"], 10);
+ versionMinor = parseInt(macros["__clang_minor__"], 10);
+ versionPatch = parseInt(macros["__clang_patchlevel__"], 10);
+ found = true;
+ } else {
+ versionMajor = parseInt(macros["__GNUC__"], 10);
+ versionMinor = parseInt(macros["__GNUC_MINOR__"], 10);
+ versionPatch = parseInt(macros["__GNUC_PATCHLEVEL__"], 10);
+ found = true;
+ }
+ }
+}
diff --git a/share/qbs/modules/cpp/GenericGCC.qbs b/share/qbs/modules/cpp/GenericGCC.qbs
index c9e10d081..228efee26 100644
--- a/share/qbs/modules/cpp/GenericGCC.qbs
+++ b/share/qbs/modules/cpp/GenericGCC.qbs
@@ -49,6 +49,15 @@ CppModule {
names: [compilerName]
}
+ // Find the version as early as possible in case other things depend on it,
+ // for example the question of whether certain flags are supported and which need to be used
+ // in the GccProbe itself.
+ Probes.GccVersionProbe {
+ id: gccVersionProbe
+ compilerFilePath: compilerPath
+ environment: buildEnv
+ }
+
Probes.GccProbe {
id: gccProbe
compilerFilePath: compilerPath
@@ -88,9 +97,9 @@ CppModule {
qbs.architecture: gccProbe.found ? gccProbe.architecture : original
- compilerVersionMajor: gccProbe.versionMajor
- compilerVersionMinor: gccProbe.versionMinor
- compilerVersionPatch: gccProbe.versionPatch
+ compilerVersionMajor: gccVersionProbe.versionMajor
+ compilerVersionMinor: gccVersionProbe.versionMinor
+ compilerVersionPatch: gccVersionProbe.versionPatch
compilerIncludePaths: gccProbe.includePaths
compilerFrameworkPaths: gccProbe.frameworkPaths
@@ -100,7 +109,9 @@ CppModule {
&& Utilities.versionCompare(compilerVersion, "3.1") >= 0
property bool assemblerHasTargetOption: qbs.toolchain.contains("xcode")
&& Utilities.versionCompare(compilerVersion, "7") >= 0
- property string target: [targetArch, targetVendor, targetSystem, targetAbi].join("-")
+ property string target: targetArch
+ ? [targetArch, targetVendor, targetSystem, targetAbi].join("-")
+ : undefined
property string targetArch: Utilities.canonicalTargetArchitecture(
qbs.architecture, targetVendor, targetSystem, targetAbi)
property string targetVendor: "unknown"