diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 878553e96b3..0390f8ef6bc 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -1932,7 +1932,8 @@ EvalResult *QmakeProFileNode::evaluate(const EvalInput &input) } result->targetInformation = targetInformation(input.readerExact, readerBuildPass, input.buildDirectory, input.projectFilePath.toString()); - result->installsList = installsList(readerBuildPass, input.projectFilePath.toString(), input.projectDir); + result->installsList = installsList(readerBuildPass, input.projectFilePath.toString(), + input.projectDir, input.buildDirectory); // update other variables result->newVarValues[DefinesVar] = input.readerExact->values(QLatin1String("DEFINES")); @@ -1955,11 +1956,8 @@ EvalResult *QmakeProFileNode::evaluate(const EvalInput &input) result->newVarValues[ExactResourceVar] = fileListForVar(input.readerExact, 0, QLatin1String("RESOURCES"), input.projectDir, input.buildDirectory); result->newVarValues[PkgConfigVar] = input.readerExact->values(QLatin1String("PKGCONFIG")); - result->newVarValues[PrecompiledHeaderVar] = - input.readerExact->absoluteFileValues(QLatin1String("PRECOMPILED_HEADER"), - input.projectDir, - QStringList() << input.projectDir, - 0); + result->newVarValues[PrecompiledHeaderVar] = input.readerExact->fixifiedValues( + QLatin1String("PRECOMPILED_HEADER"), input.projectDir, input.buildDirectory); result->newVarValues[LibDirectoriesVar] = libDirectories(input.readerExact); result->newVarValues[ConfigVar] = input.readerExact->values(QLatin1String("CONFIG")); result->newVarValues[QmlImportPathVar] = input.readerExact->absolutePathValues( @@ -2308,7 +2306,7 @@ QStringList QmakeProFileNode::includePaths(QtSupport::ProFileReader *reader, con paths.append(cxxflags.mid(2)); } - paths.append(reader->absolutePathValues(QLatin1String("INCLUDEPATH"), projectDir)); + paths.append(reader->fixifiedValues(QLatin1String("INCLUDEPATH"), projectDir, buildDir)); // paths already contains moc dir and ui dir, due to corrrectly parsing uic.prf and moc.prf // except if those directories don't exist at the time of parsing // thus we add those directories manually (without checking for existence) @@ -2415,7 +2413,8 @@ TargetInformation QmakeProFileNode::targetInformation() const return m_qmakeTargetInformation; } -InstallsList QmakeProFileNode::installsList(const QtSupport::ProFileReader *reader, const QString &projectFilePath, const QString &projectDir) +InstallsList QmakeProFileNode::installsList(const QtSupport::ProFileReader *reader, const QString &projectFilePath, + const QString &projectDir, const QString &buildDir) { InstallsList result; if (!reader) @@ -2438,21 +2437,11 @@ InstallsList QmakeProFileNode::installsList(const QtSupport::ProFileReader *read } itemPath = itemPaths.last(); - const QStringList &itemFiles - = reader->absoluteFileValues(item + QLatin1String(".files"), - projectDir, QStringList() << projectDir, 0); if (item == QLatin1String("target")) { result.targetPath = itemPath; } else { - if (itemFiles.isEmpty()) { - // TODO: Fix QMAKE_SUBSTITUTES handling in pro file reader, then uncomment again -// if (!reader->values(item + QLatin1String(".CONFIG")) -// .contains(QLatin1String("no_check_exist"))) { -// qDebug("%s: Ignoring INSTALLS item '%s', because it has no files.", -// qPrintable(m_projectFilePath), qPrintable(item)); -// } - continue; - } + const QStringList &itemFiles = reader->fixifiedValues( + item + QLatin1String(".files"), projectDir, buildDir); result.items << InstallsItem(itemPath, itemFiles); } } diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.h b/src/plugins/qmakeprojectmanager/qmakenodes.h index 32d3034470a..18462eef7ea 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.h +++ b/src/plugins/qmakeprojectmanager/qmakenodes.h @@ -398,7 +398,7 @@ private: static Utils::FileNameList subDirsPaths(QtSupport::ProFileReader *reader, const QString &projectDir, QStringList *subProjectsNotToDeploy, QStringList *errors); static TargetInformation targetInformation(QtSupport::ProFileReader *reader, QtSupport::ProFileReader *readerBuildPass, const QString &buildDir, const QString &projectFilePath); - static InstallsList installsList(const QtSupport::ProFileReader *reader, const QString &projectFilePath, const QString &projectDir); + static InstallsList installsList(const QtSupport::ProFileReader *reader, const QString &projectFilePath, const QString &projectDir, const QString &buildDir); bool m_validParse = false; bool m_parseInProgress = true; diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp index 50bf4a89cfc..e164a6cebcb 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 27b26081b0d..59285bea256 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,