forked from qt-creator/qt-creator
QmlProject: Resolve import paths relative to target directory
On desktop the target directory is the same as the source directory. On remote devices, it can be different. We need to resolve when we know where to deploy. Change-Id: I3f2bc088476ae73dac5231cb24f277c055f7d044 Task-number: QTCREATORBUG-19888 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -47,8 +47,6 @@ void QmlProjectItem::setSourceDirectory(const QString &directoryPath)
|
|||||||
this, &QmlProjectItem::qmlFilesChanged);
|
this, &QmlProjectItem::qmlFilesChanged);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setImportPaths(m_importPaths);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlProjectItem::setTargetDirectory(const QString &directoryPath)
|
void QmlProjectItem::setTargetDirectory(const QString &directoryPath)
|
||||||
@@ -60,17 +58,6 @@ void QmlProjectItem::setImportPaths(const QStringList &importPaths)
|
|||||||
{
|
{
|
||||||
if (m_importPaths != importPaths)
|
if (m_importPaths != importPaths)
|
||||||
m_importPaths = importPaths;
|
m_importPaths = importPaths;
|
||||||
|
|
||||||
// convert to absolute paths
|
|
||||||
QStringList absoluteImportPaths;
|
|
||||||
const QDir sourceDir(sourceDirectory());
|
|
||||||
foreach (const QString &importPath, importPaths)
|
|
||||||
absoluteImportPaths += QDir::cleanPath(sourceDir.absoluteFilePath(importPath));
|
|
||||||
|
|
||||||
if (m_absoluteImportPaths == absoluteImportPaths)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_absoluteImportPaths = absoluteImportPaths;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns list of absolute paths */
|
/* Returns list of absolute paths */
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ public:
|
|||||||
QString targetDirectory() const { return m_targetDirectory; }
|
QString targetDirectory() const { return m_targetDirectory; }
|
||||||
void setTargetDirectory(const QString &directoryPath);
|
void setTargetDirectory(const QString &directoryPath);
|
||||||
|
|
||||||
QStringList importPaths() const { return m_absoluteImportPaths; }
|
QStringList importPaths() const { return m_importPaths; }
|
||||||
void setImportPaths(const QStringList &paths);
|
void setImportPaths(const QStringList &paths);
|
||||||
|
|
||||||
QStringList files() const;
|
QStringList files() const;
|
||||||
@@ -72,7 +72,6 @@ protected:
|
|||||||
QString m_sourceDirectory;
|
QString m_sourceDirectory;
|
||||||
QString m_targetDirectory;
|
QString m_targetDirectory;
|
||||||
QStringList m_importPaths;
|
QStringList m_importPaths;
|
||||||
QStringList m_absoluteImportPaths;
|
|
||||||
QString m_mainFile;
|
QString m_mainFile;
|
||||||
QList<Utils::EnvironmentItem> m_environment;
|
QList<Utils::EnvironmentItem> m_environment;
|
||||||
QList<QmlProjectContentItem *> m_content; // content property
|
QList<QmlProjectContentItem *> m_content; // content property
|
||||||
|
|||||||
@@ -121,22 +121,35 @@ QString QmlProjectRunConfiguration::executable() const
|
|||||||
return qmlscene.isEmpty() ? QString("qmlscene") : qmlscene;
|
return qmlscene.isEmpty() ? QString("qmlscene") : qmlscene;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QStringList makeAbsolute(const Utils::FileName &path, const QStringList &relativePaths)
|
||||||
|
{
|
||||||
|
if (path.isEmpty())
|
||||||
|
return relativePaths;
|
||||||
|
|
||||||
|
const QDir baseDir(path.toString());
|
||||||
|
return Utils::transform(relativePaths, [&baseDir](const QString &path) {
|
||||||
|
return QDir::cleanPath(baseDir.absoluteFilePath(path));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
QString QmlProjectRunConfiguration::commandLineArguments() const
|
QString QmlProjectRunConfiguration::commandLineArguments() const
|
||||||
{
|
{
|
||||||
// arguments in .user file
|
// arguments in .user file
|
||||||
QString args = m_qmlViewerArgs;
|
QString args = m_qmlViewerArgs;
|
||||||
const IDevice::ConstPtr device = DeviceKitInformation::device(target()->kit());
|
const Target *currentTarget = target();
|
||||||
|
const IDevice::ConstPtr device = DeviceKitInformation::device(currentTarget->kit());
|
||||||
const Utils::OsType osType = device ? device->osType() : Utils::HostOsInfo::hostOs();
|
const Utils::OsType osType = device ? device->osType() : Utils::HostOsInfo::hostOs();
|
||||||
|
|
||||||
// arguments from .qmlproject file
|
// arguments from .qmlproject file
|
||||||
QmlProject *project = static_cast<QmlProject *>(target()->project());
|
const QmlProject *project = static_cast<QmlProject *>(currentTarget->project());
|
||||||
foreach (const QString &importPath, project->customImportPaths()) {
|
foreach (const QString &importPath,
|
||||||
|
makeAbsolute(project->targetDirectory(currentTarget), project->customImportPaths())) {
|
||||||
Utils::QtcProcess::addArg(&args, QLatin1String("-I"), osType);
|
Utils::QtcProcess::addArg(&args, QLatin1String("-I"), osType);
|
||||||
Utils::QtcProcess::addArg(&args, importPath, osType);
|
Utils::QtcProcess::addArg(&args, importPath, osType);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString main
|
const QString main = project->targetFile(Utils::FileName::fromString(mainScript()),
|
||||||
= project->targetFile(Utils::FileName::fromString(mainScript()), target()).toString(); ;
|
currentTarget).toString();
|
||||||
if (!main.isEmpty())
|
if (!main.isEmpty())
|
||||||
Utils::QtcProcess::addArg(&args, main, osType);
|
Utils::QtcProcess::addArg(&args, main, osType);
|
||||||
return args;
|
return args;
|
||||||
|
|||||||
Reference in New Issue
Block a user