forked from qt-creator/qt-creator
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:
@@ -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();
|
||||||
|
@@ -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;
|
||||||
};
|
};
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user