diff options
author | Eike Ziller <eike.ziller@qt.io> | 2022-10-13 11:56:12 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2022-10-14 08:32:53 +0000 |
commit | 519b6fefe10629c1a09df03b59647c0f1085a806 (patch) | |
tree | 7a3489aa6e1fb9402b826c7e663e7b170815ee05 /src/app/main.cpp | |
parent | 033ec559b3e73459fb0c2a0d48d5a75dba2ce6d4 (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.cpp | 37 |
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() |