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>
Utils::FileName Android::AndroidQtSupport::apkPath(ProjectExplorer::Target *target) const
Utils::FileName Android::AndroidQtSupport::apkPath(const ProjectExplorer::Target *target) const
{
if (!target)
return Utils::FileName();

View File

@@ -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;
};

View File

@@ -34,6 +34,10 @@
#include <qtsupport/qtkitinformation.h>
#include <qmakeprojectmanager/qmakeproject.h>
#include <QJsonDocument>
#include <QJsonObject>
#include <QRegularExpression>
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<QString> res;
QmakeProject *project = qobject_cast<QmakeProject*>(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<QmakeProject *>(target->project());
QmakeAndroidBuildApkStep *buildApkStep

View File

@@ -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;