aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-10-06 19:18:16 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-10-07 12:07:15 +0200
commitb7e42fbe02d6105c5e449e90f74ef16f30500440 (patch)
treebf1cfd520371fef4582044ddab3af84ff9dedd11
parent2202f8b65c6eb3c1fc4784bdc76f758578856432 (diff)
Make Qt build variants logic more sensible.v1.3.2
We no longer force the Qt build variant to match the build variant of the application linking against it (except for MSVC, where that is required). Change-Id: Ie2c80fbb0d688cdcbab57ad638aaccbbd6988a22 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@digia.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r--doc/reference/modules/qt-modules.qdoc27
-rw-r--r--src/lib/qtprofilesetup/qtprofilesetup.cpp3
-rw-r--r--src/lib/qtprofilesetup/templates/QtModule.qbs14
-rw-r--r--src/lib/qtprofilesetup/templates/core.qbs35
-rw-r--r--tests/auto/blackbox/testdata/mixed-build-variants/main.cpp6
-rw-r--r--tests/auto/blackbox/testdata/mixed-build-variants/mixed-build-variants.qbs6
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp20
-rw-r--r--tests/auto/blackbox/tst_blackbox.h1
8 files changed, 89 insertions, 23 deletions
diff --git a/doc/reference/modules/qt-modules.qdoc b/doc/reference/modules/qt-modules.qdoc
index 01e2226b9..a183e96ff 100644
--- a/doc/reference/modules/qt-modules.qdoc
+++ b/doc/reference/modules/qt-modules.qdoc
@@ -186,23 +186,23 @@
interesting to users. Some of them only need to be defined if the respective installation
of Qt was built in some unusual way, for instance by setting non-default \c configure flags.
- \section3 binPath
+ \section3 availableBuildVariants
\table
- \row \li \b{Type:} \li \c{path}
- \row \li \b{Default:} \li \c{undefined}
+ \row \li \b{Type:} \li \c{stringList}
+ \row \li \b{Default:} \li set by \c{qbs-setup-qt}
\endtable
- The path in which Qt tools such as \c qmake, \c moc and so on are located.
+ The build variants that this Qt installation offers.
- \section3 buildVariant
+ \section3 binPath
\table
- \row \li \b{Type:} \li \c{stringList}
+ \row \li \b{Type:} \li \c{path}
\row \li \b{Default:} \li \c{undefined}
\endtable
- Specifies the build variants for which Qt was built.
+ The path in which Qt tools such as \c qmake, \c moc and so on are located.
\section3 config
@@ -334,6 +334,19 @@
Controls which name the \c qhp file gets when generating documentation with \c qdoc.
+ \section3 qtBuildVariant
+
+ \table
+ \row \li \b{Type:} \li \c{string}
+ \row \li \b{Default:} \li See below.
+ \endtable
+
+ Specifies the type of Qt libraries to build against: "debug" or "release".
+ The default value is the build variant of the code linking against Qt. If Qt does not offer
+ that build variant, the build variant offered by Qt is chosen instead.
+ \note On some systems, it is not possible to link code built in debug mode against libraries
+ built in release mode and vice versa.
+
\section3 qtConfig
\table
diff --git a/src/lib/qtprofilesetup/qtprofilesetup.cpp b/src/lib/qtprofilesetup/qtprofilesetup.cpp
index 65e100f57..3b924616f 100644
--- a/src/lib/qtprofilesetup/qtprofilesetup.cpp
+++ b/src/lib/qtprofilesetup/qtprofilesetup.cpp
@@ -296,7 +296,8 @@ void doSetupQtProfile(const QString &profileName, Settings *settings,
profile.setValue(settingsTemplate.arg("docPath"), qtEnvironment.documentationPath);
profile.setValue(settingsTemplate.arg("version"), qtEnvironment.qtVersion);
profile.setValue(settingsTemplate.arg("libInfix"), qtEnvironment.qtLibInfix);
- profile.setValue(settingsTemplate.arg("buildVariant"), qtEnvironment.buildVariant);
+ profile.setValue(settingsTemplate.arg("buildVariant"), qtEnvironment.buildVariant); // TODO: Remove in 1.5
+ profile.setValue(settingsTemplate.arg("availableBuildVariants"), qtEnvironment.buildVariant);
profile.setValue(settingsTemplate.arg(QLatin1String("staticBuild")), staticBuild);
// Set the minimum operating system versions appropriate for this Qt version
diff --git a/src/lib/qtprofilesetup/templates/QtModule.qbs b/src/lib/qtprofilesetup/templates/QtModule.qbs
index 6c088555d..159568bca 100644
--- a/src/lib/qtprofilesetup/templates/QtModule.qbs
+++ b/src/lib/qtprofilesetup/templates/QtModule.qbs
@@ -12,11 +12,11 @@ Module {
property string qtLibInfix: Qt.core.libInfix
property string libNameForLinkerDebug
property string libNameForLinkerRelease
- property string libNameForLinker: qbs.buildVariant === "debug"
+ property string libNameForLinker: Qt.core.qtBuildVariant === "debug"
? libNameForLinkerDebug : libNameForLinkerRelease
property string libFilePathDebug
property string libFilePathRelease
- property string libFilePath: qbs.buildVariant === "debug"
+ property string libFilePath: Qt.core.qtBuildVariant === "debug"
? libFilePathDebug : libFilePathRelease
property string qtVersion: Qt.core.version
property bool hasLibrary: true
@@ -29,19 +29,19 @@ Module {
property stringList dynamicLibsRelease
property stringList linkerFlagsDebug
property stringList linkerFlagsRelease
- property stringList staticLibs: qbs.buildVariant === "debug"
+ property stringList staticLibs: Qt.core.qtBuildVariant === "debug"
? staticLibsDebug : staticLibsRelease
- property stringList dynamicLibs: qbs.buildVariant === "debug"
+ property stringList dynamicLibs: Qt.core.qtBuildVariant === "debug"
? dynamicLibsDebug : dynamicLibsRelease
property stringList frameworksDebug
property stringList frameworksRelease
property stringList frameworkPathsDebug
property stringList frameworkPathsRelease
- property stringList mFrameworks: qbs.buildVariant === "debug"
+ property stringList mFrameworks: Qt.core.qtBuildVariant === "debug"
? frameworksDebug : frameworksRelease
- property stringList mFrameworkPaths: qbs.buildVariant === "debug"
+ property stringList mFrameworkPaths: Qt.core.qtBuildVariant === "debug"
? frameworkPathsDebug: frameworkPathsRelease
- cpp.linkerFlags: qbs.buildVariant === "debug"
+ cpp.linkerFlags: Qt.core.qtBuildVariant === "debug"
? linkerFlagsDebug : linkerFlagsRelease
Properties {
diff --git a/src/lib/qtprofilesetup/templates/core.qbs b/src/lib/qtprofilesetup/templates/core.qbs
index aefd9c48d..9dd51bd53 100644
--- a/src/lib/qtprofilesetup/templates/core.qbs
+++ b/src/lib/qtprofilesetup/templates/core.qbs
@@ -30,34 +30,42 @@ Module {
property int versionPatch: versionParts[2]
property bool frameworkBuild
property bool staticBuild
- property stringList buildVariant
+
+ property stringList availableBuildVariants
+ property stringList buildVariant // TODO: Remove in 1.5
+ property string qtBuildVariant: {
+ if (availableBuildVariants.contains(qbs.buildVariant))
+ return qbs.buildVariant;
+ return availableBuildVariants.length > 0 ? availableBuildVariants[0] : "";
+ }
+
property stringList staticLibsDebug: @staticLibsDebug@
property stringList staticLibsRelease: @staticLibsRelease@
property stringList dynamicLibsDebug: @dynamicLibsDebug@
property stringList dynamicLibsRelease: @dynamicLibsRelease@
- property stringList staticLibs: qbs.buildVariant === "debug"
+ property stringList staticLibs: qtBuildVariant === "debug"
? staticLibsDebug : staticLibsRelease
- property stringList dynamicLibs: qbs.buildVariant === "debug"
+ property stringList dynamicLibs: qtBuildVariant === "debug"
? dynamicLibsDebug : dynamicLibsRelease
property stringList linkerFlagsDebug: @linkerFlagsDebug@
property stringList linkerFlagsRelease: @linkerFlagsRelease@
- property stringList coreLinkerFlags: qbs.buildVariant === "debug"
+ property stringList coreLinkerFlags: qtBuildVariant === "debug"
? linkerFlagsDebug : linkerFlagsRelease
property stringList frameworksDebug: @frameworksDebug@
property stringList frameworksRelease: @frameworksRelease@
- property stringList coreFrameworks: qbs.buildVariant === "debug"
+ property stringList coreFrameworks: qtBuildVariant === "debug"
? frameworksDebug : frameworksRelease
property stringList frameworkPathsDebug: @frameworkPathsDebug@
property stringList frameworkPathsRelease: @frameworkPathsRelease@
- property stringList coreFrameworkPaths: qbs.buildVariant === "debug"
+ property stringList coreFrameworkPaths: qtBuildVariant === "debug"
? frameworkPathsDebug : frameworkPathsRelease
property string libNameForLinkerDebug: @libNameForLinkerDebug@
property string libNameForLinkerRelease: @libNameForLinkerRelease@
- property string libNameForLinker: qbs.buildVariant === "debug"
+ property string libNameForLinker: qtBuildVariant === "debug"
? libNameForLinkerDebug : libNameForLinkerRelease
property string libFilePathDebug: @libFilePathDebug@
property string libFilePathRelease: @libFilePathRelease@
- property string libFilePath: qbs.buildVariant === "debug"
+ property string libFilePath: qtBuildVariant === "debug"
? libFilePathDebug : libFilePathRelease
coreLibPaths: @libraryPaths@
@@ -168,6 +176,17 @@ Module {
validator.addRangeValidator("versionPatch", versionPatch, 0);
validator.validate();
+
+ if (availableBuildVariants.length === 0)
+ throw "The Qt installation supports no build variants.";
+ if (!availableBuildVariants.contains(qtBuildVariant)) {
+ throw "Qt.core.qtBuildVariant '" + qtBuildVariant +
+ "' is not supported by this Qt installation.";
+ }
+ if (qbs.toolchain.contains("msvc") && qtBuildVariant !== qbs.buildVariant) {
+ throw "Qt.core.qtBuildVariant is '" + qtBuildVariant + "', but qbs.buildVariant is '"
+ + qbs.buildVariant + "', which is not allowed when using MSVC.";
+ }
}
setupRunEnvironment: {
diff --git a/tests/auto/blackbox/testdata/mixed-build-variants/main.cpp b/tests/auto/blackbox/testdata/mixed-build-variants/main.cpp
new file mode 100644
index 000000000..c328ff656
--- /dev/null
+++ b/tests/auto/blackbox/testdata/mixed-build-variants/main.cpp
@@ -0,0 +1,6 @@
+#include <QtDebug>
+
+int main()
+{
+ qDebug("Tach.");
+}
diff --git a/tests/auto/blackbox/testdata/mixed-build-variants/mixed-build-variants.qbs b/tests/auto/blackbox/testdata/mixed-build-variants/mixed-build-variants.qbs
new file mode 100644
index 000000000..2b208f3d4
--- /dev/null
+++ b/tests/auto/blackbox/testdata/mixed-build-variants/mixed-build-variants.qbs
@@ -0,0 +1,6 @@
+import qbs
+
+QtApplication {
+ Qt.core.qtBuildVariant: "release"
+ files: ["main.cpp"]
+}
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index d8a4f0e73..cde04882e 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -1826,6 +1826,26 @@ void TestBlackbox::inheritQbsSearchPaths()
QCOMPARE(runQbs(), 0);
}
+void TestBlackbox::mixedBuildVariants()
+{
+ QDir::setCurrent(testDataDir + "/mixed-build-variants");
+ Settings settings((QString()));
+ Profile profile(buildProfileName, &settings);
+ if (profile.value("qbs.toolchain").toStringList().contains("msvc")) {
+ QbsRunParameters params;
+ params.expectFailure = true;
+ QVERIFY(runQbs(params) != 0);
+ QVERIFY2(m_qbsStderr.contains("not allowed"), m_qbsStderr.constData());
+ } else if (!profile.value("Qt.core.availableBuildVariants").toStringList().contains("release")) {
+ QbsRunParameters params;
+ params.expectFailure = true;
+ QVERIFY(runQbs(params) != 0);
+ QVERIFY2(m_qbsStderr.contains("not supported"), m_qbsStderr.constData());
+ } else {
+ QCOMPARE(runQbs(), 0);
+ }
+}
+
void TestBlackbox::mocCppIncluded()
{
QDir::setCurrent(testDataDir + "/moc_hpp_included");
diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h
index 4803ad277..76ae3f04f 100644
--- a/tests/auto/blackbox/tst_blackbox.h
+++ b/tests/auto/blackbox/tst_blackbox.h
@@ -128,6 +128,7 @@ private slots:
void jsExtensionsPropertyList();
void jsExtensionsTextFile();
void inheritQbsSearchPaths();
+ void mixedBuildVariants();
void mocCppIncluded();
void newOutputArtifactInDependency();
void newPatternMatch();