1# Prepare variable definitions.
2set(VAR_UNDEFINED)
3set(VAR_PATH /some/path/to/a/file.txt)
4set(FALSE_NAMES OFF NO FALSE N FOO-NOTFOUND IGNORE Off No False Ignore off n no false ignore)
5set(TRUE_NAMES ON YES TRUE Y On Yes True on yes true y)
6foreach(_arg "" 0 1 2 ${TRUE_NAMES} ${FALSE_NAMES})
7  set(VAR_${_arg} "${_arg}")
8endforeach()
9
10macro(test_vars _old)
11  # Variables set to false or not set.
12  foreach(_var "" 0 ${FALSE_NAMES} UNDEFINED)
13    if(VAR_${_var})
14      message(FATAL_ERROR "${_old}if(VAR_${_var}) is true!")
15    else()
16      message(STATUS "${_old}if(VAR_${_var}) is false")
17    endif()
18
19    if(NOT VAR_${_var})
20      message(STATUS "${_old}if(NOT VAR_${_var}) is true")
21    else()
22      message(FATAL_ERROR "${_old}if(NOT VAR_${_var}) is false!")
23    endif()
24  endforeach()
25
26  # Variables set to true.
27  foreach(_var 1 2 ${TRUE_NAMES} PATH)
28    if(VAR_${_var})
29      message(STATUS "${_old}if(VAR_${_var}) is true")
30    else()
31      message(FATAL_ERROR "${_old}if(VAR_${_var}) is false!")
32    endif()
33
34    if(NOT VAR_${_var})
35      message(FATAL_ERROR "${_old}if(NOT VAR_${_var}) is true!")
36    else()
37      message(STATUS "${_old}if(NOT VAR_${_var}) is false")
38    endif()
39  endforeach()
40endmacro()
41
42#-----------------------------------------------------------------------------
43# Test the OLD behavior of CMP0012.
44cmake_policy(SET CMP0012 OLD)
45
46# False constants not recognized (still false).
47foreach(_false "" ${FALSE_NAMES})
48  if("${_false}")
49    message(FATAL_ERROR "OLD if(${_false}) is true!")
50  else()
51    message(STATUS "OLD if(${_false}) is false")
52  endif()
53
54  if(NOT "${_false}")
55    message(STATUS "OLD if(NOT ${_false}) is true")
56  else()
57    message(FATAL_ERROR "OLD if(NOT ${_false}) is false!")
58  endif()
59endforeach()
60
61# True constants not recognized.
62foreach(_false ${TRUE_NAMES})
63  if(${_false})
64    message(FATAL_ERROR "OLD if(${_false}) is true!")
65  else()
66    message(STATUS "OLD if(${_false}) is false")
67  endif()
68
69  if(NOT ${_false})
70    message(STATUS "OLD if(NOT ${_false}) is true")
71  else()
72    message(FATAL_ERROR "OLD if(NOT ${_false}) is false!")
73  endif()
74endforeach()
75
76# Numbers not recognized properly.
77foreach(_num 2 -2 2.0 -2.0 2x -2x)
78  if(${_num})
79    message(FATAL_ERROR "OLD if(${_num}) is true!")
80  else()
81    message(STATUS "OLD if(${_num}) is false")
82  endif()
83
84  if(NOT ${_num})
85    message(FATAL_ERROR "OLD if(NOT ${_num}) is true!")
86  else()
87    message(STATUS "OLD if(NOT ${_num}) is false")
88  endif()
89endforeach()
90
91test_vars("OLD ")
92
93#-----------------------------------------------------------------------------
94
95# Test the NEW behavior of CMP0012.
96cmake_policy(SET CMP0012 NEW)
97
98# Test false constants.
99foreach(_false "" 0 ${FALSE_NAMES})
100  if("${_false}")
101    message(FATAL_ERROR "if(${_false}) is true!")
102  else()
103    message(STATUS "if(${_false}) is false")
104  endif()
105
106  if(NOT "${_false}")
107    message(STATUS "if(NOT ${_false}) is true")
108  else()
109    message(FATAL_ERROR "if(NOT ${_false}) is false!")
110  endif()
111endforeach()
112
113# Test true constants.
114foreach(_true 1 ${TRUE_NAMES})
115  if(${_true})
116    message(STATUS "if(${_true}) is true")
117  else()
118    message(FATAL_ERROR "if(${_true}) is false!")
119  endif()
120
121  if(NOT ${_true})
122    message(FATAL_ERROR "if(NOT ${_true}) is true!")
123  else()
124    message(STATUS "if(NOT ${_true}) is false")
125  endif()
126endforeach()
127
128# Numbers recognized properly.
129foreach(_num 2 -2 2.0 -2.0)
130  if(${_num})
131    message(STATUS "if(${_num}) is true")
132  else()
133    message(FATAL_ERROR "if(${_num}) is false!")
134  endif()
135
136  if(NOT ${_num})
137    message(FATAL_ERROR "if(NOT ${_num}) is true!")
138  else()
139    message(STATUS "if(NOT ${_num}) is false")
140  endif()
141endforeach()
142
143# Bad numbers not recognized.
144foreach(_bad 2x -2x)
145  if(${_bad})
146    message(FATAL_ERROR "if(${_bad}) is true!")
147  else()
148    message(STATUS "if(${_bad}) is false")
149  endif()
150
151  if(NOT ${_bad})
152    message(STATUS "if(NOT ${_bad}) is true")
153  else()
154    message(FATAL_ERROR "if(NOT ${_bad}) is false!")
155  endif()
156endforeach()
157
158test_vars("")
159