CMakeLists.txt 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #
  2. # A more complex test case
  3. #
  4. PROJECT (Complex)
  5. IF(BORLAND)
  6. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -tWR")
  7. SET(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -tWR")
  8. ENDIF(BORLAND)
  9. #
  10. # Define a macro
  11. #
  12. MACRO(ASSERT value msg)
  13. IF (NOT ${value})
  14. MESSAGE ("Assertion failure:" ${msg} )
  15. ENDIF (NOT ${value})
  16. ENDMACRO(ASSERT)
  17. # invoke the macro
  18. ASSERT(Complex_BINARY_DIR "The PROJECT command is broken")
  19. #
  20. # Use the ansi CXX compile flag for building cmake
  21. #
  22. IF (CMAKE_ANSI_CXXFLAGS)
  23. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_ANSI_CXXFLAGS}")
  24. ENDIF (CMAKE_ANSI_CXXFLAGS)
  25. IF(CMAKE_SYSTEM MATCHES "OSF1-V.*")
  26. IF(NOT CMAKE_COMPILER_IS_GNUCXX)
  27. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -timplicit_local -no_implicit_include ")
  28. ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX)
  29. ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V.*")
  30. ADD_DEFINITIONS(-DCMAKE_IS_FUN)
  31. SET(TEST_SEP "a b c")
  32. SEPARATE_ARGUMENTS(TEST_SEP)
  33. #
  34. # Include vars from a file and from a cache
  35. #
  36. IF (EXISTS ${Complex_SOURCE_DIR}/VarTests.cmake)
  37. INCLUDE(${Complex_SOURCE_DIR}/VarTests.cmake)
  38. ENDIF (EXISTS ${Complex_SOURCE_DIR}/VarTests.cmake)
  39. INCLUDE(fileshouldnotbehere OPTIONAL)
  40. LOAD_CACHE(${Complex_SOURCE_DIR}/Cache
  41. EXCLUDE
  42. CACHE_TEST_VAR_EXCLUDED
  43. INCLUDE_INTERNALS
  44. CACHE_TEST_VAR_INTERNAL)
  45. #
  46. # Specify include and lib dirs
  47. # (BEFORE is for coverage)
  48. #
  49. INCLUDE_DIRECTORIES(
  50. ${Complex_SOURCE_DIR}/Library
  51. ${Complex_SOURCE_DIR}/../../Source
  52. )
  53. INCLUDE_DIRECTORIES(BEFORE
  54. ${Complex_BINARY_DIR}
  55. )
  56. INCLUDE_REGULAR_EXPRESSION("^(cmTest|file|sharedFile).*$" ".*")
  57. LINK_DIRECTORIES(
  58. ${Complex_BINARY_DIR}/Library
  59. )
  60. #
  61. # Lib and exe path
  62. #
  63. SET (LIBRARY_OUTPUT_PATH
  64. ${Complex_BINARY_DIR}/bin/ CACHE PATH
  65. "Single output directory for building all libraries.")
  66. SET (EXECUTABLE_OUTPUT_PATH
  67. ${Complex_BINARY_DIR}/bin/ CACHE PATH
  68. "Single output directory for building all executables.")
  69. MESSAGE (Test " " escape " " semi-colon " " \; \;)
  70. #
  71. # Exec program (TODO: test a result)
  72. # Increase coverage.
  73. #
  74. MESSAGE("\nIgnore this message")
  75. OPTION(NO_EXEC_PROGRAM "Do not test EXEC_PROGRAM" 0)
  76. IF (NOT NO_EXEC_PROGRAM)
  77. EXEC_PROGRAM("echo NO_EXEC_PROGRAM" "${Complex_BINARY_DIR}")
  78. EXEC_PROGRAM(echo ARGS NO_EXEC_PROGRAM "${Complex_BINARY_DIR}")
  79. ELSE (NOT NO_EXEC_PROGRAM)
  80. MESSAGE("Set this option ON")
  81. ENDIF (NOT NO_EXEC_PROGRAM)
  82. MARK_AS_ADVANCED(NO_EXEC_PROGRAM)
  83. MARK_AS_ADVANCED(CLEAR NO_EXEC_PROGRAM)
  84. #
  85. # Create directory.
  86. # The 'complex' executable will then test if this dir exists,
  87. # sadly it won't be able to remove it.
  88. #
  89. MAKE_DIRECTORY("${Complex_BINARY_DIR}/make_dir")
  90. #
  91. # Test FIND_LIBARY
  92. # Create a dummy empty lib
  93. #
  94. CONFIGURE_FILE(
  95. ${Complex_SOURCE_DIR}/Library/dummy
  96. ${Complex_BINARY_DIR}/Library/dummylib.lib
  97. COPYONLY IMMEDIATE)
  98. FOREACH (ext "${CMAKE_SHLIB_SUFFIX};.so;.a;.sl")
  99. CONFIGURE_FILE(
  100. ${Complex_SOURCE_DIR}/Library/dummy
  101. ${Complex_BINARY_DIR}/Library/libdummylib${ext}
  102. COPYONLY IMMEDIATE)
  103. ENDFOREACH (ext)
  104. FIND_LIBRARY(FIND_DUMMY_LIB
  105. dummylib
  106. PATHS
  107. ${Complex_BINARY_DIR}/Library DOC "find dummy lib")
  108. FIND_LIBRARY(FIND_DUMMY_LIB
  109. NAMES dummylib dummylib2
  110. PATHS
  111. ${Complex_BINARY_DIR}/Library DOC "find dummy lib")
  112. #
  113. # Test SET_SOURCE_FILES_PROPERTIES
  114. #
  115. SET_SOURCE_FILES_PROPERTIES(nonexisting_file2
  116. GENERATED
  117. ABSTRACT
  118. WRAP_EXCLUDE
  119. COMPILE_FLAGS "-foo -bar")
  120. GET_SOURCE_FILE_PROPERTY(FILE_HAS_ABSTRACT nonexisting_file2 ABSTRACT)
  121. GET_SOURCE_FILE_PROPERTY(FILE_HAS_WRAP_EXCLUDE nonexisting_file2 WRAP_EXCLUDE)
  122. GET_SOURCE_FILE_PROPERTY(FILE_COMPILE_FLAGS nonexisting_file2 COMPILE_FLAGS)
  123. #
  124. # Test registry (win32)
  125. # Create a file, put its path in a registry key, try to find the file in that
  126. # path using that registry key, then remove the file and the key
  127. #
  128. IF (WIN32)
  129. IF (NOT UNIX)
  130. SET(dir "${Complex_BINARY_DIR}/registry_dir")
  131. SET(file "registry_test_dummy")
  132. SET(hkey "HKEY_CURRENT_USER\\Software\\Kitware\\CMake\\Tests\\Complex;registry_test")
  133. CONFIGURE_FILE(
  134. ${Complex_SOURCE_DIR}/Library/dummy
  135. "${dir}/${file}"
  136. COPYONLY IMMEDIATE)
  137. EXEC_PROGRAM(${CMAKE_COMMAND} ARGS "-E write_regv \"${hkey}\" \"${dir}\"")
  138. FIND_PATH(REGISTRY_TEST_PATH
  139. ${file}
  140. "[${hkey}]" DOC "Registry_Test_Path")
  141. EXEC_PROGRAM(${CMAKE_COMMAND} ARGS "-E delete_regv \"${hkey}\"")
  142. EXEC_PROGRAM(${CMAKE_COMMAND} ARGS "-E remove \"${dir}/${file}\"")
  143. ENDIF (NOT UNIX)
  144. ENDIF (WIN32)
  145. #
  146. # Test a set and a remove
  147. #
  148. SET(REMOVE_STRING a b c d e f)
  149. SET(removeVar1 c e)
  150. REMOVE(REMOVE_STRING ${removeVar1} f)
  151. #
  152. # Test an IF inside a FOREACH.
  153. #
  154. FOREACH(x "a")
  155. IF(${x} MATCHES "a")
  156. # Should always execute.
  157. SET(IF_INSIDE_FOREACH_THEN_EXECUTED 1)
  158. ELSE(${x} MATCHES "a")
  159. # Should never execute.
  160. SET(IF_INSIDE_FOREACH_ELSE_EXECUTED 1)
  161. ENDIF(${x} MATCHES "a")
  162. ENDFOREACH(x)
  163. #
  164. # Configure file
  165. # (plug vars to #define so that they can be tested)
  166. #
  167. CONFIGURE_FILE(
  168. ${Complex_SOURCE_DIR}/cmTestConfigure.h.in
  169. ${Complex_BINARY_DIR}/cmTestConfigure.h)
  170. SET(STRING_WITH_QUOTES "\"hello world\"")
  171. # test CONFIGURE_FILE with ESCAPE_QUOTES on
  172. CONFIGURE_FILE(
  173. ${Complex_SOURCE_DIR}/cmTestConfigureEscape.h.in
  174. ${Complex_BINARY_DIR}/cmTestConfigureEscape.h ESCAPE_QUOTES)
  175. #
  176. # Create the libs and the main exe
  177. #
  178. SUBDIRS(Library Executable)
  179. SUBDIR_DEPENDS(Executable Library)