/*============================================================================ CMake - Cross Platform Makefile Generator Copyright 2000-2009 Kitware, Inc., Insight Software Consortium Distributed under the OSI-approved BSD License (the "License"); see accompanying file Copyright.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License for more information. ============================================================================*/ #ifndef cmFindCommon_h #define cmFindCommon_h #include "cmCommand.h" #include "cmPathLabel.h" #include "cmSearchPath.h" /** \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 cmCommand { public: cmFindCommon(); ~cmFindCommon(); cmTypeMacro(cmFindCommon, cmCommand); protected: friend class cmSearchPath; /** 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 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& paths); /** Get ignored paths from CMAKE_[SYSTEM_]IGNORE_path variables. */ void GetIgnoredPaths(std::vector& ignore); void GetIgnoredPaths(std::set& ignore); /** Remove paths in the ignore set from the supplied vector. */ void FilterPaths(const std::vector& inPaths, const std::set& ignore, std::vector& outPaths); /** Compute final search path list (reroot + trailing slash). */ void ComputeFinalPaths(); /** Compute the current default root path mode. */ void SelectDefaultRootPathMode(); /** Compute the current default bundle/framework search policy. */ void SelectDefaultMacMode(); // Path arguments prior to path manipulation routines std::vector UserHintsArgs; std::vector UserGuessArgs; std::string CMakePathName; RootPathMode FindRootPathMode; bool CheckCommonArgument(std::string const& arg); void AddPathSuffix(std::string const& arg); void SetMakefile(cmMakefile* makefile); bool NoDefaultPath; bool NoCMakePath; bool NoCMakeEnvironmentPath; bool NoSystemEnvironmentPath; bool NoCMakeSystemPath; std::vector SearchPathSuffixes; std::map > PathGroupLabelMap; std::vector PathGroupOrder; std::map PathLabelStringMap; std::map LabeledPaths; std::vector SearchPaths; std::set SearchPathsEmitted; bool SearchFrameworkFirst; bool SearchFrameworkOnly; bool SearchFrameworkLast; bool SearchAppBundleFirst; bool SearchAppBundleOnly; bool SearchAppBundleLast; }; #endif