diff options
author | Jake Petroules <jake.petroules@qt.io> | 2017-08-12 22:29:18 -0700 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2017-11-29 18:03:31 +0000 |
commit | a3c85aa9f267c156cd9b71a389eb4efe460439c8 (patch) | |
tree | ad897e6ea353090c4e23ed78fc3e14632b800b1a /src/lib/qtprofilesetup | |
parent | b3df879ed9dee5872fa2c1f3ee0594ae07dd80bb (diff) |
Constrain Qt modules also to qbs.targetPlatform
This makes it possible to have multiple Qt versions for different
platforms in the same module search path (much like multiple Android
archs are present in the same module search path). This enables
scenarios like building a Qt-based iOS and watchOS project in the same
build configuration without messing with profiles.
Change-Id: I448d7a768e8576373ff91d5283d46dbd7b8969ca
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/lib/qtprofilesetup')
-rw-r--r-- | src/lib/qtprofilesetup/qtprofilesetup.cpp | 48 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/qtprofilesetup.h | 4 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/QtModule.qbs | 8 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/core.qbs | 7 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/dbus.qbs | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/gui.qbs | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/module.qbs | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/plugin.qbs | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/qml.qbs | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/quick.qbs | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/scxml.qbs | 1 |
11 files changed, 71 insertions, 3 deletions
diff --git a/src/lib/qtprofilesetup/qtprofilesetup.cpp b/src/lib/qtprofilesetup/qtprofilesetup.cpp index 837a54c71..c9256dc3d 100644 --- a/src/lib/qtprofilesetup/qtprofilesetup.cpp +++ b/src/lib/qtprofilesetup/qtprofilesetup.cpp @@ -159,6 +159,8 @@ static void replaceSpecialValues(QByteArray *content, const Profile &profile, const QtModuleInfo &module, const QtEnvironment &qtEnvironment) { content->replace("@arch@", utf8JSLiteral(extractQbsArch(qtEnvironment))); + content->replace("@targetPlatform@", utf8JSLiteral(qbsTargetPlatformFromQtMkspec( + qtEnvironment.mkspecName))); content->replace("@config@", utf8JSLiteral(qtEnvironment.configItems)); content->replace("@qtConfig@", utf8JSLiteral(qtEnvironment.qtConfigItems)); content->replace("@binPath@", utf8JSLiteral(qtEnvironment.binaryPath)); @@ -528,6 +530,52 @@ void doSetupQtProfile(const QString &profileName, Settings *settings, createModules(profile, settings, qtEnvironment); } +QString qbsTargetPlatformFromQtMkspec(const QString &mkspec) +{ + if (mkspec.startsWith(QLatin1String("aix-"))) + return QLatin1String("aix"); + if (mkspec.startsWith(QLatin1String("android-"))) + return QLatin1String("android"); + if (mkspec.startsWith(QLatin1String("cygwin-"))) + return QLatin1String("windows"); + if (mkspec.startsWith(QLatin1String("darwin-"))) + return QLatin1String("macos"); + if (mkspec.startsWith(QLatin1String("freebsd-"))) + return QLatin1String("freebsd"); + if (mkspec.startsWith(QLatin1String("haiku-"))) + return QLatin1String("haiku"); + if (mkspec.startsWith(QLatin1String("hpux-")) || mkspec.startsWith(QLatin1String("hpuxi-"))) + return QLatin1String("hpux"); + if (mkspec.startsWith(QLatin1String("hurd-"))) + return QLatin1String("hurd"); + if (mkspec.startsWith(QLatin1String("integrity-"))) + return QLatin1String("integrity"); + if (mkspec.startsWith(QLatin1String("linux-"))) + return QLatin1String("linux"); + if (mkspec.startsWith(QLatin1String("macx-"))) { + if (mkspec.startsWith(QLatin1String("macx-ios-"))) + return QLatin1String("ios"); + if (mkspec.startsWith(QLatin1String("macx-tvos-"))) + return QLatin1String("tvos"); + if (mkspec.startsWith(QLatin1String("macx-watchos-"))) + return QLatin1String("watchos"); + return QLatin1String("macos"); + } + if (mkspec.startsWith(QLatin1String("netbsd-"))) + return QLatin1String("netbsd"); + if (mkspec.startsWith(QLatin1String("openbsd-"))) + return QLatin1String("openbsd"); + if (mkspec.startsWith(QLatin1String("qnx-"))) + return QLatin1String("qnx"); + if (mkspec.startsWith(QLatin1String("solaris-"))) + return QLatin1String("solaris"); + if (mkspec.startsWith(QLatin1String("vxworks-"))) + return QLatin1String("vxworks"); + if (mkspec.startsWith(QLatin1String("win32-")) || mkspec.startsWith(QLatin1String("winrt-"))) + return QLatin1String("windows"); + return QString(); +} + ErrorInfo setupQtProfile(const QString &profileName, Settings *settings, const QtEnvironment &qtEnvironment) { diff --git a/src/lib/qtprofilesetup/qtprofilesetup.h b/src/lib/qtprofilesetup/qtprofilesetup.h index c6f707e26..be6642842 100644 --- a/src/lib/qtprofilesetup/qtprofilesetup.h +++ b/src/lib/qtprofilesetup/qtprofilesetup.h @@ -43,12 +43,14 @@ #include <tools/qbs_export.h> -#include <QtCore/qstringlist.h> +#include <QtCore/qstring.h> namespace qbs { class ErrorInfo; class Settings; +QBS_EXPORT QString qbsTargetPlatformFromQtMkspec(const QString &mkspec); + QBS_EXPORT ErrorInfo setupQtProfile(const QString &profileName, Settings *settings, const QtEnvironment &qtEnvironment); diff --git a/src/lib/qtprofilesetup/templates/QtModule.qbs b/src/lib/qtprofilesetup/templates/QtModule.qbs index 6291bae01..62bbc8649 100644 --- a/src/lib/qtprofilesetup/templates/QtModule.qbs +++ b/src/lib/qtprofilesetup/templates/QtModule.qbs @@ -2,7 +2,12 @@ import qbs 1.0 import qbs.FileInfo Module { - condition: !qbs.architecture || architecture === qbs.architecture + condition: (qbs.targetPlatform === targetPlatform || isCombinedUIKitBuild) + && (!qbs.architecture + || architecture === qbs.architecture) + + readonly property bool isCombinedUIKitBuild: ["ios", "tvos", "watchos"].contains(targetPlatform) + && qbs.targetPlatform === targetPlatform + "-simulator" Depends { name: "cpp" } Depends { name: "Qt.core" } @@ -26,6 +31,7 @@ Module { property bool isPlugin: false property string architecture + property string targetPlatform property stringList staticLibsDebug property stringList staticLibsRelease property stringList dynamicLibsDebug diff --git a/src/lib/qtprofilesetup/templates/core.qbs b/src/lib/qtprofilesetup/templates/core.qbs index 6015265e2..5ebe86599 100644 --- a/src/lib/qtprofilesetup/templates/core.qbs +++ b/src/lib/qtprofilesetup/templates/core.qbs @@ -8,7 +8,11 @@ import "moc.js" as Moc import "qdoc.js" as Qdoc Module { - condition: !qbs.architecture || architecture === qbs.architecture + condition: (!qbs.architecture || architecture === qbs.architecture) && + (qbs.targetPlatform === targetPlatform || isCombinedUIKitBuild) + + readonly property bool isCombinedUIKitBuild: ["ios", "tvos", "watchos"].contains(targetPlatform) + && qbs.targetPlatform === targetPlatform + "-simulator" id: qtcore @@ -16,6 +20,7 @@ Module { version: @version@ property string architecture: @arch@ + property string targetPlatform: @targetPlatform@ property string libInfix: @libInfix@ property stringList config: @config@ property stringList qtConfig: @qtConfig@ diff --git a/src/lib/qtprofilesetup/templates/dbus.qbs b/src/lib/qtprofilesetup/templates/dbus.qbs index 48fb2480b..3ef944cae 100644 --- a/src/lib/qtprofilesetup/templates/dbus.qbs +++ b/src/lib/qtprofilesetup/templates/dbus.qbs @@ -48,6 +48,7 @@ QtModule { } architecture: @arch@ + targetPlatform: @targetPlatform@ staticLibsDebug: @staticLibsDebug@ staticLibsRelease: @staticLibsRelease@ dynamicLibsDebug: @dynamicLibsDebug@ diff --git a/src/lib/qtprofilesetup/templates/gui.qbs b/src/lib/qtprofilesetup/templates/gui.qbs index 39703de96..df43a4b02 100644 --- a/src/lib/qtprofilesetup/templates/gui.qbs +++ b/src/lib/qtprofilesetup/templates/gui.qbs @@ -34,6 +34,7 @@ QtModule { property string defaultQpaPlugin: @defaultQpaPlugin@ architecture: @arch@ + targetPlatform: @targetPlatform@ staticLibsDebug: @staticLibsDebug@ staticLibsRelease: @staticLibsRelease@ dynamicLibsDebug: @dynamicLibsDebug@ diff --git a/src/lib/qtprofilesetup/templates/module.qbs b/src/lib/qtprofilesetup/templates/module.qbs index ada143038..9eaeeaaa8 100644 --- a/src/lib/qtprofilesetup/templates/module.qbs +++ b/src/lib/qtprofilesetup/templates/module.qbs @@ -6,6 +6,7 @@ QtModule { Depends { name: "Qt"; submodules: @dependencies@} architecture: @arch@ + targetPlatform: @targetPlatform@ hasLibrary: @has_library@ staticLibsDebug: @staticLibsDebug@ staticLibsRelease: @staticLibsRelease@ diff --git a/src/lib/qtprofilesetup/templates/plugin.qbs b/src/lib/qtprofilesetup/templates/plugin.qbs index 943bc8f1e..e67c7794c 100644 --- a/src/lib/qtprofilesetup/templates/plugin.qbs +++ b/src/lib/qtprofilesetup/templates/plugin.qbs @@ -7,6 +7,7 @@ QtPlugin { className: @className@ architecture: @arch@ + targetPlatform: @targetPlatform@ staticLibsDebug: @staticLibsDebug@ staticLibsRelease: @staticLibsRelease@ dynamicLibsDebug: @dynamicLibsDebug@ diff --git a/src/lib/qtprofilesetup/templates/qml.qbs b/src/lib/qtprofilesetup/templates/qml.qbs index d161f70e4..1f175dbf9 100644 --- a/src/lib/qtprofilesetup/templates/qml.qbs +++ b/src/lib/qtprofilesetup/templates/qml.qbs @@ -24,6 +24,7 @@ QtModule { hasLibrary: @has_library@ architecture: @arch@ + targetPlatform: @targetPlatform@ staticLibsDebug: (isStaticLibrary ? ['@' + pluginListFilePathDebug] : []).concat(@staticLibsDebug@) staticLibsRelease: (isStaticLibrary ? ['@' + pluginListFilePathRelease] : []).concat(@staticLibsRelease@) dynamicLibsDebug: @dynamicLibsDebug@ diff --git a/src/lib/qtprofilesetup/templates/quick.qbs b/src/lib/qtprofilesetup/templates/quick.qbs index 5358a684f..13951a883 100644 --- a/src/lib/qtprofilesetup/templates/quick.qbs +++ b/src/lib/qtprofilesetup/templates/quick.qbs @@ -41,6 +41,7 @@ QtModule { hasLibrary: @has_library@ architecture: @arch@ + targetPlatform: @targetPlatform@ staticLibsDebug: @staticLibsDebug@ staticLibsRelease: @staticLibsRelease@ dynamicLibsDebug: @dynamicLibsDebug@ diff --git a/src/lib/qtprofilesetup/templates/scxml.qbs b/src/lib/qtprofilesetup/templates/scxml.qbs index f38b9710b..e64b4dc9b 100644 --- a/src/lib/qtprofilesetup/templates/scxml.qbs +++ b/src/lib/qtprofilesetup/templates/scxml.qbs @@ -46,6 +46,7 @@ QtModule { } architecture: @arch@ + targetPlatform: @targetPlatform@ staticLibsDebug: @staticLibsDebug@ staticLibsRelease: @staticLibsRelease@ dynamicLibsDebug: @dynamicLibsDebug@ |