diff options
Diffstat (limited to 'Source/cmFindPackageCommand.h')
-rw-r--r-- | Source/cmFindPackageCommand.h | 179 |
1 files changed, 112 insertions, 67 deletions
diff --git a/Source/cmFindPackageCommand.h b/Source/cmFindPackageCommand.h index c3801220d..99b0059ba 100644 --- a/Source/cmFindPackageCommand.h +++ b/Source/cmFindPackageCommand.h @@ -1,20 +1,21 @@ -/*============================================================================ - 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. -============================================================================*/ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ #ifndef cmFindPackageCommand_h #define cmFindPackageCommand_h +#include "cmConfigure.h" + +#include "cm_kwiml.h" +#include <map> +#include <set> +#include <string> +#include <vector> + #include "cmFindCommon.h" -class cmFindPackageFileList; +class cmCommand; +class cmExecutionStatus; +class cmSearchPath; /** \class cmFindPackageCommand * \brief Load settings from an external project. @@ -24,80 +25,97 @@ class cmFindPackageFileList; class cmFindPackageCommand : public cmFindCommon { public: + /*! A sorting order strategy to be applied to recovered package folders (see + * FIND_PACKAGE_SORT_ORDER)*/ + enum /*class*/ SortOrderType + { + None, + Name_order, + Natural + }; + /*! A sorting direction to be applied to recovered package folders (see + * FIND_PACKAGE_SORT_DIRECTION)*/ + enum /*class*/ SortDirectionType + { + Asc, + Dec + }; + + /*! sorts a given list of string based on the input sort parameters */ + static void Sort(std::vector<std::string>::iterator begin, + std::vector<std::string>::iterator end, SortOrderType order, + SortDirectionType dir); + cmFindPackageCommand(); /** * This is a virtual constructor for the command. */ - virtual cmCommand* Clone() - { - return new cmFindPackageCommand; - } + cmCommand* Clone() CM_OVERRIDE { return new cmFindPackageCommand; } /** * This is called when the command is first encountered in * the CMakeLists.txt file. */ - virtual bool InitialPass(std::vector<std::string> const& args, - cmExecutionStatus &status); + bool InitialPass(std::vector<std::string> const& args, + cmExecutionStatus& status) CM_OVERRIDE; - /** - * This determines if the command is invoked when in script mode. - */ - virtual bool IsScriptable() const { return true; } - - /** - * The name of the command as specified in CMakeList.txt. - */ - virtual const char* GetName() const { return "find_package";} - - /** - * Succinct documentation. - */ - virtual const char* GetTerseDocumentation() const +private: + class PathLabel : public cmFindCommon::PathLabel + { + protected: + PathLabel(); + + public: + PathLabel(const std::string& label) + : cmFindCommon::PathLabel(label) { - return "Load settings for an external project."; } + static PathLabel UserRegistry; + static PathLabel Builds; + static PathLabel SystemRegistry; + }; - /** - * More documentation. - */ - virtual const char* GetFullDocumentation() const; + // Add additional search path labels and groups not present in the + // parent class + void AppendSearchPathGroups(); - cmTypeMacro(cmFindPackageCommand, cmFindCommon); -protected: - virtual void GenerateDocumentation(); -private: void AppendSuccessInformation(); void AppendToFoundProperty(bool found); void SetModuleVariables(const std::string& components); bool FindModule(bool& found); - void AddFindDefinition(const char* var, const char* val); + void AddFindDefinition(const std::string& var, const char* val); void RestoreFindDefinitions(); bool HandlePackageMode(); bool FindConfig(); bool FindPrefixedConfig(); bool FindFrameworkConfig(); bool FindAppBundleConfig(); - enum PolicyScopeRule { NoPolicyScope, DoPolicyScope }; + enum PolicyScopeRule + { + NoPolicyScope, + DoPolicyScope + }; bool ReadListFile(const char* f, PolicyScopeRule psr); void StoreVersionFound(); void ComputePrefixes(); - void AddPrefixesCMakeEnvironment(); - void AddPrefixesCMakeVariable(); - void AddPrefixesSystemEnvironment(); - void AddPrefixesUserRegistry(); - void AddPrefixesSystemRegistry(); - void AddPrefixesBuilds(); - void AddPrefixesCMakeSystemVariable(); - void AddPrefixesUserGuess(); - void AddPrefixesUserHints(); - void LoadPackageRegistryDir(std::string const& dir); + void FillPrefixesPackageRoot(); + void FillPrefixesCMakeEnvironment(); + void FillPrefixesCMakeVariable(); + void FillPrefixesSystemEnvironment(); + void FillPrefixesUserRegistry(); + void FillPrefixesSystemRegistry(); + void FillPrefixesCMakeSystemVariable(); + void FillPrefixesUserGuess(); + void FillPrefixesUserHints(); + void LoadPackageRegistryDir(std::string const& dir, cmSearchPath& outPaths); void LoadPackageRegistryWinUser(); void LoadPackageRegistryWinSystem(); - void LoadPackageRegistryWin(bool user, unsigned int view); - bool CheckPackageRegistryEntry(std::istream& is); + void LoadPackageRegistryWin(bool user, unsigned int view, + cmSearchPath& outPaths); + bool CheckPackageRegistryEntry(const std::string& fname, + cmSearchPath& outPaths); bool SearchDirectory(std::string const& dir); bool CheckDirectory(std::string const& dir); bool FindConfigFile(std::string const& dir, std::string& file); @@ -110,44 +128,71 @@ private: friend class cmFindPackageFileList; - struct OriginalDef { bool exists; std::string value; }; - std::map<cmStdString, OriginalDef> OriginalDefs; + struct OriginalDef + { + bool exists; + std::string value; + }; + std::map<std::string, OriginalDef> OriginalDefs; - std::string CommandDocumentation; - cmStdString Name; - cmStdString Variable; - cmStdString Version; + std::string Name; + std::string Variable; + std::string Version; unsigned int VersionMajor; unsigned int VersionMinor; unsigned int VersionPatch; unsigned int VersionTweak; unsigned int VersionCount; bool VersionExact; - cmStdString FileFound; - cmStdString VersionFound; + std::string FileFound; + std::string VersionFound; unsigned int VersionFoundMajor; unsigned int VersionFoundMinor; unsigned int VersionFoundPatch; unsigned int VersionFoundTweak; unsigned int VersionFoundCount; - unsigned int RequiredCMakeVersion; + KWIML_INT_uint64_t RequiredCMakeVersion; bool Quiet; bool Required; - bool Compatibility_1_6; bool UseConfigFiles; bool UseFindModules; bool NoUserRegistry; bool NoSystemRegistry; - bool NoBuilds; bool DebugMode; + bool UseLib32Paths; bool UseLib64Paths; + bool UseLibx32Paths; bool PolicyScope; std::string LibraryArchitecture; std::vector<std::string> Names; std::vector<std::string> Configs; std::set<std::string> IgnoredPaths; - struct ConfigFileInfo { std::string filename; std::string version; }; + /*! the selected sortOrder (None by default)*/ + SortOrderType SortOrder; + /*! the selected sortDirection (Asc by default)*/ + SortDirectionType SortDirection; + + struct ConfigFileInfo + { + std::string filename; + std::string version; + + bool operator<(ConfigFileInfo const& rhs) const + { + return this->filename < rhs.filename; + } + + bool operator==(ConfigFileInfo const& rhs) const + { + return this->filename == rhs.filename; + } + + bool operator!=(ConfigFileInfo const& rhs) const + { + return !(*this == rhs); + } + }; std::vector<ConfigFileInfo> ConsideredConfigs; }; |