From e5784b6964894d6a60b88981f5b7670db64ac34d Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 24 Feb 2015 11:33:57 +0100 Subject: [PATCH] QbsProjectManager: Set cpp.compilerPathByLanguage. To work around the "-x" bug in icecream. Change-Id: I7d95aa120ad344f6662c265fe81ab98752c7cd1e Reviewed-by: Joerg Bornemann --- .../defaultpropertyprovider.cpp | 24 +++++++++++++++++++ src/plugins/qbsprojectmanager/qbsconstants.h | 1 + 2 files changed, 25 insertions(+) diff --git a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp index 536ce0fdf5a..97a82d9c59b 100644 --- a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp +++ b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -231,6 +232,29 @@ QVariantMap DefaultPropertyProvider::autoGeneratedProperties(const ProjectExplor data.insert(QLatin1String(CPP_LINKERNAME), compilerName); } data.insert(QLatin1String(CPP_TOOLCHAINPATH), cxxFileInfo.absolutePath()); + + QVariantMap m; + if (toolchain.contains(QLatin1String("clang"))) { + m[QLatin1String("c")] = m[QLatin1String("objc")] = QLatin1String("clang"); + m[QLatin1String("cpp")] = m[QLatin1String("objcpp")] = QLatin1String("clang++"); + } else if (toolchain.contains(QLatin1String("gcc"))) { + m[QLatin1String("c")] = m[QLatin1String("objc")] = QLatin1String("gcc"); + m[QLatin1String("cpp")] = m[QLatin1String("objcpp")] = QLatin1String("g++"); + } + const QString fullPrefix = cxxFileInfo.absolutePath() + QLatin1Char('/') + toolchainPrefix; + for (auto it = m.begin(); it != m.end();) { + const QString filePath = Utils::HostOsInfo::withExecutableSuffix(fullPrefix + + it.value().toString()); + if (QFile::exists(filePath)) { + it.value() = filePath; + ++it; + } else { + it = m.erase(it); + } + } + if (!m.isEmpty()) + data.insert(QLatin1String(CPP_COMPILERPATHBYLANGUAGE), m); + if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2013Flavor) { const QLatin1String flags("/FS"); data.insert(QLatin1String(CPP_PLATFORMCFLAGS), flags); diff --git a/src/plugins/qbsprojectmanager/qbsconstants.h b/src/plugins/qbsprojectmanager/qbsconstants.h index 64aea581997..f988f466354 100644 --- a/src/plugins/qbsprojectmanager/qbsconstants.h +++ b/src/plugins/qbsprojectmanager/qbsconstants.h @@ -41,6 +41,7 @@ const char QBS_ARCHITECTURE[] = "qbs.architecture"; const char QBS_ENDIANNESS[] = "qbs.endianness"; const char QBS_TOOLCHAIN[] = "qbs.toolchain"; const char CPP_TOOLCHAINPATH[] = "cpp.toolchainInstallPath"; +const char CPP_COMPILERPATHBYLANGUAGE[] = "cpp.compilerPathByLanguage"; const char CPP_TOOLCHAINPREFIX[] = "cpp.toolchainPrefix"; const char CPP_COMPILERNAME[] = "cpp.compilerName"; const char CPP_LINKERNAME[] = "cpp.linkerName";