qmake: Enable more code

Change-Id: I3b2a7d638571cb941906f37c7dfd6de613261a0a
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-02-09 23:39:57 +01:00
parent 07c0ca5ef5
commit 4070b49118

View File

@@ -1411,11 +1411,10 @@ void QmakeProFile::setupReader()
#endif #endif
} }
static bool evaluateOne( static bool evaluateOne(const QmakeEvalInput &input, ProFile *pro,
const EvalInput &input, ProFile *pro, QtSupport::ProFileReader *reader, QtSupport::ProFileReader *reader, bool cumulative,
bool cumulative, QtSupport::ProFileReader **buildPassReader) QtSupport::ProFileReader **buildPassReader)
{ {
#if 0
if (!reader->accept(pro, QMakeEvaluator::LoadAll)) if (!reader->accept(pro, QMakeEvaluator::LoadAll))
return false; return false;
@@ -1444,14 +1443,13 @@ static bool evaluateOne(
else else
delete bpReader; delete bpReader;
} }
#endif
return true; return true;
} }
QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input) QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
{ {
QmakeEvalResult *result = new QmakeEvalResult; QmakeEvalResult *result = new QmakeEvalResult;
#if 0
QtSupport::ProFileReader *exactBuildPassReader = nullptr; QtSupport::ProFileReader *exactBuildPassReader = nullptr;
QtSupport::ProFileReader *cumulativeBuildPassReader = nullptr; QtSupport::ProFileReader *cumulativeBuildPassReader = nullptr;
ProFile *pro; ProFile *pro;
@@ -1459,30 +1457,32 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
bool exactOk = evaluateOne(input, pro, input.readerExact, false, &exactBuildPassReader); bool exactOk = evaluateOne(input, pro, input.readerExact, false, &exactBuildPassReader);
bool cumulOk = evaluateOne(input, pro, input.readerCumulative, true, &cumulativeBuildPassReader); bool cumulOk = evaluateOne(input, pro, input.readerCumulative, true, &cumulativeBuildPassReader);
pro->deref(); pro->deref();
result->state = exactOk ? ParserEvalResult::EvalOk : cumulOk ? ParserEvalResult::EvalPartial : ParserEvalResult::EvalFail; result->state = exactOk ? QmakeEvalResult::EvalOk
: cumulOk ? QmakeEvalResult::EvalPartial : QmakeEvalResult::EvalFail;
} else { } else {
result->state = ParserEvalResult::EvalFail; result->state = QmakeEvalResult::EvalFail;
} }
if (result->state == ParserEvalResult::EvalFail) if (result->state == QmakeEvalResult::EvalFail)
return result; return result;
result->includedFiles.proFile = pro; result->includedFiles.proFile = pro;
result->includedFiles.name = input.projectFilePath; result->includedFiles.name = input.projectFilePath;
QHash<const ProFile *, PriFileEvalResult *> proToResult; QHash<const ProFile *, QmakePriFileEvalResult *> proToResult;
result->projectType = proFileTemplateTypeToProjectType( result->projectType
(result->state == ParserEvalResult::EvalOk ? input.readerExact = proFileTemplateTypeToProjectType(
: input.readerCumulative)->templateType()); (result->state == QmakeEvalResult::EvalOk ? input.readerExact
if (result->state == ParserEvalResult::EvalOk) { : input.readerCumulative)->templateType());
if (result->projectType == SubDirsTemplate) { if (result->state == QmakeEvalResult::EvalOk) {
if (result->projectType == ProjectType::SubDirsTemplate) {
QStringList errors; QStringList errors;
FileNameList subDirs = subDirsPaths(input.readerExact, input.projectDir, &result->subProjectsNotToDeploy, &errors); FileNameList subDirs = subDirsPaths(input.readerExact, input.projectDir, &result->subProjectsNotToDeploy, &errors);
result->errors.append(errors); result->errors.append(errors);
foreach (const Utils::FileName &subDirName, subDirs) { foreach (const Utils::FileName &subDirName, subDirs) {
IncludedPriFile *subDir = new IncludedPriFile; auto subDir = new QmakeIncludedPriFile;
subDir->proFile = nullptr; subDir->proFile = nullptr;
subDir->name = subDirName; subDir->name = subDirName;
result->includedFiles.children.insert(subDirName, subDir); result->includedFiles.children.insert(subDirName, subDir);
@@ -1493,9 +1493,9 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
// Convert ProFileReader::includeFiles to IncludedPriFile structure // Convert ProFileReader::includeFiles to IncludedPriFile structure
QHash<ProFile *, QVector<ProFile *>> includeFiles = input.readerExact->includeFiles(); QHash<ProFile *, QVector<ProFile *>> includeFiles = input.readerExact->includeFiles();
QList<IncludedPriFile *> toBuild = { &result->includedFiles }; QList<QmakeIncludedPriFile *> toBuild = { &result->includedFiles };
while (!toBuild.isEmpty()) { while (!toBuild.isEmpty()) {
IncludedPriFile *current = toBuild.takeFirst(); QmakeIncludedPriFile *current = toBuild.takeFirst();
if (!current->proFile) if (!current->proFile)
continue; // Don't attempt to map subdirs here continue; // Don't attempt to map subdirs here
QVector<ProFile *> children = includeFiles.value(current->proFile); QVector<ProFile *> children = includeFiles.value(current->proFile);
@@ -1503,7 +1503,7 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
const Utils::FileName childName = Utils::FileName::fromString(child->fileName()); const Utils::FileName childName = Utils::FileName::fromString(child->fileName());
auto it = current->children.find(childName); auto it = current->children.find(childName);
if (it == current->children.end()) { if (it == current->children.end()) {
IncludedPriFile *childTree = new IncludedPriFile; auto childTree = new QmakeIncludedPriFile;
childTree->proFile = child; childTree->proFile = child;
childTree->name = childName; childTree->name = childName;
current->children.insert(childName, childTree); current->children.insert(childName, childTree);
@@ -1514,12 +1514,12 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
} }
} }
if (result->projectType == SubDirsTemplate) { if (result->projectType == ProjectType::SubDirsTemplate) {
FileNameList subDirs = subDirsPaths(input.readerCumulative, input.projectDir, 0, 0); FileNameList subDirs = subDirsPaths(input.readerCumulative, input.projectDir, 0, 0);
foreach (const Utils::FileName &subDirName, subDirs) { foreach (const Utils::FileName &subDirName, subDirs) {
auto it = result->includedFiles.children.find(subDirName); auto it = result->includedFiles.children.find(subDirName);
if (it == result->includedFiles.children.end()) { if (it == result->includedFiles.children.end()) {
IncludedPriFile *subDir = new IncludedPriFile; auto subDir = new QmakeIncludedPriFile;
subDir->proFile = nullptr; subDir->proFile = nullptr;
subDir->name = subDirName; subDir->name = subDirName;
result->includedFiles.children.insert(subDirName, subDir); result->includedFiles.children.insert(subDirName, subDir);
@@ -1529,9 +1529,9 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
// Add ProFileReader::includeFiles information from cumulative parse to IncludedPriFile structure // Add ProFileReader::includeFiles information from cumulative parse to IncludedPriFile structure
QHash<ProFile *, QVector<ProFile *>> includeFiles = input.readerCumulative->includeFiles(); QHash<ProFile *, QVector<ProFile *>> includeFiles = input.readerCumulative->includeFiles();
QList<IncludedPriFile *> toBuild = { &result->includedFiles }; QList<QmakeIncludedPriFile *> toBuild = { &result->includedFiles };
while (!toBuild.isEmpty()) { while (!toBuild.isEmpty()) {
IncludedPriFile *current = toBuild.takeFirst(); QmakeIncludedPriFile *current = toBuild.takeFirst();
if (!current->proFile) if (!current->proFile)
continue; // Don't attempt to map subdirs here continue; // Don't attempt to map subdirs here
QVector<ProFile *> children = includeFiles.value(current->proFile); QVector<ProFile *> children = includeFiles.value(current->proFile);
@@ -1539,7 +1539,7 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
const Utils::FileName childName = Utils::FileName::fromString(child->fileName()); const Utils::FileName childName = Utils::FileName::fromString(child->fileName());
auto it = current->children.find(childName); auto it = current->children.find(childName);
if (it == current->children.end()) { if (it == current->children.end()) {
IncludedPriFile *childTree = new IncludedPriFile; auto childTree = new QmakeIncludedPriFile;
childTree->proFile = child; childTree->proFile = child;
childTree->name = childName; childTree->name = childName;
current->children.insert(childName, childTree); current->children.insert(childName, childTree);
@@ -1558,13 +1558,13 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
QStringList baseVPathsExact = baseVPaths(exactReader, input.projectDir, input.buildDirectory); QStringList baseVPathsExact = baseVPaths(exactReader, input.projectDir, input.buildDirectory);
QStringList baseVPathsCumulative = baseVPaths(cumulativeReader, input.projectDir, input.buildDirectory); QStringList baseVPathsCumulative = baseVPaths(cumulativeReader, input.projectDir, input.buildDirectory);
const QVector<QmakeParserNodeStaticData::FileTypeData> &fileTypes = qmakeNodeStaticData()->fileTypeData; const QVector<QmakeStaticData::FileTypeData> &fileTypes = qmakeStaticData()->fileTypeData;
for (int i = 0; i < fileTypes.size(); ++i) { for (int i = 0; i < fileTypes.size(); ++i) {
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; QHash<ProString, bool> handled;
if (result->state == ParserEvalResult::EvalOk) { if (result->state == QmakeEvalResult::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(
@@ -1590,7 +1590,7 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
input.projectDir, input.buildDirectory); input.projectDir, input.buildDirectory);
extractInstalls(proToResult, &result->includedFiles.result, result->installsList); extractInstalls(proToResult, &result->includedFiles.result, result->installsList);
if (result->state == ParserEvalResult::EvalOk) { if (result->state == QmakeEvalResult::EvalOk) {
result->targetInformation = targetInformation(input.readerExact, exactBuildPassReader, result->targetInformation = targetInformation(input.readerExact, exactBuildPassReader,
input.buildDirectory, input.projectFilePath.toString()); input.buildDirectory, input.projectFilePath.toString());
@@ -1641,11 +1641,11 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
result->newVarValues[Variable::QmakeCxx] = exactReader->values("QMAKE_CXX"); result->newVarValues[Variable::QmakeCxx] = exactReader->values("QMAKE_CXX");
} }
if (result->state == ParserEvalResult::EvalOk || result->state == ParserEvalResult::EvalPartial) { if (result->state == QmakeEvalResult::EvalOk || result->state == QmakeEvalResult::EvalPartial) {
QList<IncludedPriFile *> toExtract = { &result->includedFiles }; QList<QmakeIncludedPriFile *> toExtract = { &result->includedFiles };
while (!toExtract.isEmpty()) { while (!toExtract.isEmpty()) {
IncludedPriFile *current = toExtract.takeFirst(); QmakeIncludedPriFile *current = toExtract.takeFirst();
processValues(current->result); processValues(current->result);
toExtract.append(current->children.values()); toExtract.append(current->children.values());
} }
@@ -1655,7 +1655,7 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
delete exactBuildPassReader; delete exactBuildPassReader;
if (cumulativeBuildPassReader && cumulativeBuildPassReader != input.readerCumulative) if (cumulativeBuildPassReader && cumulativeBuildPassReader != input.readerCumulative)
delete cumulativeBuildPassReader; delete cumulativeBuildPassReader;
#endif
return result; return result;
} }