CMakeLists.txt 3.9 KB

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