diff options
author | Richard Dale <richard.dale@codethink.co.uk> | 2013-07-04 09:57:04 +0100 |
---|---|---|
committer | Richard Dale <richard.dale@codethink.co.uk> | 2013-07-04 09:57:04 +0100 |
commit | 1369d91dd095cd4ea2febe759ef6446e41bd2d80 (patch) | |
tree | 656d71652bbb7de46fd9f5c969c31d43e2226a6e /src/linguist | |
parent | 1a7cc5018eb56a68756e1115fd0b0d1529e69f19 (diff) | |
parent | d403785d9bc5ce27d1aa28ab68200a97a8bffcf5 (diff) | |
download | qttools-1369d91dd095cd4ea2febe759ef6446e41bd2d80.tar.gz |
Merge v5.1.0 releasebaserock/morph
Diffstat (limited to 'src/linguist')
-rw-r--r-- | src/linguist/linguist.pro | 2 | ||||
-rw-r--r-- | src/linguist/shared/profileevaluator.cpp | 20 | ||||
-rw-r--r-- | src/linguist/shared/profileevaluator.h | 4 | ||||
-rw-r--r-- | src/linguist/shared/proitems.cpp | 2 | ||||
-rw-r--r-- | src/linguist/shared/proitems.h | 1 | ||||
-rw-r--r-- | src/linguist/shared/qmake_global.h | 4 | ||||
-rw-r--r-- | src/linguist/shared/qmakebuiltins.cpp | 24 | ||||
-rw-r--r-- | src/linguist/shared/qmakeevaluator.cpp | 126 | ||||
-rw-r--r-- | src/linguist/shared/qmakeevaluator.h | 22 | ||||
-rw-r--r-- | src/linguist/shared/qmakeparser.cpp | 8 |
10 files changed, 130 insertions, 83 deletions
diff --git a/src/linguist/linguist.pro b/src/linguist/linguist.pro index f5d9d9b7a..df3c0c7a1 100644 --- a/src/linguist/linguist.pro +++ b/src/linguist/linguist.pro @@ -33,7 +33,7 @@ contains(CMAKE_BIN_DIR, "$${CMAKE_QT_INSTALL_PREFIX_ESCAPED}.*") { load(qt_build_paths) cmake_linguist_config_file.input = $$PWD/Qt5LinguistToolsConfig.cmake.in -cmake_linguist_config_version_file.input = $$[QT_HOST_DATA]/mkspecs/features/data/cmake/Qt5ConfigVersion.cmake.in +cmake_linguist_config_version_file.input = $$[QT_HOST_DATA/get]/mkspecs/features/data/cmake/Qt5ConfigVersion.cmake.in cmake_linguist_macros_file.input = $$PWD/Qt5LinguistToolsMacros.cmake CMAKE_PACKAGE_VERSION = $$MODULE_VERSION cmake_linguist_config_file.output = $$MODULE_BASE_OUTDIR/lib/cmake/Qt5LinguistTools/Qt5LinguistToolsConfig.cmake diff --git a/src/linguist/shared/profileevaluator.cpp b/src/linguist/shared/profileevaluator.cpp index b391200bd..f22b3f48b 100644 --- a/src/linguist/shared/profileevaluator.cpp +++ b/src/linguist/shared/profileevaluator.cpp @@ -215,6 +215,11 @@ QString ProFileEvaluator::propertyValue(const QString &name) const return d->m_option->propertyValue(ProKey(name)).toQString(); } +QString ProFileEvaluator::resolvedMkSpec() const +{ + return d->m_qmakespec; +} + #ifdef PROEVALUATOR_CUMULATIVE void ProFileEvaluator::setCumulative(bool on) { @@ -222,6 +227,21 @@ void ProFileEvaluator::setCumulative(bool on) } #endif +void ProFileEvaluator::setExtraVars(const QHash<QString, QStringList> &extraVars) +{ + ProValueMap map; + QHash<QString, QStringList>::const_iterator it = extraVars.constBegin(); + QHash<QString, QStringList>::const_iterator end = extraVars.constEnd(); + for ( ; it != end; ++it) + map.insert(ProKey(it.key()), ProStringList(it.value())); + d->setExtraVars(map); +} + +void ProFileEvaluator::setExtraConfigs(const QStringList &extraConfigs) +{ + d->setExtraConfigs(ProStringList(extraConfigs)); +} + void ProFileEvaluator::setOutputDir(const QString &dir) { d->m_outputDir = dir; diff --git a/src/linguist/shared/profileevaluator.h b/src/linguist/shared/profileevaluator.h index 854b42d10..6046b1bae 100644 --- a/src/linguist/shared/profileevaluator.h +++ b/src/linguist/shared/profileevaluator.h @@ -84,6 +84,8 @@ public: #ifdef PROEVALUATOR_CUMULATIVE void setCumulative(bool on); // Default is false #endif + void setExtraVars(const QHash<QString, QStringList> &extraVars); + void setExtraConfigs(const QStringList &extraConfigs); void setOutputDir(const QString &dir); // Default is empty bool loadNamedSpec(const QString &specDir, bool hostSpec); @@ -100,6 +102,8 @@ public: const ProFile *pro) const; QString propertyValue(const QString &val) const; + QString resolvedMkSpec() const; + private: QString sysrootify(const QString &path, const QString &baseDir) const; diff --git a/src/linguist/shared/proitems.cpp b/src/linguist/shared/proitems.cpp index 59029bc5d..8db3026eb 100644 --- a/src/linguist/shared/proitems.cpp +++ b/src/linguist/shared/proitems.cpp @@ -345,7 +345,7 @@ QTextStream &operator<<(QTextStream &t, const ProString &str) return t; } -static QString ProStringList_join(const ProStringList &this_, const QChar *sep, const size_t sepSize) +static QString ProStringList_join(const ProStringList &this_, const QChar *sep, const int sepSize) { int totalLength = 0; const int sz = this_.size(); diff --git a/src/linguist/shared/proitems.h b/src/linguist/shared/proitems.h index 71db00486..734355474 100644 --- a/src/linguist/shared/proitems.h +++ b/src/linguist/shared/proitems.h @@ -275,6 +275,7 @@ enum ProToken { TokRemove, // variable -= TokReplace, // variable ~= // previous literal/expansion is a variable manipulation + // - lower bound for expected output length (1) // - value expression + TokValueTerminator TokValueTerminator, // assignment value terminator TokLiteral, // literal string (fully dequoted) diff --git a/src/linguist/shared/qmake_global.h b/src/linguist/shared/qmake_global.h index e9b518624..5a712dda9 100644 --- a/src/linguist/shared/qmake_global.h +++ b/src/linguist/shared/qmake_global.h @@ -64,4 +64,8 @@ # define ALWAYS_INLINE inline #endif +#ifdef PROEVALUATOR_FULL +# define PROEVALUATOR_DEBUG +#endif + #endif diff --git a/src/linguist/shared/qmakebuiltins.cpp b/src/linguist/shared/qmakebuiltins.cpp index b2132c35f..37ab82ff3 100644 --- a/src/linguist/shared/qmakebuiltins.cpp +++ b/src/linguist/shared/qmakebuiltins.cpp @@ -195,7 +195,7 @@ static bool isTrue(const ProString &_str, QString &tmp) return !str.compare(statics.strtrue, Qt::CaseInsensitive) || str.toInt(); } -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && defined(PROEVALUATOR_FULL) static QString windowsErrorCode() { wchar_t *string = 0; @@ -688,7 +688,7 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand( ProValueMap vars; QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1))); fn.detach(); - if (evaluateFileInto(fn, &vars, LoadProOnly)) + if (evaluateFileInto(fn, &vars, LoadProOnly) == ReturnTrue) ret = vars.value(map(args.at(1))); } break; @@ -1098,8 +1098,9 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( ProValueMap vars; QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1))); fn.detach(); - if (!evaluateFileInto(fn, &vars, LoadProOnly)) - return ReturnFalse; + VisitReturn ok = evaluateFileInto(fn, &vars, LoadProOnly); + if (ok != ReturnTrue) + return ok; if (args.count() == 2) return returnBool(vars.contains(map(args.at(1)))); QRegExp regx; @@ -1308,12 +1309,12 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( } QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1))); fn.detach(); - bool ok; + VisitReturn ok; if (parseInto.isEmpty()) { ok = evaluateFileChecked(fn, QMakeHandler::EvalIncludeFile, LoadProOnly | flags); } else { ProValueMap symbols; - if ((ok = evaluateFileInto(fn, &symbols, LoadAll | flags))) { + if ((ok = evaluateFileInto(fn, &symbols, LoadAll | flags)) == ReturnTrue) { ProValueMap newMap; for (ProValueMap::ConstIterator it = m_valuemapStack.top().constBegin(), @@ -1334,7 +1335,9 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( m_valuemapStack.top() = newMap; } } - return returnBool(ok || (flags & LoadSilent)); + if (ok == ReturnFalse && (flags & LoadSilent)) + ok = ReturnTrue; + return ok; } case T_LOAD: { bool ignore_error = false; @@ -1344,8 +1347,11 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( evalError(fL1S("load(feature) requires one or two arguments.")); return ReturnFalse; } - return returnBool(evaluateFeatureFile(m_option->expandEnvVars(args.at(0).toQString()), - ignore_error) || ignore_error); + VisitReturn ok = evaluateFeatureFile(m_option->expandEnvVars(args.at(0).toQString()), + ignore_error); + if (ok == ReturnFalse && ignore_error) + ok = ReturnTrue; + return ok; } case T_DEBUG: { #ifdef PROEVALUATOR_DEBUG diff --git a/src/linguist/shared/qmakeevaluator.cpp b/src/linguist/shared/qmakeevaluator.cpp index 404974cc6..33befc0f8 100644 --- a/src/linguist/shared/qmakeevaluator.cpp +++ b/src/linguist/shared/qmakeevaluator.cpp @@ -40,10 +40,10 @@ ****************************************************************************/ #include "qmakeevaluator.h" +#include "qmakeevaluator_p.h" #include "qmakeglobals.h" #include "qmakeparser.h" -#include "qmakeevaluator_p.h" #include "ioutils.h" #include <qbytearray.h> @@ -1130,10 +1130,10 @@ bool QMakeEvaluator::prepareProject(const QString &inDir) bool QMakeEvaluator::loadSpecInternal() { - if (!evaluateFeatureFile(QLatin1String("spec_pre.prf"))) + if (evaluateFeatureFile(QLatin1String("spec_pre.prf")) != ReturnTrue) return false; QString spec = m_qmakespec + QLatin1String("/qmake.conf"); - if (!evaluateFile(spec, QMakeHandler::EvalConfigFile, LoadProOnly)) { + if (evaluateFile(spec, QMakeHandler::EvalConfigFile, LoadProOnly) != ReturnTrue) { evalError(fL1S("Could not read qmake configuration file %1.").arg(spec)); return false; } @@ -1157,7 +1157,7 @@ bool QMakeEvaluator::loadSpecInternal() #endif valuesRef(ProKey("QMAKESPEC")) << ProString(m_qmakespec); m_qmakespecName = IoUtils::fileName(m_qmakespec).toString(); - if (!evaluateFeatureFile(QLatin1String("spec_post.prf"))) + if (evaluateFeatureFile(QLatin1String("spec_post.prf")) != ReturnTrue) return false; // The MinGW and x-build specs may change the separator; $$shell_{path,quote}() need it m_dirSep = first(ProKey("QMAKE_DIR_SEP")); @@ -1173,17 +1173,20 @@ bool QMakeEvaluator::loadSpec() QMakeEvaluator evaluator(m_option, m_parser, m_handler); if (!m_superfile.isEmpty()) { valuesRef(ProKey("_QMAKE_SUPER_CACHE_")) << ProString(m_superfile); - if (!evaluator.evaluateFile(m_superfile, QMakeHandler::EvalConfigFile, LoadProOnly)) + if (evaluator.evaluateFile( + m_superfile, QMakeHandler::EvalConfigFile, LoadProOnly) != ReturnTrue) return false; } if (!m_conffile.isEmpty()) { valuesRef(ProKey("_QMAKE_CONF_")) << ProString(m_conffile); - if (!evaluator.evaluateFile(m_conffile, QMakeHandler::EvalConfigFile, LoadProOnly)) + if (evaluator.evaluateFile( + m_conffile, QMakeHandler::EvalConfigFile, LoadProOnly) != ReturnTrue) return false; } if (!m_cachefile.isEmpty()) { valuesRef(ProKey("_QMAKE_CACHE_")) << ProString(m_cachefile); - if (!evaluator.evaluateFile(m_cachefile, QMakeHandler::EvalConfigFile, LoadProOnly)) + if (evaluator.evaluateFile( + m_cachefile, QMakeHandler::EvalConfigFile, LoadProOnly) != ReturnTrue) return false; } if (qmakespec.isEmpty()) { @@ -1219,17 +1222,17 @@ bool QMakeEvaluator::loadSpec() m_qmakespec = QDir::cleanPath(qmakespec); if (!m_superfile.isEmpty() - && !evaluateFile(m_superfile, QMakeHandler::EvalConfigFile, LoadProOnly)) { + && evaluateFile(m_superfile, QMakeHandler::EvalConfigFile, LoadProOnly) != ReturnTrue) { return false; } if (!loadSpecInternal()) return false; if (!m_conffile.isEmpty() - && !evaluateFile(m_conffile, QMakeHandler::EvalConfigFile, LoadProOnly)) { + && evaluateFile(m_conffile, QMakeHandler::EvalConfigFile, LoadProOnly) != ReturnTrue) { return false; } if (!m_cachefile.isEmpty() - && !evaluateFile(m_cachefile, QMakeHandler::EvalConfigFile, LoadProOnly)) { + && evaluateFile(m_cachefile, QMakeHandler::EvalConfigFile, LoadProOnly) != ReturnTrue) { return false; } return true; @@ -1239,10 +1242,11 @@ void QMakeEvaluator::setupProject() { setTemplate(); ProValueMap &vars = m_valuemapStack.top(); - vars[ProKey("TARGET")] << ProString(QFileInfo(currentFileName()).baseName()); - vars[ProKey("_PRO_FILE_")] << ProString(currentFileName()); - vars[ProKey("_PRO_FILE_PWD_")] << ProString(currentDirectory()); - vars[ProKey("OUT_PWD")] << ProString(m_outputDir); + ProFile *proFile = currentProFile(); + vars[ProKey("TARGET")] << ProString(QFileInfo(currentFileName()).baseName()).setSource(proFile); + vars[ProKey("_PRO_FILE_")] << ProString(currentFileName()).setSource(proFile); + vars[ProKey("_PRO_FILE_PWD_")] << ProString(currentDirectory()).setSource(proFile); + vars[ProKey("OUT_PWD")] << ProString(m_outputDir).setSource(proFile); } void QMakeEvaluator::evaluateCommand(const QString &cmds, const QString &where) @@ -1259,7 +1263,7 @@ void QMakeEvaluator::evaluateCommand(const QString &cmds, const QString &where) } } -void QMakeEvaluator::evaluateConfigFeatures() +QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConfigFeatures() { QSet<QString> processed; forever { @@ -1270,7 +1274,10 @@ void QMakeEvaluator::evaluateConfigFeatures() if (!processed.contains(config)) { config.detach(); processed.insert(config); - if (evaluateFeatureFile(config, true)) { + VisitReturn vr = evaluateFeatureFile(config, true); + if (vr == ReturnError) + return vr; + if (vr == ReturnTrue) { finished = false; break; } @@ -1279,6 +1286,7 @@ void QMakeEvaluator::evaluateConfigFeatures() if (finished) break; } + return ReturnTrue; } QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile( @@ -1349,11 +1357,11 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile( loadDefaults(); } -#ifdef QT_BUILD_QMAKE for (ProValueMap::ConstIterator it = m_extraVars.constBegin(); it != m_extraVars.constEnd(); ++it) m_valuemapStack.first().insert(it.key(), it.value()); -#endif + + VisitReturn vr; m_handler->aboutToEval(currentProFile(), pro, type); m_profileStack.push(pro); @@ -1361,41 +1369,43 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile( if (flags & LoadPreFiles) { setupProject(); - evaluateFeatureFile(QLatin1String("default_pre.prf")); + if ((vr = evaluateFeatureFile(QLatin1String("default_pre.prf"))) == ReturnError) + goto failed; evaluateCommand(m_option->precmds, fL1S("(command line)")); -#ifdef QT_BUILD_QMAKE // After user configs, to override them if (!m_extraConfigs.isEmpty()) - evaluateCommand("CONFIG += " + m_extraConfigs.join(' '), fL1S("(extra configs)")); -#endif + evaluateCommand(fL1S("CONFIG += ") + m_extraConfigs.join(QLatin1Char(' ')), fL1S("(extra configs)")); } debugMsg(1, "visiting file %s", qPrintable(pro->fileName())); - visitProBlock(pro, pro->tokPtr()); + if ((vr = visitProBlock(pro, pro->tokPtr())) == ReturnError) + goto failed; debugMsg(1, "done visiting file %s", qPrintable(pro->fileName())); if (flags & LoadPostFiles) { evaluateCommand(m_option->postcmds, fL1S("(command line -after)")); -#ifdef QT_BUILD_QMAKE // Again, to ensure the project does not mess with us. // Specifically, do not allow a project to override debug/release within a // debug_and_release build pass - it's too late for that at this point anyway. if (!m_extraConfigs.isEmpty()) - evaluateCommand("CONFIG += " + m_extraConfigs.join(' '), fL1S("(extra configs)")); -#endif + evaluateCommand(fL1S("CONFIG += ") + m_extraConfigs.join(QLatin1Char(' ')), fL1S("(extra configs)")); - evaluateFeatureFile(QLatin1String("default_post.prf")); + if ((vr = evaluateFeatureFile(QLatin1String("default_post.prf"))) == ReturnError) + goto failed; - evaluateConfigFeatures(); + if ((vr = evaluateConfigFeatures()) == ReturnError) + goto failed; } + vr = ReturnTrue; + failed: m_profileStack.pop(); valuesRef(ProKey("PWD")) = ProStringList(ProString(currentDirectory())); m_handler->doneWithEval(currentProFile()); - return ReturnTrue; + return vr; } @@ -1602,14 +1612,14 @@ QList<ProStringList> QMakeEvaluator::prepareFunctionArgs(const ushort *&tokPtr) } ProStringList QMakeEvaluator::evaluateFunction( - const ProFunctionDef &func, const QList<ProStringList> &argumentsList, bool *ok) + const ProFunctionDef &func, const QList<ProStringList> &argumentsList, VisitReturn *ok) { - bool oki; + VisitReturn vr; ProStringList ret; if (m_valuemapStack.count() >= 100) { evalError(fL1S("Ran into infinite recursion (depth > 100).")); - oki = false; + vr = ReturnFalse; } else { m_valuemapStack.push(ProValueMap()); m_locationStack.push(m_current); @@ -1620,8 +1630,9 @@ ProStringList QMakeEvaluator::evaluateFunction( m_valuemapStack.top()[ProKey(QString::number(i+1))] = argumentsList[i]; } m_valuemapStack.top()[statics.strARGS] = args; - VisitReturn vr = visitProBlock(func.pro(), func.tokPtr()); - oki = (vr != ReturnFalse && vr != ReturnError); // True || Return + vr = visitProBlock(func.pro(), func.tokPtr()); + if (vr == ReturnReturn) + vr = ReturnTrue; ret = m_returnValue; m_returnValue.clear(); @@ -1629,8 +1640,8 @@ ProStringList QMakeEvaluator::evaluateFunction( m_valuemapStack.pop(); } if (ok) - *ok = oki; - if (oki) + *ok = vr; + if (vr == ReturnTrue) return ret; return ProStringList(); } @@ -1639,14 +1650,15 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBoolFunction( const ProFunctionDef &func, const QList<ProStringList> &argumentsList, const ProString &function) { - bool ok; - ProStringList ret = evaluateFunction(func, argumentsList, &ok); - if (ok) { + VisitReturn vr; + ProStringList ret = evaluateFunction(func, argumentsList, &vr); + if (vr == ReturnTrue) { if (ret.isEmpty()) return ReturnTrue; if (ret.at(0) != statics.strfalse) { if (ret.at(0) == statics.strtrue) return ReturnTrue; + bool ok; int val = ret.at(0).toQString(m_tmp1).toInt(&ok); if (ok) { if (val) @@ -1657,8 +1669,9 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBoolFunction( .arg(ret.join(QLatin1String(" :: ")))); } } + return ReturnFalse; } - return ReturnFalse; + return vr; } QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction( @@ -1791,16 +1804,16 @@ ProString QMakeEvaluator::first(const ProKey &variableName) const return ProString(); } -bool QMakeEvaluator::evaluateFile( +QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFile( const QString &fileName, QMakeHandler::EvalFileType type, LoadFlags flags) { if (ProFile *pro = m_parser->parsedProFile(fileName, true)) { m_locationStack.push(m_current); - bool ok = (visitProFile(pro, type, flags) == ReturnTrue); + VisitReturn ok = visitProFile(pro, type, flags); m_current = m_locationStack.pop(); pro->deref(); #ifdef PROEVALUATOR_FULL - if (ok) { + if (ok == ReturnTrue) { ProStringList &iif = m_valuemapStack.first()[ProKey("QMAKE_INTERNAL_INCLUDED_FILES")]; ProString ifn(fileName); if (!iif.contains(ifn)) @@ -1811,27 +1824,28 @@ bool QMakeEvaluator::evaluateFile( } else { if (!(flags & LoadSilent) && !IoUtils::exists(fileName)) evalError(fL1S("WARNING: Include file %1 not found").arg(fileName)); - return false; + return ReturnFalse; } } -bool QMakeEvaluator::evaluateFileChecked( +QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFileChecked( const QString &fileName, QMakeHandler::EvalFileType type, LoadFlags flags) { if (fileName.isEmpty()) - return false; + return ReturnFalse; QMakeEvaluator *ref = this; do { foreach (const ProFile *pf, ref->m_profileStack) if (pf->fileName() == fileName) { evalError(fL1S("Circular inclusion of %1.").arg(fileName)); - return false; + return ReturnFalse; } } while ((ref = ref->m_caller)); return evaluateFile(fileName, type, flags); } -bool QMakeEvaluator::evaluateFeatureFile(const QString &fileName, bool silent) +QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFeatureFile( + const QString &fileName, bool silent) { QString fn = fileName; if (!fn.endsWith(QLatin1String(".prf"))) @@ -1862,7 +1876,7 @@ bool QMakeEvaluator::evaluateFeatureFile(const QString &fileName, bool silent) #endif if (!silent) evalError(fL1S("Cannot find feature %1").arg(fileName)); - return false; + return ReturnFalse; cool: ProStringList &already = valuesRef(ProKey("QMAKE_INTERNAL_INCLUDED_FEATURES")); @@ -1870,7 +1884,7 @@ bool QMakeEvaluator::evaluateFeatureFile(const QString &fileName, bool silent) if (already.contains(afn)) { if (!silent) languageWarning(fL1S("Feature %1 already included").arg(fileName)); - return true; + return ReturnTrue; } already.append(afn); @@ -1880,7 +1894,7 @@ bool QMakeEvaluator::evaluateFeatureFile(const QString &fileName, bool silent) #endif // The path is fully normalized already. - bool ok = evaluateFile(fn, QMakeHandler::EvalFeatureFile, LoadProOnly); + VisitReturn ok = evaluateFile(fn, QMakeHandler::EvalFeatureFile, LoadProOnly); #ifdef PROEVALUATOR_CUMULATIVE m_cumulative = cumulative; @@ -1888,14 +1902,16 @@ bool QMakeEvaluator::evaluateFeatureFile(const QString &fileName, bool silent) return ok; } -bool QMakeEvaluator::evaluateFileInto(const QString &fileName, ProValueMap *values, LoadFlags flags) +QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFileInto( + const QString &fileName, ProValueMap *values, LoadFlags flags) { QMakeEvaluator visitor(m_option, m_parser, m_handler); visitor.m_caller = this; visitor.m_outputDir = m_outputDir; visitor.m_featureRoots = m_featureRoots; - if (!visitor.evaluateFileChecked(fileName, QMakeHandler::EvalAuxFile, flags)) - return false; + VisitReturn ret = visitor.evaluateFileChecked(fileName, QMakeHandler::EvalAuxFile, flags); + if (ret != ReturnTrue) + return ret; *values = visitor.m_valuemapStack.top(); #ifdef PROEVALUATOR_FULL ProKey qiif("QMAKE_INTERNAL_INCLUDED_FILES"); @@ -1904,7 +1920,7 @@ bool QMakeEvaluator::evaluateFileInto(const QString &fileName, ProValueMap *valu if (!iif.contains(ifn)) iif << ifn; #endif - return true; + return ReturnTrue; } void QMakeEvaluator::message(int type, const QString &msg) const diff --git a/src/linguist/shared/qmakeevaluator.h b/src/linguist/shared/qmakeevaluator.h index 2eb762331..21f487a3b 100644 --- a/src/linguist/shared/qmakeevaluator.h +++ b/src/linguist/shared/qmakeevaluator.h @@ -112,10 +112,8 @@ public: QMakeHandler *handler); ~QMakeEvaluator(); -#ifdef QT_BUILD_QMAKE void setExtraVars(const ProValueMap &extraVars) { m_extraVars = extraVars; } void setExtraConfigs(const ProStringList &extraConfigs) { m_extraConfigs = extraConfigs; } -#endif void setOutputDir(const QString &outputDir) { m_outputDir = outputDir; } ProStringList values(const ProKey &variableName) const; @@ -178,15 +176,15 @@ public: QString resolvePath(const QString &fileName) const { return QMakeInternal::IoUtils::resolvePath(currentDirectory(), fileName); } - bool evaluateFile(const QString &fileName, QMakeHandler::EvalFileType type, - LoadFlags flags); - bool evaluateFileChecked(const QString &fileName, QMakeHandler::EvalFileType type, + VisitReturn evaluateFile(const QString &fileName, QMakeHandler::EvalFileType type, LoadFlags flags); - bool evaluateFeatureFile(const QString &fileName, bool silent = false); - bool evaluateFileInto(const QString &fileName, - ProValueMap *values, // output-only - LoadFlags flags); - void evaluateConfigFeatures(); + VisitReturn evaluateFileChecked(const QString &fileName, QMakeHandler::EvalFileType type, + LoadFlags flags); + VisitReturn evaluateFeatureFile(const QString &fileName, bool silent = false); + VisitReturn evaluateFileInto(const QString &fileName, + ProValueMap *values, // output-only + LoadFlags flags); + VisitReturn evaluateConfigFeatures(); void message(int type, const QString &msg) const; void evalError(const QString &msg) const { message(QMakeHandler::EvalError, msg); } @@ -197,7 +195,7 @@ public: QList<ProStringList> prepareFunctionArgs(const ushort *&tokPtr); ProStringList evaluateFunction(const ProFunctionDef &func, - const QList<ProStringList> &argumentsList, bool *ok); + const QList<ProStringList> &argumentsList, VisitReturn *ok); VisitReturn evaluateBoolFunction(const ProFunctionDef &func, const QList<ProStringList> &argumentsList, const ProString &function); @@ -268,10 +266,8 @@ public: QStack<Location> m_locationStack; // All execution location changes QStack<ProFile *> m_profileStack; // Includes only -#ifdef QT_BUILD_QMAKE ProValueMap m_extraVars; ProStringList m_extraConfigs; -#endif QString m_outputDir; int m_listCount; diff --git a/src/linguist/shared/qmakeparser.cpp b/src/linguist/shared/qmakeparser.cpp index 93c7a54ab..d4e9e575d 100644 --- a/src/linguist/shared/qmakeparser.cpp +++ b/src/linguist/shared/qmakeparser.cpp @@ -298,12 +298,12 @@ bool QMakeParser::read(ProFile *pro, const QString &in, int line, SubGrammar gra // Worst-case size calculations: // - line marker adds 1 (2-nl) to 1st token of each line // - empty assignment "A=":2 => - // TokHashLiteral(1) + hash(2) + len(1) + "A"(1) + TokAssign(1) + - // TokValueTerminator(1) == 7 (8) + // TokHashLiteral(1) + hash(2) + len(1) + "A"(1) + TokAssign(1) + 0(1) + + // TokValueTerminator(1) == 8 (9) // - non-empty assignment "A=B C":5 => - // TokHashLiteral(1) + hash(2) + len(1) + "A"(1) + TokAssign(1) + + // TokHashLiteral(1) + hash(2) + len(1) + "A"(1) + TokAssign(1) + 2(1) + // TokLiteral(1) + len(1) + "B"(1) + - // TokLiteral(1) + len(1) + "C"(1) + TokValueTerminator(1) == 13 (14) + // TokLiteral(1) + len(1) + "C"(1) + TokValueTerminator(1) == 14 (15) // - variable expansion: "$$f":3 => // TokVariable(1) + hash(2) + len(1) + "f"(1) = 5 // - function expansion: "$$f()":5 => |