ProjectExplorer: Avoid execution of g++ on startup

Change-Id: I53719f58714b3dd0fcf21d8c7b1deb8d86190408
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
Orgad Shaneh
2015-07-19 10:59:06 +03:00
committed by Orgad Shaneh
parent f2ca9eb166
commit 941d23a206
11 changed files with 36 additions and 28 deletions

View File

@@ -258,8 +258,9 @@ AndroidToolChainFactory::AndroidToolChainFactory()
setDisplayName(tr("Android GCC")); setDisplayName(tr("Android GCC"));
} }
QList<ToolChain *> AndroidToolChainFactory::autoDetect() QList<ToolChain *> AndroidToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{ {
Q_UNUSED(alreadyKnown);
return createToolChainsForNdk(AndroidConfigurations::currentConfig().ndkLocation()); return createToolChainsForNdk(AndroidConfigurations::currentConfig().ndkLocation());
} }

View File

@@ -101,7 +101,7 @@ class AndroidToolChainFactory : public ProjectExplorer::ToolChainFactory
public: public:
AndroidToolChainFactory(); AndroidToolChainFactory();
QList<ProjectExplorer::ToolChain *> autoDetect() override; QList<ProjectExplorer::ToolChain *> autoDetect(const QList<ProjectExplorer::ToolChain *> &alreadyKnown) override;
bool canRestore(const QVariantMap &data) override; bool canRestore(const QVariantMap &data) override;
ProjectExplorer::ToolChain *restore(const QVariantMap &data) override; ProjectExplorer::ToolChain *restore(const QVariantMap &data) override;

View File

@@ -774,15 +774,15 @@ ToolChain *GccToolChainFactory::create()
return createToolChain(false); return createToolChain(false);
} }
QList<ToolChain *> GccToolChainFactory::autoDetect() QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{ {
QList<ToolChain *> tcs; QList<ToolChain *> tcs;
if (HostOsInfo::isMacHost()) { if (HostOsInfo::isMacHost()) {
// Old mac compilers needed to support macx-gccXY mkspecs: // Old mac compilers needed to support macx-gccXY mkspecs:
tcs.append(autoDetectToolchains(QLatin1String("g++-4.0"), Abi::hostAbi())); tcs.append(autoDetectToolchains(QLatin1String("g++-4.0"), Abi::hostAbi(), alreadyKnown));
tcs.append(autoDetectToolchains(QLatin1String("g++-4.2"), Abi::hostAbi())); tcs.append(autoDetectToolchains(QLatin1String("g++-4.2"), Abi::hostAbi(), alreadyKnown));
} }
tcs.append(autoDetectToolchains(QLatin1String("g++"), Abi::hostAbi())); tcs.append(autoDetectToolchains(QLatin1String("g++"), Abi::hostAbi(), alreadyKnown));
return tcs; return tcs;
} }
@@ -809,7 +809,8 @@ GccToolChain *GccToolChainFactory::createToolChain(bool autoDetect)
} }
QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &compiler, QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &compiler,
const Abi &requiredAbi) const Abi &requiredAbi,
const QList<ToolChain *> &alreadyKnown)
{ {
QList<ToolChain *> result; QList<ToolChain *> result;
@@ -818,6 +819,9 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &comp
if (compilerPath.isEmpty()) if (compilerPath.isEmpty())
return result; return result;
if (Utils::findOrDefault(alreadyKnown, Utils::equal(&ToolChain::compilerCommand, compilerPath)))
return result;
GccToolChain::addCommandPathToEnvironment(compilerPath, systemEnvironment); GccToolChain::addCommandPathToEnvironment(compilerPath, systemEnvironment);
QByteArray macros QByteArray macros
= gccPredefinedMacros(compilerPath, gccPredefinedMacrosOptions(), systemEnvironment.toStringList()); = gccPredefinedMacros(compilerPath, gccPredefinedMacrosOptions(), systemEnvironment.toStringList());
@@ -1107,10 +1111,9 @@ ClangToolChainFactory::ClangToolChainFactory()
setDisplayName(tr("Clang")); setDisplayName(tr("Clang"));
} }
QList<ToolChain *> ClangToolChainFactory::autoDetect() QList<ToolChain *> ClangToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{ {
Abi ha = Abi::hostAbi(); return autoDetectToolchains(QLatin1String("clang++"), Abi::hostAbi(), alreadyKnown);
return autoDetectToolchains(QLatin1String("clang++"), ha);
} }
bool ClangToolChainFactory::canRestore(const QVariantMap &data) bool ClangToolChainFactory::canRestore(const QVariantMap &data)
@@ -1186,11 +1189,11 @@ MingwToolChainFactory::MingwToolChainFactory()
setDisplayName(tr("MinGW")); setDisplayName(tr("MinGW"));
} }
QList<ToolChain *> MingwToolChainFactory::autoDetect() QList<ToolChain *> MingwToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{ {
Abi ha = Abi::hostAbi(); const Abi ha = Abi(Abi::hostAbi().architecture(), Abi::WindowsOS, Abi::WindowsMSysFlavor,
return autoDetectToolchains(QLatin1String("g++"), Abi::PEFormat, ha.wordWidth());
Abi(ha.architecture(), Abi::WindowsOS, Abi::WindowsMSysFlavor, Abi::PEFormat, ha.wordWidth())); return autoDetectToolchains(QLatin1String("g++"), ha, alreadyKnown);
} }
bool MingwToolChainFactory::canRestore(const QVariantMap &data) bool MingwToolChainFactory::canRestore(const QVariantMap &data)
@@ -1263,9 +1266,9 @@ LinuxIccToolChainFactory::LinuxIccToolChainFactory()
setDisplayName(tr("Linux ICC")); setDisplayName(tr("Linux ICC"));
} }
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect() QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{ {
return autoDetectToolchains(QLatin1String("icpc"), Abi::hostAbi()); return autoDetectToolchains(QLatin1String("icpc"), Abi::hostAbi(), alreadyKnown);
} }
bool LinuxIccToolChainFactory::canRestore(const QVariantMap &data) bool LinuxIccToolChainFactory::canRestore(const QVariantMap &data)

