From aa2ea72679fad9fe570f8bcee8ad32273e7489aa Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Sat, 17 Mar 2018 09:37:58 +0200 Subject: [PATCH] Add stdcpp NDK paths to soLibSearchPath It's useful when the application uses std::abort & co to get a useful callstack. Change-Id: I805478333bac3eba21db158df52942599a80c088 Reviewed-by: Vikas Pachdha --- src/plugins/android/androidqtsupport.cpp | 2 +- src/plugins/android/androidqtsupport.h | 6 ++-- .../qmakeandroidsupport.cpp | 31 ++++++++++++++----- .../qmakeandroidsupport/qmakeandroidsupport.h | 4 +-- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/plugins/android/androidqtsupport.cpp b/src/plugins/android/androidqtsupport.cpp index 1e3aa8ce7d5..012aa696e2d 100644 --- a/src/plugins/android/androidqtsupport.cpp +++ b/src/plugins/android/androidqtsupport.cpp @@ -30,7 +30,7 @@ #include -Utils::FileName Android::AndroidQtSupport::apkPath(ProjectExplorer::Target *target) const +Utils::FileName Android::AndroidQtSupport::apkPath(const ProjectExplorer::Target *target) const { if (!target) return Utils::FileName(); diff --git a/src/plugins/android/androidqtsupport.h b/src/plugins/android/androidqtsupport.h index df2db99551c..83cd3eb0d37 100644 --- a/src/plugins/android/androidqtsupport.h +++ b/src/plugins/android/androidqtsupport.h @@ -60,9 +60,9 @@ public: 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; - virtual Utils::FileName androiddeployJsonPath(ProjectExplorer::Target *target) const = 0; + virtual Utils::FileName apkPath(const ProjectExplorer::Target *target) const; + virtual Utils::FileName androiddeployqtPath(const ProjectExplorer::Target *target) const = 0; + virtual Utils::FileName androiddeployJsonPath(const ProjectExplorer::Target *target) const = 0; virtual void manifestSaved(const ProjectExplorer::Target *target) = 0; virtual Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) = 0; }; diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp index 92f1a5d3f6d..61df6401d2e 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp @@ -34,6 +34,10 @@ #include #include +#include +#include +#include + using namespace QmakeProjectManager; namespace QmakeAndroidSupport { @@ -46,25 +50,36 @@ bool QmakeAndroidSupport::canHandle(const ProjectExplorer::Target *target) const QStringList QmakeAndroidSupport::soLibSearchPath(const ProjectExplorer::Target *target) const { - QStringList res; + QSet res; QmakeProject *project = qobject_cast(target->project()); Q_ASSERT(project); if (!project) - return res; + return {}; foreach (QmakeProFile *file, project->allProFiles()) { TargetInformation info = file->targetInformation(); - res << info.buildDir.toString(); + res.insert(info.buildDir.toString()); Utils::FileName destDir = info.destDir; if (!destDir.isEmpty()) { if (destDir.toFileInfo().isRelative()) destDir = Utils::FileName::fromString(QDir::cleanPath(info.buildDir.toString() + '/' + destDir.toString())); - res << destDir.toString(); + res.insert(destDir.toString()); + } + QFile deploymentSettings(androiddeployJsonPath(target).toString()); + if (deploymentSettings.open(QIODevice::ReadOnly)) { + QJsonParseError error; + QJsonDocument doc = QJsonDocument::fromJson(deploymentSettings.readAll(), &error); + if (error.error != QJsonParseError::NoError) + continue; + + auto rootObj = doc.object(); + auto it = rootObj.find("stdcpp-path"); + if (it != rootObj.constEnd()) + res.insert(QFileInfo(it.value().toString()).absolutePath()); } } - - return res; + return res.toList(); } QStringList QmakeAndroidSupport::androidExtraLibs(const ProjectExplorer::Target *target) const @@ -97,7 +112,7 @@ QStringList QmakeAndroidSupport::projectTargetApplications(const ProjectExplorer return apps; } -Utils::FileName QmakeAndroidSupport::androiddeployqtPath(ProjectExplorer::Target *target) const +Utils::FileName QmakeAndroidSupport::androiddeployqtPath(const ProjectExplorer::Target *target) const { QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit()); if (!version) @@ -110,7 +125,7 @@ Utils::FileName QmakeAndroidSupport::androiddeployqtPath(ProjectExplorer::Target return Utils::FileName::fromString(command); } -Utils::FileName QmakeAndroidSupport::androiddeployJsonPath(ProjectExplorer::Target *target) const +Utils::FileName QmakeAndroidSupport::androiddeployJsonPath(const ProjectExplorer::Target *target) const { const auto *pro = static_cast(target->project()); QmakeAndroidBuildApkStep *buildApkStep diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h index 52557f1881f..a5a3cef3492 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h +++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h @@ -39,8 +39,8 @@ public: QStringList soLibSearchPath(const ProjectExplorer::Target *target) const override; QStringList androidExtraLibs(const ProjectExplorer::Target *target) const override; QStringList projectTargetApplications(const ProjectExplorer::Target *target) const override; - Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const override; - Utils::FileName androiddeployJsonPath(ProjectExplorer::Target *target) const override; + Utils::FileName androiddeployqtPath(const ProjectExplorer::Target *target) const override; + Utils::FileName androiddeployJsonPath(const ProjectExplorer::Target *target) const override; void manifestSaved(const ProjectExplorer::Target *target) override; Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) override;