diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp index 1be0951b2bc08b4ad2b174875757f8e68b0bf108..06dc56dde89a393e4a96cf68c5194e66ff98d8d0 100644 --- a/src/shared/proparser/profileevaluator.cpp +++ b/src/shared/proparser/profileevaluator.cpp @@ -179,8 +179,7 @@ public: VisitReturn evaluateConditionalFunction(const ProString &function, const ProStringList &args); bool evaluateFileDirect(const QString &fileName, ProFileEvaluatorHandler::EvalFileType type); bool evaluateFile(const QString &fileName, ProFileEvaluatorHandler::EvalFileType type); - bool evaluateFeatureFile(const QString &fileName, - QHash<ProString, ProStringList> *values = 0, FunctionDefs *defs = 0); + bool evaluateFeatureFile(const QString &fileName); bool evaluateFileInto(const QString &fileName, ProFileEvaluatorHandler::EvalFileType type, QHash<ProString, ProStringList> *values, FunctionDefs *defs); @@ -1127,6 +1126,9 @@ ProFileEvaluator::Private::VisitReturn ProFileEvaluator::Private::visitProFile( locker.unlock(); #endif + bool cumulative = m_cumulative; + m_cumulative = false; + // ### init QMAKE_QMAKE, QMAKE_SH // ### init QMAKE_EXT_{C,H,CPP,OBJ} // ### init TEMPLATE_PREFIX @@ -1204,13 +1206,11 @@ ProFileEvaluator::Private::VisitReturn ProFileEvaluator::Private::visitProFile( m_option->qmakespec = QDir::cleanPath(qmakespec); QString spec = m_option->qmakespec + QLatin1String("/qmake.conf"); - if (!evaluateFileInto(spec, ProFileEvaluatorHandler::EvalConfigFile, - &m_option->base_valuemap, &m_option->base_functions)) { + if (!evaluateFileDirect(spec, ProFileEvaluatorHandler::EvalConfigFile)) { m_handler->configError( fL1S("Could not read qmake configuration file %1").arg(spec)); } else if (!m_option->cachefile.isEmpty()) { - evaluateFileInto(m_option->cachefile, ProFileEvaluatorHandler::EvalConfigFile, - &m_option->base_valuemap, &m_option->base_functions); + evaluateFileDirect(m_option->cachefile, ProFileEvaluatorHandler::EvalConfigFile); } m_option->qmakespec_name = IoUtils::fileName(m_option->qmakespec).toString(); if (m_option->qmakespec_name == QLatin1String("default")) { @@ -1233,14 +1233,19 @@ ProFileEvaluator::Private::VisitReturn ProFileEvaluator::Private::visitProFile( } } - evaluateFeatureFile(QLatin1String("default_pre.prf"), - &m_option->base_valuemap, &m_option->base_functions); + evaluateFeatureFile(QLatin1String("default_pre.prf")); + + m_option->base_valuemap = m_valuemapStack.top(); + m_option->base_functions = m_functionDefs; + + m_cumulative = cumulative; #ifdef PROEVALUATOR_THREAD_SAFE locker.relock(); m_option->base_inProgress = false; m_option->cond.wakeAll(); #endif + goto fresh; } #ifdef PROEVALUATOR_THREAD_SAFE } @@ -1249,6 +1254,7 @@ ProFileEvaluator::Private::VisitReturn ProFileEvaluator::Private::visitProFile( m_valuemapStack.top() = m_option->base_valuemap; m_functionDefs = m_option->base_functions; + fresh: ProStringList &tgt = m_valuemapStack.top()[ProString("TARGET")]; if (tgt.isEmpty()) tgt.append(ProString(QFileInfo(pro->fileName()).baseName(), NoHash)); @@ -2964,8 +2970,7 @@ bool ProFileEvaluator::Private::evaluateFile( return evaluateFileDirect(fileName, type); } -bool ProFileEvaluator::Private::evaluateFeatureFile( - const QString &fileName, QHash<ProString, ProStringList> *values, FunctionDefs *funcs) +bool ProFileEvaluator::Private::evaluateFeatureFile(const QString &fileName) { QString fn = fileName; if (!fn.endsWith(QLatin1String(".prf"))) @@ -3003,18 +3008,14 @@ bool ProFileEvaluator::Private::evaluateFeatureFile( fn = resolvePath(fn); } - if (values) { - return evaluateFileInto(fn, ProFileEvaluatorHandler::EvalFeatureFile, values, funcs); - } else { - bool cumulative = m_cumulative; - m_cumulative = false; + bool cumulative = m_cumulative; + m_cumulative = false; - // The path is fully normalized already. - bool ok = evaluateFileDirect(fn, ProFileEvaluatorHandler::EvalFeatureFile); + // The path is fully normalized already. + bool ok = evaluateFileDirect(fn, ProFileEvaluatorHandler::EvalFeatureFile); - m_cumulative = cumulative; - return ok; - } + m_cumulative = cumulative; + return ok; } bool ProFileEvaluator::Private::evaluateFileInto(