From a67e88993b705a2f30e8dfbd954bd4c385d85abd Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Mon, 29 Mar 2010 15:17:04 +0200 Subject: [PATCH] Add LIBS-paths to PATH before running on windows. On windows when linking to a library via -L/some/path, the library is found in /some/path while linking. But running that app fails, since it can't find the library. We now adjust PATH to include all paths from LIBS and thus the library is found. --- src/plugins/qt4projectmanager/qt4nodes.cpp | 12 ++++++++++++ src/plugins/qt4projectmanager/qt4nodes.h | 4 +++- .../qt4projectmanager/qt4runconfiguration.cpp | 10 ++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index fc705baeaed..5181329c146 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -1177,6 +1177,7 @@ void Qt4ProFileNode::applyEvaluate(bool parseResult, bool async) m_projectDir, QStringList() << m_projectDir, 0); + newVarValues[LibDirectoriesVar] = libDirectories(m_readerExact); if (m_varValues != newVarValues) { m_varValues = newVarValues; @@ -1355,6 +1356,17 @@ QStringList Qt4ProFileNode::includePaths(ProFileReader *reader) const return paths; } +QStringList Qt4ProFileNode::libDirectories(ProFileReader *reader) const +{ + QStringList result; + foreach (const QString &str, reader->values(QLatin1String("LIBS"))) { + if (str.startsWith("-L")) { + result.append(str.mid(2)); + } + } + return result; +} + QStringList Qt4ProFileNode::subDirsPaths(ProFileReader *reader) const { QStringList subProjectPaths; diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h index c48de9d0c7c..3d77805870e 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.h +++ b/src/plugins/qt4projectmanager/qt4nodes.h @@ -91,7 +91,8 @@ enum Qt4Variable { UiDirVar, MocDirVar, PkgConfigVar, - PrecompiledHeaderVar + PrecompiledHeaderVar, + LibDirectoriesVar }; class Qt4PriFileNode; @@ -277,6 +278,7 @@ private: QStringList uiDirPaths(ProFileReader *reader) const; QStringList mocDirPaths(ProFileReader *reader) const; QStringList includePaths(ProFileReader *reader) const; + QStringList libDirectories(ProFileReader *reader) const; QStringList subDirsPaths(ProFileReader *reader) const; TargetInformation targetInformation(ProFileReader *reader) const; diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index 826ab256a98..25ef2e71d9f 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -550,6 +550,16 @@ ProjectExplorer::Environment Qt4RunConfiguration::baseEnvironment() const if (m_isUsingDyldImageSuffix) { env.set("DYLD_IMAGE_SUFFIX", "_debug"); } + +#ifdef Q_OS_WIN + // On windows the user could be linking to a library found via a -L/some/dir switch + // to find those libraries while actually running we explicitly prepend those + // dirs to the path + Qt4ProFileNode *node = qt4Target()->qt4Project()->rootProjectNode()->findProFileFor(m_proFilePath); + if (node) + foreach(const QString dir, node->variableValue(LibDirectoriesVar)) + env.prependOrSetPath(dir); +#endif return env; } -- GitLab