summaryrefslogtreecommitdiffstats
path: root/Source/cmPolicies.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-10-27 13:07:39 (GMT)
committerBrad King <brad.king@kitware.com>2009-10-27 13:07:39 (GMT)
commitcb185d93d29d27eaafd321f657f4ba12d9beaeb8 (patch)
treecaba9c82f1ce3f68a16a577dfff0deb4eda7506a /Source/cmPolicies.cxx
parent9f43fa602d53d131adffd1a3bb8188b549a96a01 (diff)
downloadCMake-cb185d93d29d27eaafd321f657f4ba12d9beaeb8.zip
CMake-cb185d93d29d27eaafd321f657f4ba12d9beaeb8.tar.gz
CMake-cb185d93d29d27eaafd321f657f4ba12d9beaeb8.tar.bz2
Fix if() command and CMP0012 OLD/NEW behavior
The commit "modified the if command to address bug 9123 some" changed the if() command behavior with respect to named boolean constants. It introduced policy CMP0012 to provide compatibility. However, it also changed behavior with respect to numbers (like '2') but did not cover the change with the policy. Also, the behavior it created for numbers is confusing ('2' is false). This commit teaches if() to recognize numbers again, and treats them like the C language does in terms of boolean conversion. We also fix the CMP0012 check to trigger in all cases where the result of boolean coersion differs from that produced by CMake 2.6.4.
Diffstat (limited to 'Source/cmPolicies.cxx')
-rw-r--r--Source/cmPolicies.cxx25
1 files changed, 15 insertions, 10 deletions
diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 0d35b65..6b35b5b 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -358,19 +358,24 @@ cmPolicies::cmPolicies()
this->DefinePolicy(
CMP0012, "CMP0012",
- "The if() command can recognize named boolean constants.",
- "In CMake versions 2.6.4 and lower the only boolean constants were 0 "
- "and 1. Other boolean constants such as true, false, yes, no, "
+ "if() recognizes numbers and boolean constants.",
+ "In CMake versions 2.6.4 and lower the if() command implicitly "
+ "dereferenced arguments corresponding to variables, even those named "
+ "like numbers or boolean constants, except for 0 and 1. "
+ "Numbers and boolean constants such as true, false, yes, no, "
"on, off, y, n, notfound, ignore (all case insensitive) were recognized "
"in some cases but not all. "
"For example, the code \"if(TRUE)\" might have evaluated as false. "
- "In later versions of cmake these values are "
- "treated as boolean constants more consistently and should not be used "
- "as variable names. "
- "The OLD behavior for this policy is to allow variables to have names "
- "such as true and to dereference them. "
- "The NEW behavior for this policy is to treat strings like true as a "
- "boolean constant.",
+ "Numbers such as 2 were recognized only in "
+ "boolean expressions like \"if(NOT 2)\" (leading to false) "
+ "but not as a single-argument like \"if(2)\" (also leading to false). "
+ "Later versions of CMake prefer to treat numbers and boolean constants "
+ "literally, so they should not be used as variable names."
+ "\n"
+ "The OLD behavior for this policy is to implicitly dereference variables "
+ "named like numbers and boolean constants. "
+ "The NEW behavior for this policy is to recognize numbers and "
+ "boolean constants without dereferencing variables with such names.",
2,8,0, cmPolicies::WARN);
this->DefinePolicy(