| /*============================================================================ |
| 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" |
| |
| class cmake; |
| class cmMakefile; |
| class cmPolicy; |
| |
| /** \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: |
| cmPolicies(); |
| ~cmPolicies(); |
| |
| /// 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. |
| }; |
| static const char* PolicyStatusNames[]; |
| |
| /// Policy identifiers |
| enum PolicyID |
| { |
| CMP0000, ///< Policy version specification |
| CMP0001, ///< Ignore old compatibility variable |
| CMP0002, ///< Target names must be unique |
| CMP0003, ///< Linking does not include extra -L paths |
| CMP0004, ///< Libraries linked may not have leading or trailing whitespace |
| CMP0005, ///< Definition value escaping |
| CMP0006, ///< BUNDLE install rules needed for MACOSX_BUNDLE targets |
| CMP0007, ///< list command handling of empty elements |
| CMP0008, ///< Full-path libraries must be a valid library file name |
| CMP0009, ///< GLOB_RECURSE should not follow symlinks by default |
| CMP0010, ///< Bad variable reference syntax is an error |
| CMP0011, ///< Strong policy scope for include and find_package |
| CMP0012, ///< Recognize numbers and boolean constants in if() |
| CMP0013, ///< Duplicate binary directories not allowed |
| CMP0014, ///< Input directories must have CMakeLists.txt |
| CMP0015, ///< link_directories() treats paths relative to source dir |
| /// target_link_libraries() fails if only argument is not a target |
| CMP0016, |
| CMP0017, ///< Prefer files in CMAKE_ROOT when including from CMAKE_ROOT |
| CMP0018, ///< Ignore language flags for shared libs, and adhere to |
| /// POSITION_INDEPENDENT_CODE property and *_COMPILE_OPTIONS_PI{E,C} |
| /// instead. |
| CMP0019, ///< No variable re-expansion in include and link info |
| CMP0020, ///< Automatically link Qt executables to qtmain target |
| CMP0021, ///< Fatal error on relative paths in INCLUDE_DIRECTORIES |
| /// target property |
| CMP0022, ///< INTERFACE_LINK_LIBRARIES defines the link interface |
| CMP0023, ///< Disallow mixing keyword and plain tll signatures |
| CMP0024, ///< Disallow including export() result. |
| CMP0025, ///< Compiler id for Apple Clang is now AppleClang |
| CMP0026, ///< Disallow use of the LOCATION target property. |
| CMP0027, ///< Conditionally linked imported targets with missing include |
| /// directories. |
| CMP0028, ///< Double colon in target name means ALIAS or IMPORTED target. |
| CMP0029, ///< Disallow command: subdir_depends |
| CMP0030, ///< Disallow command: use_mangled_mesa |
| CMP0031, ///< Disallow command: load_command |
| CMP0032, ///< Disallow command: output_required_files |
| CMP0033, ///< Disallow command: export_library_dependencies |
| CMP0034, ///< Disallow command: utility_source |
| CMP0035, ///< Disallow command: variable_requires |
| CMP0036, ///< Disallow command: build_name |
| CMP0037, ///< Target names should not be reserved and |
| /// should match a validity pattern. |
| CMP0038, ///< Targets may not link directly to themselves |
| CMP0039, ///< Utility targets may not have link dependencies |
| CMP0040, ///< The target in the TARGET signature of |
| /// add_custom_command() must exist. |
| CMP0041, ///< Error on relative include with generator expression |
| CMP0042, ///< Enable MACOSX_RPATH by default |
| CMP0043, ///< Ignore COMPILE_DEFINITIONS_<Config> properties |
| CMP0044, ///< Case sensitive <LANG>_COMPILER_ID generator expressions |
| CMP0045, ///< Error on non-existent target in get_target_property |
| CMP0046, ///< Error on non-existent dependency in add_dependencies |
| CMP0047, ///< Use QCC compiler id for the qcc drivers on QNX. |
| CMP0048, ///< project() command manages VERSION variables |
| CMP0049, ///< Do not expand variables in target source entries |
| CMP0050, ///< Disallow add_custom_command SOURCE signatures |
| CMP0051, ///< List TARGET_OBJECTS in SOURCES target property |
| CMP0052, ///< Reject source and build dirs in installed |
| /// INTERFACE_INCLUDE_DIRECTORIES |
| |
| CMP0053, ///< Simplify variable reference and escape sequence evaluation |
| CMP0054, ///< Only interpret if() arguments as variables |
| /// or keywords when unquoted. |
| |
| /** \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 |
| bool GetPolicyID(const char *id, /* out */ cmPolicies::PolicyID &pid); |
| std::string GetPolicyIDString(cmPolicies::PolicyID pid); |
| |
| ///! Get the default status for a policy |
| cmPolicies::PolicyStatus GetPolicyStatus(cmPolicies::PolicyID id); |
| |
| ///! Define a Policy for CMake |
| void DefinePolicy(cmPolicies::PolicyID id, |
| const char *stringID, |
| const char *shortDescription, |
| unsigned int majorVersionIntroduced, |
| unsigned int minorVersionIntroduced, |
| unsigned int patchVersionIntroduced, |
| cmPolicies::PolicyStatus status); |
| |
| ///! Set a policy level for this listfile |
| bool ApplyPolicyVersion(cmMakefile *mf, const char *version); |
| |
| ///! return a warning string for a given policy |
| std::string GetPolicyWarning(cmPolicies::PolicyID id); |
| |
| ///! return an error string for when a required policy is unspecified |
| std::string GetRequiredPolicyError(cmPolicies::PolicyID id); |
| |
| ///! return an error string for when a required policy is unspecified |
| std::string GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id); |
| |
| /** Represent a set of policy values. */ |
| typedef std::map<PolicyID, PolicyStatus> PolicyMap; |
| |
| private: |
| // might have to make these internal for VS6 not sure yet |
| std::map<PolicyID,cmPolicy *> Policies; |
| std::map<std::string,PolicyID> PolicyStringMap; |
| |
| void DiagnoseAncientPolicies(std::vector<PolicyID> const& ancient, |
| unsigned int majorVer, unsigned int minorVer, |
| unsigned int patchVer, cmMakefile* mf); |
| |
| bool GetPolicyDefault(cmMakefile* mf, std::string const& policy, |
| cmPolicies::PolicyStatus* defaultStatus); |
| |
| }; |
| |
| #endif |