diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2017-09-20 12:53:30 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2017-09-27 07:37:26 +0000 |
commit | 3d8be750b973719424baa7c1c47baa570ff7cdd6 (patch) | |
tree | 2c3cc2e26f626d9fdcb22c6d0675fc8fcdf56dad | |
parent | 8645b278800bb06df5f24034751bde241d23d02f (diff) |
Environment: Use Utils::FileName for path() and related methods
Update users accordingly.
Change-Id: I9432e82308e9d0630514c6c8632aeb6b6ee0cf90
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r-- | src/libs/utils/buildablehelperlibrary.cpp | 6 | ||||
-rw-r--r-- | src/libs/utils/environment.cpp | 40 | ||||
-rw-r--r-- | src/libs/utils/environment.h | 10 | ||||
-rw-r--r-- | src/libs/utils/pathchooser.cpp | 2 | ||||
-rw-r--r-- | src/plugins/android/androidtoolchain.cpp | 15 | ||||
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp | 35 | ||||
-rw-r--r-- | src/plugins/debugger/debuggeritemmanager.cpp | 9 | ||||
-rw-r--r-- | src/plugins/debugger/debuggerkitinformation.cpp | 4 | ||||
-rw-r--r-- | src/plugins/projectexplorer/abstractmsvctoolchain.cpp | 6 | ||||
-rw-r--r-- | src/plugins/projectexplorer/customexecutablerunconfiguration.cpp | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/gcctoolchain.cpp | 8 | ||||
-rw-r--r-- | src/plugins/projectexplorer/processparameters.cpp | 2 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsbaseclientsettings.cpp | 5 |
13 files changed, 72 insertions, 72 deletions
diff --git a/src/libs/utils/buildablehelperlibrary.cpp b/src/libs/utils/buildablehelperlibrary.cpp index 13d3f14f4b..ca50d58bae 100644 --- a/src/libs/utils/buildablehelperlibrary.cpp +++ b/src/libs/utils/buildablehelperlibrary.cpp @@ -73,12 +73,12 @@ static bool isQmake(const QString &path) FileName BuildableHelperLibrary::findSystemQt(const Environment &env) { const QString qmake = QLatin1String("qmake"); - QStringList paths = env.path(); - foreach (const QString &path, paths) { + FileNameList paths = env.path(); + foreach (const FileName &path, paths) { if (path.isEmpty()) continue; - QDir dir(path); + QDir dir(path.toString()); if (dir.exists(qmake)) { const QString qmakePath = dir.absoluteFilePath(qmake); diff --git a/src/libs/utils/environment.cpp b/src/libs/utils/environment.cpp index 1aee1cf908..fd49115aee 100644 --- a/src/libs/utils/environment.cpp +++ b/src/libs/utils/environment.cpp @@ -362,21 +362,20 @@ void Environment::clear() m_values.clear(); } -FileName Environment::searchInDirectory(const QStringList &execs, QString directory, - QSet<QString> &alreadyChecked) const +FileName Environment::searchInDirectory(const QStringList &execs, const FileName &directory, + QSet<FileName> &alreadyChecked) const { - const QChar slash = '/'; - // Avoid turing / into // on windows which triggers windows to check - // for network drives! - const QString dir = directory.endsWith(slash) ? directory : directory + slash; + const int checkedCount = alreadyChecked.count(); + alreadyChecked.insert(directory); - if (directory.isEmpty() || alreadyChecked.contains(dir)) - return {}; + if (directory.isEmpty() || alreadyChecked.count() == checkedCount) + return FileName(); - alreadyChecked.insert(dir); + const QString dir = directory.toString(); + QFileInfo fi; for (const QString &exec : execs) { - QFileInfo fi(dir + exec); + fi.setFile(dir, exec); if (fi.isFile() && fi.isExecutable()) return FileName::fromString(fi.absoluteFilePath()); } @@ -406,7 +405,7 @@ bool Environment::isSameExecutable(const QString &exe1, const QString &exe2) con const QStringList exe2List = appendExeExtensions(exe2); for (const QString &i1 : exe1List) { for (const QString &i2 : exe2List) { - if (Utils::FileName::fromString(i1) == Utils::FileName::fromString(i2)) + if (FileName::fromString(i1) == FileName::fromString(i2)) return true; } } @@ -414,7 +413,7 @@ bool Environment::isSameExecutable(const QString &exe1, const QString &exe2) con } FileName Environment::searchInPath(const QString &executable, - const QStringList &additionalDirs, + const FileNameList &additionalDirs, const PathFilter &func) const { if (executable.isEmpty()) @@ -434,28 +433,29 @@ FileName Environment::searchInPath(const QString &executable, return FileName::fromString(exec); } - QSet<QString> alreadyChecked; - for (const QString &dir : additionalDirs) { + QSet<FileName> alreadyChecked; + for (const FileName &dir : additionalDirs) { FileName tmp = searchInDirectory(execs, dir, alreadyChecked); - if (!tmp.isEmpty() && (!func || func(tmp.toString()))) + if (!tmp.isEmpty() && (!func || func(tmp))) return tmp; } if (executable.contains('/')) return FileName(); - for (const QString &p : path()) { - FileName tmp = searchInDirectory(execs, QDir::fromNativeSeparators(p), alreadyChecked); - if (!tmp.isEmpty() && (!func || func(tmp.toString()))) + for (const FileName &p : path()) { + FileName tmp = searchInDirectory(execs, p, alreadyChecked); + if (!tmp.isEmpty() && (!func || func(tmp))) return tmp; } return FileName(); } -QStringList Environment::path() const +FileNameList Environment::path() const { - return value("PATH") + const QStringList pathComponents = value("PATH") .split(OsSpecificAspects(m_osType).pathListSeparator(), QString::SkipEmptyParts); + return Utils::transform(pathComponents, &FileName::fromUserInput); } QString Environment::value(const QString &key) const diff --git a/src/libs/utils/environment.h b/src/libs/utils/environment.h index 2f4e84106e..c9ebb99b8d 100644 --- a/src/libs/utils/environment.h +++ b/src/libs/utils/environment.h @@ -112,12 +112,12 @@ public: Environment::const_iterator constEnd() const; Environment::const_iterator constFind(const QString &name) const; - using PathFilter = std::function<bool(const QString &)>; + using PathFilter = std::function<bool(const FileName &)>; FileName searchInPath(const QString &executable, - const QStringList &additionalDirs = QStringList(), + const FileNameList &additionalDirs = FileNameList(), const PathFilter &func = PathFilter()) const; - QStringList path() const; + FileNameList path() const; QStringList appendExeExtensions(const QString &executable) const; bool isSameExecutable(const QString &exe1, const QString &exe2) const; @@ -129,8 +129,8 @@ public: bool operator==(const Environment &other) const; private: - FileName searchInDirectory(const QStringList &execs, QString directory, - QSet<QString> &alreadyChecked) const; + FileName searchInDirectory(const QStringList &execs, const FileName &directory, + QSet<FileName> &alreadyChecked) const; QMap<QString, QString> m_values; OsType m_osType; }; diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp index ee5165e70a..1e5f85c000 100644 --- a/src/libs/utils/pathchooser.cpp +++ b/src/libs/utils/pathchooser.cpp @@ -193,7 +193,7 @@ QString PathChooserPrivate::expandedPath(const QString &input) const switch (m_acceptingKind) { case PathChooser::Command: case PathChooser::ExistingCommand: { - const FileName expanded = m_environment.searchInPath(path, {m_baseDirectory}); + const FileName expanded = m_environment.searchInPath(path, {FileName::fromString(m_baseDirectory)}); return expanded.isEmpty() ? path : expanded.toString(); } case PathChooser::Any: diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index 3d89d3018d..ed95a8c151 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -116,9 +116,8 @@ void AndroidToolChain::addToEnvironment(Environment &env) const env.set(QLatin1String("JAVA_HOME"), javaHome.toString()); Utils::FileName javaBin = javaHome; javaBin.appendPath(QLatin1String("bin")); - const QString jb = javaBin.toUserOutput(); - if (!Utils::contains(env.path(), [&jb](const QString &p) { return p == jb; })) - env.prependOrSetPath(jb); + if (!Utils::contains(env.path(), [&javaBin](const Utils::FileName &p) { return p == javaBin; })) + env.prependOrSetPath(javaBin.toUserOutput()); } env.set(QLatin1String("ANDROID_HOME"), AndroidConfigurations::currentConfig().sdkLocation().toString()); env.set(QLatin1String("ANDROID_SDK_ROOT"), AndroidConfigurations::currentConfig().sdkLocation().toString()); @@ -209,16 +208,18 @@ FileNameList AndroidToolChain::suggestedMkspecList() const QString AndroidToolChain::makeCommand(const Environment &env) const { - QStringList extraDirectories = AndroidConfigurations::currentConfig().makeExtraSearchDirectories(); + const Utils::FileNameList extraDirectories + = Utils::transform(AndroidConfigurations::currentConfig().makeExtraSearchDirectories(), + [](const QString &s) { return Utils::FileName::fromString(s); }); if (HostOsInfo::isWindowsHost()) { - FileName tmp = env.searchInPath(QLatin1String("ma-make.exe"), extraDirectories); + FileName tmp = env.searchInPath("ma-make.exe", extraDirectories); if (!tmp.isEmpty()) return tmp.toString(); - tmp = env.searchInPath(QLatin1String("mingw32-make"), extraDirectories); + tmp = env.searchInPath("mingw32-make", extraDirectories); return tmp.isEmpty() ? QLatin1String("mingw32-make") : tmp.toString(); } - QString make = QLatin1String("make"); + QString make = "make"; FileName tmp = env.searchInPath(make, extraDirectories); return tmp.isEmpty() ? make : tmp.toString(); } diff --git a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp index 235ddcb49d..6d72b10c30 100644 --- a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp @@ -146,43 +146,38 @@ static void readAndDeleteLegacyCMakeSettings () static QList<CMakeTool *> autoDetectCMakeTools() { - FileNameList suspects; - Utils::Environment env = Environment::systemEnvironment(); - QStringList path = env.path(); - path.removeDuplicates(); + Utils::FileNameList path = env.path(); + path = Utils::filteredUnique(path); if (HostOsInfo::isWindowsHost()) { const QString progFiles = QLatin1String(qgetenv("ProgramFiles")); - path.append(progFiles + "/CMake"); - path.append(progFiles + "/CMake/bin"); + path.append(Utils::FileName::fromString(progFiles + "/CMake")); + path.append(Utils::FileName::fromString(progFiles + "/CMake/bin")); const QString progFilesX86 = QLatin1String(qgetenv("ProgramFiles(x86)")); if (!progFilesX86.isEmpty()) { - path.append(progFilesX86 + "/CMake"); - path.append(progFilesX86 + "/CMake/bin"); + path.append(Utils::FileName::fromString(progFilesX86 + "/CMake")); + path.append(Utils::FileName::fromString(progFilesX86 + "/CMake/bin")); } } if (HostOsInfo::isMacHost()) { - path.append("/Applications/CMake.app/Contents/bin"); - path.append("/usr/local/bin"); - path.append("/opt/local/bin"); + path.append(Utils::FileName::fromString("/Applications/CMake.app/Contents/bin")); + path.append(Utils::FileName::fromString("/usr/local/bin")); + path.append(Utils::FileName::fromString("/opt/local/bin")); } - QStringList execs = env.appendExeExtensions(QLatin1String("cmake")); + const QStringList execs = env.appendExeExtensions(QLatin1String("cmake")); - foreach (QString base, path) { - const QChar slash = QLatin1Char('/'); + FileNameList suspects; + foreach (const Utils::FileName &base, path) { if (base.isEmpty()) continue; - // Avoid turning '/' into '//' on Windows which triggers Windows to check - // for network drives! - if (!base.endsWith(slash)) - base += slash; - foreach (const QString &exec, execs) { - QFileInfo fi(base + exec); + QFileInfo fi; + for (const QString &exec : execs) { + fi.setFile(base.toString(), exec); if (fi.exists() && fi.isFile() && fi.isExecutable()) suspects << FileName::fromString(fi.absoluteFilePath()); } diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp index 6bdf2ca980..c0b5d5e15c 100644 --- a/src/plugins/debugger/debuggeritemmanager.cpp +++ b/src/plugins/debugger/debuggeritemmanager.cpp @@ -34,6 +34,7 @@ #include <projectexplorer/projectexplorerconstants.h> +#include <utils/algorithm.h> #include <utils/detailswidget.h> #include <utils/environment.h> #include <utils/fileutils.h> @@ -750,13 +751,13 @@ void DebuggerItemManagerPrivate::autoDetectGdbOrLldbDebuggers() } } - QStringList path = Environment::systemEnvironment().path(); - path.removeDuplicates(); + Utils::FileNameList path = Environment::systemEnvironment().path(); + path = Utils::filteredUnique(path); QDir dir; dir.setNameFilters(filters); dir.setFilter(QDir::Files | QDir::Executable); - foreach (const QString &base, path) { - dir.setPath(base); + foreach (const Utils::FileName &base, path) { + dir.setPath(base.toFileInfo().absoluteFilePath()); foreach (const QString &entry, dir.entryList()) { if (entry.startsWith(QLatin1String("lldb-platform-")) || entry.startsWith(QLatin1String("lldb-gdbserver-"))) { diff --git a/src/plugins/debugger/debuggerkitinformation.cpp b/src/plugins/debugger/debuggerkitinformation.cpp index d5ab9d0aae..d1a4e84b10 100644 --- a/src/plugins/debugger/debuggerkitinformation.cpp +++ b/src/plugins/debugger/debuggerkitinformation.cpp @@ -59,12 +59,12 @@ DebuggerKitInformation::DebuggerKitInformation() QVariant DebuggerKitInformation::defaultValue(const Kit *k) const { const Abi toolChainAbi = ToolChainKitInformation::targetAbi(k); - const QStringList paths = Environment::systemEnvironment().path(); + const Utils::FileNameList paths = Environment::systemEnvironment().path(); QVariant nextBestFit; foreach (const DebuggerItem &item, DebuggerItemManager::debuggers()) { foreach (const Abi targetAbi, item.abis()) { if (targetAbi.isCompatibleWith(toolChainAbi)) { - if (paths.contains(item.command().toFileInfo().absolutePath())) + if (paths.contains(item.command())) return item.id(); // prefer debuggers found in PATH over those found elsewhere if (nextBestFit.isNull()) nextBestFit = item.id(); diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp index 44d961ba08..84eceaa405 100644 --- a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp +++ b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp @@ -238,7 +238,7 @@ QString AbstractMsvcToolChain::makeCommand(const Utils::Environment &environment Utils::FileName tmp; if (useJom) { - tmp = environment.searchInPath(jom, QStringList(QCoreApplication::applicationDirPath())); + tmp = environment.searchInPath(jom, {Utils::FileName::fromString(QCoreApplication::applicationDirPath())}); if (!tmp.isEmpty()) return tmp.toString(); } @@ -255,8 +255,8 @@ Utils::FileName AbstractMsvcToolChain::compilerCommand() const Utils::Environment env = Utils::Environment::systemEnvironment(); addToEnvironment(env); - Utils::FileName clexe = env.searchInPath(QLatin1String("cl.exe"), QStringList(), [](const QString &name) { - QDir dir(QDir::cleanPath(QFileInfo(name).absolutePath() + QStringLiteral("/.."))); + Utils::FileName clexe = env.searchInPath(QLatin1String("cl.exe"), {}, [](const Utils::FileName &name) { + QDir dir(QDir::cleanPath(name.toFileInfo().absolutePath() + QStringLiteral("/.."))); do { if (QFile::exists(dir.absoluteFilePath(QStringLiteral("vcvarsall.bat"))) || QFile::exists(dir.absolutePath() + "/Auxiliary/Build/vcvarsall.bat")) diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index c349e85089..9b570a4165 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -203,7 +203,7 @@ bool CustomExecutableRunConfiguration::validateExecutable(QString *executable, Q if (aspect) env = aspect->environment(); const Utils::FileName exec = env.searchInPath(macroExpander()->expand(m_executable), - QStringList(workingDirectory())); + {Utils::FileName::fromString(workingDirectory())}); if (exec.isEmpty()) { if (errorMessage) *errorMessage = tr("The executable\n%1\ncannot be found in the path."). diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 9800908a53..6ebb8365e1 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -431,10 +431,10 @@ bool GccToolChain::isValid() const static Utils::FileName findLocalCompiler(const Utils::FileName &compilerPath, const Environment &env) { - const Utils::FileName path = env.searchInPath(compilerPath.fileName(), QStringList(), - [](const QString &pathEntry) { - return !pathEntry.contains("icecc") - && !pathEntry.contains("distcc"); + const Utils::FileName path = env.searchInPath(compilerPath.fileName(), Utils::FileNameList(), + [](const FileName &pathEntry) { + return !pathEntry.toString().contains("icecc") + && !pathEntry.toString().contains("distcc"); }); QTC_ASSERT(!path.isEmpty(), return compilerPath); diff --git a/src/plugins/projectexplorer/processparameters.cpp b/src/plugins/projectexplorer/processparameters.cpp index 0718724f69..db56c57cdb 100644 --- a/src/plugins/projectexplorer/processparameters.cpp +++ b/src/plugins/projectexplorer/processparameters.cpp @@ -125,7 +125,7 @@ QString ProcessParameters::effectiveCommand() const if (m_macroExpander) cmd = m_macroExpander->expand(cmd); m_effectiveCommand = - m_environment.searchInPath(cmd, QStringList(effectiveWorkingDirectory())).toString(); + m_environment.searchInPath(cmd, {Utils::FileName::fromString(effectiveWorkingDirectory())}).toString(); m_commandMissing = m_effectiveCommand.isEmpty(); if (m_commandMissing) m_effectiveCommand = cmd; diff --git a/src/plugins/vcsbase/vcsbaseclientsettings.cpp b/src/plugins/vcsbase/vcsbaseclientsettings.cpp index ab31348c1a..e9406e7ed0 100644 --- a/src/plugins/vcsbase/vcsbaseclientsettings.cpp +++ b/src/plugins/vcsbase/vcsbaseclientsettings.cpp @@ -25,6 +25,7 @@ #include "vcsbaseclientsettings.h" +#include <utils/algorithm.h> #include <utils/environment.h> #include <utils/fileutils.h> #include <utils/hostosinfo.h> @@ -355,8 +356,10 @@ QVariant::Type VcsBaseClientSettings::valueType(const QString &key) const Utils::FileName VcsBaseClientSettings::binaryPath() const { if (d->m_binaryFullPath.isEmpty()) { + const Utils::FileNameList searchPaths + = Utils::transform(searchPathList(), [](const QString &s) { return Utils::FileName::fromString(s); }); d->m_binaryFullPath = Utils::Environment::systemEnvironment().searchInPath( - stringValue(binaryPathKey), searchPathList()); + stringValue(binaryPathKey), searchPaths); } return d->m_binaryFullPath; } |