From 286325ceb625b0cc1a40de4f56b73cdc4bcc726e Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Wed, 13 May 2009 18:09:47 +0200
Subject: [PATCH] Add includes to the codemodel specified via PKGCONFIG in .pro
 files

We run pkg-config --cflags-only-I $$PKGCONFIG in the background to find
those includes.

Task-Nr: 250195
---
 src/plugins/qt4projectmanager/qt4nodes.cpp   |  1 +
 src/plugins/qt4projectmanager/qt4nodes.h     |  3 ++-
 src/plugins/qt4projectmanager/qt4project.cpp | 16 +++++++++++++++-
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index 3693b5abe84..1080bad90a6 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -719,6 +719,7 @@ void Qt4ProFileNode::update()
     newVarValues[IncludePathVar] = includePaths(reader);
     newVarValues[UiDirVar] = uiDirPaths(reader);
     newVarValues[MocDirVar] = mocDirPaths(reader);
+    newVarValues[PkgConfigVar] = reader->values(QLatin1String("PKGCONFIG"));
 
     if (m_varValues != newVarValues) {
         m_varValues = newVarValues;
diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h
index 9200ac101bd..f5599e90b61 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.h
+++ b/src/plugins/qt4projectmanager/qt4nodes.h
@@ -99,7 +99,8 @@ enum Qt4Variable {
     IncludePathVar,
     CxxCompilerVar,
     UiDirVar,
-    MocDirVar
+    MocDirVar,
+    PkgConfigVar
 };
 
 class Qt4PriFileNode;
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 6063992b6ed..a03e12b1fd1 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -527,13 +527,27 @@ void Qt4Project::updateCodeModel()
         }
 
         const QStringList proIncludePaths = pro->variableValue(IncludePathVar);
-        foreach (QString includePath, proIncludePaths) {
+        foreach (const QString &includePath, proIncludePaths) {
             if (!allIncludePaths.contains(includePath))
                 allIncludePaths.append(includePath);
             if (!info.includes.contains(includePath))
                 info.includes.append(includePath);
         }
 
+        { // Pkg Config support
+            QStringList pkgConfig = pro->variableValue(PkgConfigVar);
+            if (!pkgConfig.isEmpty()) {
+                pkgConfig.prepend("--cflags-only-I");
+                QProcess process;
+                process.start("pkg-config", pkgConfig);
+                process.waitForFinished();
+                QString result = process.readAllStandardOutput();
+                foreach(const QString &part, result.trimmed().split(' ', QString::SkipEmptyParts)) {
+                    info.includes.append(part.mid(2)); // Chop off "-I"
+                }
+            }
+        }
+
         // Add mkspec directory
         info.includes.append(qtVersion(activeBuildConfiguration())->mkspecPath());
 
-- 
GitLab