aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-10-10 13:46:03 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2018-10-18 09:02:16 +0000
commitd658f63d699f2fbb939c59ad6c39e493011de99e (patch)
tree087c14eab70b057aaa7dddd5f8af0555f4022262
parentfa5e42f915211637da0d6461c9764962ee47f923 (diff)
qtprofilesetup: Understand the mkspec prefix "mingw"
E.g. Fedora provides "mingw-w64-g++". Change-Id: Ife197baa8ddd1b364025056b1ec7895a0b60d5dc Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/app/qbs-setup-qt/setupqt.cpp10
-rw-r--r--src/lib/qtprofilesetup/qtenvironment.h14
-rw-r--r--src/lib/qtprofilesetup/qtprofilesetup.cpp14
-rw-r--r--src/lib/qtprofilesetup/qtprofilesetup.h2
4 files changed, 27 insertions, 13 deletions
diff --git a/src/app/qbs-setup-qt/setupqt.cpp b/src/app/qbs-setup-qt/setupqt.cpp
index 097c9381a..f54411b48 100644
--- a/src/app/qbs-setup-qt/setupqt.cpp
+++ b/src/app/qbs-setup-qt/setupqt.cpp
@@ -337,11 +337,12 @@ template <typename T> bool areProfilePropertiesIncompatible(const T &set1, const
return set1.size() > 0 && set2.size() > 0 && set1 != set2;
}
-static QStringList qbsToolchainFromQtMkspec(const QString &mkspec)
+static QStringList qbsToolchainFromQtMkspec(const QtEnvironment &qtEnv)
{
+ const QString mkspec = qtEnv.mkspecName;
if (mkspec.contains(QLatin1String("-msvc")))
return QStringList() << QLatin1String("msvc");
- if (mkspec == QLatin1String("win32-g++"))
+ if (qtEnv.isForMinGw())
return QStringList() << QLatin1String("mingw") << QLatin1String("gcc");
if (mkspec.contains(QLatin1String("-clang")))
@@ -365,7 +366,7 @@ static Match compatibility(const EnhancedQtEnvironment &env, const Profile &tool
const auto toolchainNames = Internal::Set<QString>::fromList(
toolchainProfile.value(QLatin1String("qbs.toolchain")).toStringList());
const auto mkspecToolchainNames = Internal::Set<QString>::fromList(
- qbsToolchainFromQtMkspec(env.mkspecName));
+ qbsToolchainFromQtMkspec(env));
if (areProfilePropertiesIncompatible(toolchainNames, mkspecToolchainNames)) {
auto intersection = toolchainNames;
intersection.intersect(mkspecToolchainNames);
@@ -377,8 +378,7 @@ static Match compatibility(const EnhancedQtEnvironment &env, const Profile &tool
const auto targetPlatform = toolchainProfile.value(
QLatin1String("qbs.targetPlatform")).toString();
- if (!targetPlatform.isEmpty()
- && targetPlatform != qbsTargetPlatformFromQtMkspec(env.mkspecName))
+ if (!targetPlatform.isEmpty() && targetPlatform != qbsTargetPlatformFromQtMkspec(env))
return MatchNone;
const QString toolchainArchitecture = toolchainProfile.value(QLatin1String("qbs.architecture"))
diff --git a/src/lib/qtprofilesetup/qtenvironment.h b/src/lib/qtprofilesetup/qtenvironment.h
index 4fb5a03ee..72725cfae 100644
--- a/src/lib/qtprofilesetup/qtenvironment.h
+++ b/src/lib/qtprofilesetup/qtenvironment.h
@@ -48,6 +48,9 @@ namespace qbs {
class QBS_EXPORT QtEnvironment {
public:
+ inline bool targetsDesktopWindows() const;
+ inline bool isForMinGw() const;
+
QString installPrefixPath;
QString libraryPath;
QString includePath;
@@ -82,6 +85,17 @@ public:
bool frameworkBuild = false;
};
+bool QtEnvironment::targetsDesktopWindows() const
+{
+ return mkspecName.startsWith(QLatin1String("win32-")) || isForMinGw();
+}
+
+bool QtEnvironment::isForMinGw() const
+{
+ return mkspecName.startsWith(QLatin1String("win32-g++"))
+ || mkspecName.startsWith(QLatin1String("mingw"));
+}
+
} // namespace qbs
#endif // Include guard.
diff --git a/src/lib/qtprofilesetup/qtprofilesetup.cpp b/src/lib/qtprofilesetup/qtprofilesetup.cpp
index adeeef7bc..7b8b9c49b 100644
--- a/src/lib/qtprofilesetup/qtprofilesetup.cpp
+++ b/src/lib/qtprofilesetup/qtprofilesetup.cpp
@@ -430,8 +430,7 @@ static void replaceSpecialValues(QByteArray *content, const Profile &profile,
{
QHash<QByteArray, QByteArray> dict;
dict.insert("archs", utf8JSLiteral(extractQbsArchs(module, qtEnvironment)));
- dict.insert("targetPlatform", utf8JSLiteral(qbsTargetPlatformFromQtMkspec(
- qtEnvironment.mkspecName)));
+ dict.insert("targetPlatform", utf8JSLiteral(qbsTargetPlatformFromQtMkspec(qtEnvironment)));
dict.insert("config", utf8JSLiteral(qtEnvironment.configItems));
dict.insert("qtConfig", utf8JSLiteral(qtEnvironment.qtConfigItems));
dict.insert("binPath", utf8JSLiteral(qtEnvironment.binaryPath));
@@ -648,7 +647,7 @@ static QString guessMinimumWindowsVersion(const QtEnvironment &qt)
if (qt.mkspecName.startsWith(QLatin1String("winrt-")))
return QLatin1String("10.0");
- if (!qt.mkspecName.startsWith(QLatin1String("win32-")))
+ if (!qt.targetsDesktopWindows())
return QString();
if (qt.architecture == QLatin1String("x86_64")
@@ -692,7 +691,7 @@ static QStringList fillEntryPointLibs(const QtEnvironment &qtEnvironment, const
{
QStringList result;
QString qtmain = qtEnvironment.libraryPath + QLatin1Char('/');
- const bool isMinGW = qtEnvironment.mkspecName.startsWith(QLatin1String("win32-g++"));
+ const bool isMinGW = qtEnvironment.isForMinGw();
if (isMinGW)
qtmain += QLatin1String("lib");
qtmain += QLatin1String("qtmain") + qtEnvironment.qtLibInfix;
@@ -811,11 +810,12 @@ void doSetupQtProfile(const QString &profileName, Settings *settings,
createModules(profile, settings, qtEnvironment);
}
-QString qbsTargetPlatformFromQtMkspec(const QString &mkspec)
+QString qbsTargetPlatformFromQtMkspec(const QtEnvironment &qtEnv)
{
+ QString mkspec = qtEnv.mkspecName;
int idx = mkspec.lastIndexOf(QLatin1Char('/'));
if (idx != -1)
- return qbsTargetPlatformFromQtMkspec(mkspec.mid(idx + 1));
+ mkspec = mkspec.mid(idx + 1);
if (mkspec.startsWith(QLatin1String("aix-")))
return QLatin1String("aix");
if (mkspec.startsWith(QLatin1String("android-")))
@@ -855,7 +855,7 @@ QString qbsTargetPlatformFromQtMkspec(const QString &mkspec)
return QLatin1String("solaris");
if (mkspec.startsWith(QLatin1String("vxworks-")))
return QLatin1String("vxworks");
- if (mkspec.startsWith(QLatin1String("win32-")) || mkspec.startsWith(QLatin1String("winrt-")))
+ if (qtEnv.targetsDesktopWindows() || mkspec.startsWith(QLatin1String("winrt-")))
return QLatin1String("windows");
return QString();
}
diff --git a/src/lib/qtprofilesetup/qtprofilesetup.h b/src/lib/qtprofilesetup/qtprofilesetup.h
index be6642842..f28733a1b 100644
--- a/src/lib/qtprofilesetup/qtprofilesetup.h
+++ b/src/lib/qtprofilesetup/qtprofilesetup.h
@@ -49,7 +49,7 @@ namespace qbs {
class ErrorInfo;
class Settings;
-QBS_EXPORT QString qbsTargetPlatformFromQtMkspec(const QString &mkspec);
+QBS_EXPORT QString qbsTargetPlatformFromQtMkspec(const QtEnvironment &qtEnv);
QBS_EXPORT ErrorInfo setupQtProfile(const QString &profileName, Settings *settings,
const QtEnvironment &qtEnvironment);