ProjectExplorer: Replace unusual MsvcToolChain constructor

... by default plus a separate function.

Change-Id: Ib9507a3ecf6073ab4231218a3f2d3a532f6c680f
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
hjk
2019-06-14 14:05:51 +02:00
parent be55253f6f
commit aef8255ba0
2 changed files with 28 additions and 52 deletions

View File

@@ -843,25 +843,6 @@ static void addToAvailableMsvcToolchains(const MsvcToolChain *toolchain)
g_availableMsvcToolchains.push_back(toolchain); g_availableMsvcToolchains.push_back(toolchain);
} }
MsvcToolChain::MsvcToolChain(Core::Id typeId,
const Abi &abi,
const QString &varsBat,
const QString &varsBatArg)
: ToolChain(typeId)
, m_lastEnvironment(Utils::Environment::systemEnvironment())
, m_abi(abi)
, m_vcvarsBat(varsBat)
, m_varsBatArg(varsBatArg)
{
detectInstalledAbis();
addToAvailableMsvcToolchains(this);
initEnvModWatcher(Utils::runAsync(envModThreadPool(),
&MsvcToolChain::environmentModifications,
varsBat,
varsBatArg));
}
MsvcToolChain::MsvcToolChain(Core::Id typeId) MsvcToolChain::MsvcToolChain(Core::Id typeId)
: ToolChain(typeId) : ToolChain(typeId)
{} {}
@@ -1247,17 +1228,19 @@ IOutputParser *MsvcToolChain::outputParser() const
return new MsvcParser; return new MsvcParser;
} }
void MsvcToolChain::changeVcVarsCall(const QString &varsBat, const QString &varsBatArg) void MsvcToolChain::setupVarsBat(const Abi &abi, const QString &varsBat, const QString &varsBatArg)
{ {
m_lastEnvironment = Utils::Environment::systemEnvironment();
m_abi = abi;
m_vcvarsBat = varsBat; m_vcvarsBat = varsBat;
m_varsBatArg = varsBatArg; m_varsBatArg = varsBatArg;
if (!varsBat.isEmpty()) { if (!varsBat.isEmpty()) {
detectInstalledAbis(); detectInstalledAbis();
initEnvModWatcher(Utils::runAsync(envModThreadPool(), initEnvModWatcher(Utils::runAsync(envModThreadPool(),
&ClangClToolChain::environmentModifications, &MsvcToolChain::environmentModifications,
m_vcvarsBat, varsBat,
m_varsBatArg)); varsBatArg));
} }
} }
@@ -1357,9 +1340,8 @@ void MsvcToolChainConfigWidget::applyImpl()
{ {
auto *tc = static_cast<MsvcToolChain *>(toolChain()); auto *tc = static_cast<MsvcToolChain *>(toolChain());
QTC_ASSERT(tc, return ); QTC_ASSERT(tc, return );
tc->setTargetAbi(m_abiWidget->currentAbi());
const QString vcVars = QDir::fromNativeSeparators(m_varsBatPathCombo->currentText()); const QString vcVars = QDir::fromNativeSeparators(m_varsBatPathCombo->currentText());
tc->changeVcVarsCall(vcVars, vcVarsArguments()); tc->setupVarsBat(m_abiWidget->currentAbi(), vcVars, vcVarsArguments());
setFromMsvcToolChain(); setFromMsvcToolChain();
} }
@@ -1653,9 +1635,11 @@ void ClangClToolChainConfigWidget::makeReadOnlyImpl()
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
ClangClToolChain::ClangClToolChain(const QString &clangPath) ClangClToolChain::ClangClToolChain(const QString &clangPath)
: MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID, Abi(), "", "") : MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID)
, m_clangPath(clangPath) , m_clangPath(clangPath)
{} {
setupVarsBat(Abi(), "", "");
}
ClangClToolChain::ClangClToolChain() ClangClToolChain::ClangClToolChain()
: MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID) : MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID)
@@ -1726,14 +1710,10 @@ std::unique_ptr<ToolChainConfigWidget> ClangClToolChain::createConfigurationWidg
void ClangClToolChain::resetMsvcToolChain(const MsvcToolChain *base) void ClangClToolChain::resetMsvcToolChain(const MsvcToolChain *base)
{ {
if (!base) { if (base)
m_abi = Abi(); setupVarsBat(base->targetAbi(), base->varsBat(), base->varsBatArg());
changeVcVarsCall(""); else
return; setupVarsBat(Abi(), "", "");
}
m_abi = base->targetAbi();
changeVcVarsCall(base->varsBat(), base->varsBatArg());
} }
bool ClangClToolChain::operator==(const ToolChain &other) const bool ClangClToolChain::operator==(const ToolChain &other) const
@@ -1832,12 +1812,15 @@ static QList<ToolChain *> findOrCreateToolChain(const QList<ToolChain *> &alread
auto mtc = static_cast<MsvcToolChain *>(tc); auto mtc = static_cast<MsvcToolChain *>(tc);
return mtc->varsBat() == varsBat && mtc->varsBatArg() == varsBatArg; return mtc->varsBat() == varsBat && mtc->varsBatArg() == varsBatArg;
}); });
if (!tc) { if (tc) {
tc = new MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID, abi, varsBat, varsBatArg); res << tc;
tc->setDisplayName(name); } else {
tc->setLanguage(language); auto mstc = new MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID);
mstc->setupVarsBat(abi, varsBat, varsBatArg);
mstc->setDisplayName(name);
mstc->setLanguage(language);
res << mstc;
} }
res << tc;
} }
return res; return res;
} }
@@ -1870,10 +1853,8 @@ static void detectCppBuildTools2015(QList<ToolChain *> *list)
e.format, e.format,
e.wordSize); e.wordSize);
for (auto language : {Constants::C_LANGUAGE_ID, Constants::CXX_LANGUAGE_ID}) { for (auto language : {Constants::C_LANGUAGE_ID, Constants::CXX_LANGUAGE_ID}) {
auto tc = new MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID, auto tc = new MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID);
abi, tc->setupVarsBat(abi, vcVarsBat, QLatin1String(e.varsBatArg));
vcVarsBat,
QLatin1String(e.varsBatArg));
tc->setDisplayName(name + QLatin1String(e.postFix)); tc->setDisplayName(name + QLatin1String(e.postFix));
tc->setDetection(ToolChain::AutoDetection); tc->setDetection(ToolChain::AutoDetection);
tc->setLanguage(language); tc->setLanguage(language);
@@ -2150,8 +2131,8 @@ bool MsvcToolChainFactory::canCreate() const
ToolChain *MsvcToolChainFactory::create() ToolChain *MsvcToolChainFactory::create()
{ {
auto tc = new MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID, auto tc = new MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID);
Abi::hostAbi(), g_availableMsvcToolchains.first()->varsBat(), ""); tc->setupVarsBat(Abi::hostAbi(), g_availableMsvcToolchains.first()->varsBat(), "");
tc->setDisplayName("Microsoft Visual C++ Compiler"); tc->setDisplayName("Microsoft Visual C++ Compiler");
return tc; return tc;
} }

