From f3262b4ddcb1a15695892c834e965b66586b3f3f Mon Sep 17 00:00:00 2001
From: BogDan Vatra <bogdan@kdab.com>
Date: Sat, 16 Jan 2016 16:32:28 +0200
Subject: [PATCH] Add androidExtraLibs paths to solibSearchPath

Change-Id: I6935681fd22350f7ab849a0ad2ca34d473a0b95b
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
---
 src/plugins/android/androiddebugsupport.cpp           |  9 +++++++++
 src/plugins/android/androidqtsupport.h                |  1 +
 .../qmakeandroidsupport/qmakeandroidsupport.cpp       | 11 +++++++++++
 src/plugins/qmakeandroidsupport/qmakeandroidsupport.h |  1 +
 4 files changed, 22 insertions(+)

diff --git a/src/plugins/android/androiddebugsupport.cpp b/src/plugins/android/androiddebugsupport.cpp
index d4911d4f160..a8d87a5ec3f 100644
--- a/src/plugins/android/androiddebugsupport.cpp
+++ b/src/plugins/android/androiddebugsupport.cpp
@@ -81,6 +81,14 @@ static QStringList qtSoPaths(QtSupport::BaseQtVersion *qtVersion)
     return paths.toList();
 }
 
+static QStringList uniquePaths(const QStringList &files)
+{
+    QSet<QString> paths;
+    foreach (const QString &file, files)
+        paths<<QFileInfo(file).absolutePath();
+    return paths.toList();
+}
+
 RunControl *AndroidDebugSupport::createDebugRunControl(AndroidRunConfiguration *runConfig, QString *errorMessage)
 {
     Target *target = runConfig->target();
@@ -99,6 +107,7 @@ RunControl *AndroidDebugSupport::createDebugRunControl(AndroidRunConfiguration *
         params.solibSearchPath = AndroidManager::androidQtSupport(target)->soLibSearchPath(target);
         QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(kit);
         params.solibSearchPath.append(qtSoPaths(version));
+        params.solibSearchPath.append(uniquePaths(AndroidManager::androidQtSupport(target)->androidExtraLibs(target)));
     }
     if (aspect->useQmlDebugger()) {
         QTcpServer server;
diff --git a/src/plugins/android/androidqtsupport.h b/src/plugins/android/androidqtsupport.h
index b6e2867f5a5..f6aaca184de 100644
--- a/src/plugins/android/androidqtsupport.h
+++ b/src/plugins/android/androidqtsupport.h
@@ -61,6 +61,7 @@ public:
 public:
     virtual bool canHandle(const ProjectExplorer::Target *target) const = 0;
     virtual QStringList soLibSearchPath(const ProjectExplorer::Target *target) const = 0;
+    virtual QStringList androidExtraLibs(const ProjectExplorer::Target *target) const = 0;
     virtual QStringList projectTargetApplications(const ProjectExplorer::Target *target) const = 0;
     virtual Utils::FileName apkPath(ProjectExplorer::Target *target) const;
     virtual Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const = 0;
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
index 23b190c2c1a..32bdd7aecc8 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
@@ -72,6 +72,17 @@ QStringList QmakeAndroidSupport::soLibSearchPath(const ProjectExplorer::Target *
     return res;
 }
 
+QStringList QmakeAndroidSupport::androidExtraLibs(const ProjectExplorer::Target *target) const
+{
+    ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration();
+    QmakeAndroidRunConfiguration *qarc = qobject_cast<QmakeAndroidRunConfiguration *>(rc);
+    if (!qarc)
+        return QStringList();
+    auto project = static_cast<QmakeProject *>(target->project());
+    QmakeProFileNode *node = project->rootQmakeProjectNode()->findProFileFor(qarc->proFilePath());
+    return node->variableValue(QmakeProjectManager::AndroidExtraLibs);
+}
+
 QStringList QmakeAndroidSupport::projectTargetApplications(const ProjectExplorer::Target *target) const
 {
     QStringList apps;
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h
index 5c19c9498cb..df0adc9e5b9 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h
@@ -43,6 +43,7 @@ class QmakeAndroidSupport : public Android::AndroidQtSupport
 public:
     bool canHandle(const ProjectExplorer::Target *target) const;
     QStringList soLibSearchPath(const ProjectExplorer::Target *target) const;
+    QStringList androidExtraLibs(const ProjectExplorer::Target *target) const override;
     QStringList projectTargetApplications(const ProjectExplorer::Target *target) const;
     Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const;
     Utils::FileName androiddeployJsonPath(ProjectExplorer::Target *target) const;
-- 
GitLab