On 11/04/2011 11:22 PM, Dan Kegel wrote: > I just ran into two little newbie problems having to do with booleans. > > CMP0012 made various boolean constants case insensitive, > but NOT is still case sensitive. > If you use it in lowercase, you get the warning > > CMake Warning (dev) at CMakeLists.txt:2 (if): > given arguments: > "not" "foo" > Unknown arguments specified > > That's fairly clear, and anyone who's been around cmake will > suspect that uppercase is required. > Still, it might be nice to accept lowercase not at some point.
NOT isn't a constant but a boolean operator like AND/OR/EXISTS etc., and none of the latters is case-sensitive at the moment, so why should NOT be the sole exception? > Also, people who mistakenly use !foo instead of NOT foo > get a surprise: the result is always silently false. > It might be nice to catch this possibly common error > and output an error message. !foo seems to be a valid indentifier for a variable: CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) PROJECT(FOO NONE) SET(!foo "bar") GET_DIRECTORY_PROPERTY(VARS VARIABLES) MESSAGE("VARS: ${VARS}") IF(!foo STREQUAL "bar") MESSAGE("!foor==bar") ELSE() MESSAGE("!foo!=bar") ENDIF() Besides the fact that you can not refer to it via ${!foo}, it's highly inadvisable to name a variable in this way, of course. Anyway, if one considers to introduce "!" as an equivalent for NOT, one should also add "&" and "|" for AND/OR, or better "&&" and "||"? What's about "=/==", "!=", "<", "<=", ">", ">=" for strings and/or numbers? How to distinguish the latters? Nocturnal thoughts... ;-) Regards, Michael -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake