diff options
author | Eike Ziller <eike.ziller@qt.io> | 2021-05-19 09:54:07 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2021-05-19 09:54:07 +0200 |
commit | f83be6debe8fcf4a635fae0e755776fd12f85dae (patch) | |
tree | fbf56dfee3c9142c0d1f3c7ad0718a8697d2d1b6 /src/plugins/projectexplorer | |
parent | c49a0af5046157039da2194723e0fc4dd48956f5 (diff) | |
parent | 801dbdf9324a67462eb6756f4ea49b31ae2074bb (diff) | |
download | qt-creator-f83be6debe8fcf4a635fae0e755776fd12f85dae.tar.gz |
Merge remote-tracking branch 'origin/4.15'
Change-Id: Ia6558fc2423fd9cd84ca2282bfa60d102dff682e
Diffstat (limited to 'src/plugins/projectexplorer')
-rw-r--r-- | src/plugins/projectexplorer/msvctoolchain.cpp | 61 | ||||
-rw-r--r-- | src/plugins/projectexplorer/msvctoolchain.h | 10 | ||||
-rw-r--r-- | src/plugins/projectexplorer/toolchain.cpp | 9 | ||||
-rw-r--r-- | src/plugins/projectexplorer/toolchain.h | 2 |
4 files changed, 61 insertions, 21 deletions
diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 48636393d9..892a8421d5 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -1470,9 +1470,9 @@ void ClangClToolChainConfigWidget::setFromClangClToolChain() const auto *clangClToolChain = static_cast<const ClangClToolChain *>(toolChain()); if (clangClToolChain->isAutoDetected()) - m_llvmDirLabel->setText(clangClToolChain->compilerCommand().toUserOutput()); + m_llvmDirLabel->setText(QDir::toNativeSeparators(clangClToolChain->clangPath())); else - m_compilerCommand->setFilePath(clangClToolChain->compilerCommand()); + m_compilerCommand->setFilePath(Utils::FilePath::fromString(clangClToolChain->clangPath())); } static const MsvcToolChain *findMsvcToolChain(unsigned char wordWidth, Abi::OSFlavor flavor) @@ -1569,7 +1569,7 @@ static QList<ToolChain *> detectClangClToolChainInPath(const QString &clangClPat res << tc; } else { auto cltc = new ClangClToolChain; - cltc->setCompilerCommand(FilePath::fromString(clangClPath)); + cltc->setClangPath(clangClPath); cltc->setDisplayName(name); cltc->setDetection(ToolChain::AutoDetection); cltc->setLanguage(language); @@ -1587,18 +1587,18 @@ static QString compilerFromPath(const QString &path) void ClangClToolChainConfigWidget::applyImpl() { - FilePath compilerCommand = m_compilerCommand->filePath(); + Utils::FilePath clangClPath = m_compilerCommand->filePath(); auto clangClToolChain = static_cast<ClangClToolChain *>(toolChain()); - clangClToolChain->setCompilerCommand(compilerCommand); + clangClToolChain->setClangPath(clangClPath.toString()); - if (compilerCommand.fileName() != "clang-cl.exe") { + if (clangClPath.fileName() != "clang-cl.exe") { clangClToolChain->resetVarsBat(); setFromClangClToolChain(); return; } const QString displayedVarsBat = m_varsBatDisplayCombo->currentText(); - QList<ToolChain *> results = detectClangClToolChainInPath(compilerCommand.toString(), + QList<ToolChain *> results = detectClangClToolChainInPath(clangClPath.toString(), {}, displayedVarsBat); @@ -1638,22 +1638,26 @@ ClangClToolChain::ClangClToolChain() { setDisplayName("clang-cl"); setTypeDisplayName(QCoreApplication::translate("ProjectExplorer::ClangToolChainFactory", "Clang")); - setCompilerCommandKey("ProjectExplorer.ClangClToolChain.LlvmDir"); } bool ClangClToolChain::isValid() const { - return MsvcToolChain::isValid() && compilerCommand().exists() - && compilerCommand().fileName() == "clang-cl.exe"; + const QFileInfo fi(clangPath()); + return MsvcToolChain::isValid() && fi.exists() && fi.fileName() == "clang-cl.exe"; } void ClangClToolChain::addToEnvironment(Utils::Environment &env) const { MsvcToolChain::addToEnvironment(env); - QDir path = compilerCommand().toFileInfo().absoluteDir(); // bin folder + QDir path = QFileInfo(m_clangPath).absoluteDir(); // bin folder env.prependOrSetPath(path.canonicalPath()); } +Utils::FilePath ClangClToolChain::compilerCommand() const +{ + return Utils::FilePath::fromString(m_clangPath); +} + QStringList ClangClToolChain::suggestedMkspecList() const { const QString mkspec = "win32-clang-" + Abi::toString(targetAbi().osFlavor()); @@ -1665,11 +1669,44 @@ QList<OutputLineParser *> ClangClToolChain::createOutputParsers() const return {new ClangClParser}; } +static inline QString llvmDirKey() +{ + return QStringLiteral("ProjectExplorer.ClangClToolChain.LlvmDir"); +} + +QVariantMap ClangClToolChain::toMap() const +{ + QVariantMap result = MsvcToolChain::toMap(); + result.insert(llvmDirKey(), m_clangPath); + return result; +} + +bool ClangClToolChain::fromMap(const QVariantMap &data) +{ + if (!MsvcToolChain::fromMap(data)) + return false; + const QString clangPath = data.value(llvmDirKey()).toString(); + if (clangPath.isEmpty()) + return false; + m_clangPath = clangPath; + + return true; +} + std::unique_ptr<ToolChainConfigWidget> ClangClToolChain::createConfigurationWidget() { return std::make_unique<ClangClToolChainConfigWidget>(this); } +bool ClangClToolChain::operator==(const ToolChain &other) const +{ + if (!MsvcToolChain::operator==(other)) + return false; + + const auto *clangClTc = static_cast<const ClangClToolChain *>(&other); + return m_clangPath == clangClTc->m_clangPath; +} + Macros ClangClToolChain::msvcPredefinedMacros(const QStringList &cxxflags, const Utils::Environment &env) const { @@ -1683,7 +1720,7 @@ Macros ClangClToolChain::msvcPredefinedMacros(const QStringList &cxxflags, QStringList arguments = cxxflags; arguments.append(gccPredefinedMacrosOptions(language())); arguments.append("-"); - cpp.runBlocking({compilerCommand(), arguments}); + cpp.runBlocking({clangPath(), arguments}); if (cpp.result() != Utils::QtcProcess::Finished || cpp.exitCode() != 0) { // Show the warning but still parse the output. QTC_CHECK(false && "clang-cl exited with non-zero code."); diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h index 7dce6712e1..c5269b1646 100644 --- a/src/plugins/projectexplorer/msvctoolchain.h +++ b/src/plugins/projectexplorer/msvctoolchain.h @@ -164,18 +164,28 @@ public: bool isValid() const override; QStringList suggestedMkspecList() const override; void addToEnvironment(Utils::Environment &env) const override; + Utils::FilePath compilerCommand() const override; // FIXME: Remove QList<Utils::OutputLineParser *> createOutputParsers() const override; + QVariantMap toMap() const override; + bool fromMap(const QVariantMap &data) override; std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override; BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner( const Utils::Environment &env) const override; const QList<MsvcToolChain *> &msvcToolchains() const; + QString clangPath() const { return m_clangPath; } + void setClangPath(const QString &path) { m_clangPath = path; } Macros msvcPredefinedMacros(const QStringList &cxxflags, const Utils::Environment &env) const override; Utils::LanguageVersion msvcLanguageVersion(const QStringList &cxxflags, const Utils::Id &language, const Macros ¯os) const override; + + bool operator==(const ToolChain &) const override; + +private: + QString m_clangPath; }; // -------------------------------------------------------------------------- diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index ff2a827dcb..98df39036a 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -279,14 +279,7 @@ void ToolChain::toolChainUpdated() void ToolChain::setDetection(ToolChain::Detection de) { - if (d->m_detection == de) - return; - if (d->m_detection == ToolChain::UninitializedDetection) { - d->m_detection = de; - } else { - d->m_detection = de; - toolChainUpdated(); - } + d->m_detection = de; } QString ToolChain::typeDisplayName() const diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 40c9db98b2..2c2a3c68b7 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -146,7 +146,7 @@ public: Utils::Id language() const; - Utils::FilePath compilerCommand() const; + virtual Utils::FilePath compilerCommand() const; // FIXME: De-virtualize. void setCompilerCommand(const Utils::FilePath &command); virtual QList<Utils::OutputLineParser *> createOutputParsers() const = 0; |