aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-06-14 14:05:51 +0200
committerhjk <hjk@qt.io>2019-06-18 09:51:23 +0000
commitaef8255ba091acaad10cef7146a6aa1349abb734 (patch)
tree4660370dd3cfdac6b18b2b00f68e0d83c31d526d
parentbe55253f6fd8d95952006c113a948a9c48b09414 (diff)
ProjectExplorer: Replace unusual MsvcToolChain constructor
... by default plus a separate function. Change-Id: Ib9507a3ecf6073ab4231218a3f2d3a532f6c680f Reviewed-by: hjk <hjk@qt.io>
-rw-r--r--src/plugins/projectexplorer/msvctoolchain.cpp73
-rw-r--r--src/plugins/projectexplorer/msvctoolchain.h7
2 files changed, 28 insertions, 52 deletions
diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp
index 34e56c18d0..824cb07dfe 100644
--- a/src/plugins/projectexplorer/msvctoolchain.cpp
+++ b/src/plugins/projectexplorer/msvctoolchain.cpp
@@ -843,25 +843,6 @@ static void addToAvailableMsvcToolchains(const MsvcToolChain *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)
: ToolChain(typeId)
{}
@@ -1247,17 +1228,19 @@ IOutputParser *MsvcToolChain::outputParser() const
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_varsBatArg = varsBatArg;
if (!varsBat.isEmpty()) {
detectInstalledAbis();
initEnvModWatcher(Utils::runAsync(envModThreadPool(),
- &ClangClToolChain::environmentModifications,
- m_vcvarsBat,
- m_varsBatArg));
+ &MsvcToolChain::environmentModifications,
+ varsBat,
+ varsBatArg));
}
}
@@ -1357,9 +1340,8 @@ void MsvcToolChainConfigWidget::applyImpl()
{
auto *tc = static_cast<MsvcToolChain *>(toolChain());
QTC_ASSERT(tc, return );
- tc->setTargetAbi(m_abiWidget->currentAbi());
const QString vcVars = QDir::fromNativeSeparators(m_varsBatPathCombo->currentText());
- tc->changeVcVarsCall(vcVars, vcVarsArguments());
+ tc->setupVarsBat(m_abiWidget->currentAbi(), vcVars, vcVarsArguments());
setFromMsvcToolChain();
}
@@ -1653,9 +1635,11 @@ void ClangClToolChainConfigWidget::makeReadOnlyImpl()
// --------------------------------------------------------------------------
ClangClToolChain::ClangClToolChain(const QString &clangPath)
- : MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID, Abi(), "", "")
+ : MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID)
, m_clangPath(clangPath)
-{}
+{
+ setupVarsBat(Abi(), "", "");
+}
ClangClToolChain::ClangClToolChain()
: MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID)
@@ -1726,14 +1710,10 @@ std::unique_ptr<ToolChainConfigWidget> ClangClToolChain::createConfigurationWidg
void ClangClToolChain::resetMsvcToolChain(const MsvcToolChain *base)
{
- if (!base) {
- m_abi = Abi();
- changeVcVarsCall("");
- return;
- }
-
- m_abi = base->targetAbi();
- changeVcVarsCall(base->varsBat(), base->varsBatArg());
+ if (base)
+ setupVarsBat(base->targetAbi(), base->varsBat(), base->varsBatArg());
+ else
+ setupVarsBat(Abi(), "", "");
}
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);
return mtc->varsBat() == varsBat && mtc->varsBatArg() == varsBatArg;
});
- if (!tc) {
- tc = new MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID, abi, varsBat, varsBatArg);
- tc->setDisplayName(name);
- tc->setLanguage(language);
+ if (tc) {
+ res << tc;
+ } else {
+ 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;
}
@@ -1870,10 +1853,8 @@ static void detectCppBuildTools2015(QList<ToolChain *> *list)
e.format,
e.wordSize);
for (auto language : {Constants::C_LANGUAGE_ID, Constants::CXX_LANGUAGE_ID}) {
- auto tc = new MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID,
- abi,
- vcVarsBat,
- QLatin1String(e.varsBatArg));
+ auto tc = new MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID);
+ tc->setupVarsBat(abi, vcVarsBat, QLatin1String(e.varsBatArg));
tc->setDisplayName(name + QLatin1String(e.postFix));
tc->setDetection(ToolChain::AutoDetection);
tc->setLanguage(language);
@@ -2150,8 +2131,8 @@ bool MsvcToolChainFactory::canCreate() const
ToolChain *MsvcToolChainFactory::create()
{
- auto tc = new MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID,
- Abi::hostAbi(), g_availableMsvcToolchains.first()->varsBat(), "");
+ auto tc = new MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID);
+ tc->setupVarsBat(Abi::hostAbi(), g_availableMsvcToolchains.first()->varsBat(), "");
tc->setDisplayName("Microsoft Visual C++ Compiler");
return tc;
}
diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h
index 57cf93fedf..14e93b0ded 100644
--- a/src/plugins/projectexplorer/msvctoolchain.h
+++ b/src/plugins/projectexplorer/msvctoolchain.h
@@ -57,12 +57,7 @@ public:
enum Type { WindowsSDK, VS };
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);
-
~MsvcToolChain() override;
Abi targetAbi() const override;
@@ -98,7 +93,7 @@ public:
QString varsBatArg() const { return m_varsBatArg; }
QString varsBat() const { return m_vcvarsBat; }
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;