diff options
author | Brad King <brad.king@kitware.com> | 2008-01-17 14:02:31 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2008-01-17 14:02:31 (GMT) |
commit | b424df917dc14ea7376940c6c22a3a274aedcc2b (patch) | |
tree | c29fc8171c1a13c74746dd2e28e10016614e16cb /Source/cmFindCommon.h | |
parent | 491d5d01049e515fa5317f943d9e48ff531f69a6 (diff) | |
download | CMake-b424df917dc14ea7376940c6c22a3a274aedcc2b.zip CMake-b424df917dc14ea7376940c6c22a3a274aedcc2b.tar.gz CMake-b424df917dc14ea7376940c6c22a3a274aedcc2b.tar.bz2 |
ENH: Major improvements to the FIND_PACKAGE command. See bug #3659.
- Use CMAKE_PREFIX_PATH and CMAKE_SYSTEM_PREFIX_PATH among other means
to locate package configuration files.
- Create cmFindCommon as base for cmFindBase and cmFindPackageCommand
- Move common functionality up to cmFindCommon
- Improve documentation of FIND_* commands.
- Fix FIND_* commands to not add framework/app paths in wrong place.
Diffstat (limited to 'Source/cmFindCommon.h')
-rw-r--r-- | Source/cmFindCommon.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/Source/cmFindCommon.h b/Source/cmFindCommon.h new file mode 100644 index 0000000..962a017 --- /dev/null +++ b/Source/cmFindCommon.h @@ -0,0 +1,95 @@ +/*========================================================================= + + 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 cmFindCommon_h +#define cmFindCommon_h + +#include "cmCommand.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: + + enum RootPathMode { RootPathModeBoth, + RootPathModeOnlyRootPath, + RootPathModeNoRootPath }; + + enum PathType { FullPath, CMakePath, EnvPath }; + + /** Place a set of search paths under the search roots. */ + void RerootPaths(std::vector<std::string>& paths); + + /** Compute the current default root path mode. */ + void SelectDefaultRootPathMode(); + + /** Compute the current default bundle/framework search policy. */ + void SelectDefaultMacMode(); + + cmStdString CMakePathName; + RootPathMode FindRootPathMode; + + bool CheckCommonArgument(std::string const& arg); + void AddPathSuffix(std::string const& arg); + void GetAppBundlePaths(std::vector<std::string>& paths); + void GetFrameworkPaths(std::vector<std::string>& paths); + + void AddCMakePath(std::vector<std::string>& out_paths, + const char* variable, std::set<cmStdString>* emmitted = 0); + void AddEnvPath(std::vector<std::string>& out_paths, + const char* variable, std::set<cmStdString>* emmitted = 0); + void AddPathsInternal(std::vector<std::string>& out_paths, + std::vector<std::string> const& in_paths, + PathType pathType, + std::set<cmStdString>* emmitted = 0); + void AddPathInternal(std::vector<std::string>& out_paths, + std::string const& in_path, + PathType pathType, + std::set<cmStdString>* emmitted = 0); + + bool NoDefaultPath; + bool NoCMakePath; + bool NoCMakeEnvironmentPath; + bool NoSystemEnvironmentPath; + bool NoCMakeSystemPath; + + std::vector<std::string> SearchPathSuffixes; + + std::string GenericDocumentationMacPolicy; + std::string GenericDocumentationRootPath; + std::string GenericDocumentationPathsOrder; + + bool SearchFrameworkFirst; + bool SearchFrameworkOnly; + bool SearchFrameworkLast; + + bool SearchAppBundleFirst; + bool SearchAppBundleOnly; + bool SearchAppBundleLast; +}; + +#endif |