mirror of
https://github.com/Kitware/CMake.git
synced 2025-05-09 06:42:18 +08:00

#pragma once is a widely supported compiler pragma, even though it is not part of the C++ standard. Many of the issues keeping #pragma once from being standardized (distributed filesystems, build farms, hard links, etc.) do not apply to CMake - it is easy to build CMake on a single machine. CMake also does not install any header files which can be consumed by other projects (though cmCPluginAPI.h has been deliberately omitted from this conversion in case anyone is still using it.) Finally, #pragma once has been required to build CMake since at least August 2017 (7f29bbe6 enabled server mode unconditionally, which had been using #pragma once since September 2016 (b13d3e0d)). The fact that we now require C++11 filters out old compilers, and it is unlikely that there is a compiler which supports C++11 but does not support #pragma once.
145 lines
3.6 KiB
C++
145 lines
3.6 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
|
#pragma once
|
|
|
|
#include "cmConfigure.h" // IWYU pragma: keep
|
|
|
|
#include <map>
|
|
#include <set>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "cmPathLabel.h"
|
|
#include "cmSearchPath.h"
|
|
|
|
class cmExecutionStatus;
|
|
class cmMakefile;
|
|
|
|
/** \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:
|
|
cmFindCommon(cmExecutionStatus& status);
|
|
|
|
void SetError(std::string const& e);
|
|
|
|
bool DebugModeEnabled() const { return this->DebugMode; }
|
|
|
|
protected:
|
|
friend class cmSearchPath;
|
|
friend class cmFindBaseDebugState;
|
|
|
|
/** Used to define groups of path labels */
|
|
class PathGroup : public cmPathLabel
|
|
{
|
|
protected:
|
|
PathGroup();
|
|
|
|
public:
|
|
PathGroup(const std::string& label)
|
|
: cmPathLabel(label)
|
|
{
|
|
}
|
|
static PathGroup All;
|
|
};
|
|
|
|
/* Individual path types */
|
|
class PathLabel : public cmPathLabel
|
|
{
|
|
protected:
|
|
PathLabel();
|
|
|
|
public:
|
|
PathLabel(const std::string& label)
|
|
: cmPathLabel(label)
|
|
{
|
|
}
|
|
static PathLabel PackageRoot;
|
|
static PathLabel CMake;
|
|
static PathLabel CMakeEnvironment;
|
|
static PathLabel Hints;
|
|
static PathLabel SystemEnvironment;
|
|
static PathLabel CMakeSystem;
|
|
static PathLabel Guess;
|
|
};
|
|
|
|
enum RootPathMode
|
|
{
|
|
RootPathModeNever,
|
|
RootPathModeOnly,
|
|
RootPathModeBoth
|
|
};
|
|
|
|
/** Construct the various path groups and labels */
|
|
void InitializeSearchPathGroups();
|
|
|
|
/** Place a set of search paths under the search roots. */
|
|
void RerootPaths(std::vector<std::string>& paths);
|
|
|
|
/** Get ignored paths from CMAKE_[SYSTEM_]IGNORE_path variables. */
|
|
void GetIgnoredPaths(std::vector<std::string>& ignore);
|
|
void GetIgnoredPaths(std::set<std::string>& ignore);
|
|
|
|
/** Compute final search path list (reroot + trailing slash). */
|
|
void ComputeFinalPaths();
|
|
|
|
/** Compute the current default root path mode. */
|
|
void SelectDefaultRootPathMode();
|
|
|
|
/** Compute the current default bundle/framework search policy. */
|
|
void SelectDefaultMacMode();
|
|
|
|
/** Compute the current default search modes based on global variables. */
|
|
void SelectDefaultSearchModes();
|
|
|
|
/** The `InitialPass` functions of the child classes should set
|
|
this->DebugMode to the result of this. */
|
|
bool ComputeIfDebugModeWanted();
|
|
|
|
// Path arguments prior to path manipulation routines
|
|
std::vector<std::string> UserHintsArgs;
|
|
std::vector<std::string> UserGuessArgs;
|
|
|
|
std::string CMakePathName;
|
|
RootPathMode FindRootPathMode;
|
|
|
|
bool CheckCommonArgument(std::string const& arg);
|
|
void AddPathSuffix(std::string const& arg);
|
|
|
|
void DebugMessage(std::string const& msg) const;
|
|
bool DebugMode;
|
|
bool NoDefaultPath;
|
|
bool NoPackageRootPath;
|
|
bool NoCMakePath;
|
|
bool NoCMakeEnvironmentPath;
|
|
bool NoSystemEnvironmentPath;
|
|
bool NoCMakeSystemPath;
|
|
|
|
std::vector<std::string> SearchPathSuffixes;
|
|
|
|
std::map<PathGroup, std::vector<PathLabel>> PathGroupLabelMap;
|
|
std::vector<PathGroup> PathGroupOrder;
|
|
std::map<std::string, PathLabel> PathLabelStringMap;
|
|
std::map<PathLabel, cmSearchPath> LabeledPaths;
|
|
|
|
std::vector<std::string> SearchPaths;
|
|
std::set<std::string> SearchPathsEmitted;
|
|
|
|
bool SearchFrameworkFirst;
|
|
bool SearchFrameworkOnly;
|
|
bool SearchFrameworkLast;
|
|
|
|
bool SearchAppBundleFirst;
|
|
bool SearchAppBundleOnly;
|
|
bool SearchAppBundleLast;
|
|
|
|
cmMakefile* Makefile;
|
|
cmExecutionStatus& Status;
|
|
};
|