diff options
Diffstat (limited to 'src/app/qbs-setup-toolchains/gccprobe.cpp')
-rw-r--r-- | src/app/qbs-setup-toolchains/gccprobe.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/app/qbs-setup-toolchains/gccprobe.cpp b/src/app/qbs-setup-toolchains/gccprobe.cpp index e979acf59..a8482f8d0 100644 --- a/src/app/qbs-setup-toolchains/gccprobe.cpp +++ b/src/app/qbs-setup-toolchains/gccprobe.cpp @@ -46,11 +46,14 @@ #include <tools/hostosinfo.h> #include <tools/profile.h> +#include <tools/settings.h> #include <tools/toolchains.h> #include <QtCore/qdir.h> #include <QtCore/qprocess.h> +#include <algorithm> + using namespace qbs; using Internal::HostOsInfo; using Internal::Tr; @@ -395,6 +398,31 @@ Profile createGccProfile(const QFileInfo &compiler, Settings *settings, setCommonProperties(profile, compiler, toolchainTypes, details); + if (HostOsInfo::isWindowsHost() && toolchainTypes.contains(QLatin1String("clang"))) { + const QStringList profileNames = settings->profiles(); + bool foundMingw = false; + for (const QString &profileName : profileNames) { + const Profile otherProfile(profileName, settings); + if (otherProfile.value(QLatin1String("qbs.toolchainType")).toString() + == QLatin1String("mingw") + || otherProfile.value(QLatin1String("qbs.toolchain")) + .toStringList().contains(QLatin1String("mingw"))) { + const QFileInfo tcDir(otherProfile.value(QLatin1String("cpp.toolchainInstallPath")) + .toString()); + if (!tcDir.fileName().isEmpty() && tcDir.exists()) { + profile.setValue(QLatin1String("qbs.sysroot"), tcDir.path()); + foundMingw = true; + break; + } + } + } + if (!foundMingw) { + qbsWarning() << Tr::tr("Using clang on Windows requires a mingw installation. " + "Please set qbs.sysroot accordingly for profile '%1'.") + .arg(profile.name()); + } + } + if (!toolchainTypes.contains(QLatin1String("clang"))) { // Check whether auxiliary tools reside within the toolchain's install path. // This might not be the case when using icecc or another compiler wrapper. @@ -466,6 +494,16 @@ void gccProbe(Settings *settings, QList<Profile> &profiles, const QString &compi return; } + // Sort candidates so that mingw comes first. Information from mingw profiles is potentially + // used for setting up clang profiles. + if (HostOsInfo::isWindowsHost()) { + std::sort(candidates.begin(), candidates.end(), + [](const QFileInfo &fi1, const QFileInfo &fi2) { + return fi1.absoluteFilePath().contains(QLatin1String("mingw")) + && !fi2.absoluteFilePath().contains(QLatin1String("mingw")); + }); + } + for (const auto &candidate : qAsConst(candidates)) { const QStringList toolchainTypes = toolchainTypeFromCompilerName( candidate.baseName()); |