summaryrefslogtreecommitdiffstats
path: root/Source/cmFindCommon.h
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2008-01-17 14:02:31 (GMT)
committerBrad King <brad.king@kitware.com>2008-01-17 14:02:31 (GMT)
commitb424df917dc14ea7376940c6c22a3a274aedcc2b (patch)
treec29fc8171c1a13c74746dd2e28e10016614e16cb /Source/cmFindCommon.h
parent491d5d01049e515fa5317f943d9e48ff531f69a6 (diff)
downloadCMake-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.h95
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