diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 91072330489..8d55c80b3c9 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -37,6 +37,7 @@ #include "linuxiccparser.h" #include "headerpath.h" #include "projectexplorerconstants.h" +#include "toolchainmanager.h" #include #include @@ -521,11 +522,13 @@ QList Internal::GccToolChainFactory::autoDetectToolchains(const QSt if (!abiList.contains(requiredAbi)) return result; - QString debuggerPath; // Find the first debugger - foreach (const QString &debugger, debuggers) { - debuggerPath = systemEnvironment.searchInPath(debugger); - if (!debuggerPath.isEmpty()) - break; + QString debuggerPath = ToolChainManager::instance()->defaultDebugger(requiredAbi); // Find the first debugger + if (debuggerPath.isEmpty()) { + foreach (const QString &debugger, debuggers) { + debuggerPath = systemEnvironment.searchInPath(debugger); + if (!debuggerPath.isEmpty()) + break; + } } foreach (const Abi &abi, abiList) { diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp index 271783954da..effa814ebe5 100644 --- a/src/plugins/projectexplorer/toolchainmanager.cpp +++ b/src/plugins/projectexplorer/toolchainmanager.cpp @@ -47,6 +47,9 @@ static const char *const TOOLCHAIN_DATA_KEY = "ToolChain."; static const char *const TOOLCHAIN_COUNT_KEY = "ToolChain.Count"; static const char *const TOOLCHAIN_FILE_VERSION_KEY = "Version"; +static const char *const DEFAULT_DEBUGGER_COUNT_KEY = "DefaultDebugger.Count"; +static const char *const DEFAULT_DEBUGGER_ABI_KEY = "DefaultDebugger.Abi."; +static const char *const DEFAULT_DEBUGGER_PATH_KEY = "DefaultDebugger.Path."; static const char *const TOOLCHAIN_FILENAME = "/toolChains.xml"; static QString settingsFileName() @@ -70,6 +73,7 @@ class ToolChainManagerPrivate { public: QList m_toolChains; + QMap m_abiToDebugger; }; } // namespace Internal @@ -96,6 +100,11 @@ ToolChainManager::ToolChainManager(QObject *parent) : void ToolChainManager::restoreToolChains() { + // Restore SDK settings first + restoreToolChains(Core::ICore::instance()->resourcePath() + + QLatin1String("/Nokia") + QLatin1String(TOOLCHAIN_FILENAME), true); + + // Then auto detect ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); QList factories = pm->getObjects(); // Autodetect tool chains: @@ -105,9 +114,8 @@ void ToolChainManager::restoreToolChains() registerToolChain(tc); } + // Then restore user settings restoreToolChains(settingsFileName(), false); - restoreToolChains(Core::ICore::instance()->resourcePath() - + QLatin1String("/Nokia") + QLatin1String(TOOLCHAIN_FILENAME), true); } ToolChainManager::~ToolChainManager() @@ -138,6 +146,8 @@ void ToolChainManager::saveToolChains() } writer.saveValue(QLatin1String(TOOLCHAIN_COUNT_KEY), count); writer.save(settingsFileName(), "QtCreatorToolChains"); + + // Do not save default debuggers! Those are set by the SDK! } void ToolChainManager::restoreToolChains(const QString &fileName, bool autoDetected) @@ -152,10 +162,22 @@ void ToolChainManager::restoreToolChains(const QString &fileName, bool autoDetec if (version < 1) return; + // Read default debugger settings (if any) + int count = data.value(QLatin1String(DEFAULT_DEBUGGER_COUNT_KEY)).toInt(); + for (int i = 0; i < count; ++i) { + const QString abiKey = QString::fromLatin1(DEFAULT_DEBUGGER_ABI_KEY) + QString::number(i); + if (!data.contains(abiKey)) + continue; + const QString pathKey = QString::fromLatin1(DEFAULT_DEBUGGER_PATH_KEY) + QString::number(i); + if (!data.contains(abiKey)) + continue; + m_d->m_abiToDebugger.insert(data.value(abiKey).toString(), data.value(pathKey).toString()); + } + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); QList factories = pm->getObjects(); - int count = data.value(QLatin1String(TOOLCHAIN_COUNT_KEY), 0).toInt(); + count = data.value(QLatin1String(TOOLCHAIN_COUNT_KEY), 0).toInt(); for (int i = 0; i < count; ++i) { const QString key = QString::fromLatin1(TOOLCHAIN_DATA_KEY) + QString::number(i); if (!data.contains(key)) @@ -207,6 +229,11 @@ ToolChain *ToolChainManager::findToolChain(const QString &id) const return 0; } +QString ToolChainManager::defaultDebugger(const Abi &abi) const +{ + return m_d->m_abiToDebugger.value(abi.toString()); +} + void ToolChainManager::notifyAboutUpdate(ProjectExplorer::ToolChain *tc) { if (!tc || !m_d->m_toolChains.contains(tc)) diff --git a/src/plugins/projectexplorer/toolchainmanager.h b/src/plugins/projectexplorer/toolchainmanager.h index b43f3f1752a..b76af4d723a 100644 --- a/src/plugins/projectexplorer/toolchainmanager.h +++ b/src/plugins/projectexplorer/toolchainmanager.h @@ -68,6 +68,8 @@ public: QList findToolChains(const Abi &abi) const; ToolChain *findToolChain(const QString &id) const; + QString defaultDebugger(const Abi &abi) const; + public slots: void registerToolChain(ProjectExplorer::ToolChain *tc); void deregisterToolChain(ProjectExplorer::ToolChain *tc); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp index a6ab2fbbdbd..3a3c5ef8687 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp @@ -321,6 +321,9 @@ QList MaemoToolChainFactory::createToolChainList(c target = "Meego"; mTc->setDisplayName(tr("%1 GCC (%2)").arg(target).arg(MaemoGlobal::maddeRoot(v))); mTc->setCompilerPath(MaemoGlobal::targetRoot(v) + QLatin1String("/bin/gcc")); + mTc->setDebuggerCommand(ProjectExplorer::ToolChainManager::instance()->defaultDebugger(v->qtAbis().at(0))); + if (mTc->debuggerCommand().isEmpty()) + mTc->setDebuggerCommand(MaemoGlobal::targetRoot(v) + QLatin1String("/bin/gdb")); result.append(mTc); } }