diff options
-rw-r--r-- | doc/reference/modules/qt-modules.qdoc | 27 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/qtprofilesetup.cpp | 3 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/QtModule.qbs | 14 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/core.qbs | 35 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/mixed-build-variants/main.cpp | 6 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/mixed-build-variants/mixed-build-variants.qbs | 6 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 20 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.h | 1 |
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(); |