CMakeLists.txt 5.0 KB

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