diff options
author | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2013-06-11 16:08:30 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-06-12 16:27:21 +0200 |
commit | d795e9ff5fb676115a5c4eb9604c35cedd3fb186 (patch) | |
tree | 9645e654cbd8c411d500b0554125987565a4215b | |
parent | 40880ed440d823a115bf77e33ab5c86f0156c2b8 (diff) |
introduce /src qmake property variants
this is for shadow builds during build time, where the respective files
are expected in the source dir.
Change-Id: I18dcfbdef99e1562a51dacac333642cae8105ebd
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r-- | qmake/library/qmakeglobals.cpp | 51 | ||||
-rw-r--r-- | qmake/property.cpp | 4 | ||||
-rw-r--r-- | src/corelib/global/qlibraryinfo.cpp | 23 | ||||
-rw-r--r-- | src/corelib/global/qlibraryinfo.h | 2 |
4 files changed, 56 insertions, 24 deletions
diff --git a/qmake/library/qmakeglobals.cpp b/qmake/library/qmakeglobals.cpp index 097244abc4..e47a4efe0b 100644 --- a/qmake/library/qmakeglobals.cpp +++ b/qmake/library/qmakeglobals.cpp @@ -323,33 +323,46 @@ bool QMakeGlobals::initProperties() QT_PCLOSE(proc); } #endif - foreach (QByteArray line, data.split('\n')) - { - int off = line.indexOf(':'); - if (off < 0) // huh? - continue; - if (line.endsWith('\r')) - line.chop(1); - QString name = QString::fromLatin1(line.left(off)); - ProString value = ProString(QDir::fromNativeSeparators( - QString::fromLocal8Bit(line.mid(off + 1)))); - properties.insert(ProKey(name), value); - if (name.startsWith(QLatin1String("QT_")) && !name.contains(QLatin1Char('/'))) { - if (name.startsWith(QLatin1String("QT_INSTALL_"))) { + foreach (QByteArray line, data.split('\n')) { + int off = line.indexOf(':'); + if (off < 0) // huh? + continue; + if (line.endsWith('\r')) + line.chop(1); + QString name = QString::fromLatin1(line.left(off)); + ProString value = ProString(QDir::fromNativeSeparators( + QString::fromLocal8Bit(line.mid(off + 1)))); + properties.insert(ProKey(name), value); + if (name.startsWith(QLatin1String("QT_"))) { + bool plain = !name.contains(QLatin1Char('/')); + if (!plain) { + if (!name.endsWith(QLatin1String("/get"))) + continue; + name.chop(4); + } + if (name.startsWith(QLatin1String("QT_INSTALL_"))) { + if (plain) { properties.insert(ProKey(name + QLatin1String("/raw")), value); properties.insert(ProKey(name + QLatin1String("/get")), value); - if (name == QLatin1String("QT_INSTALL_PREFIX") - || name == QLatin1String("QT_INSTALL_DATA") - || name == QLatin1String("QT_INSTALL_BINS")) { - name.replace(3, 7, QLatin1String("HOST")); + } + properties.insert(ProKey(name + QLatin1String("/src")), value); + if (name == QLatin1String("QT_INSTALL_PREFIX") + || name == QLatin1String("QT_INSTALL_DATA") + || name == QLatin1String("QT_INSTALL_BINS")) { + name.replace(3, 7, QLatin1String("HOST")); + if (plain) { properties.insert(ProKey(name), value); properties.insert(ProKey(name + QLatin1String("/get")), value); } - } else if (name.startsWith(QLatin1String("QT_HOST_"))) { - properties.insert(ProKey(name + QLatin1String("/get")), value); + properties.insert(ProKey(name + QLatin1String("/src")), value); } + } else if (name.startsWith(QLatin1String("QT_HOST_"))) { + if (plain) + properties.insert(ProKey(name + QLatin1String("/get")), value); + properties.insert(ProKey(name + QLatin1String("/src")), value); } } + } return true; } #else diff --git a/qmake/property.cpp b/qmake/property.cpp index 4685440b48..38d454cb5d 100644 --- a/qmake/property.cpp +++ b/qmake/property.cpp @@ -83,6 +83,7 @@ QMakeProperty::QMakeProperty() : settings(0) { for (int i = 0; i < sizeof(propList)/sizeof(propList[0]); i++) { QString name = QString::fromLatin1(propList[i].name); + m_values[ProKey(name + "/src")] = QLibraryInfo::rawLocation(propList[i].loc, QLibraryInfo::EffectiveSourcePaths); m_values[ProKey(name + "/get")] = QLibraryInfo::rawLocation(propList[i].loc, QLibraryInfo::EffectivePaths); QString val = QLibraryInfo::rawLocation(propList[i].loc, QLibraryInfo::FinalPaths); if (!propList[i].raw) { @@ -164,11 +165,14 @@ QMakeProperty::exec() ProString val = value(ProKey(prop)); ProString pval = value(ProKey(prop + "/raw")); ProString gval = value(ProKey(prop + "/get")); + ProString sval = value(ProKey(prop + "/src")); fprintf(stdout, "%s:%s\n", prop.toLatin1().constData(), val.toLatin1().constData()); if (!pval.isEmpty() && pval != val) fprintf(stdout, "%s/raw:%s\n", prop.toLatin1().constData(), pval.toLatin1().constData()); if (!gval.isEmpty() && gval != (pval.isEmpty() ? val : pval)) fprintf(stdout, "%s/get:%s\n", prop.toLatin1().constData(), gval.toLatin1().constData()); + if (!sval.isEmpty() && sval != gval) + fprintf(stdout, "%s/src:%s\n", prop.toLatin1().constData(), sval.toLatin1().constData()); } return true; } diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 1eaebe5f90..e7554e14f7 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -78,6 +78,7 @@ struct QLibrarySettings QLibrarySettings(); QScopedPointer<QSettings> settings; #ifdef QT_BOOTSTRAPPED + bool haveEffectiveSourcePaths; bool haveEffectivePaths; bool havePaths; #endif @@ -99,8 +100,10 @@ public: static bool haveGroup(QLibraryInfo::PathGroup group) { QLibrarySettings *ls = qt_library_settings(); - return ls ? (group == QLibraryInfo::EffectivePaths - ? ls->haveEffectivePaths : ls->havePaths) : false; + return ls ? (group == QLibraryInfo::EffectiveSourcePaths + ? ls->haveEffectiveSourcePaths + : group == QLibraryInfo::EffectivePaths + ? ls->haveEffectivePaths : ls->havePaths) : false; } #endif static QSettings *configuration() @@ -122,7 +125,12 @@ QLibrarySettings::QLibrarySettings() // This code needs to be in the regular library, as otherwise a qt.conf that // works for qmake would break things for dynamically built Qt tools. QStringList children = settings->childGroups(); +#ifdef QT_BOOTSTRAPPED + haveEffectiveSourcePaths = children.contains(QLatin1String("EffectiveSourcePaths")); + haveEffectivePaths = haveEffectiveSourcePaths || children.contains(QLatin1String("EffectivePaths")); +#else haveEffectivePaths = children.contains(QLatin1String("EffectivePaths")); +#endif // Backwards compat: an existing but empty file is claimed to contain the Paths section. havePaths = !haveEffectivePaths || children.contains(QLatin1String("Paths")); #ifndef QT_BOOTSTRAPPED @@ -130,6 +138,9 @@ QLibrarySettings::QLibrarySettings() settings.reset(0); #else } else { +#ifdef QT_BOOTSTRAPPED + haveEffectiveSourcePaths = false; +#endif haveEffectivePaths = false; havePaths = false; #endif @@ -334,9 +345,12 @@ QLibraryInfo::rawLocation(LibraryLocation loc, PathGroup group) // and qt.conf with that section is present, use it, otherwise fall back to // FinalPaths. For FinalPaths, use qt.conf if present and contains not only // [EffectivePaths], otherwise fall back to builtins. + // EffectiveSourcePaths falls back to EffectivePaths. if (!QLibraryInfoPrivate::haveGroup(group) - && (group == FinalPaths - || !(group = FinalPaths, QLibraryInfoPrivate::haveGroup(FinalPaths)))) + && !(group == EffectiveSourcePaths + && (group = EffectivePaths, QLibraryInfoPrivate::haveGroup(group))) + && !(group == EffectivePaths + && (group = FinalPaths, QLibraryInfoPrivate::haveGroup(group)))) #elif !defined(QT_NO_SETTINGS) if (!QLibraryInfoPrivate::configuration()) #endif @@ -368,6 +382,7 @@ QLibraryInfo::rawLocation(LibraryLocation loc, PathGroup group) QSettings *config = QLibraryInfoPrivate::configuration(); config->beginGroup(QLatin1String( #ifdef QT_BOOTSTRAPPED + group == EffectiveSourcePaths ? "EffectiveSourcePaths" : group == EffectivePaths ? "EffectivePaths" : #endif "Paths")); diff --git a/src/corelib/global/qlibraryinfo.h b/src/corelib/global/qlibraryinfo.h index b275e018a0..17864b555b 100644 --- a/src/corelib/global/qlibraryinfo.h +++ b/src/corelib/global/qlibraryinfo.h @@ -92,7 +92,7 @@ public: }; static QString location(LibraryLocation); // ### Qt 6: consider renaming it to path() #ifdef QT_BOOTSTRAPPED - enum PathGroup { FinalPaths, EffectivePaths }; + enum PathGroup { FinalPaths, EffectivePaths, EffectiveSourcePaths }; static QString rawLocation(LibraryLocation, PathGroup); #endif |