You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

313 lines
8.6 KiB

23 years ago
24 years ago
22 years ago
24 years ago
23 years ago
24 years ago
24 years ago
24 years ago
24 years ago
24 years ago
24 years ago
24 years ago
24 years ago
  1. #
  2. # A more complex test case
  3. #
  4. SET(CMAKE_BACKWARDS_COMPATIBILITY 1.4)
  5. PROJECT (Complex)
  6. #
  7. # Define a macro
  8. #
  9. MACRO(ASSERT value msg)
  10. IF (NOT ${value})
  11. MESSAGE ("Assertion failure:" ${msg} )
  12. ENDIF (NOT ${value})
  13. ENDMACRO(ASSERT)
  14. # invoke the macro
  15. ASSERT(Complex_BINARY_DIR "The PROJECT command is broken")
  16. #
  17. # Define a var args macro, it must take two or four args
  18. #
  19. MACRO(TEST_ARGC value1 value2)
  20. ADD_DEFINITIONS(${value1} ${value2})
  21. IF (${ARGC} MATCHES 4)
  22. ADD_DEFINITIONS(${ARGV2} ${ARGV3})
  23. ENDIF (${ARGC} MATCHES 4)
  24. ENDMACRO(TEST_ARGC)
  25. # invoke the macro
  26. TEST_ARGC(-DCMAKE_ARGV1 -DCMAKE_ARGV2 -DCMAKE_ARGV3 -DCMAKE_ARGV4)
  27. MACRO(TEST_VAR_ARG fa)
  28. IF("${ARGV}" MATCHES "^1;2;3$")
  29. MESSAGE(STATUS "ARGV works")
  30. ELSE("${ARGV}" MATCHES "^1;2;3$")
  31. MESSAGE(FATAL_ERROR "ARGV does not work; got \"${ARGV}\" instead of \"1;2;3\"")
  32. ENDIF("${ARGV}" MATCHES "^1;2;3$")
  33. IF("${ARGN}" MATCHES "^2;3$")
  34. MESSAGE(STATUS "ARGN works")
  35. ELSE("${ARGN}" MATCHES "^2;3$")
  36. MESSAGE(FATAL_ERROR "ARGV does not work; got \"${ARGN}\" instead of \"2;3\"")
  37. ENDIF("${ARGN}" MATCHES "^2;3$")
  38. ENDMACRO(TEST_VAR_ARG)
  39. TEST_VAR_ARG(1 2 3)
  40. #
  41. # Use the ansi CXX compile flag for building cmake
  42. #
  43. IF (CMAKE_ANSI_CXXFLAGS)
  44. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_ANSI_CXXFLAGS}")
  45. ENDIF (CMAKE_ANSI_CXXFLAGS)
  46. IF(CMAKE_SYSTEM MATCHES "OSF1-V.*")
  47. IF(NOT CMAKE_COMPILER_IS_GNUCXX)
  48. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -timplicit_local -no_implicit_include ")
  49. ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX)
  50. ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V.*")
  51. ADD_DEFINITIONS(-DCMAKE_IS_FUN)
  52. ADD_DEFINITIONS(-DCMAKE_IS_REALLY_FUN)
  53. SET(TEST_SEP "a b c")
  54. SEPARATE_ARGUMENTS(TEST_SEP)
  55. #
  56. # Include vars from a file and from a cache
  57. #
  58. IF (EXISTS ${Complex_SOURCE_DIR}/VarTests.cmake)
  59. INCLUDE(${Complex_SOURCE_DIR}/VarTests.cmake)
  60. ENDIF (EXISTS ${Complex_SOURCE_DIR}/VarTests.cmake)
  61. INCLUDE(fileshouldnotbehere OPTIONAL)
  62. LOAD_CACHE(${Complex_SOURCE_DIR}/Cache
  63. EXCLUDE
  64. CACHE_TEST_VAR_EXCLUDED
  65. INCLUDE_INTERNALS
  66. CACHE_TEST_VAR_INTERNAL)
  67. LOAD_CACHE(${Complex_SOURCE_DIR}/Cache READ_WITH_PREFIX foo CACHE_TEST_VAR2)
  68. IF(${fooCACHE_TEST_VAR2} MATCHES bar)
  69. MESSAGE("Load cache worked: ${fooCACHE_TEST_VAR2}")
  70. ELSE(${fooCACHE_TEST_VAR2} MATCHES bar)
  71. MESSAGE(FATAL_ERROR "Load cache with prefix failed: ${fooCACHE_TEST_VAR2}")
  72. ENDIF(${fooCACHE_TEST_VAR2} MATCHES bar)
  73. #
  74. # Specify include and lib dirs
  75. # (BEFORE is for coverage)
  76. #
  77. INCLUDE_DIRECTORIES(
  78. Library
  79. ${Complex_SOURCE_DIR}/../../Source
  80. ${Complex_BINARY_DIR}/../../Source
  81. )
  82. INCLUDE_DIRECTORIES(BEFORE
  83. ${Complex_BINARY_DIR}
  84. )
  85. INCLUDE_REGULAR_EXPRESSION("^(cmTest|file|sharedFile).*$" "^cmMissing")
  86. LINK_DIRECTORIES(
  87. ${Complex_BINARY_DIR}/Library
  88. )
  89. #
  90. # check for SET CACHE FORCE
  91. #
  92. SET(FORCE_TEST 1 CACHE STRING "a test")
  93. SET(FORCE_TEST 0 CACHE STRING "a test" FORCE)
  94. #
  95. # Lib and exe path
  96. #
  97. SET (LIBRARY_OUTPUT_PATH
  98. ${Complex_BINARY_DIR}/bin/ CACHE INTERNAL
  99. "Single output directory for building all libraries.")
  100. SET (EXECUTABLE_OUTPUT_PATH
  101. ${Complex_BINARY_DIR}/bin/ CACHE INTERNAL
  102. "Single output directory for building all executables.")
  103. MESSAGE (Test " " escape " " semi-colon " " \; \;)
  104. #
  105. # Exec program (TODO: test a result)
  106. # Increase coverage.
  107. #
  108. MESSAGE("\nIgnore this message")
  109. OPTION(NO_EXEC_PROGRAM "Do not test EXEC_PROGRAM" 0)
  110. IF (NOT NO_EXEC_PROGRAM)
  111. EXEC_PROGRAM(${CMAKE_COMMAND} ARGS -E echo NO_EXEC_PROGRAM "${Complex_BINARY_DIR}")
  112. ELSE (NOT NO_EXEC_PROGRAM)
  113. MESSAGE("Set this option ON")
  114. ENDIF (NOT NO_EXEC_PROGRAM)
  115. MARK_AS_ADVANCED(NO_EXEC_PROGRAM)
  116. MARK_AS_ADVANCED(CLEAR NO_EXEC_PROGRAM)
  117. # Execute a process. Add coverage for this command.
  118. EXECUTE_PROCESS(
  119. COMMAND ${CMAKE_COMMAND} -E echo "ABCDEFG"
  120. OUTPUT_VARIABLE TEST_OUT
  121. )
  122. IF("${TEST_OUT}" MATCHES "^ABCDEFG\n$")
  123. ELSE("${TEST_OUT}" MATCHES "^ABCDEFG\n$")
  124. MESSAGE(SEND_ERROR "EXECUTE_PROCESS output test failed: [${TEST_OUT}]")
  125. ENDIF("${TEST_OUT}" MATCHES "^ABCDEFG\n$")
  126. # This test has some problems on UNIX systems. Disabling for now.
  127. #
  128. # EXECUTE_PROCESS(
  129. # COMMAND ${CMAKE_COMMAND} -E echo "ABCDEFG"
  130. # COMMAND /process/does/not/exist
  131. # OUTPUT_QUIET
  132. # ERROR_QUIET
  133. # RESULT_VARIABLE RESULT
  134. # )
  135. # IF("${RESULT}" MATCHES "^0$")
  136. # MESSAGE(SEND_ERROR
  137. # "EXECUTE_PROCESS result test failed with RESULT=[${RESULT}]")
  138. # ELSE("${RESULT}" MATCHES "^0$")
  139. # MESSAGE(STATUS "EXECUTE_PROCESS result test passed with RESULT=[${RESULT}]")
  140. # ENDIF("${RESULT}" MATCHES "^0$")
  141. #
  142. # Create directory.
  143. # The 'complex' executable will then test if this dir exists,
  144. # sadly it won't be able to remove it.
  145. #
  146. MAKE_DIRECTORY("${Complex_BINARY_DIR}/make_dir")
  147. #
  148. # Test FIND_LIBARY
  149. # Create a dummy empty lib
  150. #
  151. CONFIGURE_FILE(
  152. ${Complex_SOURCE_DIR}/Library/dummy
  153. ${Complex_BINARY_DIR}/Library/dummylib.lib
  154. COPYONLY IMMEDIATE)
  155. FOREACH (ext ${CMAKE_SHLIB_SUFFIX};.so;.a;.sl)
  156. CONFIGURE_FILE(
  157. ${Complex_SOURCE_DIR}/Library/dummy
  158. ${Complex_BINARY_DIR}/Library/libdummylib${ext}
  159. COPYONLY IMMEDIATE)
  160. ENDFOREACH (ext)
  161. FIND_LIBRARY(FIND_DUMMY_LIB
  162. dummylib
  163. PATHS
  164. ${Complex_BINARY_DIR}/Library DOC "find dummy lib")
  165. FIND_LIBRARY(FIND_DUMMY_LIB
  166. NAMES dummylib dummylib2
  167. PATHS
  168. ${Complex_BINARY_DIR}/Library DOC "find dummy lib")
  169. #
  170. # Test SET_SOURCE_FILES_PROPERTIES
  171. #
  172. SET_SOURCE_FILES_PROPERTIES(nonexisting_file2
  173. GENERATED
  174. ABSTRACT
  175. WRAP_EXCLUDE
  176. COMPILE_FLAGS "-foo -bar")
  177. GET_SOURCE_FILE_PROPERTY(FILE_HAS_ABSTRACT nonexisting_file2 ABSTRACT)
  178. GET_SOURCE_FILE_PROPERTY(FILE_HAS_WRAP_EXCLUDE nonexisting_file2 WRAP_EXCLUDE)
  179. GET_SOURCE_FILE_PROPERTY(FILE_COMPILE_FLAGS nonexisting_file2 COMPILE_FLAGS)
  180. SET_SOURCE_FILES_PROPERTIES(nonexisting_file3 PROPERTIES
  181. GENERATED 1
  182. ABSTRACT 1
  183. WRAP_EXCLUDE 1
  184. COMPILE_FLAGS "-foo -bar")
  185. GET_SOURCE_FILE_PROPERTY(FILE_HAS_ABSTRACT nonexisting_file3 ABSTRACT)
  186. GET_SOURCE_FILE_PROPERTY(FILE_HAS_WRAP_EXCLUDE nonexisting_file3 WRAP_EXCLUDE)
  187. GET_SOURCE_FILE_PROPERTY(FILE_COMPILE_FLAGS nonexisting_file3 COMPILE_FLAGS)
  188. #
  189. # Test registry (win32)
  190. # Create a file, put its path in a registry key, try to find the file in that
  191. # path using that registry key, then remove the file and the key
  192. #
  193. IF (WIN32)
  194. IF (NOT UNIX)
  195. SET(dir "${Complex_BINARY_DIR}/registry_dir")
  196. SET(file "registry_test_dummy")
  197. SET(hkey "HKEY_CURRENT_USER\\Software\\Kitware\\CMake\\Tests\\Complex;registry_test")
  198. CONFIGURE_FILE(
  199. ${Complex_SOURCE_DIR}/Library/dummy
  200. "${dir}/${file}"
  201. COPYONLY IMMEDIATE)
  202. EXEC_PROGRAM(${CMAKE_COMMAND} ARGS "-E write_regv \"${hkey}\" \"${dir}\"")
  203. FIND_PATH(REGISTRY_TEST_PATH
  204. ${file}
  205. "[${hkey}]" DOC "Registry_Test_Path")
  206. EXEC_PROGRAM(${CMAKE_COMMAND} ARGS "-E delete_regv \"${hkey}\"")
  207. EXEC_PROGRAM(${CMAKE_COMMAND} ARGS "-E remove \"${dir}/${file}\"")
  208. ENDIF (NOT UNIX)
  209. ENDIF (WIN32)
  210. #
  211. # Test a set and a remove
  212. #
  213. SET(REMOVE_STRING a b c d e f)
  214. SET(removeVar1 c e)
  215. REMOVE(REMOVE_STRING ${removeVar1} f)
  216. #
  217. # Test an IF inside a FOREACH.
  218. #
  219. FOREACH(x "a")
  220. IF(${x} MATCHES "a")
  221. # Should always execute.
  222. SET(IF_INSIDE_FOREACH_THEN_EXECUTED 1)
  223. ELSE(${x} MATCHES "a")
  224. # Should never execute.
  225. SET(IF_INSIDE_FOREACH_ELSE_EXECUTED 1)
  226. ENDIF(${x} MATCHES "a")
  227. ENDFOREACH(x)
  228. # test WHILE command
  229. SET (while_var 1)
  230. WHILE (while_var LESS 1000)
  231. SET(while_var ${while_var}0)
  232. ENDWHILE(while_var LESS 1000)
  233. SET(SHOULD_BE_ZERO )
  234. SET(SHOULD_BE_ONE 1)
  235. #
  236. # Configure file
  237. # (plug vars to #define so that they can be tested)
  238. #
  239. CONFIGURE_FILE(
  240. ${Complex_SOURCE_DIR}/cmTestConfigure.h.in
  241. ${Complex_BINARY_DIR}/cmTestConfigure.h)
  242. SET(STRING_WITH_QUOTES "\"hello world\"")
  243. # test CONFIGURE_FILE with ESCAPE_QUOTES on
  244. CONFIGURE_FILE(
  245. ${Complex_SOURCE_DIR}/cmTestConfigureEscape.h.in
  246. ${Complex_BINARY_DIR}/cmTestConfigureEscape.h ESCAPE_QUOTES)
  247. # Test regular expression commands.
  248. STRING(REGEX MATCH "b" RESULT "abc")
  249. IF(NOT RESULT)
  250. MESSAGE(SEND_ERROR "STRING(REGEX MATCH ... ) test failed.")
  251. ENDIF(NOT RESULT)
  252. STRING(REGEX MATCHALL "b" RESULT "abcb")
  253. IF(NOT RESULT)
  254. MESSAGE(SEND_ERROR "STRING(REGEX MATCHALL ... ) test failed.")
  255. ENDIF(NOT RESULT)
  256. STRING(REGEX REPLACE ".([bd])." "[\\1]" RESULT "a(b)c(d)e")
  257. IF("x${RESULT}" MATCHES "^xa\\[b\\]c\\[d\\]e$")
  258. SET(STRING_REGEX_PASSED 1)
  259. ENDIF("x${RESULT}" MATCHES "^xa\\[b\\]c\\[d\\]e$")
  260. IF(NOT STRING_REGEX_PASSED)
  261. MESSAGE(SEND_ERROR
  262. "STRING(REGEX REPLACE ... ) test failed (\"${RESULT}\" v. \"a[b]c[d]e\")")
  263. ENDIF(NOT STRING_REGEX_PASSED)
  264. #
  265. # Create the libs and the main exe
  266. #
  267. ADD_SUBDIRECTORY(Library)
  268. ADD_SUBDIRECTORY(Executable)
  269. SUBDIR_DEPENDS(Executable Library)
  270. EXPORT_LIBRARY_DEPENDENCIES(${Complex_BINARY_DIR}/ComplexLibraryDepends.cmake)
  271. INCLUDE(${Complex_BINARY_DIR}/ComplexLibraryDepends.cmake OPTIONAL)