[CMake] BOOL type
    Brandon Van Every 
    bvanevery at gmail.com
       
    Mon Dec 17 09:17:05 EST 2007
    
    
  
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
    
    
More information about the CMake
mailing list