diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp index fc8441d1a7b..5ffa90296ab 100644 --- a/src/libs/utils/pathchooser.cpp +++ b/src/libs/utils/pathchooser.cpp @@ -330,6 +330,20 @@ FileName PathChooser::fileName() const return FileName::fromString(path()); } +// FIXME: try to remove again +QString PathChooser::expandedDirectory(const QString &input, const Environment &env, + const QString &baseDir) +{ + if (input.isEmpty()) + return input; + const QString path = QDir::cleanPath(env.expandVariables(input)); + if (path.isEmpty()) + return path; + if (!baseDir.isEmpty() && QFileInfo(path).isRelative()) + return QFileInfo(baseDir + QLatin1Char('/') + path).absoluteFilePath(); + return path; +} + void PathChooser::setPath(const QString &path) { d->m_lineEdit->setText(QDir::toNativeSeparators(path)); diff --git a/src/libs/utils/pathchooser.h b/src/libs/utils/pathchooser.h index 99be42efd07..344cc9255f1 100644 --- a/src/libs/utils/pathchooser.h +++ b/src/libs/utils/pathchooser.h @@ -96,6 +96,9 @@ public: FileName rawFileName() const; // The raw unexpanded input. FileName fileName() const; + static QString expandedDirectory(const QString &input, const Utils::Environment &env, + const QString &baseDir); + QString baseDirectory() const; void setBaseDirectory(const QString &directory); diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp index 8ce854712a0..1ca95da8e4e 100644 --- a/src/plugins/projectexplorer/runconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp @@ -204,11 +204,20 @@ void WorkingDirectoryAspect::toMap(QVariantMap &data) const FileName WorkingDirectoryAspect::workingDirectory() const { - QTC_ASSERT(m_chooser, return m_defaultWorkingDirectory); if (m_workingDirectory.isEmpty()) return m_defaultWorkingDirectory; - return FileName::fromString( + + if (m_chooser) { + return FileName::fromString( runConfiguration()->macroExpander()->expandProcessArgs(m_chooser->path())); + } else { + auto envAspect = runConfiguration()->extraAspect(); + const Utils::Environment env = envAspect ? envAspect->environment() + : Utils::Environment::systemEnvironment(); + return FileName::fromString( + runConfiguration()->macroExpander()->expandProcessArgs( + PathChooser::expandedDirectory(m_workingDirectory.toString(), env, QString()))); + } } FileName WorkingDirectoryAspect::defaultWorkingDirectory() const