CMakeLists.txt 4.3 KB

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