From 6c5e23f10ed88c1d478a77bab0bf4774b4b479eb Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Tue, 28 Apr 2009 14:30:17 +0200
Subject: [PATCH] Fix $$OUT_PWD not beeing set for finding the target/destdir

Qt Creator wouldn't find the correct target if shadow building a project
that uses $$OUT_PWD, like for example itemviews-ng.
We didn't set the necessary variable on the ProFileReader *, simplified
the code to always use a ProFileReader created for the exact
profilenode.
---
 src/plugins/qt4projectmanager/qt4nodes.cpp         | 14 ++++++++++++--
 src/plugins/qt4projectmanager/qt4nodes.h           |  8 +++++---
 src/plugins/qt4projectmanager/qt4project.cpp       | 12 ------------
 src/plugins/qt4projectmanager/qt4project.h         |  1 -
 .../qt4projectmanager/qt4runconfiguration.cpp      |  3 ++-
 .../qt4projectmanager/qt4runconfiguration.h        |  5 +----
 6 files changed, 20 insertions(+), 23 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index 66c32661c35..985b60aba73 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -48,6 +48,8 @@
 #include <cpptools/cppmodelmanagerinterface.h>
 #include <cplusplus/CppDocument.h>
 #include <extensionsystem/pluginmanager.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/buildmanager.h>
 
 #include <utils/qtcassert.h>
 
@@ -498,8 +500,16 @@ QStringList Qt4PriFileNode::varNames(FileType type)
     return vars;
 }
 
-#include <projectexplorer/projectexplorer.h>
-#include <projectexplorer/buildmanager.h>
+Qt4PriFileNode *Qt4PriFileNode::findProFileFor(const QString &fileName)
+{
+    if (fileName == path())
+        return this;
+    foreach (ProjectNode *pn, subProjectNodes())
+        if (Qt4PriFileNode *qt4PriFileNode = qobject_cast<Qt4PriFileNode *>(pn))
+            if (Qt4PriFileNode *result = qt4PriFileNode->findProFileFor(fileName))
+                return result;
+    return 0;
+}
 
 /*!
   \class Qt4ProFileNode
diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h
index 6da10fd9f47..d527725071f 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.h
+++ b/src/plugins/qt4projectmanager/qt4nodes.h
@@ -123,6 +123,11 @@ public:
     bool renameFile(const FileType fileType,
                     const QString &filePath, const QString &newFilePath);
 
+    Qt4PriFileNode *findProFileFor(const QString &string);
+
+    //internal
+    ProFileReader *createProFileReader() const;
+
 protected:
     void clear();
     static QStringList varNames(FileType type);
@@ -142,7 +147,6 @@ protected:
                      ChangeType change);
 
     QString buildDir() const;
-    ProFileReader *createProFileReader() const;
 
 private slots:
     void scheduleUpdate();
@@ -198,8 +202,6 @@ private:
     QStringList subDirsPaths(ProFileReader *reader) const;
     QStringList qBuildSubDirsPaths(const QString &scanDir)  const;
 
-
-
     void invalidate();
 
     Qt4ProjectType m_projectType;
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index ae6a76ecbc1..0f08672ebe1 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -584,18 +584,6 @@ void Qt4Project::update()
     //updateCodeModel();
 }
 
-ProFileReader *Qt4Project::createProFileReader() const
-{
-    ProFileReader *reader = new ProFileReader();
-    connect(reader, SIGNAL(errorFound(const QString&)),
-            this, SLOT(proFileParseError(const QString&)));
-    QtVersion *version = qtVersion(activeBuildConfiguration());
-    if (version->isValid()) {
-        reader->setQtVersion(version);
-    }
-    return reader;
-}
-
 /*!
   Returns whether the project is an application, or has an application as a subproject.
  */
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index 6801fd0f40a..fc1feac3f29 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -164,7 +164,6 @@ public:
     virtual void newBuildConfiguration(const QString &buildConfiguration);
 
     QList<Internal::Qt4ProFileNode *> applicationProFiles() const;
-    Internal::ProFileReader *createProFileReader() const;
 
     // Those functions arein a few places.
     // The drawback is that we shouldn't actually depend on them beeing always there
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
index abcd410b4d1..a76543e7253 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
@@ -331,7 +331,8 @@ void Qt4RunConfiguration::updateTarget()
         return;
     //qDebug()<<"updateTarget";
     Qt4Project *pro = static_cast<Qt4Project *>(project());
-    ProFileReader *reader = pro->createProFileReader();
+    Qt4PriFileNode * priFileNode = static_cast<Qt4Project *>(project())->rootProjectNode()->findProFileFor(m_proFilePath);
+    ProFileReader *reader = priFileNode->createProFileReader();
     reader->setCumulative(false);
     reader->setQtVersion(pro->qtVersion(pro->activeBuildConfiguration()));
 
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h
index 3b59b65732c..d86f00227fc 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h
@@ -47,9 +47,7 @@ class Qt4Project;
 
 namespace Internal {
 
-class Qt4ProFileNode;
-
-
+class Qt4PriFileNode;
 
 class Qt4RunConfiguration : public ProjectExplorer::ApplicationRunConfiguration
 {
@@ -103,7 +101,6 @@ private slots:
 private:
     void updateTarget();
     QStringList m_commandLineArguments;
-    Qt4ProFileNode *m_proFileNode;
     QString m_proFilePath; // Full path to the Application Pro File
 
     // Cached startup sub project information
-- 
GitLab