aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2022-10-13 11:56:12 +0200
committerEike Ziller <eike.ziller@qt.io>2022-10-14 08:32:53 +0000
commit519b6fefe10629c1a09df03b59647c0f1085a806 (patch)
tree7a3489aa6e1fb9402b826c7e663e7b170815ee05
parent033ec559b3e73459fb0c2a0d48d5a75dba2ce6d4 (diff)
Link with Qt: Prepare for sdktool to move to a different location
When linking we should now consider the new sdktool location within the Qt installation first. The new location of QtCreator.ini will be <Qt>/ Tools/sdktool/QtProject/QtCreator.ini on macOS, and <Qt>/Tools/sdktool/ share/qtcreator/QtProject/QtCreator.ini on Windows/Linux. When resolving an existing install settings path to the old location within the Qt Creator installation (Qt Creator.app/Contents/Resources or Tools/QtCreator/share/qtcreator), the QtCreator.ini at that location will itself redirect to the new sdktool location. So, try to follow that as well, to keep existing setups working. Task-number: QTBUG-28101 Change-Id: Idbb09ad6961f6fd4a4112830959a615d8186a132 Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r--src/app/main.cpp37
-rw-r--r--src/plugins/qtsupport/qtoptionspage.cpp4
2 files changed, 27 insertions, 14 deletions
diff --git a/src/app/main.cpp b/src/app/main.cpp
index ee7ddbd203..d56cc67602 100644
--- a/src/app/main.cpp
+++ b/src/app/main.cpp
@@ -244,22 +244,35 @@ static void setupInstallSettings(QString &installSettingspath)
QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR), QLatin1String(Core::Constants::IDE_CASED_ID)));
installSettingspath.clear();
}
- // Check if the default install settings contain a setting for the actual install settings.
- // This can be an absolute path, or a path relative to applicationDirPath().
- // The result is interpreted like -settingspath, but for SystemScope
static const char kInstallSettingsKey[] = "Settings/InstallSettings";
QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope,
installSettingspath.isEmpty() ? resourcePath() : installSettingspath);
- QSettings installSettings(QSettings::IniFormat, QSettings::UserScope,
- QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR),
- QLatin1String(Core::Constants::IDE_CASED_ID));
- if (installSettings.contains(kInstallSettingsKey)) {
- QString installSettingsPath = installSettings.value(kInstallSettingsKey).toString();
- if (QDir::isRelativePath(installSettingsPath))
- installSettingsPath = applicationDirPath() + '/' + installSettingsPath;
- QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, installSettingsPath);
- }
+ // Check if the default install settings contain a setting for the actual install settings.
+ // This can be an absolute path, or a path relative to applicationDirPath().
+ // The result is interpreted like -settingspath, but for SystemScope.
+ //
+ // Through the sdktool split that is upcoming, the new install settings might redirect
+ // yet a second time. So try this a few times.
+ // (Only the first time with QSettings::UserScope, to allow setting the install settings path
+ // in the user settings.)
+ QSettings::Scope scope = QSettings::UserScope;
+ int count = 0;
+ bool containsInstallSettingsKey = false;
+ do {
+ QSettings installSettings(QSettings::IniFormat, scope,
+ QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR),
+ QLatin1String(Core::Constants::IDE_CASED_ID));
+ containsInstallSettingsKey = installSettings.contains(kInstallSettingsKey);
+ if (containsInstallSettingsKey) {
+ QString newInstallSettingsPath = installSettings.value(kInstallSettingsKey).toString();
+ if (QDir::isRelativePath(newInstallSettingsPath))
+ newInstallSettingsPath = applicationDirPath() + '/' + newInstallSettingsPath;
+ QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, newInstallSettingsPath);
+ }
+ scope = QSettings::SystemScope; // UserScope only the first time we check
+ ++count;
+ } while (containsInstallSettingsKey && count < 3);
}
static Utils::QtcSettings *createUserSettings()
diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp
index c0049058ab..9df0dd5068 100644
--- a/src/plugins/qtsupport/qtoptionspage.cpp
+++ b/src/plugins/qtsupport/qtoptionspage.cpp
@@ -897,9 +897,9 @@ void QtOptionsPageWidget::apply()
&QtOptionsPageWidget::updateQtVersions);
}
-// TODO whenever we move the output of sdktool to a different location in the installer,
-// this needs to be adapted accordingly
const QStringList kSubdirsToCheck = {"",
+ "Tools/sdktool", // macOS
+ "Tools/sdktool/share/qtcreator", // Windows/Linux
"Qt Creator.app/Contents/Resources",
"Contents/Resources",
"Tools/QtCreator/share/qtcreator",