| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- /*============================================================================
- CMake - Cross Platform Makefile Generator
- Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
- Distributed under the OSI-approved BSD License (the "License");
- see accompanying file Copyright.txt for details.
- This software is distributed WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the License for more information.
- ============================================================================*/
- #ifndef cmPolicies_h
- #define cmPolicies_h
- #include "cmCustomCommand.h"
- #include <bitset>
- class cmMakefile;
- class cmPolicy;
- #define CM_FOR_EACH_POLICY_TABLE(POLICY, SELECT) \
- SELECT(POLICY, CMP0000, \
- "A minimum required CMake version must be specified.", \
- 2, 6, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0001, \
- "CMAKE_BACKWARDS_COMPATIBILITY should no longer be used.", \
- 2, 6, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0002, \
- "Logical target names must be globally unique.", \
- 2, 6, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0003, \
- "Libraries linked via full path no longer produce linker search paths.", \
- 2, 6, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0004, \
- "Libraries linked may not have leading or trailing whitespace.", \
- 2, 6, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0005, \
- "Preprocessor definition values are now escaped automatically.", \
- 2, 6, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0006, \
- "Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION.", \
- 2, 6, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0007, \
- "list command no longer ignores empty elements.", \
- 2, 6, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0008, \
- "Libraries linked by full-path must have a valid library file name.", \
- 2, 6, 1, cmPolicies::WARN) \
- SELECT(POLICY, CMP0009, \
- "FILE GLOB_RECURSE calls should not follow symlinks by default.", \
- 2, 6, 2, cmPolicies::WARN) \
- SELECT(POLICY, CMP0010, \
- "Bad variable reference syntax is an error.", \
- 2, 6, 3, cmPolicies::WARN) \
- SELECT(POLICY, CMP0011, \
- "Included scripts do automatic cmake_policy PUSH and POP.", \
- 2, 6, 3, cmPolicies::WARN) \
- SELECT(POLICY, CMP0012, \
- "if() recognizes numbers and boolean constants.", \
- 2, 8, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0013, \
- "Duplicate binary directories are not allowed.", \
- 2, 8, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0014, \
- "Input directories must have CMakeLists.txt.", \
- 2, 8, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0015, \
- "link_directories() treats paths relative to the source dir.", \
- 2, 8, 1, cmPolicies::WARN) \
- SELECT(POLICY, CMP0016, \
- "target_link_libraries() reports error if its only argument " \
- "is not a target.", \
- 2, 8, 3, cmPolicies::WARN) \
- SELECT(POLICY, CMP0017, \
- "Prefer files from the CMake module directory when including from " \
- "there.", \
- 2, 8, 4, cmPolicies::WARN) \
- SELECT(POLICY, CMP0018, \
- "Ignore CMAKE_SHARED_LIBRARY_<Lang>_FLAGS variable.", \
- 2, 8, 9, cmPolicies::WARN) \
- SELECT(POLICY, CMP0019, \
- "Do not re-expand variables in include and link information.", \
- 2, 8, 11, cmPolicies::WARN) \
- SELECT(POLICY, CMP0020, \
- "Automatically link Qt executables to qtmain target on Windows.", \
- 2, 8, 11, cmPolicies::WARN) \
- SELECT(POLICY, CMP0021, \
- "Fatal error on relative paths in INCLUDE_DIRECTORIES target property.", \
- 2, 8, 12, cmPolicies::WARN) \
- SELECT(POLICY, CMP0022, \
- "INTERFACE_LINK_LIBRARIES defines the link interface.", \
- 2, 8, 12, cmPolicies::WARN) \
- SELECT(POLICY, CMP0023, \
- "Plain and keyword target_link_libraries signatures cannot be mixed.", \
- 2, 8, 12, cmPolicies::WARN) \
- SELECT(POLICY, CMP0024, \
- "Disallow include export result.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0025, \
- "Compiler id for Apple Clang is now AppleClang.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0026, \
- "Disallow use of the LOCATION target property.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0027, \
- "Conditionally linked imported targets with missing include " \
- "directories.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0028, \
- "Double colon in target name means ALIAS or IMPORTED target.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0029, \
- "The subdir_depends command should not be called.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0030, \
- "The use_mangled_mesa command should not be called.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0031, \
- "The load_command command should not be called.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0032, \
- "The output_required_files command should not be called.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0033, \
- "The export_library_dependencies command should not be called.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0034, \
- "The utility_source command should not be called.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0035, \
- "The variable_requires command should not be called.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0036, \
- "The build_name command should not be called.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0037, \
- "Target names should not be reserved and should match a validity " \
- "pattern.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0038, \
- "Targets may not link directly to themselves.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0039, \
- "Utility targets may not have link dependencies.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0040, \
- "The target in the TARGET signature of add_custom_command() must " \
- "exist.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0041, \
- "Error on relative include with generator expression.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0042, \
- "MACOSX_RPATH is enabled by default.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0043, \
- "Ignore COMPILE_DEFINITIONS_<Config> properties.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0044, \
- "Case sensitive <LANG>_COMPILER_ID generator expressions.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0045, \
- "Error on non-existent target in get_target_property.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0046, \
- "Error on non-existent dependency in add_dependencies.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0047, \
- "Use QCC compiler id for the qcc drivers on QNX.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0048, \
- "project() command manages VERSION variables.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0049, \
- "Do not expand variables in target source entries.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0050, \
- "Disallow add_custom_command SOURCE signatures.", \
- 3, 0, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0051, \
- "List TARGET_OBJECTS in SOURCES target property.", \
- 3, 1, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0052, \
- "Reject source and build dirs in installed " \
- "INTERFACE_INCLUDE_DIRECTORIES.", \
- 3, 1, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0053, \
- "Simplify variable reference and escape sequence evaluation.", \
- 3, 1, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0054, \
- "Only interpret if() arguments as variables or keywords when unquoted.", \
- 3, 1, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0055, \
- "Strict checking for break() command.", \
- 3, 2, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0056, \
- "Honor link flags in try_compile() source-file signature.", \
- 3, 2, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0057, \
- "Support new IN_LIST if() operator.", \
- 3, 3, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0058, \
- "Ninja requires custom command byproducts to be explicit.", \
- 3, 3, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0059, \
- "Do no treat DEFINITIONS as a built-in directory property.", \
- 3, 3, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0060, \
- "Link libraries by full path even in implicit directories.", \
- 3, 3, 0, cmPolicies::WARN) \
- SELECT(POLICY, CMP0061, \
- "CTest does not by default tell make to ignore errors (-i).", \
- 3, 3, 0, cmPolicies::WARN)
- #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
- #define CM_FOR_EACH_POLICY_ID(POLICY) \
- CM_FOR_EACH_POLICY_TABLE(POLICY, CM_SELECT_ID)
- /** \class cmPolicies
- * \brief Handles changes in CMake behavior and policies
- *
- * See the cmake wiki section on
- * <a href="http://www.cmake.org/Wiki/CMake/Policies">policies</a>
- * for an overview of this class's purpose
- */
- class cmPolicies
- {
- public:
- /// Status of a policy
- enum PolicyStatus {
- OLD, ///< Use old behavior
- WARN, ///< Use old behavior but issue a warning
- NEW, ///< Use new behavior
- /// Issue an error if user doesn't set policy status to NEW and hits the
- /// check
- REQUIRED_IF_USED,
- REQUIRED_ALWAYS ///< Issue an error unless user sets policy status to NEW.
- };
- /// Policy identifiers
- enum PolicyID
- {
- #define POLICY_ENUM(POLICY_ID) POLICY_ID,
- CM_FOR_EACH_POLICY_ID(POLICY_ENUM)
- #undef POLICY_ENUM
- /** \brief Always the last entry.
- *
- * Useful mostly to avoid adding a comma the last policy when adding a new
- * one.
- */
- CMPCOUNT
- };
- ///! convert a string policy ID into a number
- static bool GetPolicyID(const char *id, /* out */ cmPolicies::PolicyID &pid);
- ///! Get the default status for a policy
- static cmPolicies::PolicyStatus GetPolicyStatus(cmPolicies::PolicyID id);
- ///! Set a policy level for this listfile
- static bool ApplyPolicyVersion(cmMakefile *mf, const char *version);
- ///! return a warning string for a given policy
- static std::string GetPolicyWarning(cmPolicies::PolicyID id);
- ///! return an error string for when a required policy is unspecified
- static std::string GetRequiredPolicyError(cmPolicies::PolicyID id);
- ///! return an error string for when a required policy is unspecified
- static std::string GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id);
- /** Represent a set of policy values. */
- struct PolicyMap
- {
- PolicyMap();
- PolicyStatus Get(PolicyID id) const;
- void Set(PolicyID id, PolicyStatus status);
- bool IsDefined(PolicyID id) const;
- bool IsEmpty() const;
- private:
- std::bitset<cmPolicies::CMPCOUNT> UNDEFINED;
- std::bitset<cmPolicies::CMPCOUNT> OLD;
- std::bitset<cmPolicies::CMPCOUNT> NEW;
- std::bitset<cmPolicies::CMPCOUNT> REQUIRED_IF_USED;
- std::bitset<cmPolicies::CMPCOUNT> REQUIRED_ALWAYS;
- };
- };
- #endif
|