From cbb053068ccc6399dc7a392df615cda46264cf8d Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@digia.com>
Date: Mon, 31 Mar 2014 12:20:39 +0200
Subject: [PATCH] QtVersionManager: Only load Qt versions after the toolchains
 are available

The mingw Qt versions need to know the mingw toolchains to run qmake since
that may link to a library provided by mingw.

This patch delays loading of the Qt versions till after the Tool Chains are
available by explicitly listening to the toolChainsLoaded signal of the
Toolchain Manager.

I do not see how else we can enforce the proper ordering with the plugin
initialization scheme we have.

Task-number: QTCREATORBUG-11898
Change-Id: I5a93c2b2b32c658695017295652242a5aaa6ee60
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 src/plugins/qtsupport/qtsupportplugin.cpp  |  4 ++--
 src/plugins/qtsupport/qtversionmanager.cpp | 13 ++++++++++++-
 src/plugins/qtsupport/qtversionmanager.h   |  3 ++-
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/plugins/qtsupport/qtsupportplugin.cpp b/src/plugins/qtsupport/qtsupportplugin.cpp
index d40449199af..0fb831fcd20 100644
--- a/src/plugins/qtsupport/qtsupportplugin.cpp
+++ b/src/plugins/qtsupport/qtsupportplugin.cpp
@@ -96,6 +96,8 @@ bool QtSupportPlugin::initialize(const QStringList &arguments, QString *errorMes
 
     ProjectExplorer::KitManager::registerKitInformation(new QtKitInformation);
 
+    QtVersionManager::initialized();
+
     return true;
 }
 
@@ -108,8 +110,6 @@ void QtSupportPlugin::extensionsInitialized()
            " You probably want %1 instead.").arg(QString::fromLatin1(kHostBins)));
     connect(VariableManager::instance(), SIGNAL(variableUpdateRequested(QByteArray)),
             this, SLOT(updateVariable(QByteArray)));
-
-    QtVersionManager::extensionsInitialized();
 }
 
 bool QtSupportPlugin::delayedInitialize()
diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp
index 37e2cd36993..a0081e4e034 100644
--- a/src/plugins/qtsupport/qtversionmanager.cpp
+++ b/src/plugins/qtsupport/qtversionmanager.cpp
@@ -40,6 +40,8 @@
 
 #include <extensionsystem/pluginmanager.h>
 
+#include <projectexplorer/toolchainmanager.h>
+
 #include <utils/buildablehelperlibrary.h>
 #include <utils/filesystemwatcher.h>
 #include <utils/hostosinfo.h>
@@ -159,8 +161,11 @@ QtVersionManager::QtVersionManager()
     connect(m_fileWatcherTimer, SIGNAL(timeout()), SLOT(updateFromInstaller()));
 }
 
-void QtVersionManager::extensionsInitialized()
+void QtVersionManager::triggerQtVersionRestore()
 {
+    disconnect(ProjectExplorer::ToolChainManager::instance(), SIGNAL(toolChainsLoaded()),
+               this, SLOT(triggerQtVersionRestore()));
+
     bool success = restoreQtVersions();
     m_instance->updateFromInstaller(false);
     if (!success) {
@@ -202,6 +207,12 @@ QtVersionManager::~QtVersionManager()
     m_versions.clear();
 }
 
+void QtVersionManager::initialized()
+{
+    connect(ProjectExplorer::ToolChainManager::instance(), SIGNAL(toolChainsLoaded()),
+            QtVersionManager::instance(), SLOT(triggerQtVersionRestore()));
+}
+
 QObject *QtVersionManager::instance()
 {
     return m_instance;
diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h
index c4b2fda07c5..8f8bf538e41 100644
--- a/src/plugins/qtsupport/qtversionmanager.h
+++ b/src/plugins/qtsupport/qtversionmanager.h
@@ -45,7 +45,7 @@ public:
     static QObject *instance();
     QtVersionManager();
     ~QtVersionManager();
-    static void extensionsInitialized();
+    static void initialized();
     static bool delayedInitialize();
 
     static bool isLoaded();
@@ -83,6 +83,7 @@ public slots:
 
 private slots:
     void updateFromInstaller(bool emitSignal = true);
+    void triggerQtVersionRestore();
 
 private:
     // Used by QtOptionsPage
-- 
GitLab