1 /*============================================================================
2 CMake - Cross Platform Makefile Generator
3 Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
5 Distributed under the OSI-approved BSD License (the "License");
6 see accompanying file Copyright.txt for details.
8 This software is distributed WITHOUT ANY WARRANTY; without even the
9 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 See the License for more information.
11 ============================================================================*/
12 #ifndef cmFindPackageCommand_h
13 #define cmFindPackageCommand_h
15 #include "cmFindCommon.h"
17 class cmFindPackageFileList;
19 /** \class cmFindPackageCommand
20 * \brief Load settings from an external project.
22 * cmFindPackageCommand
24 class cmFindPackageCommand : public cmFindCommon
27 cmFindPackageCommand();
30 * This is a virtual constructor for the command.
32 virtual cmCommand* Clone()
34 return new cmFindPackageCommand;
38 * This is called when the command is first encountered in
39 * the CMakeLists.txt file.
41 virtual bool InitialPass(std::vector<std::string> const& args,
42 cmExecutionStatus &status);
45 * This determines if the command is invoked when in script mode.
47 virtual bool IsScriptable() const { return true; }
50 * The name of the command as specified in CMakeList.txt.
52 virtual const char* GetName() const { return "find_package";}
55 * Succinct documentation.
57 virtual const char* GetTerseDocumentation() const
59 return "Load settings for an external project.";
65 virtual const char* GetFullDocumentation() const;
67 cmTypeMacro(cmFindPackageCommand, cmFindCommon);
69 virtual void GenerateDocumentation();
71 void AppendSuccessInformation();
72 void AppendToFoundProperty(bool found);
73 void SetModuleVariables(const std::string& components);
74 bool FindModule(bool& found);
75 void AddFindDefinition(const char* var, const char* val);
76 void RestoreFindDefinitions();
77 bool HandlePackageMode();
79 bool FindPrefixedConfig();
80 bool FindFrameworkConfig();
81 bool FindAppBundleConfig();
82 enum PolicyScopeRule { NoPolicyScope, DoPolicyScope };
83 bool ReadListFile(const char* f, PolicyScopeRule psr);
84 void StoreVersionFound();
86 void ComputePrefixes();
87 void AddPrefixesCMakeEnvironment();
88 void AddPrefixesCMakeVariable();
89 void AddPrefixesSystemEnvironment();
90 void AddPrefixesUserRegistry();
91 void AddPrefixesSystemRegistry();
92 void AddPrefixesBuilds();
93 void AddPrefixesCMakeSystemVariable();
94 void AddPrefixesUserGuess();
95 void AddPrefixesUserHints();
96 void LoadPackageRegistryDir(std::string const& dir);
97 void LoadPackageRegistryWinUser();
98 void LoadPackageRegistryWinSystem();
99 void LoadPackageRegistryWin(bool user, unsigned int view);
100 bool CheckPackageRegistryEntry(std::istream& is);
101 bool SearchDirectory(std::string const& dir);
102 bool CheckDirectory(std::string const& dir);
103 bool FindConfigFile(std::string const& dir, std::string& file);
104 bool CheckVersion(std::string const& config_file);
105 bool CheckVersionFile(std::string const& version_file,
106 std::string& result_version);
107 bool SearchPrefix(std::string const& prefix);
108 bool SearchFrameworkPrefix(std::string const& prefix_in);
109 bool SearchAppBundlePrefix(std::string const& prefix_in);
111 friend class cmFindPackageFileList;
113 struct OriginalDef { bool exists; std::string value; };
114 std::map<cmStdString, OriginalDef> OriginalDefs;
116 std::string CommandDocumentation;
118 cmStdString Variable;
120 unsigned int VersionMajor;
121 unsigned int VersionMinor;
122 unsigned int VersionPatch;
123 unsigned int VersionTweak;
124 unsigned int VersionCount;
126 cmStdString FileFound;
127 cmStdString VersionFound;
128 unsigned int VersionFoundMajor;
129 unsigned int VersionFoundMinor;
130 unsigned int VersionFoundPatch;
131 unsigned int VersionFoundTweak;
132 unsigned int VersionFoundCount;
133 unsigned int RequiredCMakeVersion;
136 bool Compatibility_1_6;
140 bool NoSystemRegistry;
145 std::string LibraryArchitecture;
146 std::vector<std::string> Names;
147 std::vector<std::string> Configs;
148 std::set<std::string> IgnoredPaths;
150 struct ConfigFileInfo { std::string filename; std::string version; };
151 std::vector<ConfigFileInfo> ConsideredConfigs;