From 8be83a173acf1ca0fe7fbb808b5dea5a649a45b7 Mon Sep 17 00:00:00 2001
From: Daniel Teske <daniel.teske@nokia.com>
Date: Thu, 20 Oct 2011 18:37:35 +0000
Subject: [PATCH] Make sure we pass -after arguments after user arguments

Otherwise the user can't pass on normal arguments

Task-number: QTCREATORBUG-6346
Change-Id: I986563a75113a6d5acf601b5ccb63d6a35570bad
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
---
 src/plugins/qt4projectmanager/qmakestep.cpp   | 23 ++++++++++++++-----
 src/plugins/qt4projectmanager/qmakestep.h     |  1 +
 .../qt4buildconfiguration.cpp                 |  2 +-
 3 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp
index 0c36f58bd17..99187607f9d 100644
--- a/src/plugins/qt4projectmanager/qmakestep.cpp
+++ b/src/plugins/qt4projectmanager/qmakestep.cpp
@@ -157,7 +157,11 @@ QString QMakeStep::allArguments(bool shorted)
     arguments << moreArguments();
 
     QString args = Utils::QtcProcess::joinArgs(arguments);
+    // User arguments
     Utils::QtcProcess::addArgs(&args, m_userArgs);
+    // moreArgumentsAfter
+    foreach (const QString &arg, moreArgumentsAfter())
+        Utils::QtcProcess::addArg(&args, arg);
     return args;
 }
 
@@ -195,19 +199,26 @@ QStringList QMakeStep::moreArguments()
         }
     }
 
+
+    return arguments;
+}
+
+QStringList QMakeStep::moreArgumentsAfter()
+{
+    Qt4BuildConfiguration *bc = qt4BuildConfiguration();
     if (bc->qtVersion() && !bc->qtVersion()->supportsShadowBuilds()) {
         // We have a target which does not allow shadow building.
         // But we really don't want to have the build artefacts in the source dir
         // so we try to hack around it, to make the common cases work.
         // This is a HACK, remove once the symbian make generator supports
         // shadow building
-        arguments << QLatin1String("-after")
-                  << QLatin1String("OBJECTS_DIR=obj")
-                  << QLatin1String("MOC_DIR=moc")
-                  << QLatin1String("UI_DIR=ui")
-                  << QLatin1String("RCC_DIR=rcc");
+        return QStringList() << QLatin1String("-after")
+                             << QLatin1String("OBJECTS_DIR=obj")
+                             << QLatin1String("MOC_DIR=moc")
+                             << QLatin1String("UI_DIR=ui")
+                             << QLatin1String("RCC_DIR=rcc");
     }
-    return arguments;
+    return QStringList();
 }
 
 bool QMakeStep::init()
diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h
index 03d8151dc66..fce164d68bd 100644
--- a/src/plugins/qt4projectmanager/qmakestep.h
+++ b/src/plugins/qt4projectmanager/qmakestep.h
@@ -100,6 +100,7 @@ public:
     // TODO clean up those functions
     QString allArguments(bool shorted = false);
     QStringList moreArguments();
+    QStringList moreArgumentsAfter();
     QStringList parserArguments();
     QString userArguments();
     QString mkspec();
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index 9d172accd9a..a92f19e7265 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -494,7 +494,7 @@ bool Qt4BuildConfiguration::compareToImportFrom(const QString &makefile)
                 // This copies the settings from userArgs to actualArgs (minus some we
                 // are not interested in), splitting them up into individual strings:
                 extractSpecFromArguments(&userArgs, workingDirectory, version, &actualArgs),
-                actualArgs += qs->moreArguments();
+                actualArgs = qs->moreArguments() + actualArgs + qs->moreArgumentsAfter();
                 QString actualSpec = qs->mkspec();
 
                 QString qmakeArgs = result.second;
-- 
GitLab