diff --git a/src/shared/proparser/qmakebuiltins.cpp b/src/shared/proparser/qmakebuiltins.cpp
index 006c06e2d991efb6fd4089958eed81bb8bd33d1d..3a6931a1d785309d21ca4dfe86909f72cf946857 100644
--- a/src/shared/proparser/qmakebuiltins.cpp
+++ b/src/shared/proparser/qmakebuiltins.cpp
@@ -969,12 +969,13 @@ ProStringList QMakeEvaluator::evaluateExpandFunction(
                     .absoluteFilePath(args.at(0).toQString(m_tmp1)))).setSource(args.at(0));
         break;
     case E_RELATIVE_PATH:
-        if (args.count() > 2)
+        if (args.count() > 2) {
             evalError(fL1S("relative_path(path[, base]) requires one or two arguments."));
-        else
-            ret << ProString(QDir::cleanPath(
-                    QDir(args.count() > 1 ? args.at(1).toQString(m_tmp2) : currentDirectory())
-                    .relativeFilePath(args.at(0).toQString(m_tmp1)))).setSource(args.at(0));
+        } else {
+            QDir baseDir(args.count() > 1 ? args.at(1).toQString(m_tmp2) : currentDirectory());
+            ret << ProString(baseDir.relativeFilePath(baseDir.absoluteFilePath(
+                                args.at(0).toQString(m_tmp1)))).setSource(args.at(0));
+        }
         break;
     case E_CLEAN_PATH:
         if (args.count() != 1)