| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file Copyright.txt or https://cmake.org/licensing for details. */ |
| #pragma once |
| |
| #include "cmConfigure.h" // IWYU pragma: keep |
| |
| #include <cstddef> |
| #include <set> |
| #include <string> |
| #include <vector> |
| |
| class cmFindCommon; |
| |
| /** \class cmSearchPath |
| * \brief Container for encapsulating a set of search paths |
| * |
| * cmSearchPath is a container that encapsulates search path construction and |
| * management |
| */ |
| class cmSearchPath |
| { |
| public: |
| // cmSearchPath must be initialized from a valid pointer. The only reason |
| // for the default is to allow it to be easily used in stl containers. |
| // Attempting to initialize with a NULL value will fail an assertion |
| cmSearchPath(cmFindCommon* findCmd = nullptr); |
| ~cmSearchPath(); |
| |
| cmSearchPath(cmSearchPath const&) = default; |
| cmSearchPath& operator=(cmSearchPath const&) = default; |
| |
| struct PathWithPrefix |
| { |
| std::string Path; |
| std::string Prefix; |
| |
| bool operator<(PathWithPrefix const& other) const |
| { |
| return this->Path < other.Path || |
| (this->Path == other.Path && this->Prefix < other.Prefix); |
| } |
| }; |
| std::vector<PathWithPrefix> const& GetPaths() const { return this->Paths; } |
| std::size_t size() const { return this->Paths.size(); } |
| |
| void ExtractWithout(std::set<std::string> const& ignorePaths, |
| std::set<std::string> const& ignorePrefixes, |
| std::vector<std::string>& outPaths) const; |
| |
| void AddPath(std::string const& path); |
| void AddUserPath(std::string const& path); |
| void AddCMakePath(std::string const& variable); |
| void AddEnvPath(std::string const& variable); |
| void AddCMakePrefixPath(std::string const& variable); |
| void AddEnvPrefixPath(std::string const& variable, bool stripBin = false); |
| void AddSuffixes(std::vector<std::string> const& suffixes); |
| void AddPrefixPaths(std::vector<std::string> const& paths); |
| |
| protected: |
| void AddPathInternal(std::string const& path, std::string const& prefix); |
| |
| cmFindCommon* FC; |
| std::vector<PathWithPrefix> Paths; |
| }; |