diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 523f0ff4f2b..0ffb6c4a3dd 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -1456,9 +1456,9 @@ void ClangClToolChainConfigWidget::setFromClangClToolChain() const auto *clangClToolChain = static_cast(toolChain()); if (clangClToolChain->isAutoDetected()) - m_llvmDirLabel->setText(QDir::toNativeSeparators(clangClToolChain->clangPath())); + m_llvmDirLabel->setText(clangClToolChain->compilerCommand().toUserOutput()); else - m_compilerCommand->setFilePath(Utils::FilePath::fromString(clangClToolChain->clangPath())); + m_compilerCommand->setFilePath(clangClToolChain->compilerCommand()); } static const MsvcToolChain *findMsvcToolChain(unsigned char wordWidth, Abi::OSFlavor flavor) @@ -1556,7 +1556,7 @@ static QList detectClangClToolChainInPath(const QString &clangClPat res << tc; } else { auto cltc = new ClangClToolChain; - cltc->setClangPath(clangClPath); + cltc->setCompilerCommand(FilePath::fromString(clangClPath)); cltc->setDisplayName(name); cltc->setDetection(ToolChain::AutoDetection); cltc->setLanguage(language); @@ -1574,18 +1574,18 @@ static QString compilerFromPath(const QString &path) void ClangClToolChainConfigWidget::applyImpl() { - Utils::FilePath clangClPath = m_compilerCommand->filePath(); + FilePath compilerCommand = m_compilerCommand->filePath(); auto clangClToolChain = static_cast(toolChain()); - clangClToolChain->setClangPath(clangClPath.toString()); + clangClToolChain->setCompilerCommand(compilerCommand); - if (clangClPath.fileName() != "clang-cl.exe") { + if (compilerCommand.fileName() != "clang-cl.exe") { clangClToolChain->resetVarsBat(); setFromClangClToolChain(); return; } const QString displayedVarsBat = m_varsBatDisplayCombo->currentText(); - QList results = detectClangClToolChainInPath(clangClPath.toString(), + QList results = detectClangClToolChainInPath(compilerCommand.toString(), {}, displayedVarsBat); @@ -1625,6 +1625,7 @@ ClangClToolChain::ClangClToolChain() { setDisplayName("clang-cl"); setTypeDisplayName(QCoreApplication::translate("ProjectExplorer::ClangToolChainFactory", "Clang")); + setCompilerCommandKey("ProjectExplorer.ClangClToolChain.LlvmDir"); } bool ClangClToolChain::isValid() const @@ -1636,15 +1637,10 @@ bool ClangClToolChain::isValid() const void ClangClToolChain::addToEnvironment(Utils::Environment &env) const { MsvcToolChain::addToEnvironment(env); - QDir path = QFileInfo(m_clangPath).absoluteDir(); // bin folder + QDir path = compilerCommand().toFileInfo().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()); @@ -1656,44 +1652,11 @@ QList 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 ClangClToolChain::createConfigurationWidget() { return std::make_unique(this); } -bool ClangClToolChain::operator==(const ToolChain &other) const -{ - if (!MsvcToolChain::operator==(other)) - return false; - - const auto *clangClTc = static_cast(&other); - return m_clangPath == clangClTc->m_clangPath; -} - Macros ClangClToolChain::msvcPredefinedMacros(const QStringList &cxxflags, const Utils::Environment &env) const { diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h index 66bb0b1aa4e..20880a7c351 100644 --- a/src/plugins/projectexplorer/msvctoolchain.h +++ b/src/plugins/projectexplorer/msvctoolchain.h @@ -169,28 +169,18 @@ public: bool isValid() const override; QStringList suggestedMkspecList() const override; void addToEnvironment(Utils::Environment &env) const override; - Utils::FilePath compilerCommand() const override; // FIXME: Remove. QList createOutputParsers() const override; - QVariantMap toMap() const override; - bool fromMap(const QVariantMap &data) override; std::unique_ptr createConfigurationWidget() override; BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner( const Utils::Environment &env) const override; const QList &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.h b/src/plugins/projectexplorer/toolchain.h index a742602c711..e3c71783403 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -137,7 +137,7 @@ public: Utils::Id language() const; - virtual Utils::FilePath compilerCommand() const; // FIXME: De-virtualize. + Utils::FilePath compilerCommand() const; void setCompilerCommand(const Utils::FilePath &command); virtual QList createOutputParsers() const = 0;