diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp
index 126881348970792162d56eb814712039659a2c88..a7646be104b9eaaad9a4c8ee65fc901beb63028a 100644
--- a/src/shared/proparser/profileevaluator.cpp
+++ b/src/shared/proparser/profileevaluator.cpp
@@ -229,6 +229,7 @@ public:
     void visitProOperator(ProOperator *oper);
     void visitProCondition(ProCondition *condition);
 
+    static inline QString map(const QString &var);
     QHash<QString, QStringList> *findValues(const QString &variableName,
                                             QHash<QString, QStringList>::Iterator *it);
     QStringList &valuesRef(const QString &variableName);
@@ -362,6 +363,7 @@ static struct {
     QHash<QString, int> expands;
     QHash<QString, int> functions;
     QHash<QString, int> varList;
+    QHash<QString, QString> varMap;
     QRegExp reg_variableName;
     QStringList fakeValue;
 } statics;
@@ -479,6 +481,38 @@ void ProFileEvaluator::Private::initStatics()
     };
     for (unsigned i = 0; i < sizeof(names)/sizeof(names[0]); ++i)
         statics.varList.insert(QLatin1String(names[i]), i);
+
+    static const struct {
+        const char * const oldname, * const newname;
+    } mapInits[] = {
+        { "INTERFACES", "FORMS" },
+        { "QMAKE_POST_BUILD", "QMAKE_POST_LINK" },
+        { "TARGETDEPS", "POST_TARGETDEPS" },
+        { "LIBPATH", "QMAKE_LIBDIR" },
+        { "QMAKE_EXT_MOC", "QMAKE_EXT_CPP_MOC" },
+        { "QMAKE_MOD_MOC", "QMAKE_H_MOD_MOC" },
+        { "QMAKE_LFLAGS_SHAPP", "QMAKE_LFLAGS_APP" },
+        { "PRECOMPH", "PRECOMPILED_HEADER" },
+        { "PRECOMPCPP", "PRECOMPILED_SOURCE" },
+        { "INCPATH", "INCLUDEPATH" },
+        { "QMAKE_EXTRA_WIN_COMPILERS", "QMAKE_EXTRA_COMPILERS" },
+        { "QMAKE_EXTRA_UNIX_COMPILERS", "QMAKE_EXTRA_COMPILERS" },
+        { "QMAKE_EXTRA_WIN_TARGETS", "QMAKE_EXTRA_TARGETS" },
+        { "QMAKE_EXTRA_UNIX_TARGETS", "QMAKE_EXTRA_TARGETS" },
+        { "QMAKE_EXTRA_UNIX_INCLUDES", "QMAKE_EXTRA_INCLUDES" },
+        { "QMAKE_EXTRA_UNIX_VARIABLES", "QMAKE_EXTRA_VARIABLES" },
+        { "QMAKE_RPATH", "QMAKE_LFLAGS_RPATH" },
+        { "QMAKE_FRAMEWORKDIR", "QMAKE_FRAMEWORKPATH" },
+        { "QMAKE_FRAMEWORKDIR_FLAGS", "QMAKE_FRAMEWORKPATH_FLAGS" }
+    };
+    for (unsigned i = 0; i < sizeof(mapInits)/sizeof(mapInits[0]); ++i)
+        statics.varMap.insert(QLatin1String(mapInits[i].oldname),
+                              QLatin1String(mapInits[i].newname));
+}
+
+QString ProFileEvaluator::Private::map(const QString &var)
+{
+    return statics.varMap.value(var, var);
 }
 
 
@@ -783,7 +817,7 @@ ProVariable *ProFileEvaluator::Private::startVariable(ushort *uc, ushort *ptr)
         --ptr;
 
   skipTrunc:
-    ProVariable *variable = new ProVariable(QString((QChar*)uc, ptr - uc));
+    ProVariable *variable = new ProVariable(map(QString((QChar*)uc, ptr - uc)));
     variable->setLineNumber(m_lineNo);
     variable->setVariableOperator(opkind);
     return variable;