View File

@@ -56,7 +56,7 @@ class GccToolChainFactory : public ToolChainFactory
public: public:
GccToolChainFactory(); GccToolChainFactory();
QList<ToolChain *> autoDetect(); QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown);
bool canCreate(); bool canCreate();
ToolChain *create(); ToolChain *create();
@@ -67,7 +67,8 @@ public:
protected: protected:
virtual GccToolChain *createToolChain(bool autoDetect); virtual GccToolChain *createToolChain(bool autoDetect);
QList<ToolChain *> autoDetectToolchains(const QString &compiler, QList<ToolChain *> autoDetectToolchains(const QString &compiler,
const Abi &); const Abi &,
const QList<ToolChain *> &alreadyKnown);
}; };
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
@@ -114,7 +115,7 @@ class ClangToolChainFactory : public GccToolChainFactory
public: public:
ClangToolChainFactory(); ClangToolChainFactory();
QList<ToolChain *> autoDetect(); QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown);
bool canRestore(const QVariantMap &data); bool canRestore(const QVariantMap &data);
@@ -133,7 +134,7 @@ class MingwToolChainFactory : public GccToolChainFactory
public: public:
MingwToolChainFactory(); MingwToolChainFactory();
QList<ToolChain *> autoDetect(); QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown);
bool canRestore(const QVariantMap &data); bool canRestore(const QVariantMap &data);
@@ -152,7 +153,7 @@ class LinuxIccToolChainFactory : public GccToolChainFactory
public: public:
LinuxIccToolChainFactory(); LinuxIccToolChainFactory();
QList<ToolChain *> autoDetect(); QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown);
bool canRestore(const QVariantMap &data); bool canRestore(const QVariantMap &data);

View File

@@ -526,8 +526,9 @@ QString MsvcToolChainFactory::vcVarsBatFor(const QString &basePath, MsvcToolChai
return vcVarsBatFor(basePath, platformName(platform)); return vcVarsBatFor(basePath, platformName(platform));
} }
QList<ToolChain *> MsvcToolChainFactory::autoDetect() QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{ {
Q_UNUSED(alreadyKnown);
QList<ToolChain *> results; QList<ToolChain *> results;
// 1) Installed SDKs preferred over standalone Visual studio // 1) Installed SDKs preferred over standalone Visual studio

View File

@@ -100,7 +100,7 @@ class MsvcToolChainFactory : public ToolChainFactory
public: public:
MsvcToolChainFactory(); MsvcToolChainFactory();
QList<ToolChain *> autoDetect() override; QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
bool canRestore(const QVariantMap &data) override; bool canRestore(const QVariantMap &data) override;
ToolChain *restore(const QVariantMap &data) override ToolChain *restore(const QVariantMap &data) override

View File

@@ -239,8 +239,9 @@ QList<Task> ToolChain::validateKit(const Kit *) const
Used by the tool chain manager to restore user-generated tool chains. Used by the tool chain manager to restore user-generated tool chains.
*/ */
QList<ToolChain *> ToolChainFactory::autoDetect() QList<ToolChain *> ToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{ {
Q_UNUSED(alreadyKnown);
return QList<ToolChain *>(); return QList<ToolChain *>();
} }

View File

@@ -181,7 +181,7 @@ class PROJECTEXPLORER_EXPORT ToolChainFactory : public QObject
public: public:
QString displayName() const { return m_displayName; } QString displayName() const { return m_displayName; }
virtual QList<ToolChain *> autoDetect(); virtual QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown);
virtual bool canCreate(); virtual bool canCreate();
virtual ToolChain *create(); virtual ToolChain *create();

View File

@@ -219,7 +219,7 @@ void ToolChainManager::restoreToolChains()
QList<ToolChain *> detectedTcs; QList<ToolChain *> detectedTcs;
QList<ToolChainFactory *> factories = ExtensionSystem::PluginManager::getObjects<ToolChainFactory>(); QList<ToolChainFactory *> factories = ExtensionSystem::PluginManager::getObjects<ToolChainFactory>();
foreach (ToolChainFactory *f, factories) foreach (ToolChainFactory *f, factories)
detectedTcs.append(f->autoDetect()); detectedTcs.append(f->autoDetect(tcsToCheck));
// Find/update autodetected tool chains: // Find/update autodetected tool chains:
ToolChain *toStore = 0; ToolChain *toStore = 0;

View File

@@ -353,8 +353,9 @@ WinCEToolChainFactory::WinCEToolChainFactory()
} }
QList<ToolChain *> WinCEToolChainFactory::autoDetect() QList<ToolChain *> WinCEToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{ {
Q_UNUSED(alreadyKnown);
QList<ToolChain *> results; QList<ToolChain *> results;
// 1) Installed WinCEs // 1) Installed WinCEs

View File

@@ -107,7 +107,7 @@ class WinCEToolChainFactory : public ToolChainFactory
public: public:
WinCEToolChainFactory(); WinCEToolChainFactory();
QList<ToolChain *> autoDetect() override; QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
bool canRestore(const QVariantMap &data) override; bool canRestore(const QVariantMap &data) override;
ToolChain *restore(const QVariantMap &data) override; ToolChain *restore(const QVariantMap &data) override;