diff options
author | Brad King <brad.king@kitware.com> | 2008-03-13 21:11:57 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2008-03-13 21:11:57 (GMT) |
commit | 9a83ce6efc10d5d51324f8b425213f18b0325b6e (patch) | |
tree | e7e76eb24a2b5f2c254b22a6da5146f726203ee8 /Source/cmMakefile.cxx | |
parent | a0ef9897159c2b64383ab1d3aa33fd43fec632d7 (diff) | |
download | CMake-9a83ce6efc10d5d51324f8b425213f18b0325b6e.zip CMake-9a83ce6efc10d5d51324f8b425213f18b0325b6e.tar.gz CMake-9a83ce6efc10d5d51324f8b425213f18b0325b6e.tar.bz2 |
ENH: Add policy CMP0005 to decide whether add_definitions should escape defs.
Diffstat (limited to 'Source/cmMakefile.cxx')
-rw-r--r-- | Source/cmMakefile.cxx | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index d8989bd..e605d37 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1023,14 +1023,11 @@ void cmMakefile::RemoveDefineFlag(const char* flag) bool cmMakefile::ParseDefineFlag(std::string const& def, bool remove) { // Create a regular expression to match valid definitions. - // Definitions with non-trivial values must not be matched because - // escaping them could break compatibility with escapes added by - // users. static cmsys::RegularExpression - regex("^[-/]D[A-Za-z_][A-Za-z0-9_]*(=[A-Za-z0-9_.]+)?$"); + valid("^[-/]D[A-Za-z_][A-Za-z0-9_]*(=.*)$"); // Make sure the definition matches. - if(!regex.find(def.c_str())) + if(!valid.find(def.c_str())) { return false; } @@ -1043,6 +1040,37 @@ bool cmMakefile::ParseDefineFlag(std::string const& def, bool remove) return false; } + // Definitions with non-trivial values require a policy check. + static cmsys::RegularExpression + trivial("^[-/]D[A-Za-z_][A-Za-z0-9_]*(=[A-Za-z0-9_.]+)?$"); + if(!trivial.find(def.c_str())) + { + // This definition has a non-trivial value. + switch(this->GetPolicyStatus(cmPolicies::CMP0005)) + { + case cmPolicies::WARN: + this->IssueMessage( + cmake::AUTHOR_WARNING, + this->GetPolicies()->GetPolicyWarning(cmPolicies::CMP0005) + ); + case cmPolicies::OLD: + // OLD behavior is to not escape the value. We should not + // convert the definition to use the property. + return false; + case cmPolicies::REQUIRED_IF_USED: + case cmPolicies::REQUIRED_ALWAYS: + this->IssueMessage( + cmake::FATAL_ERROR, + this->GetPolicies()->GetRequiredPolicyError(cmPolicies::CMP0005) + ); + return false; + case cmPolicies::NEW: + // NEW behavior is to escape the value. Proceed to convert it + // to an entry in the property. + break; + } + } + // Get the definition part after the flag. const char* define = def.c_str() + 2; |