| /* 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 <map> | 
 | #include <set> | 
 | #include <string> | 
 | #include <vector> | 
 |  | 
 | #include "cmPathLabel.h" | 
 | #include "cmSearchPath.h" | 
 | #include "cmWindowsRegistry.h" | 
 |  | 
 | class cmExecutionStatus; | 
 | class cmMakefile; | 
 |  | 
 | /** \class cmFindCommon | 
 |  * \brief Base class for FIND_XXX implementations. | 
 |  * | 
 |  * cmFindCommon is a parent class for cmFindBase, | 
 |  * cmFindProgramCommand, cmFindPathCommand, cmFindLibraryCommand, | 
 |  * cmFindFileCommand, and cmFindPackageCommand. | 
 |  */ | 
 | class cmFindCommon | 
 | { | 
 | public: | 
 |   cmFindCommon(cmExecutionStatus& status); | 
 |  | 
 |   void SetError(std::string const& e); | 
 |  | 
 |   bool DebugModeEnabled() const { return this->DebugMode; } | 
 |  | 
 | protected: | 
 |   friend class cmSearchPath; | 
 |   friend class cmFindBaseDebugState; | 
 |  | 
 |   /** Used to define groups of path labels */ | 
 |   class PathGroup : public cmPathLabel | 
 |   { | 
 |   protected: | 
 |     PathGroup(); | 
 |  | 
 |   public: | 
 |     PathGroup(const std::string& label) | 
 |       : cmPathLabel(label) | 
 |     { | 
 |     } | 
 |     static PathGroup All; | 
 |   }; | 
 |  | 
 |   /* Individual path types */ | 
 |   class PathLabel : public cmPathLabel | 
 |   { | 
 |   protected: | 
 |     PathLabel(); | 
 |  | 
 |   public: | 
 |     PathLabel(const std::string& label) | 
 |       : cmPathLabel(label) | 
 |     { | 
 |     } | 
 |     static PathLabel PackageRoot; | 
 |     static PathLabel CMake; | 
 |     static PathLabel CMakeEnvironment; | 
 |     static PathLabel Hints; | 
 |     static PathLabel SystemEnvironment; | 
 |     static PathLabel CMakeSystem; | 
 |     static PathLabel Guess; | 
 |   }; | 
 |  | 
 |   enum RootPathMode | 
 |   { | 
 |     RootPathModeNever, | 
 |     RootPathModeOnly, | 
 |     RootPathModeBoth | 
 |   }; | 
 |  | 
 |   /** Construct the various path groups and labels */ | 
 |   void InitializeSearchPathGroups(); | 
 |  | 
 |   /** Place a set of search paths under the search roots.  */ | 
 |   void RerootPaths(std::vector<std::string>& paths); | 
 |  | 
 |   /** Get ignored paths from CMAKE_[SYSTEM_]IGNORE_PATH variables.  */ | 
 |   void GetIgnoredPaths(std::vector<std::string>& ignore); | 
 |   void GetIgnoredPaths(std::set<std::string>& ignore); | 
 |  | 
 |   /** Get ignored paths from CMAKE_[SYSTEM_]IGNORE_PREFIX_PATH variables.  */ | 
 |   void GetIgnoredPrefixPaths(std::vector<std::string>& ignore); | 
 |   void GetIgnoredPrefixPaths(std::set<std::string>& ignore); | 
 |  | 
 |   /** Compute final search path list (reroot + trailing slash).  */ | 
 |   enum class IgnorePaths | 
 |   { | 
 |     No, | 
 |     Yes, | 
 |   }; | 
 |   void ComputeFinalPaths(IgnorePaths ignorePaths); | 
 |  | 
 |   /** Compute the current default root path mode.  */ | 
 |   void SelectDefaultRootPathMode(); | 
 |  | 
 |   /** Compute the current default bundle/framework search policy.  */ | 
 |   void SelectDefaultMacMode(); | 
 |  | 
 |   /** Compute the current default search modes based on global variables.  */ | 
 |   void SelectDefaultSearchModes(); | 
 |  | 
 |   /** The `InitialPass` functions of the child classes should set | 
 |       this->DebugMode to the result of these.  */ | 
 |   bool ComputeIfDebugModeWanted(); | 
 |   bool ComputeIfDebugModeWanted(std::string const& var); | 
 |  | 
 |   // Path arguments prior to path manipulation routines | 
 |   std::vector<std::string> UserHintsArgs; | 
 |   std::vector<std::string> UserGuessArgs; | 
 |  | 
 |   std::string CMakePathName; | 
 |   RootPathMode FindRootPathMode; | 
 |  | 
 |   bool CheckCommonArgument(std::string const& arg); | 
 |   void AddPathSuffix(std::string const& arg); | 
 |  | 
 |   void DebugMessage(std::string const& msg) const; | 
 |   bool DebugMode; | 
 |   bool NoDefaultPath; | 
 |   bool NoPackageRootPath; | 
 |   bool NoCMakePath; | 
 |   bool NoCMakeEnvironmentPath; | 
 |   bool NoSystemEnvironmentPath; | 
 |   bool NoCMakeSystemPath; | 
 |   bool NoCMakeInstallPath; | 
 |   cmWindowsRegistry::View RegistryView = cmWindowsRegistry::View::Target; | 
 |  | 
 |   std::vector<std::string> SearchPathSuffixes; | 
 |  | 
 |   std::map<PathGroup, std::vector<PathLabel>> PathGroupLabelMap; | 
 |   std::vector<PathGroup> PathGroupOrder; | 
 |   std::map<std::string, PathLabel> PathLabelStringMap; | 
 |   std::map<PathLabel, cmSearchPath> LabeledPaths; | 
 |  | 
 |   std::vector<std::string> SearchPaths; | 
 |   std::set<cmSearchPath::PathWithPrefix> SearchPathsEmitted; | 
 |  | 
 |   bool SearchFrameworkFirst; | 
 |   bool SearchFrameworkOnly; | 
 |   bool SearchFrameworkLast; | 
 |  | 
 |   bool SearchAppBundleFirst; | 
 |   bool SearchAppBundleOnly; | 
 |   bool SearchAppBundleLast; | 
 |  | 
 |   cmMakefile* Makefile; | 
 |   cmExecutionStatus& Status; | 
 | }; |