diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2021-11-16 13:06:28 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2021-11-19 16:44:32 +0100 |
commit | 04ec14105ec41a67fe4d53a1962c9d68c5fd8715 (patch) | |
tree | ef07120df96a9ab93ffbebb7ef93081068b71f8e | |
parent | a3303aceeb49c6c7a5fc21e083715ddbb989a9b0 (diff) |
Change qt.conf key Qml2Imports to QmlImports
[ChangeLog][qt.conf] The key Paths/Qml2Imports has been renamed to
Paths/QmlImports. For backwards-compatibility, Paths/Qml2Imports is
still accepted and acts as default value for when Paths/QmlImports is
not present.
Fixes: QTBUG-98335
Change-Id: If7ffedd281eb8a87e8ab1a2b69a823e615c33541
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
-rw-r--r-- | qmake/qmakelibraryinfo.cpp | 27 | ||||
-rw-r--r-- | src/corelib/global/qlibraryinfo.cpp | 40 | ||||
-rw-r--r-- | src/corelib/global/qlibraryinfo_p.h | 11 |
3 files changed, 46 insertions, 32 deletions
diff --git a/qmake/qmakelibraryinfo.cpp b/qmake/qmakelibraryinfo.cpp index b501cfc5f6..59a4e6eb59 100644 --- a/qmake/qmakelibraryinfo.cpp +++ b/qmake/qmakelibraryinfo.cpp @@ -148,21 +148,14 @@ static QLibraryInfo::LibraryPath hostToTargetPathEnum(int loc) Q_UNREACHABLE(); } -struct LocationInfo +static QLibraryInfoPrivate::LocationInfo defaultLocationInfo(int loc) { - QString key; - QString defaultValue; -}; - -static LocationInfo defaultLocationInfo(int loc) -{ - LocationInfo result; + QLibraryInfoPrivate::LocationInfo result; if (loc < QMakeLibraryInfo::FirstHostPath) { - QLibraryInfoPrivate::keyAndDefault(static_cast<QLibraryInfo::LibraryPath>(loc), - &result.key, &result.defaultValue); + result = QLibraryInfoPrivate::locationInfo(static_cast<QLibraryInfo::LibraryPath>(loc)); } else if (loc <= QMakeLibraryInfo::LastHostPath) { - QLibraryInfoPrivate::keyAndDefault(hostToTargetPathEnum(loc), &result.key, &result.defaultValue); + result = QLibraryInfoPrivate::locationInfo(hostToTargetPathEnum(loc)); result.key.prepend(QStringLiteral("Host")); } else if (loc == QMakeLibraryInfo::SysrootPath) { result.key = QStringLiteral("Sysroot"); @@ -219,7 +212,7 @@ QString QMakeLibraryInfo::rawLocation(int loc, QMakeLibraryInfo::PathGroup group || (group = orig_group, false)) { fromConf = true; - LocationInfo locinfo = defaultLocationInfo(loc); + QLibraryInfoPrivate::LocationInfo locinfo = defaultLocationInfo(loc); if (!locinfo.key.isNull()) { QSettings *config = QLibraryInfoPrivate::configuration(); Q_ASSERT(config != nullptr); @@ -229,7 +222,15 @@ QString QMakeLibraryInfo::rawLocation(int loc, QMakeLibraryInfo::PathGroup group : group == EffectivePaths ? "EffectivePaths" : "Paths")); - ret = config->value(locinfo.key).toString(); + if (locinfo.fallbackKey.isNull()) { + ret = config->value(locinfo.key, locinfo.defaultValue).toString(); + } else { + QVariant v = config->value(locinfo.key); + if (!v.isValid()) + v = config->value(locinfo.fallbackKey, locinfo.defaultValue); + ret = v.toString(); + } + if (ret.isEmpty()) { if (loc == HostPrefixPath || loc == TargetSpecPath || loc == HostSpecPath || loc == SysrootifyPrefixPath || loc == QLibraryInfo::PrefixPath) { diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 97232d8120..c31e1fdecf 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -490,8 +490,7 @@ static QString getPrefix() #endif } -void QLibraryInfoPrivate::keyAndDefault(QLibraryInfo::LibraryPath loc, QString *key, - QString *value) +QLibraryInfoPrivate::LocationInfo QLibraryInfoPrivate::locationInfo(QLibraryInfo::LibraryPath loc) { /* * To add a new entry in QLibraryInfo::LibraryPath, add it to the enum @@ -512,9 +511,7 @@ void QLibraryInfoPrivate::keyAndDefault(QLibraryInfo::LibraryPath loc, QString * "Binaries", "bin", "Plugins", "plugins", // should be ${ArchData}/plugins - // TODO: Find a way to rename this to QmlImports - // without breaking compatibility with old qt.conf files. - "Qml2Imports", "qml", // should be ${ArchData}/qml + "QmlImports", "qml", // should be ${ArchData}/qml "ArchData", ".", "Data", ".", @@ -526,18 +523,21 @@ void QLibraryInfoPrivate::keyAndDefault(QLibraryInfo::LibraryPath loc, QString * static_assert(dot.size() == 1); static_assert(dot[0] == '.'); + LocationInfo result; + if (int(loc) < qtConfEntries.count()) { - *key = QLatin1String(qtConfEntries.viewAt(loc * 2)); - *value = QLatin1String(qtConfEntries.viewAt(loc * 2 + 1)); + result.key = QLatin1String(qtConfEntries.viewAt(loc * 2)); + result.defaultValue = QLatin1String(qtConfEntries.viewAt(loc * 2 + 1)); + if (result.key == u"QmlImports") + result.fallbackKey = u"Qml2Imports"_qs; #ifndef Q_OS_WIN // On Windows we use the registry } else if (loc == QLibraryInfo::SettingsPath) { - *key = QLatin1String("Settings"); - *value = QLatin1String(dot); + result.key = QLatin1String("Settings"); + result.defaultValue = QLatin1String(dot); #endif - } else { - key->clear(); - value->clear(); } + + return result; } /*! \fn QString QLibraryInfo::location(LibraryLocation loc) @@ -559,15 +559,21 @@ QString QLibraryInfo::path(LibraryPath p) if (havePaths()) { fromConf = true; - QString key; - QString defaultValue; - QLibraryInfoPrivate::keyAndDefault(loc, &key, &defaultValue); - if (!key.isNull()) { + auto li = QLibraryInfoPrivate::locationInfo(loc); + if (!li.key.isNull()) { QSettings *config = QLibraryInfoPrivate::configuration(); Q_ASSERT(config != nullptr); config->beginGroup(QLatin1String("Paths")); - ret = config->value(key, defaultValue).toString(); + if (li.fallbackKey.isNull()) { + ret = config->value(li.key, li.defaultValue).toString(); + } else { + QVariant v = config->value(li.key); + if (!v.isValid()) + v = config->value(li.fallbackKey, li.defaultValue); + ret = v.toString(); + } + int startIndex = 0; forever { startIndex = ret.indexOf(QLatin1Char('$'), startIndex); diff --git a/src/corelib/global/qlibraryinfo_p.h b/src/corelib/global/qlibraryinfo_p.h index a0900f010b..caed0feb84 100644 --- a/src/corelib/global/qlibraryinfo_p.h +++ b/src/corelib/global/qlibraryinfo_p.h @@ -69,8 +69,15 @@ public: static void reload(); static QString qtconfManualPath; #endif - static void keyAndDefault(QLibraryInfo::LibraryPath loc, QString *key, - QString *value); + + struct LocationInfo + { + QString key; + QString defaultValue; + QString fallbackKey; + }; + + static LocationInfo locationInfo(QLibraryInfo::LibraryPath loc); }; QT_END_NAMESPACE |