[Cmake-commits] [cmake-commits] king committed cmMakefile.cxx 1.463 1.464 cmPolicies.cxx 1.22 1.23 cmPolicies.h 1.12 1.13

cmake-commits at cmake.org cmake-commits at cmake.org
Thu Mar 13 17:11:59 EDT 2008


Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv30762/Source

Modified Files:
	cmMakefile.cxx cmPolicies.cxx cmPolicies.h 
Log Message:
ENH: Add policy CMP0005 to decide whether add_definitions should escape defs.


Index: cmPolicies.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmPolicies.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -C 2 -d -r1.12 -r1.13
*** cmPolicies.h	13 Mar 2008 20:35:39 -0000	1.12
--- cmPolicies.h	13 Mar 2008 21:11:57 -0000	1.13
***************
*** 46,49 ****
--- 46,50 ----
      CMP0003, // Linking does not include extra -L paths
      CMP0004, // Libraries linked may not have leading or trailing whitespace
+     CMP0005, // Definition value escaping
  
      // Always the last entry.  Useful mostly to avoid adding a comma

Index: cmPolicies.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmPolicies.cxx,v
retrieving revision 1.22
retrieving revision 1.23
diff -C 2 -d -r1.22 -r1.23
*** cmPolicies.cxx	13 Mar 2008 20:35:39 -0000	1.22
--- cmPolicies.cxx	13 Mar 2008 21:11:57 -0000	1.23
***************
*** 217,220 ****
--- 217,241 ----
      "add_library command.",
      2,6,0, cmPolicies::WARN);
+ 
+   this->DefinePolicy(
+     CMP0005, "CMP0005",
+     "Preprocessor definition values are now escaped automatically.",
+     "This policy determines whether or not CMake should generate escaped "
+     "preprocessor definition values added via add_definitions.  "
+     "CMake versions 2.4 and below assumed that only trivial values would "
+     "be given for macros in add_definitions calls.  "
+     "It did not attempt to escape non-trivial values such as string "
+     "literals in generated build rules.  "
+     "CMake versions 2.6 and above support escaping of most values, but "
+     "cannot assume the user has not added escapes already in an attempt to "
+     "work around limitations in earlier versions.\n"
+     "The OLD behavior for this policy is to place definition values given "
+     "to add_definitions directly in the generated build rules without "
+     "attempting to escape anything.  "
+     "The NEW behavior for this policy is to generate correct escapes "
+     "for all native build tools automatically.  "
+     "See documentation of the COMPILE_DEFINITIONS target property for "
+     "limitations of the escaping implementation.",
+     2,6,0, cmPolicies::WARN);
  }
  

Index: cmMakefile.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmMakefile.cxx,v
retrieving revision 1.463
retrieving revision 1.464
diff -C 2 -d -r1.463 -r1.464
*** cmMakefile.cxx	13 Mar 2008 18:13:44 -0000	1.463
--- cmMakefile.cxx	13 Mar 2008 21:11:57 -0000	1.464
***************
*** 1024,1035 ****
  {
    // 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_.]+)?$");
  
    // Make sure the definition matches.
!   if(!regex.find(def.c_str()))
      {
      return false;
--- 1024,1032 ----
  {
    // Create a regular expression to match valid definitions.
    static cmsys::RegularExpression
!     valid("^[-/]D[A-Za-z_][A-Za-z0-9_]*(=.*)$");
  
    // Make sure the definition matches.
!   if(!valid.find(def.c_str()))
      {
      return false;
***************
*** 1044,1047 ****
--- 1041,1075 ----
      }
  
+   // 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;



More information about the Cmake-commits mailing list