summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qmake/library/qmakebuiltins.cpp13
-rw-r--r--qmake/library/qmakeevaluator.cpp3
-rw-r--r--qmake/library/qmakeevaluator.h2
-rw-r--r--qmake/project.cpp8
4 files changed, 16 insertions, 10 deletions
diff --git a/qmake/library/qmakebuiltins.cpp b/qmake/library/qmakebuiltins.cpp
index 02c910fe46..7648b9373d 100644
--- a/qmake/library/qmakebuiltins.cpp
+++ b/qmake/library/qmakebuiltins.cpp
@@ -560,11 +560,9 @@ void QMakeEvaluator::populateDeps(
}
}
-ProStringList QMakeEvaluator::evaluateBuiltinExpand(
- int func_t, const ProKey &func, const ProStringList &args)
+QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
+ int func_t, const ProKey &func, const ProStringList &args, ProStringList &ret)
{
- ProStringList ret;
-
traceMsg("calling built-in $$%s(%s)", dbgKey(func), dbgSepStrList(args));
switch (func_t) {
@@ -1110,6 +1108,11 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand(
if (qfile.open(stdin, QIODevice::ReadOnly)) {
QTextStream t(&qfile);
const QString &line = t.readLine();
+ if (t.atEnd()) {
+ fputs("\n", stderr);
+ evalError(fL1S("Unexpected EOF."));
+ return ReturnError;
+ }
ret = split_value_list(QStringRef(&line));
}
}
@@ -1279,7 +1282,7 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand(
break;
}
- return ret;
+ return ReturnTrue;
}
QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
diff --git a/qmake/library/qmakeevaluator.cpp b/qmake/library/qmakeevaluator.cpp
index 017fc3434c..cc57aa7f2b 100644
--- a/qmake/library/qmakeevaluator.cpp
+++ b/qmake/library/qmakeevaluator.cpp
@@ -1774,8 +1774,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateExpandFunction(
ProStringList args;
if (expandVariableReferences(tokPtr, 5, &args, true) == ReturnError)
return ReturnError;
- *ret = evaluateBuiltinExpand(func_t, func, args);
- return ReturnTrue;
+ return evaluateBuiltinExpand(func_t, func, args, *ret);
}
QHash<ProKey, ProFunctionDef>::ConstIterator it =
diff --git a/qmake/library/qmakeevaluator.h b/qmake/library/qmakeevaluator.h
index 3f2a22c567..544c257f07 100644
--- a/qmake/library/qmakeevaluator.h
+++ b/qmake/library/qmakeevaluator.h
@@ -212,7 +212,7 @@ public:
VisitReturn evaluateExpandFunction(const ProKey &function, const ushort *&tokPtr, ProStringList *ret);
VisitReturn evaluateConditionalFunction(const ProKey &function, const ushort *&tokPtr);
- ProStringList evaluateBuiltinExpand(int func_t, const ProKey &function, const ProStringList &args);
+ VisitReturn evaluateBuiltinExpand(int func_t, const ProKey &function, const ProStringList &args, ProStringList &ret);
VisitReturn evaluateBuiltinConditional(int func_t, const ProKey &function, const ProStringList &args);
VisitReturn evaluateConditional(const QStringRef &cond, const QString &where, int line = -1);
diff --git a/qmake/project.cpp b/qmake/project.cpp
index 2f8411d52f..3a073b0954 100644
--- a/qmake/project.cpp
+++ b/qmake/project.cpp
@@ -99,8 +99,12 @@ QStringList QMakeProject::expand(const ProKey &func, const QList<ProStringList>
{
m_current.clear();
- if (int func_t = statics.expands.value(func))
- return evaluateBuiltinExpand(func_t, func, prepareBuiltinArgs(args)).toQStringList();
+ if (int func_t = statics.expands.value(func)) {
+ ProStringList ret;
+ if (evaluateBuiltinExpand(func_t, func, prepareBuiltinArgs(args), ret) == ReturnError)
+ exit(3);
+ return ret.toQStringList();
+ }
QHash<ProKey, ProFunctionDef>::ConstIterator it =
m_functionDefs.replaceFunctions.constFind(func);