diff --git a/src/libs/utils/environment.cpp b/src/libs/utils/environment.cpp index f537f606927..c99293329c1 100644 --- a/src/libs/utils/environment.cpp +++ b/src/libs/utils/environment.cpp @@ -214,9 +214,10 @@ static FilePath searchInDirectoriesHelper(const Environment &env, } FilePath Environment::searchInDirectories(const QString &executable, - const FilePaths &dirs) const + const FilePaths &dirs, + const PathFilter &func) const { - return searchInDirectoriesHelper(*this, executable, dirs, {}, false); + return searchInDirectoriesHelper(*this, executable, dirs, func, false); } FilePath Environment::searchInPath(const QString &executable, diff --git a/src/libs/utils/environment.h b/src/libs/utils/environment.h index 3e53c7a3c51..fe323e7ba9e 100644 --- a/src/libs/utils/environment.h +++ b/src/libs/utils/environment.h @@ -57,10 +57,11 @@ public: const FilePaths &additionalDirs = FilePaths(), const PathFilter &func = PathFilter()) const; FilePath searchInDirectories(const QString &executable, - const FilePaths &dirs) const; + const FilePaths &dirs, + const PathFilter &func = {}) const; FilePaths findAllInPath(const QString &executable, - const FilePaths &additionalDirs = FilePaths(), - const PathFilter &func = PathFilter()) const; + const FilePaths &additionalDirs = {}, + const PathFilter &func = {}) const; FilePaths path() const; FilePaths pathListValue(const QString &varName) const; diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index d5853a30bad..13a1948c6b8 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -1305,14 +1305,16 @@ FilePath FilePath::withNewPath(const QString &newPath) const assert(fullPath == FilePath::fromUrl("docker://123/usr/bin/make")) \endcode */ -FilePath FilePath::searchInDirectories(const FilePaths &dirs) const +FilePath FilePath::searchInDirectories(const FilePaths &dirs, const PathFilter &filter) const { if (isAbsolutePath()) return *this; - return deviceEnvironment().searchInDirectories(path(), dirs); + return deviceEnvironment().searchInDirectories(path(), dirs, filter); } -FilePath FilePath::searchInPath(const FilePaths &additionalDirs, PathAmending amending) const +FilePath FilePath::searchInPath(const FilePaths &additionalDirs, + PathAmending amending, + const PathFilter &filter) const { if (isAbsolutePath()) return *this; @@ -1328,7 +1330,7 @@ FilePath FilePath::searchInPath(const FilePaths &additionalDirs, PathAmending am else directories = additionalDirs + directories; } - return searchInDirectories(directories); + return searchInDirectories(directories, filter); } Environment FilePath::deviceEnvironment() const diff --git a/src/libs/utils/filepath.h b/src/libs/utils/filepath.h index d219c2cf31e..4c61786eba4 100644 --- a/src/libs/utils/filepath.h +++ b/src/libs/utils/filepath.h @@ -145,6 +145,8 @@ public: void clear(); bool isEmpty() const; + using PathFilter = std::function; + [[nodiscard]] FilePath absoluteFilePath() const; [[nodiscard]] FilePath absolutePath() const; [[nodiscard]] FilePath resolvePath(const FilePath &tail) const; @@ -156,7 +158,8 @@ public: [[nodiscard]] FilePath withExecutableSuffix() const; [[nodiscard]] FilePath relativeChildPath(const FilePath &parent) const; [[nodiscard]] FilePath relativePathFrom(const FilePath &anchor) const; - [[nodiscard]] FilePath searchInDirectories(const FilePaths &dirs) const; + [[nodiscard]] FilePath searchInDirectories(const FilePaths &dirs, + const PathFilter &filter = {}) const; [[nodiscard]] Environment deviceEnvironment() const; [[nodiscard]] FilePath onDevice(const FilePath &deviceTemplate) const; [[nodiscard]] FilePath withNewPath(const QString &newPath) const; @@ -178,7 +181,8 @@ public: enum PathAmending { AppendToPath, PrependToPath }; [[nodiscard]] FilePath searchInPath(const FilePaths &additionalDirs = {}, - PathAmending = AppendToPath) const; + PathAmending = AppendToPath, + const PathFilter &filter = {}) const; enum MatchScope { ExactMatchOnly, WithExeSuffix, WithBatSuffix, WithExeOrBatSuffix, WithAnySuffix };