forked from qt-creator/qt-creator
ProjectExplorer: Remove ClangClToolChain::m_clangPath
Use the ToolChain::compilerCommand() instead, which now does not need to be virtual anymore. Change-Id: I7cf7a623f86b7faacadae424dcbde8b9dbe8d3a9 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -1456,9 +1456,9 @@ void ClangClToolChainConfigWidget::setFromClangClToolChain()
|
|||||||
|
|
||||||
const auto *clangClToolChain = static_cast<const ClangClToolChain *>(toolChain());
|
const auto *clangClToolChain = static_cast<const ClangClToolChain *>(toolChain());
|
||||||
if (clangClToolChain->isAutoDetected())
|
if (clangClToolChain->isAutoDetected())
|
||||||
m_llvmDirLabel->setText(QDir::toNativeSeparators(clangClToolChain->clangPath()));
|
m_llvmDirLabel->setText(clangClToolChain->compilerCommand().toUserOutput());
|
||||||
else
|
else
|
||||||
m_compilerCommand->setFilePath(Utils::FilePath::fromString(clangClToolChain->clangPath()));
|
m_compilerCommand->setFilePath(clangClToolChain->compilerCommand());
|
||||||
}
|
}
|
||||||
|
|
||||||
static const MsvcToolChain *findMsvcToolChain(unsigned char wordWidth, Abi::OSFlavor flavor)
|
static const MsvcToolChain *findMsvcToolChain(unsigned char wordWidth, Abi::OSFlavor flavor)
|
||||||
@@ -1556,7 +1556,7 @@ static QList<ToolChain *> detectClangClToolChainInPath(const QString &clangClPat
|
|||||||
res << tc;
|
res << tc;
|
||||||
} else {
|
} else {
|
||||||
auto cltc = new ClangClToolChain;
|
auto cltc = new ClangClToolChain;
|
||||||
cltc->setClangPath(clangClPath);
|
cltc->setCompilerCommand(FilePath::fromString(clangClPath));
|
||||||
cltc->setDisplayName(name);
|
cltc->setDisplayName(name);
|
||||||
cltc->setDetection(ToolChain::AutoDetection);
|
cltc->setDetection(ToolChain::AutoDetection);
|
||||||
cltc->setLanguage(language);
|
cltc->setLanguage(language);
|
||||||
@@ -1574,18 +1574,18 @@ static QString compilerFromPath(const QString &path)
|
|||||||
|
|
||||||
void ClangClToolChainConfigWidget::applyImpl()
|
void ClangClToolChainConfigWidget::applyImpl()
|
||||||
{
|
{
|
||||||
Utils::FilePath clangClPath = m_compilerCommand->filePath();
|
FilePath compilerCommand = m_compilerCommand->filePath();
|
||||||
auto clangClToolChain = static_cast<ClangClToolChain *>(toolChain());
|
auto clangClToolChain = static_cast<ClangClToolChain *>(toolChain());
|
||||||
clangClToolChain->setClangPath(clangClPath.toString());
|
clangClToolChain->setCompilerCommand(compilerCommand);
|
||||||
|
|
||||||
if (clangClPath.fileName() != "clang-cl.exe") {
|
if (compilerCommand.fileName() != "clang-cl.exe") {
|
||||||
clangClToolChain->resetVarsBat();
|
clangClToolChain->resetVarsBat();
|
||||||
setFromClangClToolChain();
|
setFromClangClToolChain();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString displayedVarsBat = m_varsBatDisplayCombo->currentText();
|
const QString displayedVarsBat = m_varsBatDisplayCombo->currentText();
|
||||||
QList<ToolChain *> results = detectClangClToolChainInPath(clangClPath.toString(),
|
QList<ToolChain *> results = detectClangClToolChainInPath(compilerCommand.toString(),
|
||||||
{},
|
{},
|
||||||
displayedVarsBat);
|
displayedVarsBat);
|
||||||
|
|
||||||
@@ -1625,6 +1625,7 @@ ClangClToolChain::ClangClToolChain()
|
|||||||
{
|
{
|
||||||
setDisplayName("clang-cl");
|
setDisplayName("clang-cl");
|
||||||
setTypeDisplayName(QCoreApplication::translate("ProjectExplorer::ClangToolChainFactory", "Clang"));
|
setTypeDisplayName(QCoreApplication::translate("ProjectExplorer::ClangToolChainFactory", "Clang"));
|
||||||
|
setCompilerCommandKey("ProjectExplorer.ClangClToolChain.LlvmDir");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClangClToolChain::isValid() const
|
bool ClangClToolChain::isValid() const
|
||||||
@@ -1636,15 +1637,10 @@ bool ClangClToolChain::isValid() const
|
|||||||
void ClangClToolChain::addToEnvironment(Utils::Environment &env) const
|
void ClangClToolChain::addToEnvironment(Utils::Environment &env) const
|
||||||
{
|
{
|
||||||
MsvcToolChain::addToEnvironment(env);
|
MsvcToolChain::addToEnvironment(env);
|
||||||
QDir path = QFileInfo(m_clangPath).absoluteDir(); // bin folder
|
QDir path = compilerCommand().toFileInfo().absoluteDir(); // bin folder
|
||||||
env.prependOrSetPath(path.canonicalPath());
|
env.prependOrSetPath(path.canonicalPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::FilePath ClangClToolChain::compilerCommand() const
|
|
||||||
{
|
|
||||||
return Utils::FilePath::fromString(m_clangPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList ClangClToolChain::suggestedMkspecList() const
|
QStringList ClangClToolChain::suggestedMkspecList() const
|
||||||
{
|
{
|
||||||
const QString mkspec = "win32-clang-" + Abi::toString(targetAbi().osFlavor());
|
const QString mkspec = "win32-clang-" + Abi::toString(targetAbi().osFlavor());
|
||||||
@@ -1656,44 +1652,11 @@ QList<OutputLineParser *> ClangClToolChain::createOutputParsers() const
|
|||||||
return {new ClangClParser};
|
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()
|
std::unique_ptr<ToolChainConfigWidget> ClangClToolChain::createConfigurationWidget()
|
||||||
{
|
{
|
||||||
return std::make_unique<ClangClToolChainConfigWidget>(this);
|
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,
|
Macros ClangClToolChain::msvcPredefinedMacros(const QStringList &cxxflags,
|
||||||
const Utils::Environment &env) const
|
const Utils::Environment &env) const
|
||||||
{
|
{
|
||||||
|
@@ -169,28 +169,18 @@ public:
|
|||||||
bool isValid() const override;
|
bool isValid() const override;
|
||||||
QStringList suggestedMkspecList() const override;
|
QStringList suggestedMkspecList() const override;
|
||||||
void addToEnvironment(Utils::Environment &env) const override;
|
void addToEnvironment(Utils::Environment &env) const override;
|
||||||
Utils::FilePath compilerCommand() const override; // FIXME: Remove.
|
|
||||||
QList<Utils::OutputLineParser *> createOutputParsers() const override;
|
QList<Utils::OutputLineParser *> createOutputParsers() const override;
|
||||||
QVariantMap toMap() const override;
|
|
||||||
bool fromMap(const QVariantMap &data) override;
|
|
||||||
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
|
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
|
||||||
const Utils::Environment &env) const override;
|
const Utils::Environment &env) const override;
|
||||||
|
|
||||||
const QList<MsvcToolChain *> &msvcToolchains() const;
|
const QList<MsvcToolChain *> &msvcToolchains() const;
|
||||||
QString clangPath() const { return m_clangPath; }
|
|
||||||
void setClangPath(const QString &path) { m_clangPath = path; }
|
|
||||||
|
|
||||||
Macros msvcPredefinedMacros(const QStringList &cxxflags,
|
Macros msvcPredefinedMacros(const QStringList &cxxflags,
|
||||||
const Utils::Environment &env) const override;
|
const Utils::Environment &env) const override;
|
||||||
Utils::LanguageVersion msvcLanguageVersion(const QStringList &cxxflags,
|
Utils::LanguageVersion msvcLanguageVersion(const QStringList &cxxflags,
|
||||||
const Utils::Id &language,
|
const Utils::Id &language,
|
||||||
const Macros ¯os) const override;
|
const Macros ¯os) const override;
|
||||||
|
|
||||||
bool operator==(const ToolChain &) const override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
QString m_clangPath;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
@@ -137,7 +137,7 @@ public:
|
|||||||
|
|
||||||
Utils::Id language() const;
|
Utils::Id language() const;
|
||||||
|
|
||||||
virtual Utils::FilePath compilerCommand() const; // FIXME: De-virtualize.
|
Utils::FilePath compilerCommand() const;
|
||||||
void setCompilerCommand(const Utils::FilePath &command);
|
void setCompilerCommand(const Utils::FilePath &command);
|
||||||
|
|
||||||
virtual QList<Utils::OutputLineParser *> createOutputParsers() const = 0;
|
virtual QList<Utils::OutputLineParser *> createOutputParsers() const = 0;
|
||||||
|
Reference in New Issue
Block a user