diff options
author | hjk <hjk@qt.io> | 2019-07-02 11:31:12 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-07-04 10:34:58 +0000 |
commit | 2b7fab166878b759fc8fa29256754a41c3fc6259 (patch) | |
tree | 260b88220a1536efbf52d326eb97de9da9753031 /src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp | |
parent | 25f9d9c43481b0a02d632bf609417c4302fe1fe1 (diff) |
ProjectExplorer: Promote CMakeToolChainData to a global structure
... and use it in ToolChainFactory::detectForImport() overloads.
Change-Id: I107b9d5e185580b8fbef4c6e0233fdae5d253506
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp')
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp | 52 |
1 files changed, 21 insertions, 31 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp index c4a0089b84..00302f6d35 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp @@ -53,22 +53,6 @@ namespace { Q_LOGGING_CATEGORY(cmInputLog, "qtc.cmake.import", QtWarningMsg); -struct CMakeToolChainData -{ - QByteArray languageId; - Utils::FilePath compilerPath; - Core::Id mapLanguageIdToQtC() const - { - const QByteArray li = languageId.toLower(); - if (li == "cxx") - return ProjectExplorer::Constants::CXX_LANGUAGE_ID; - else if (li == "c") - return ProjectExplorer::Constants::C_LANGUAGE_ID; - else - return Core::Id::fromName(languageId); - } -}; - struct DirectoryData { // Project Stuff: @@ -83,7 +67,7 @@ struct DirectoryData QByteArray toolset; QByteArray sysroot; QtProjectImporter::QtVersionData qt; - QVector<CMakeToolChainData> toolChains; + QVector<ToolChainDescription> toolChains; }; static QStringList scanDirectory(const QString &path, const QString &prefix) @@ -218,14 +202,21 @@ static Utils::FilePath qmakeFromCMakeCache(const CMakeConfig &config) return Utils::FilePath(); } -QVector<CMakeToolChainData> extractToolChainsFromCache(const CMakeConfig &config) +static QVector<ToolChainDescription> extractToolChainsFromCache(const CMakeConfig &config) { - QVector<CMakeToolChainData> result; + QVector<ToolChainDescription> result; for (const CMakeConfigItem &i : config) { if (!i.key.startsWith("CMAKE_") || !i.key.endsWith("_COMPILER")) continue; const QByteArray language = i.key.mid(6, i.key.count() - 6 - 9); // skip "CMAKE_" and "_COMPILER" - result.append({language, Utils::FilePath::fromUtf8(i.value)}); + Core::Id languageId; + if (language == "CXX") + languageId = ProjectExplorer::Constants::CXX_LANGUAGE_ID; + else if (language == "C") + languageId = ProjectExplorer::Constants::C_LANGUAGE_ID; + else + languageId = Core::Id::fromName(language); + result.append({Utils::FilePath::fromUtf8(i.value), languageId}); } return result; } @@ -300,8 +291,8 @@ bool CMakeProjectImporter::matchKit(void *directoryData, const Kit *k) const if (data->qt.qt && QtSupport::QtKitAspect::qtVersionId(k) != data->qt.qt->uniqueId()) return false; - for (const CMakeToolChainData &tcd : data->toolChains) { - ToolChain *tc = ToolChainKitAspect::toolChain(k, tcd.mapLanguageIdToQtC()); + for (const ToolChainDescription &tcd : data->toolChains) { + ToolChain *tc = ToolChainKitAspect::toolChain(k, tcd.language); if (!tc || tc->compilerCommand() != tcd.compilerPath) return false; } @@ -328,9 +319,8 @@ Kit *CMakeProjectImporter::createKit(void *directoryData) const SysRootKitAspect::setSysRoot(k, Utils::FilePath::fromUtf8(data->sysroot)); - for (const CMakeToolChainData &cmtcd : data->toolChains) { - const ToolChainData tcd - = findOrCreateToolChains(cmtcd.compilerPath, cmtcd.mapLanguageIdToQtC()); + for (const ToolChainDescription &cmtcd : data->toolChains) { + const ToolChainData tcd = findOrCreateToolChains(cmtcd); QTC_ASSERT(!tcd.tcs.isEmpty(), continue); if (tcd.areTemporary) { @@ -464,17 +454,17 @@ void CMakeProjectPlugin::testCMakeProjectImporterToolChain_data() << QStringList("CMAKE_SOMETHING_ELSE=/tmp") << QByteArrayList() << QStringList(); QTest::newRow("CXX compiler") << QStringList({"CMAKE_CXX_COMPILER=/usr/bin/g++"}) - << QByteArrayList({"CXX"}) + << QByteArrayList({"Cxx"}) << QStringList({"/usr/bin/g++"}); QTest::newRow("CXX compiler, C compiler") << QStringList({"CMAKE_CXX_COMPILER=/usr/bin/g++", "CMAKE_C_COMPILER=/usr/bin/clang"}) - << QByteArrayList({"CXX", "C"}) + << QByteArrayList({"Cxx", "C"}) << QStringList({"/usr/bin/g++", "/usr/bin/clang"}); QTest::newRow("CXX compiler, C compiler, strange compiler") << QStringList({"CMAKE_CXX_COMPILER=/usr/bin/g++", "CMAKE_C_COMPILER=/usr/bin/clang", "CMAKE_STRANGE_LANGUAGE_COMPILER=/tmp/strange/compiler"}) - << QByteArrayList({"CXX", "C", "STRANGE_LANGUAGE"}) + << QByteArrayList({"Cxx", "C", "STRANGE_LANGUAGE"}) << QStringList({"/usr/bin/g++", "/usr/bin/clang", "/tmp/strange/compiler"}); QTest::newRow("CXX compiler, C compiler, strange compiler (with junk)") << QStringList({"FOO=test", @@ -484,7 +474,7 @@ void CMakeProjectPlugin::testCMakeProjectImporterToolChain_data() "SOMETHING_COMPILER=/usr/bin/something", "CMAKE_STRANGE_LANGUAGE_COMPILER=/tmp/strange/compiler", "BAR=more test"}) - << QByteArrayList({"CXX", "C", "STRANGE_LANGUAGE"}) + << QByteArrayList({"Cxx", "C", "STRANGE_LANGUAGE"}) << QStringList({"/usr/bin/g++", "/usr/bin/clang", "/tmp/strange/compiler"}); } @@ -505,10 +495,10 @@ void CMakeProjectPlugin::testCMakeProjectImporterToolChain() config.append(CMakeConfigItem(key.toUtf8(), value.toUtf8())); } - QVector<CMakeToolChainData> tcs = extractToolChainsFromCache(config); + const QVector<ToolChainDescription> tcs = extractToolChainsFromCache(config); QCOMPARE(tcs.count(), expectedLanguages.count()); for (int i = 0; i < tcs.count(); ++i) { - QCOMPARE(tcs.at(i).languageId, expectedLanguages.at(i)); + QCOMPARE(tcs.at(i).language, expectedLanguages.at(i)); QCOMPARE(tcs.at(i).compilerPath.toString(), expectedToolChains.at(i)); } } |