aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2019-07-09 09:02:02 +0200
committerDavid Schulz <david.schulz@qt.io>2019-07-15 13:01:25 +0000
commit5da5116cb1a7995550b7c347866dcfd9d8976ae0 (patch)
treeeb88f4b02648e7bc1e6824be756f4ea3d42e3c8c /src/libs
parentb4708181c77656fc41cac17cfdd9c716e6e19a41 (diff)
Utils: Add path search function to environment
In contrast to Environment::searchInPath This function returns _all_ executables found in the path variable. Change-Id: Ic62b8f70d0690ff9a3261db3ead2c919a2486c89 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/utils/environment.cpp39
-rw-r--r--src/libs/utils/environment.h3
2 files changed, 42 insertions, 0 deletions
diff --git a/src/libs/utils/environment.cpp b/src/libs/utils/environment.cpp
index 1d8498ef0d..cee6713254 100644
--- a/src/libs/utils/environment.cpp
+++ b/src/libs/utils/environment.cpp
@@ -273,6 +273,45 @@ FilePath Environment::searchInPath(const QString &executable,
return FilePath();
}
+FilePathList Environment::findAllInPath(const QString &executable,
+ const FilePathList &additionalDirs,
+ const Environment::PathFilter &func) const
+{
+ if (executable.isEmpty())
+ return {};
+
+ const QString exec = QDir::cleanPath(expandVariables(executable));
+ const QFileInfo fi(exec);
+
+ const QStringList execs = appendExeExtensions(exec);
+
+ if (fi.isAbsolute()) {
+ for (const QString &path : execs) {
+ QFileInfo pfi = QFileInfo(path);
+ if (pfi.isFile() && pfi.isExecutable())
+ return {FilePath::fromString(path)};
+ }
+ return {FilePath::fromString(exec)};
+ }
+
+ QSet<FilePath> result;
+ QSet<FilePath> alreadyChecked;
+ for (const FilePath &dir : additionalDirs) {
+ FilePath tmp = searchInDirectory(execs, dir, alreadyChecked);
+ if (!tmp.isEmpty() && (!func || func(tmp)))
+ result << tmp;
+ }
+
+ if (!executable.contains('/')) {
+ for (const FilePath &p : path()) {
+ FilePath tmp = searchInDirectory(execs, p, alreadyChecked);
+ if (!tmp.isEmpty() && (!func || func(tmp)))
+ result << tmp;
+ }
+ }
+ return result.values();
+}
+
FilePathList Environment::path() const
{
return pathListValue("PATH");
diff --git a/src/libs/utils/environment.h b/src/libs/utils/environment.h
index 73c883268e..a233435c4a 100644
--- a/src/libs/utils/environment.h
+++ b/src/libs/utils/environment.h
@@ -66,6 +66,9 @@ public:
FilePath searchInPath(const QString &executable,
const FilePathList &additionalDirs = FilePathList(),
const PathFilter &func = PathFilter()) const;
+ FilePathList findAllInPath(const QString &executable,
+ const FilePathList &additionalDirs = FilePathList(),
+ const PathFilter &func = PathFilter()) const;
FilePathList path() const;
FilePathList pathListValue(const QString &varName) const;