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 <vikas.pachdha@qt.io>
This commit is contained in:
BogDan Vatra
2018-03-17 09:37:58 +02:00
parent 2e25ce32cb
commit aa2ea72679
4 changed files with 29 additions and 14 deletions

View File

@@ -30,7 +30,7 @@
#include <projectexplorer/target.h> #include <projectexplorer/target.h>
Utils::FileName Android::AndroidQtSupport::apkPath(ProjectExplorer::Target *target) const Utils::FileName Android::AndroidQtSupport::apkPath(const ProjectExplorer::Target *target) const
{ {
if (!target) if (!target)
return Utils::FileName(); return Utils::FileName();

View File

@@ -60,9 +60,9 @@ public:
virtual QStringList soLibSearchPath(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 androidExtraLibs(const ProjectExplorer::Target *target) const = 0;
virtual QStringList projectTargetApplications(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 apkPath(const ProjectExplorer::Target *target) const;
virtual Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const = 0; virtual Utils::FileName androiddeployqtPath(const ProjectExplorer::Target *target) const = 0;
virtual Utils::FileName androiddeployJsonPath(ProjectExplorer::Target *target) const = 0; virtual Utils::FileName androiddeployJsonPath(const ProjectExplorer::Target *target) const = 0;
virtual void manifestSaved(const ProjectExplorer::Target *target) = 0; virtual void manifestSaved(const ProjectExplorer::Target *target) = 0;
virtual Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) = 0; virtual Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) = 0;
}; };

View File

@@ -34,6 +34,10 @@
#include <qtsupport/qtkitinformation.h> #include <qtsupport/qtkitinformation.h>
#include <qmakeprojectmanager/qmakeproject.h> #include <qmakeprojectmanager/qmakeproject.h>
#include <QJsonDocument>
#include <QJsonObject>
#include <QRegularExpression>
using namespace QmakeProjectManager; using namespace QmakeProjectManager;
namespace QmakeAndroidSupport { namespace QmakeAndroidSupport {
@@ -46,25 +50,36 @@ bool QmakeAndroidSupport::canHandle(const ProjectExplorer::Target *target) const
QStringList QmakeAndroidSupport::soLibSearchPath(const ProjectExplorer::Target *target) const QStringList QmakeAndroidSupport::soLibSearchPath(const ProjectExplorer::Target *target) const
{ {
QStringList res; QSet<QString> res;
QmakeProject *project = qobject_cast<QmakeProject*>(target->project()); QmakeProject *project = qobject_cast<QmakeProject*>(target->project());
Q_ASSERT(project); Q_ASSERT(project);
if (!project) if (!project)
return res; return {};
foreach (QmakeProFile *file, project->allProFiles()) { foreach (QmakeProFile *file, project->allProFiles()) {
TargetInformation info = file->targetInformation(); TargetInformation info = file->targetInformation();
res << info.buildDir.toString(); res.insert(info.buildDir.toString());
Utils::FileName destDir = info.destDir; Utils::FileName destDir = info.destDir;
if (!destDir.isEmpty()) { if (!destDir.isEmpty()) {
if (destDir.toFileInfo().isRelative()) if (destDir.toFileInfo().isRelative())
destDir = Utils::FileName::fromString(QDir::cleanPath(info.buildDir.toString() destDir = Utils::FileName::fromString(QDir::cleanPath(info.buildDir.toString()
+ '/' + destDir.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;
return res; auto rootObj = doc.object();
auto it = rootObj.find("stdcpp-path");
if (it != rootObj.constEnd())
res.insert(QFileInfo(it.value().toString()).absolutePath());
}
}
return res.toList();
} }
QStringList QmakeAndroidSupport::androidExtraLibs(const ProjectExplorer::Target *target) const QStringList QmakeAndroidSupport::androidExtraLibs(const ProjectExplorer::Target *target) const
@@ -97,7 +112,7 @@ QStringList QmakeAndroidSupport::projectTargetApplications(const ProjectExplorer
return apps; 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()); QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
if (!version) if (!version)
@@ -110,7 +125,7 @@ Utils::FileName QmakeAndroidSupport::androiddeployqtPath(ProjectExplorer::Target
return Utils::FileName::fromString(command); 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<QmakeProject *>(target->project()); const auto *pro = static_cast<QmakeProject *>(target->project());
QmakeAndroidBuildApkStep *buildApkStep QmakeAndroidBuildApkStep *buildApkStep

View File

@@ -39,8 +39,8 @@ public:
QStringList soLibSearchPath(const ProjectExplorer::Target *target) const override; QStringList soLibSearchPath(const ProjectExplorer::Target *target) const override;
QStringList androidExtraLibs(const ProjectExplorer::Target *target) const override; QStringList androidExtraLibs(const ProjectExplorer::Target *target) const override;
QStringList projectTargetApplications(const ProjectExplorer::Target *target) const override; QStringList projectTargetApplications(const ProjectExplorer::Target *target) const override;
Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const override; Utils::FileName androiddeployqtPath(const ProjectExplorer::Target *target) const override;
Utils::FileName androiddeployJsonPath(ProjectExplorer::Target *target) const override; Utils::FileName androiddeployJsonPath(const ProjectExplorer::Target *target) const override;
void manifestSaved(const ProjectExplorer::Target *target) override; void manifestSaved(const ProjectExplorer::Target *target) override;
Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) override; Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) override;