From 54a04e68b98b88109751f07223d976614546d2a3 Mon Sep 17 00:00:00 2001
From: Marco Benelli <marco.benelli@qt.io>
Date: Wed, 21 Sep 2016 09:00:05 +0200
Subject: [PATCH] QmlJs: qmlplugindump working directory

Use the plugin's parent path as working directory for the qmlplugindump
process.  This should be more reliable with regards to paths that
include symbolic links to shared or remote volumes.
Using the plugin's parent path will also be needed in order to handle
relative paths passed to the dumper (ie: with the -dependencies
option). This feature is not yet implemented in QtCreator.

Change-Id: I9c863a95d03fc7d03c84e704e39f2e0520aaa01e
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@theqtcompany.com>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
---
 src/libs/qmljs/qmljsplugindumper.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/libs/qmljs/qmljsplugindumper.cpp b/src/libs/qmljs/qmljsplugindumper.cpp
index 8ef89ebb431..16d84290a71 100644
--- a/src/libs/qmljs/qmljsplugindumper.cpp
+++ b/src/libs/qmljs/qmljsplugindumper.cpp
@@ -515,8 +515,12 @@ void PluginDumper::loadQmltypesFile(const QStringList &qmltypesFilePaths,
 void PluginDumper::runQmlDump(const QmlJS::ModelManagerInterface::ProjectInfo &info,
     const QStringList &arguments, const QString &importPath)
 {
+    QDir wd = QDir(importPath);
+    wd.cdUp();
     QProcess *process = new QProcess(this);
     process->setEnvironment(info.qmlDumpEnvironment.toStringList());
+    QString workingDir = wd.canonicalPath();
+    process->setWorkingDirectory(workingDir);
     connect(process, static_cast<void (QProcess::*)(int)>(&QProcess::finished),
             this, &PluginDumper::qmlPluginTypeDumpDone);
     connect(process, static_cast<void (QProcess::*)(QProcess::ProcessError)>(&QProcess::error),
@@ -567,7 +571,7 @@ void PluginDumper::dump(const Plugin &plugin)
         args << QLatin1String("-nonrelocatable");
     args << plugin.importUri;
     args << plugin.importVersion;
-    args << plugin.importPath;
+    args << (plugin.importPath.isEmpty() ? QLatin1String(".") : plugin.importPath);
     runQmlDump(info, args, plugin.qmldirPath);
 }
 
-- 
GitLab