@@ -1746,7 +1780,7 @@ QStringList ProFileEvaluator::Private::expandVariableReferences(
                 } else if (var_type == FUNCTION) {
                     replacement << evaluateExpandFunction(var, args);
                 } else if (var_type == VAR) {
-                    replacement = values(var);
+                    replacement = values(map(var));
                 }
                 if (!replacement.isEmpty()) {
                     if (quote) {
@@ -1952,10 +1986,10 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun
             if (!var.isNull()) {
                 if (regexp) {
                     QRegExp sepRx(sep);
-                    foreach (const QString &str, values(var))
+                    foreach (const QString &str, values(map(var)))
                         ret += str.section(sepRx, beg, end);
                 } else {
-                    foreach (const QString &str, values(var))
+                    foreach (const QString &str, values(map(var)))
                         ret += str.section(sep, beg, end);
                 }
             }
@@ -1982,7 +2016,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun
                     before = args[2];
                 if (args.count() == 4)
                     after = args[3];
-                const QStringList &var = values(args.first());
+                const QStringList &var = values(map(args.first()));
                 if (!var.isEmpty())
                     ret.append(before + var.join(glue) + after);
             }
@@ -1993,7 +2027,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun
                 logMessage(format("split(var, sep) requires one or two arguments"));
             } else {
                 const QString &sep = (args.count() == 2) ? args[1] : statics.field_sep;
-                foreach (const QString &var, values(args.first()))
+                foreach (const QString &var, values(map(args.first())))
                     foreach (const QString &splt, var.split(sep))
                         ret.append(splt);
             }
