IfTest.cmake 3.9 KB

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