Files
ubuntu-sdk-ide_orig/debian/patches/always_autotect_qt_versions
2016-08-24 18:00:57 +02:00

102 lines
4.0 KiB
Plaintext

Index: qtcreator/dist/qtcreator/src/plugins/qtsupport/qtversionmanager.cpp
===================================================================
--- qtcreator.orig/dist/qtcreator/src/plugins/qtsupport/qtversionmanager.cpp
+++ qtcreator/dist/qtcreator/src/plugins/qtsupport/qtversionmanager.cpp
@@ -97,7 +97,7 @@ bool qtVersionNumberCompare(BaseQtVersio
return a->qtVersion() > b->qtVersion() || (a->qtVersion() == b->qtVersion() && a->uniqueId() < b->uniqueId());
}
static bool restoreQtVersions();
-static void findSystemQt();
+static void updateSystemQt();
static void saveQtVersions();
static void updateDocumentation();
@@ -126,14 +126,11 @@ void QtVersionManager::triggerQtVersionR
disconnect(ProjectExplorer::ToolChainManager::instance(), SIGNAL(toolChainsLoaded()),
this, SLOT(triggerQtVersionRestore()));
- bool success = restoreQtVersions();
+ restoreQtVersions();
m_instance->updateFromInstaller(false);
- if (!success) {
- // We did neither restore our settings or upgraded
- // in that case figure out if there's a qt in path
- // and add it to the Qt versions
- findSystemQt();
- }
+
+ // add system Qt
+ updateSystemQt();
emit m_instance->qtVersionsLoaded();
emit m_instance->qtVersionsChanged(m_versions.keys(), QList<int>(), QList<int>());
@@ -433,22 +430,57 @@ static FileNameList gatherQmakePathsFrom
return foundQMakes.toList();
}
-static void findSystemQt()
+static void addSystemQtVersion(FileName qmake_fn)
+{
+ BaseQtVersion *v = QtVersionFactory::createQtVersionFromQMakePath(qmake_fn, true, QLatin1String("PATH"));
+ if (v) {
+ v->setUnexpandedDisplayName(BaseQtVersion::defaultUnexpandedDisplayName(qmake_fn, true));
+ m_versions.insert(v->uniqueId(), v);
+ }
+}
+
+static void updateSystemQt()
{
- FileNameList systemQMakes;
FileName systemQMakePath = BuildableHelperLibrary::findSystemQt(Environment::systemEnvironment());
- if (!systemQMakePath.isEmpty())
- systemQMakes << systemQMakePath;
+ FileNameList qmakePathsFromQtChooser = gatherQmakePathsFromQtChooser();
+ if (!qmakePathsFromQtChooser.contains(systemQMakePath))
+ qmakePathsFromQtChooser << systemQMakePath;
+ std::sort(qmakePathsFromQtChooser.begin(), qmakePathsFromQtChooser.end());
- systemQMakes.append(gatherQmakePathsFromQtChooser());
+ QMap<QString, int> currentAutoVersions;
+ for (QMap<int, BaseQtVersion *>::const_iterator i = m_versions.begin(); i != m_versions.end(); ++i) {
+ if (i.value()->isAutodetected()) {
+ currentAutoVersions.insert(i.value()->qmakeCommand().toString(), i.key());
+ }
+ }
- foreach (const FileName &qmakePath, Utils::filteredUnique(systemQMakes)) {
- BaseQtVersion *version
- = QtVersionFactory::createQtVersionFromQMakePath(qmakePath, false, QLatin1String("PATH"));
- if (version) {
- version->setUnexpandedDisplayName(BaseQtVersion::defaultUnexpandedDisplayName(qmakePath, true));
- m_versions.insert(version->uniqueId(), version);
+ QMap<QString, int>::const_iterator av = currentAutoVersions.begin(); // auto-saved versions
+ FileNameList::const_iterator dv = qmakePathsFromQtChooser.begin(); // detected versions
+ while (av != currentAutoVersions.end() && dv != qmakePathsFromQtChooser.end()) {
+ if (av.key() == dv->toString()) {
+ ++av;
+ ++dv;
+ }
+ else if (av.key() < dv->toString()) {
+ // currently saved automatic version has been removed
+ m_versions.remove(*av);
+ ++av;
}
+ else { // av.key() > dv->toString()
+ // detected version is missing, add it
+ addSystemQtVersion(*dv);
+ ++dv;
+ }
+ }
+
+ while (av != currentAutoVersions.end()) {
+ m_versions.remove(*av);
+ ++av;
+ }
+
+ while (dv != qmakePathsFromQtChooser.end()) {
+ addSystemQtVersion(*dv);
+ ++dv;
}
}