Fix "Link with Qt" for Qt offline installers

The Qt offline installers do not necessarily write a QtCreator.ini.
Check for qtversion.xml as well.

Change-Id: Ib7fd9f39444a8eec817646dd495fdc94696906e8
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Eike Ziller
2020-04-17 10:50:33 +02:00
parent 9e057a5536
commit 9e84724c53

View File

@@ -796,6 +796,12 @@ static QString settingsFile(const QString &baseDir)
+ Core::Constants::IDE_CASED_ID + ".ini";
}
static QString qtVersionsFile(const QString &baseDir)
{
return baseDir + (baseDir.isEmpty() ? "" : "/") + Core::Constants::IDE_SETTINGSVARIANT_STR + '/'
+ Core::Constants::IDE_ID + '/' + "qtversion.xml";
}
static Utils::optional<QString> currentlyLinkedQtDir(bool *hasInstallSettings)
{
const QString installSettingsFilePath = settingsFile(Core::ICore::resourcePath());
@@ -883,7 +889,18 @@ void QtOptionsPageWidget::apply()
const QStringList kSubdirsToCheck = {"",
"Qt Creator.app/Contents/Resources",
"Contents/Resources",
"Tools/QtCreator/share/qtcreator"};
"Tools/QtCreator/share/qtcreator",
"share/qtcreator"};
static QStringList settingsFilesToCheck()
{
return Utils::transform(kSubdirsToCheck, [](const QString &dir) { return settingsFile(dir); });
}
static QStringList qtversionFilesToCheck()
{
return Utils::transform(kSubdirsToCheck, [](const QString &dir) { return qtVersionsFile(dir); });
}
static Utils::optional<QString> settingsDirForQtDir(const QString &qtDir)
{
@@ -891,7 +908,7 @@ static Utils::optional<QString> settingsDirForQtDir(const QString &qtDir)
return QString(qtDir + '/' + dir);
});
const QString validDir = Utils::findOrDefault(dirsToCheck, [](const QString &dir) {
return QFile::exists(settingsFile(dir));
return QFile::exists(settingsFile(dir)) || QFile::exists(qtVersionsFile(dir));
});
if (!validDir.isEmpty())
return validDir;
@@ -903,10 +920,7 @@ static bool validateQtInstallDir(FancyLineEdit *input, QString *errorString)
const QString qtDir = input->text();
if (!settingsDirForQtDir(qtDir)) {
if (errorString) {
const QStringList filesToCheck = Utils::transform(kSubdirsToCheck,
[](const QString &dir) {
return settingsFile(dir);
});
const QStringList filesToCheck = settingsFilesToCheck() + qtversionFilesToCheck();
*errorString = QtOptionsPageWidget::tr(
"<html><body>Qt installation information was not found in \"%1\". "
"Choose a directory that contains one of the files <pre>%2</pre>")