I propose the addition of a BOOL type to the CMake language. bool(variable [value])
would declare a variable of type BOOL, with an optional value supplied. Any SET commands performed on the variable in its scope would be subject to boolean type constraint. A BOOL can take on the following values. Any other assignment is an error. "TRUE" class - TRUE, 1, Y, Yes, YES, y, yes, ON "FALSE" class - FALSE, 0, N, n, No, NO, OFF, <empty> if(bool_var) would succeed if bool_var is set to a member of the TRUE class. It would fail if set to a member of the FALSE class. Equality comparison would be by boolean class, not the specific boolean value. The following code succeeds: set(bool_var ON) [...] if(bool_var EQUAL Yes) # this code is executed The above functionality could be added without affecting legacy CMake script in any way. In addition, a variable CMAKE_REQUIRE_BOOL, or some other appropriate interface, would be provided. If set(CMAKE_REQUIRE_BOOL TRUE) is performed, then instead of if(some_string) failing when some_string has a value of: empty, 0, N, NO, OFF, FALSE, NOTFOUND, or <variable>-NOTFOUND it fails when some_string has a value of: empty, 0, NOTFOUND, or <variable>-NOTFOUND The intent is to reduce the level of co-option / pollution in string processing. Under the current rules, it is fairly easy for a regex to inadvertently fail: set(sillystring "The rain in spain") string(REGEX MATCH ".$" lastchar "${sillystring}") if(NOT lastchar) message("Zero length string") endif(NOT lastchar) C:\devel\src\cbugs\trueorfalse>cmake -P trueorfalse.cmake Zero length string NOTFOUND and <variable>-NOTFOUND are considered acceptable string pollutions, because they are significantly longer and unlikely to be matched in typical string processing. "0" is problematic, as it is a single character like "n". A similar proposal for a NUMBER data type, and CMAKE_REQUIRE_NUMBER, could be used to eliminate the problem of the "0". Cheers, Brandon Van Every _______________________________________________ CMake mailing list CMake@cmake.org http://www.cmake.org/mailman/listinfo/cmake