@@ -2003,7 +2037,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun
                 logMessage(format("member(var, start, end) requires one to three arguments."));
             } else {
                 bool ok = true;
-                const QStringList var = values(args.first());
+                const QStringList &var = values(map(args.first()));
                 int start = 0, end = 0;
                 if (args.count() >= 2) {
                     QString start_str = args[1];
@@ -2051,7 +2085,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun
             if (args.count() != 1) {
                 logMessage(format("%1(var) requires one argument.").arg(func));
             } else {
-                const QStringList var = values(args.first());
+                const QStringList var = values(map(args.first()));
                 if (!var.isEmpty()) {
                     if (func_t == E_FIRST)
                         ret.append(var[0]);
@@ -2095,7 +2129,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun
             if (args.count() != 1) {
                 logMessage(format("eval(variable) requires one argument"));
             } else {
-                ret += values(args.at(0));
+                ret += values(map(args.at(0)));
             }
             break;
         case E_LIST: {
@@ -2112,7 +2146,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun
                 logMessage(format("find(var, str) requires two arguments."));
             } else {
                 QRegExp regx(args[1]);
-                foreach (const QString &val, values(args.first()))
+                foreach (const QString &val, values(map(args.first())))
                     if (regx.indexIn(val) != -1)
                         ret += val;
             }
@@ -2151,7 +2185,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun
             if(args.count() != 1) {
                 logMessage(format("unique(var) requires one argument."));
             } else {
-                ret = values(args.first());
+                ret = values(map(args.first()));
                 ret.removeDuplicates();
             }
             break;
@@ -2250,7 +2284,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun
             } else {
                 const QRegExp before(args[1]);
                 const QString after(args[2]);
-                foreach (QString val, values(args.first()))
+                foreach (QString val, values(map(args.first())))
                     ret += val.replace(before, after);
             }
             break;
@@ -2344,29 +2378,31 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
                 return ProItem::ReturnFalse;
             }
             return ProItem::ReturnReturn;
-        case T_EXPORT:
+        case T_EXPORT: {
             if (m_skipLevel && !m_cumulative)
                 return ProItem::ReturnTrue;
             if (args.count() != 1) {
                 logMessage(format("export(variable) requires one argument."));
                 return ProItem::ReturnFalse;
             }
+            const QString &var = map(args.at(0));
             for (int i = m_valuemapStack.size(); --i > 0; ) {
-                QHash<QString, QStringList>::Iterator it = m_valuemapStack[i].find(args.at(0));
+                QHash<QString, QStringList>::Iterator it = m_valuemapStack[i].find(var);
                 if (it != m_valuemapStack.at(i).end()) {
                     if (it->constBegin() == statics.fakeValue.constBegin()) {
                         // This is stupid, but qmake doesn't propagate deletions
-                        m_valuemapStack[0][args.at(0)] = QStringList();
+                        m_valuemapStack[0][var] = QStringList();
                     } else {
-                        m_valuemapStack[0][args.at(0)] = *it;
+                        m_valuemapStack[0][var] = *it;
                     }
                     m_valuemapStack[i].erase(it);
                     while (--i)
-                        m_valuemapStack[i].remove(args.at(0));
+                        m_valuemapStack[i].remove(var);
                     break;
                 }
             }
             return ProItem::ReturnTrue;
+        }
         case T_INFILE:
             if (args.count() < 2 || args.count() > 3) {
                 logMessage(format("infile(file, var, [values]) requires two or three arguments."));
@@ -2423,10 +2459,10 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
                 }
                 it_list = statics.strforever;
             } else {
-                loop.variable = args[0];
+                loop.variable = map(args.at(0));
                 loop.oldVarVal = valuesDirect(loop.variable);
                 doVariableReplace(&args[1]);
-                it_list = args[1];
+                it_list = map(args.at(1));
             }
             loop.list = valuesDirect(it_list);
             if (loop.list.isEmpty()) {
@@ -2581,7 +2617,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
             QRegExp regx;
             if (qry != QRegExp::escape(qry))
                 regx.setPattern(qry);
-            const QStringList &l = values(args.first());
+            const QStringList &l = values(map(args.first()));
             if (args.count() == 2) {
                 for (int i = 0; i < l.size(); ++i) {
                     const QString val = l[i];
@@ -2607,7 +2643,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
                 logMessage(format("count(var, count, op=\"equals\") requires two or three arguments."));
                 return ProItem::ReturnFalse;
             }
-            int cnt = values(args.first()).count();
+            int cnt = values(map(args.first())).count();
             if (args.count() == 3) {
                 QString comp = args[2];
                 if (comp == QLatin1String(">") || comp == QLatin1String("greaterThan")) {
@@ -2634,7 +2670,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
                 logMessage(format("%1(variable, value) requires two arguments.").arg(function));
                 return ProItem::ReturnFalse;
             }
-            QString rhs(args[1]), lhs(values(args[0]).join(statics.field_sep));
+            QString rhs(args[1]), lhs(values(map(args.at(0))).join(statics.field_sep));
             bool ok;
             int rhs_int = rhs.toInt(&ok);
             if (ok) { // do integer compare
@@ -2654,7 +2690,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
                 logMessage(format("%1(variable, value) requires two arguments.").arg(function));
                 return ProItem::ReturnFalse;
             }
-            return returnBool(values(args[0]).join(statics.field_sep) == args[1]);
+            return returnBool(values(map(args.at(0))).join(statics.field_sep) == args.at(1));
         case T_CLEAR: {
             if (m_skipLevel && !m_cumulative)
                 return ProItem::ReturnFalse;
@@ -2664,12 +2700,13 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
             }
             QHash<QString, QStringList> *hsh;
             QHash<QString, QStringList>::Iterator it;
-            if (!(hsh = findValues(args.at(0), &it)))
+            const QString &var = map(args.at(0));
+            if (!(hsh = findValues(var, &it)))
                 return ProItem::ReturnFalse;
             if (hsh == &m_valuemapStack.top())
                 it->clear();
             else
-                m_valuemapStack.top()[args.at(0)].clear();
+                m_valuemapStack.top()[var].clear();
             return ProItem::ReturnTrue;
         }
         case T_UNSET: {
@@ -2681,14 +2718,15 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
             }
             QHash<QString, QStringList> *hsh;
             QHash<QString, QStringList>::Iterator it;
-            if (!(hsh = findValues(args.at(0), &it)))
+            const QString &var = map(args.at(0));
+            if (!(hsh = findValues(var, &it)))
                 return ProItem::ReturnFalse;
             if (m_valuemapStack.size() == 1)
                 hsh->erase(it);
             else if (hsh == &m_valuemapStack.top())
                 *it = statics.fakeValue;
             else
-                m_valuemapStack.top()[args.at(0)] = statics.fakeValue;
+                m_valuemapStack.top()[var] = statics.fakeValue;
             return ProItem::ReturnTrue;
         }
         case T_INCLUDE: {
@@ -2763,7 +2801,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
                 logMessage(format("isEmpty(var) requires one argument."));
                 return ProItem::ReturnFalse;
             }
-            QStringList sl = values(args.first());
+            QStringList sl = values(map(args.first()));
             if (sl.count() == 0) {
                 return ProItem::ReturnTrue;
             } else if (sl.count() > 0) {