diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp
index 06dc56dde89a393e4a96cf68c5194e66ff98d8d0..abb233b49a8e9dc1961d5c394dc0ee0d93601921 100644
--- a/src/shared/proparser/profileevaluator.cpp
+++ b/src/shared/proparser/profileevaluator.cpp
@@ -180,8 +180,10 @@ public:
     bool evaluateFileDirect(const QString &fileName, ProFileEvaluatorHandler::EvalFileType type);
     bool evaluateFile(const QString &fileName, ProFileEvaluatorHandler::EvalFileType type);
     bool evaluateFeatureFile(const QString &fileName);
+    enum EvalIntoMode { EvalProOnly, EvalWithDefaults, EvalWithSetup };
     bool evaluateFileInto(const QString &fileName, ProFileEvaluatorHandler::EvalFileType type,
-                          QHash<ProString, ProStringList> *values, FunctionDefs *defs);
+                          QHash<ProString, ProStringList> *values, FunctionDefs *defs,
+                          EvalIntoMode mode); // values are output-only, defs are input-only
 
     static ALWAYS_INLINE VisitReturn returnBool(bool b)
         { return b ? ReturnTrue : ReturnFalse; }
@@ -1150,7 +1152,7 @@ ProFileEvaluator::Private::VisitReturn ProFileEvaluator::Private::visitProFile(
                     qmake_cache = resolvePath(qmake_cache);
                     QHash<ProString, ProStringList> cache_valuemap;
                     if (evaluateFileInto(qmake_cache, ProFileEvaluatorHandler::EvalConfigFile,
-                                         &cache_valuemap, 0)) {
+                                         &cache_valuemap, 0, EvalProOnly)) {
                         if (m_option->qmakespec.isEmpty()) {
                             const ProStringList &vals = cache_valuemap.value(ProString("QMAKESPEC"));
                             if (!vals.isEmpty())
@@ -2097,7 +2099,8 @@ ProStringList ProFileEvaluator::Private::evaluateExpandFunction(
                 QHash<ProString, ProStringList> vars;
                 QString fn = resolvePath(expandEnvVars(args.at(0).toQString(m_tmp1)));
                 fn.detach();
-                if (evaluateFileInto(fn, ProFileEvaluatorHandler::EvalAuxFile, &vars, 0))
+                if (evaluateFileInto(fn, ProFileEvaluatorHandler::EvalAuxFile,
+                                     &vars, &m_functionDefs, EvalWithDefaults))
                     ret = vars.value(map(args.at(1)));
             }
             break;
@@ -2377,7 +2380,8 @@ ProFileEvaluator::Private::VisitReturn ProFileEvaluator::Private::evaluateCondit
                 QHash<ProString, ProStringList> vars;
                 QString fn = resolvePath(expandEnvVars(args.at(0).toQString(m_tmp1)));
                 fn.detach();
-                if (!evaluateFileInto(fn, ProFileEvaluatorHandler::EvalAuxFile, &vars, 0))
+                if (!evaluateFileInto(fn, ProFileEvaluatorHandler::EvalAuxFile,
+                                      &vars, &m_functionDefs, EvalWithDefaults))
                     return ReturnFalse;
                 if (args.count() == 2)
                     return returnBool(vars.contains(args.at(1)));
@@ -2665,7 +2669,8 @@ ProFileEvaluator::Private::VisitReturn ProFileEvaluator::Private::evaluateCondit
                 ok = evaluateFile(fn, ProFileEvaluatorHandler::EvalIncludeFile);
             } else {
                 QHash<ProString, ProStringList> symbols;
-                if ((ok = evaluateFileInto(fn, ProFileEvaluatorHandler::EvalAuxFile, &symbols, 0))) {
+                if ((ok = evaluateFileInto(fn, ProFileEvaluatorHandler::EvalAuxFile,
+                                           &symbols, 0, EvalWithSetup))) {
                     QHash<ProString, ProStringList> newMap;
                     for (QHash<ProString, ProStringList>::ConstIterator
                             it = m_valuemapStack.top().constBegin(),
@@ -3020,19 +3025,21 @@ bool ProFileEvaluator::Private::evaluateFeatureFile(const QString &fileName)
 
 bool ProFileEvaluator::Private::evaluateFileInto(
         const QString &fileName, ProFileEvaluatorHandler::EvalFileType type,
-        QHash<ProString, ProStringList> *values, FunctionDefs *funcs)
+        QHash<ProString, ProStringList> *values, FunctionDefs *funcs, EvalIntoMode mode)
 {
     ProFileEvaluator visitor(m_option, m_parser, m_handler);
     visitor.d->m_cumulative = false;
-    visitor.d->m_parsePreAndPostFiles = false;
-    visitor.d->m_valuemapStack.top() = *values;
+    visitor.d->m_parsePreAndPostFiles = (mode == EvalWithSetup);
+//    visitor.d->m_valuemapStack.top() = *values;
     if (funcs)
         visitor.d->m_functionDefs = *funcs;
+    if (mode == EvalWithDefaults)
+        visitor.d->evaluateFeatureFile(QLatin1String("default_pre.prf"));
     if (!visitor.d->evaluateFile(fileName, type))
         return false;
     *values = visitor.d->m_valuemapStack.top();
-    if (funcs)
-        *funcs = visitor.d->m_functionDefs;
+//    if (funcs)
+//        *funcs = visitor.d->m_functionDefs;
     return true;
 }