| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /*=========================================================================
- Program: CMake - Cross-Platform Makefile Generator
- Module: $RCSfile$
- Language: C++
- Date: $Date$
- Version: $Revision$
- Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
- See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notices for more information.
- =========================================================================*/
- #ifndef cmFindPackageCommand_h
- #define cmFindPackageCommand_h
- #include "cmCommand.h"
- /** \class cmFindPackageCommand
- * \brief Load settings from an external project.
- *
- * cmFindPackageCommand
- */
- class cmFindPackageCommand : public cmCommand
- {
- public:
- /**
- * This is a virtual constructor for the command.
- */
- virtual cmCommand* Clone()
- {
- 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);
- /**
- * This determines if the command is invoked when in script mode.
- */
- virtual bool IsScriptable() { return true; }
- /**
- * The name of the command as specified in CMakeList.txt.
- */
- virtual const char* GetName() { return "FIND_PACKAGE";}
- /**
- * Succinct documentation.
- */
- virtual const char* GetTerseDocumentation()
- {
- return "Load settings for an external project.";
- }
- /**
- * More documentation.
- */
- virtual const char* GetFullDocumentation()
- {
- return
- " FIND_PACKAGE(<name> [major.minor] [QUIET]\n"
- " [REQUIRED [componets...]])\n"
- "Finds and loads settings from an external project. <name>_FOUND will "
- "be set to indicate whether the package was found. Settings that "
- "can be used when <name>_FOUND is true are package-specific. The "
- "package is found through several steps. "
- "Directories listed in CMAKE_MODULE_PATH are searched for files called "
- "\"Find<name>.cmake\". If such a file is found, it is read and "
- "processed by CMake, and is responsible for finding the package. "
- "If no such file is found, it is expected that the package is another "
- "project built by CMake that has a \"<name>Config.cmake\" file. "
- "A cache entry called <name>_DIR is created and is expected to be set "
- "to the directory containing this file. If the file is found, it is "
- "read and processed by CMake to load the settings of the package. If "
- "<name>_DIR has not been set during a configure step, the command "
- "will generate an error describing the problem unless the QUIET "
- "argument is specified. If <name>_DIR has been set to a directory "
- "not containing a \"<name>Config.cmake\" file, an error is always "
- "generated. If REQUIRED is specified and the package is not found, "
- "a FATAL_ERROR is generated and the configure step stops executing."
- " A package-specific list of components may be listed after the "
- "REQUIRED option.";
- }
-
- cmTypeMacro(cmFindPackageCommand, cmCommand);
- private:
- bool FindModule(bool& found, bool quiet, bool required);
- bool FindConfig();
- std::string SearchForConfig() const;
- bool ReadListFile(const char* f);
- cmStdString Name;
- cmStdString Variable;
- cmStdString Config;
- std::vector<cmStdString> Builds;
- std::vector<cmStdString> Prefixes;
- std::vector<cmStdString> Relatives;
- };
- #endif
|