CMakeLists.txt 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. CMAKE_MINIMUM_REQUIRED(VERSION 1.3)
  2. #
  3. # Create exe.
  4. #
  5. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_CXX_FLAGS")
  6. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
  7. IF(COMPLEX_TEST_CMAKELIB)
  8. # Link to CMake lib
  9. LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source)
  10. LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source/kwsys)
  11. LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Utilities/cmexpat)
  12. LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Utilities/cmzlib)
  13. # prefer the new curl if it is around
  14. IF(EXISTS ${Complex_BINARY_DIR}/../../Utilities/cmcurl-7.19.0)
  15. LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Utilities/cmcurl-7.19.0/lib)
  16. ENDIF(EXISTS ${Complex_BINARY_DIR}/../../Utilities/cmcurl-7.19.0)
  17. IF(EXISTS ${Complex_BINARY_DIR}/../../Utilities/cmcurl)
  18. LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Utilities/cmcurl)
  19. ENDIF(EXISTS ${Complex_BINARY_DIR}/../../Utilities/cmcurl)
  20. LINK_DIRECTORIES(
  21. ${Complex_BINARY_DIR}/../../Utilities/cmlibarchive/libarchive
  22. ${Complex_BINARY_DIR}/../../Utilities/cmbzip2
  23. )
  24. ENDIF(COMPLEX_TEST_CMAKELIB)
  25. # Create an imported target for if(TARGET) test below.
  26. ADD_LIBRARY(ExeImportedTarget UNKNOWN IMPORTED)
  27. # Test if(TARGET) command.
  28. IF(NOT TARGET CMakeTestLibrary)
  29. MESSAGE(FATAL_ERROR "IF(NOT TARGET CMakeTestLibrary) returned true!")
  30. ENDIF(NOT TARGET CMakeTestLibrary)
  31. IF(NOT TARGET ExeImportedTarget)
  32. MESSAGE(FATAL_ERROR "IF(NOT TARGET ExeImportedTarget) returned true!")
  33. ENDIF(NOT TARGET ExeImportedTarget)
  34. IF(TARGET LibImportedTarget)
  35. MESSAGE(FATAL_ERROR "IF(TARGET LibImportedTarget) returned true!")
  36. ENDIF(TARGET LibImportedTarget)
  37. IF(TARGET NotATarget)
  38. MESSAGE(FATAL_ERROR "IF(TARGET NotATarget) returned true!")
  39. ENDIF(TARGET NotATarget)
  40. # Use LINK_LIBRARIES instead of TARGET_LINK_LIBRARIES to
  41. SET(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared)
  42. LINK_LIBRARIES(${COMPLEX_LIBS})
  43. # Test forcing a .cxx file to not build.
  44. SET_SOURCE_FILES_PROPERTIES(complex_nobuild.cxx PROPERTIES
  45. HEADER_FILE_ONLY 1)
  46. ADD_EXECUTABLE(A A.cxx A.hh A.h A.txt)
  47. ADD_EXECUTABLE(complex complex testcflags.c )
  48. # Sub1/NameConflictTest.c Sub2/NameConflictTest.c)
  49. ADD_EXECUTABLE(complex.file complex.file.cxx complex_nobuild.cxx)
  50. IF(COMPLEX_TEST_CMAKELIB)
  51. TARGET_LINK_LIBRARIES(complex CMakeLib cmsys cmexpat cmzlib cmlibarchive cmbzip2 cmcurl)
  52. ENDIF(COMPLEX_TEST_CMAKELIB)
  53. IF (UNIX)
  54. TARGET_LINK_LIBRARIES(complex ${CMAKE_DL_LIBS})
  55. ELSE(UNIX)
  56. IF (NOT BORLAND)
  57. IF(NOT MINGW)
  58. TARGET_LINK_LIBRARIES(complex rpcrt4.lib)
  59. ENDIF(NOT MINGW)
  60. ENDIF(NOT BORLAND)
  61. ENDIF (UNIX)
  62. # Test linking to static lib when a shared lib has the same name.
  63. IF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
  64. ADD_DEFINITIONS(-DCOMPLEX_TEST_LINK_STATIC)
  65. TARGET_LINK_LIBRARIES(complex CMakeTestLinkStatic)
  66. ENDIF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
  67. # can we get the path to a source file
  68. GET_SOURCE_FILE_PROPERTY(A_LOCATION A.cxx LOCATION)
  69. IF ("${A_LOCATION}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/A.cxx")
  70. ADD_DEFINITIONS(-DCMAKE_FOUND_ACXX)
  71. ENDIF ("${A_LOCATION}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/A.cxx")
  72. # get the directory parent
  73. GET_DIRECTORY_PROPERTY(P_VALUE PARENT_DIRECTORY)
  74. IF ("${P_VALUE}" STREQUAL "${CMAKE_SOURCE_DIR}")
  75. ADD_DEFINITIONS(-DCMAKE_FOUND_PARENT)
  76. ENDIF ("${P_VALUE}" STREQUAL "${CMAKE_SOURCE_DIR}")
  77. # get the stack of listfiles
  78. INCLUDE(Included.cmake)
  79. IF ("${LF_VALUE}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt;${CMAKE_CURRENT_SOURCE_DIR}/Included.cmake")
  80. ADD_DEFINITIONS(-DCMAKE_FOUND_LISTFILE_STACK)
  81. ENDIF ("${LF_VALUE}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt;${CMAKE_CURRENT_SOURCE_DIR}/Included.cmake")
  82. # Test add/remove definitions.
  83. ADD_DEFINITIONS(
  84. -DCOMPLEX_DEFINED_PRE
  85. -DCOMPLEX_DEFINED
  86. -DCOMPLEX_DEFINED_POST
  87. -DCOMPLEX_DEFINED
  88. )
  89. REMOVE_DEFINITIONS(-DCOMPLEX_DEFINED)
  90. # Test pre-build/pre-link/post-build rules for an executable.
  91. ADD_CUSTOM_COMMAND(TARGET complex PRE_BUILD
  92. COMMAND ${CREATE_FILE_EXE}
  93. ARGS "${Complex_BINARY_DIR}/Executable/prebuild.txt")
  94. ADD_CUSTOM_COMMAND(TARGET complex PRE_BUILD
  95. COMMAND ${CREATE_FILE_EXE}
  96. ARGS "${Complex_BINARY_DIR}/Executable/prelink.txt")
  97. ADD_CUSTOM_COMMAND(TARGET complex POST_BUILD
  98. COMMAND ${CREATE_FILE_EXE}
  99. ARGS "${Complex_BINARY_DIR}/Executable/postbuild.txt")
  100. ADD_CUSTOM_COMMAND(TARGET complex POST_BUILD
  101. COMMAND ${CMAKE_COMMAND}
  102. ARGS -E copy
  103. "${Complex_BINARY_DIR}/Executable/postbuild.txt"
  104. "${Complex_BINARY_DIR}/Executable/postbuild2.txt")
  105. SET_SOURCE_FILES_PROPERTIES(complex
  106. COMPILE_FLAGS
  107. "-DFILE_HAS_EXTRA_COMPILE_FLAGS"
  108. #" -DFILE_DEFINE_STRING=\\\"hello\\\""
  109. OBJECT_DEPENDS ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
  110. )
  111. SET_TARGET_PROPERTIES(complex PROPERTIES COMPILE_FLAGS "-DCOMPLEX_TARGET_FLAG")
  112. ADD_CUSTOM_COMMAND(
  113. TARGET complex
  114. SOURCE ${Complex_SOURCE_DIR}/cmTestGeneratedHeader.h.in
  115. COMMAND ${CMAKE_COMMAND}
  116. ARGS -E copy ${Complex_SOURCE_DIR}/cmTestGeneratedHeader.h.in
  117. ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
  118. OUTPUTS ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
  119. DEPENDS ${CMAKE_COMMAND}
  120. )
  121. # Test creating an executable that is not built by default.
  122. ADD_EXECUTABLE(notInAllExe EXCLUDE_FROM_ALL notInAllExe.cxx)
  123. TARGET_LINK_LIBRARIES(notInAllExe notInAllLib)
  124. # Test user-value flag mapping for the VS IDE.
  125. IF(MSVC)
  126. SET_TARGET_PROPERTIES(notInAllExe PROPERTIES
  127. LINK_FLAGS "/NODEFAULTLIB:LIBC;LIBCMT;MSVCRT")
  128. ENDIF(MSVC)
  129. # Test creating a custom target that builds not-in-all targets.
  130. ADD_CUSTOM_TARGET(notInAllCustom)
  131. ADD_DEPENDENCIES(notInAllCustom notInAllExe)
  132. #
  133. # Output the files required by 'complex' to a file.
  134. #
  135. # This test has been moved to the 'required' subdir so that it
  136. # has no side-effects on the current Makefile (duplicated source file
  137. # due to source list expansion done twice).
  138. #
  139. ADD_SUBDIRECTORY(Temp)
  140. IF(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
  141. ADD_EXECUTABLE(testSystemDir testSystemDir.cxx)
  142. SET_TARGET_PROPERTIES(testSystemDir PROPERTIES COMPILE_FLAGS "-Werror")
  143. ENDIF(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
  144. #
  145. # Extra coverage.Not used.
  146. #
  147. INSTALL_TARGETS(/tmp complex)
  148. INSTALL_PROGRAMS(/tmp complex)
  149. CONFIGURE_FILE(
  150. ${Complex_SOURCE_DIR}/Executable/cmVersion.h.in
  151. ${Complex_BINARY_DIR}/cmVersion.h)
  152. SOURCE_GROUP(A_GROUP ".cxx")
  153. SOURCE_GROUP(B_GROUP REGULAR_EXPRESSION "cxx")
  154. SOURCE_GROUP(C_GROUP FILES complex.cxx)
  155. FILE(WRITE ${Complex_BINARY_DIR}/A/libA.a "test")
  156. FILE(WRITE ${Complex_BINARY_DIR}/A/libC.a "test")
  157. FILE(WRITE ${Complex_BINARY_DIR}/B/libB.a "test")
  158. FILE(WRITE ${Complex_BINARY_DIR}/B/libA.a "test")
  159. FILE(WRITE ${Complex_BINARY_DIR}/C/libC.a "test")
  160. FILE(WRITE ${Complex_BINARY_DIR}/C/libB.a "test")