aboutsummaryrefslogtreecommitdiffstats
path: root/src/app/main.cpp
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 /src/app/main.cpp
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>
Diffstat (limited to 'src/app/main.cpp')
-rw-r--r--src/app/main.cpp37
1 files changed, 25 insertions, 12 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()