View File

@@ -57,12 +57,7 @@ public:
enum Type { WindowsSDK, VS }; enum Type { WindowsSDK, VS };
enum Platform { x86, amd64, x86_amd64, ia64, x86_ia64, arm, x86_arm, amd64_arm, amd64_x86 }; enum Platform { x86, amd64, x86_amd64, ia64, x86_ia64, arm, x86_arm, amd64_arm, amd64_x86 };
explicit MsvcToolChain(Core::Id typeId,
const Abi &abi,
const QString &varsBat,
const QString &varsBatArg);
explicit MsvcToolChain(Core::Id typeId); explicit MsvcToolChain(Core::Id typeId);
~MsvcToolChain() override; ~MsvcToolChain() override;
Abi targetAbi() const override; Abi targetAbi() const override;
@@ -98,7 +93,7 @@ public:
QString varsBatArg() const { return m_varsBatArg; } QString varsBatArg() const { return m_varsBatArg; }
QString varsBat() const { return m_vcvarsBat; } QString varsBat() const { return m_vcvarsBat; }
void setVarsBatArg(const QString &varsBA) { m_varsBatArg = varsBA; } void setVarsBatArg(const QString &varsBA) { m_varsBatArg = varsBA; }
void changeVcVarsCall(const QString &varsBat, const QString &varsBatArgs = QString()); void setupVarsBat(const Abi &abi, const QString &varsBat, const QString &varsBatArg);
bool operator==(const ToolChain &) const override; bool operator==(const ToolChain &) const override;