remove duplicate resolution of sources from cumulative pass

instead of resolving all sources both in the exact and the cumulative
pass and de-duplicating the joined list in the end, resolve only these
files from the cumulative pass which are unique to it to start with.

Change-Id: Ie3327799ecd94f8710f8b99bcc46998790ba2c74
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Oswald Buddenhagen
2016-10-25 21:24:34 +02:00
parent 09b4d9d51b
commit 4a59a7d714
3 changed files with 12 additions and 7 deletions

View File

@@ -1934,18 +1934,19 @@ EvalResult *QmakeProFileNode::evaluate(const EvalInput &input)
FileType type = fileTypes.at(i).type; FileType type = fileTypes.at(i).type;
QStringList qmakeVariables = varNames(type, exactReader); QStringList qmakeVariables = varNames(type, exactReader);
foreach (const QString &qmakeVariable, qmakeVariables) { foreach (const QString &qmakeVariable, qmakeVariables) {
QHash<ProString, bool> handled;
if (result->state == EvalResult::EvalOk) { if (result->state == EvalResult::EvalOk) {
QStringList vPathsExact = fullVPaths( QStringList vPathsExact = fullVPaths(
baseVPathsExact, exactReader, qmakeVariable, input.projectDir); baseVPathsExact, exactReader, qmakeVariable, input.projectDir);
auto sourceFiles = exactReader->absoluteFileValues( auto sourceFiles = exactReader->absoluteFileValues(
qmakeVariable, input.projectDir, vPathsExact); qmakeVariable, input.projectDir, vPathsExact, &handled);
exactSourceFiles[qmakeVariable] = sourceFiles; exactSourceFiles[qmakeVariable] = sourceFiles;
extractSources(proToResult, &result->includedFiles.result, sourceFiles, type); extractSources(proToResult, &result->includedFiles.result, sourceFiles, type);
} }
QStringList vPathsCumulative = fullVPaths( QStringList vPathsCumulative = fullVPaths(
baseVPathsCumulative, cumulativeReader, qmakeVariable, input.projectDir); baseVPathsCumulative, cumulativeReader, qmakeVariable, input.projectDir);
auto sourceFiles = cumulativeReader->absoluteFileValues( auto sourceFiles = cumulativeReader->absoluteFileValues(
qmakeVariable, input.projectDir, vPathsCumulative); qmakeVariable, input.projectDir, vPathsCumulative, &handled);
cumulativeSourceFiles[qmakeVariable] = sourceFiles; cumulativeSourceFiles[qmakeVariable] = sourceFiles;
extractSources(proToResult, &result->includedFiles.result, sourceFiles, type); extractSources(proToResult, &result->includedFiles.result, sourceFiles, type);
} }
@@ -1962,15 +1963,13 @@ EvalResult *QmakeProFileNode::evaluate(const EvalInput &input)
result->newVarValues[IncludePathVar] = includePaths(exactReader, input.sysroot, result->newVarValues[IncludePathVar] = includePaths(exactReader, input.sysroot,
input.buildDirectory, input.projectDir); input.buildDirectory, input.projectDir);
result->newVarValues[CppFlagsVar] = exactReader->values(QLatin1String("QMAKE_CXXFLAGS")); result->newVarValues[CppFlagsVar] = exactReader->values(QLatin1String("QMAKE_CXXFLAGS"));
QStringList allSources = result->newVarValues[SourceVar] =
fileListForVar(exactSourceFiles, QLatin1String("SOURCES")) + fileListForVar(exactSourceFiles, QLatin1String("SOURCES")) +
fileListForVar(cumulativeSourceFiles, QLatin1String("SOURCES")) + fileListForVar(cumulativeSourceFiles, QLatin1String("SOURCES")) +
fileListForVar(exactSourceFiles, QLatin1String("HEADERS")) + fileListForVar(exactSourceFiles, QLatin1String("HEADERS")) +
fileListForVar(cumulativeSourceFiles, QLatin1String("HEADERS")) + fileListForVar(cumulativeSourceFiles, QLatin1String("HEADERS")) +
fileListForVar(exactSourceFiles, QLatin1String("OBJECTIVE_HEADERS")) + fileListForVar(exactSourceFiles, QLatin1String("OBJECTIVE_HEADERS")) +
fileListForVar(cumulativeSourceFiles, QLatin1String("OBJECTIVE_HEADERS")); fileListForVar(cumulativeSourceFiles, QLatin1String("OBJECTIVE_HEADERS"));
allSources.removeDuplicates();
result->newVarValues[SourceVar] = allSources;
result->newVarValues[UiDirVar] = QStringList() << uiDirPath(exactReader, input.buildDirectory); result->newVarValues[UiDirVar] = QStringList() << uiDirPath(exactReader, input.buildDirectory);
result->newVarValues[HeaderExtensionVar] = QStringList() << exactReader->value(QLatin1String("QMAKE_EXT_H")); result->newVarValues[HeaderExtensionVar] = QStringList() << exactReader->value(QLatin1String("QMAKE_EXT_H"));
result->newVarValues[CppExtensionVar] = QStringList() << exactReader->value(QLatin1String("QMAKE_EXT_CPP")); result->newVarValues[CppExtensionVar] = QStringList() << exactReader->value(QLatin1String("QMAKE_EXT_CPP"));

View File

@@ -120,11 +120,16 @@ QStringList ProFileEvaluator::absolutePathValues(
} }
QVector<ProFileEvaluator::SourceFile> ProFileEvaluator::absoluteFileValues( QVector<ProFileEvaluator::SourceFile> ProFileEvaluator::absoluteFileValues(
const QString &variable, const QString &baseDirectory, const QStringList &searchDirs) const const QString &variable, const QString &baseDirectory, const QStringList &searchDirs,
QHash<ProString, bool> *handled) const
{ {
QMakeVfs::VfsFlags flags = (d->m_cumulative ? QMakeVfs::VfsCumulative : QMakeVfs::VfsExact); QMakeVfs::VfsFlags flags = (d->m_cumulative ? QMakeVfs::VfsCumulative : QMakeVfs::VfsExact);
QVector<SourceFile> result; QVector<SourceFile> result;
foreach (const ProString &str, d->values(ProKey(variable))) { foreach (const ProString &str, d->values(ProKey(variable))) {
bool &seen = (*handled)[str];
if (seen)
continue;
seen = true;
const QString &el = d->m_option->expandEnvVars(str.toQString()); const QString &el = d->m_option->expandEnvVars(str.toQString());
QString absEl; QString absEl;
if (IoUtils::isAbsolutePath(el)) { if (IoUtils::isAbsolutePath(el)) {

View File

@@ -85,7 +85,8 @@ public:
const QString &variable, const QString &baseDirectory, const QString &buildDirectory) const; const QString &variable, const QString &baseDirectory, const QString &buildDirectory) const;
QStringList absolutePathValues(const QString &variable, const QString &baseDirectory) const; QStringList absolutePathValues(const QString &variable, const QString &baseDirectory) const;
QVector<SourceFile> absoluteFileValues( QVector<SourceFile> absoluteFileValues(
const QString &variable, const QString &baseDirectory, const QStringList &searchDirs) const; const QString &variable, const QString &baseDirectory, const QStringList &searchDirs,
QHash<ProString, bool> *handled) const;
QString propertyValue(const QString &val) const; QString propertyValue(const QString &val) const;
private: private: