aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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();