diff options
author | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2016-10-24 21:01:22 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2016-11-01 17:33:58 +0000 |
commit | c42b12c98e1b27ac7146c31fdcdbe53915cab2c8 (patch) | |
tree | c79453779f484cf1ef39a6692f5bb1708e06a0ed /src/shared/proparser | |
parent | 5e29347d9d9530521264e226326e45d4c9c08916 (diff) | |
download | qt-creator-c42b12c98e1b27ac7146c31fdcdbe53915cab2c8.tar.gz |
introduce ProFileReader::fixifiedValues()
... and use it for PRECOMPILED_HEADER, INCLUDEPATH, and install target
collection, instead of abusing ProFileReader::absoluteFileValues().
specifically, this falls back to a location in the build directory when
the path is relative and the file cannot be found. in qmake, this
somewhat weird behavior ensures that chaining extra compilers actually
works (and also ensures a lot of frustration with non-clean source dirs
...).
this also fixes INSTALLS with .CONFIG no_check_exists.
Task-number: QTCREATORBUG-14848
Change-Id: Iaf9483c0c4586c464bd10a2aea7cbac7e0df1ec5
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/shared/proparser')
-rw-r--r-- | src/shared/proparser/profileevaluator.cpp | 18 | ||||
-rw-r--r-- | src/shared/proparser/profileevaluator.h | 2 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp index 50bf4a89cf..e164a6cebc 100644 --- a/src/shared/proparser/profileevaluator.cpp +++ b/src/shared/proparser/profileevaluator.cpp @@ -102,6 +102,24 @@ QString ProFileEvaluator::sysrootify(const QString &path, const QString &baseDir return isHostSystemPath ? path : option->sysroot + path; } +QStringList ProFileEvaluator::fixifiedValues( + const QString &variable, const QString &baseDirectory, const QString &buildDirectory) const +{ + QStringList result; + foreach (const QString &el, values(variable)) { + if (IoUtils::isAbsolutePath(el)) { + result << sysrootify(el, baseDirectory); + } else { + QString fn = QDir::cleanPath(baseDirectory + QLatin1Char('/') + el); + if (IoUtils::exists(fn)) + result << fn; + else + result << QDir::cleanPath(buildDirectory + QLatin1Char('/') + el); + } + } + return result; +} + QStringList ProFileEvaluator::absolutePathValues( const QString &variable, const QString &baseDirectory) const { diff --git a/src/shared/proparser/profileevaluator.h b/src/shared/proparser/profileevaluator.h index 27b26081b0..59285bea25 100644 --- a/src/shared/proparser/profileevaluator.h +++ b/src/shared/proparser/profileevaluator.h @@ -82,6 +82,8 @@ public: QString value(const QString &variableName) const; QStringList values(const QString &variableName) const; QStringList values(const QString &variableName, const ProFile *pro) const; + QStringList fixifiedValues( + const QString &variable, const QString &baseDirectory, const QString &buildDirectory) const; QStringList absolutePathValues(const QString &variable, const QString &baseDirectory) const; QStringList absoluteFileValues( const QString &variable, const QString &baseDirectory, const QStringList &searchDirs, |