CMakeLists.txt 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. cmake_minimum_required(VERSION 3.10)
  2. project(ExternalProjectLocalTest NONE)
  3. if(CMAKE_XCODE_BUILD_SYSTEM VERSION_GREATER_EQUAL 12)
  4. cmake_policy(SET CMP0114 NEW)
  5. endif()
  6. include(ExternalProject)
  7. # Test ExternalProject with local projects
  8. option(ExternalProjectTest_USE_FOLDERS "Enable folder grouping in IDEs." ON)
  9. if(ExternalProjectTest_USE_FOLDERS)
  10. set_property(GLOBAL PROPERTY USE_FOLDERS ON)
  11. else()
  12. set_property(GLOBAL PROPERTY USE_FOLDERS OFF)
  13. endif()
  14. set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER
  15. "CMakePredefinedTargets-in-ExternalProjectTest")
  16. set(base "${CMAKE_BINARY_DIR}/Ext")
  17. set(binary_base "${base}/Build")
  18. set_property(DIRECTORY PROPERTY EP_BASE ${base})
  19. set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test)
  20. # Local DIR:
  21. #
  22. set(proj TutorialStep5-Local)
  23. ExternalProject_Add(${proj}
  24. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step5"
  25. CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  26. CMAKE_ARGS -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  27. TEST_BEFORE_INSTALL 1
  28. LOG_INSTALL 1
  29. )
  30. set_property(TARGET ${proj} PROPERTY FOLDER "Local")
  31. ExternalProject_Get_Property(${proj} install_dir)
  32. set(TutorialStep5_install_dir ${install_dir})
  33. set(proj TutorialStep5-Local-TestAfterInstall)
  34. ExternalProject_Add(${proj}
  35. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step5"
  36. CMAKE_ARGS --install-prefix=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  37. CMAKE_CACHE_DEFAULT_ARGS -DUSE_MYMATH:BOOL=OFF
  38. TEST_AFTER_INSTALL 1
  39. LOG_TEST 1
  40. )
  41. set_property(TARGET ${proj} PROPERTY FOLDER "Local")
  42. set(proj TutorialStep5-Local-TestExcludeFromMainBefore)
  43. ExternalProject_Add(${proj}
  44. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step5"
  45. CMAKE_ARGS --install-prefix=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  46. CMAKE_CACHE_DEFAULT_ARGS -DUSE_MYMATH:BOOL=OFF
  47. TEST_BEFORE_INSTALL 1
  48. TEST_EXCLUDE_FROM_MAIN 1
  49. STEP_TARGETS test
  50. LOG_TEST 1
  51. )
  52. set_property(TARGET ${proj} PROPERTY FOLDER "Local")
  53. set(proj TutorialStep5-Local-TestExcludeFromMainAfter)
  54. ExternalProject_Add(${proj}
  55. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step5"
  56. CMAKE_ARGS --install-prefix=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  57. CMAKE_CACHE_DEFAULT_ARGS -DUSE_MYMATH:BOOL=OFF
  58. TEST_AFTER_INSTALL 1
  59. TEST_EXCLUDE_FROM_MAIN 1
  60. STEP_TARGETS test
  61. LOG_TEST 1
  62. )
  63. set_property(TARGET ${proj} PROPERTY FOLDER "Local")
  64. # Local TAR:
  65. #
  66. set(proj TutorialStep1-LocalTAR)
  67. ExternalProject_Add(${proj}
  68. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tar"
  69. URL_MD5 e3774630066d0df5b9074cb777d72802
  70. LIST_SEPARATOR ::
  71. PATCH_COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
  72. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  73. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  74. -DTEST_LIST:STRING=A::B::C
  75. INSTALL_COMMAND ""
  76. LOG_CONFIGURE 1
  77. LOG_PATCH 1
  78. )
  79. set_property(TARGET ${proj} PROPERTY FOLDER "Local/TAR")
  80. set(proj TutorialStep1-LocalNoDirTAR)
  81. ExternalProject_Add(${proj}
  82. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar"
  83. URL_MD5 a7357d2e8a52cc807957634ea135eb31
  84. LIST_SEPARATOR @@
  85. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  86. -DTEST_LIST:STRING=1@@2@@3
  87. INSTALL_COMMAND ""
  88. )
  89. set_property(TARGET ${proj} PROPERTY FOLDER "Local/TAR")
  90. ExternalProject_Add_Step(${proj} mypatch
  91. COMMAND ${CMAKE_COMMAND} -E echo "This is a custom external project step."
  92. COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
  93. WORKING_DIRECTORY <SOURCE_DIR>
  94. DEPENDEES download
  95. DEPENDERS configure
  96. )
  97. # Local TGZ:
  98. #
  99. set(proj TutorialStep1-LocalTGZ)
  100. ExternalProject_Add(${proj}
  101. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tgz"
  102. URL_MD5 c04edffa0520d5468d51ecd13a971828
  103. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  104. INSTALL_COMMAND ""
  105. LOG_BUILD 1
  106. UPDATE_DISCONNECTED 1
  107. )
  108. set_property(TARGET ${proj} PROPERTY FOLDER "Local/TGZ")
  109. set(proj TutorialStep1-LocalNoDirTGZ)
  110. ExternalProject_Add(${proj}
  111. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tgz"
  112. URL_HASH SHA256=b9aff8a865842b21cb3bc2ec8bed426b46ef560518962a81242c7f2e089c00de
  113. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  114. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  115. INSTALL_COMMAND ""
  116. )
  117. set_property(TARGET ${proj} PROPERTY FOLDER "Local/TGZ")
  118. # Local BZ2:
  119. #
  120. # (The bz2 tests are here just to verify that the bz2 decompression is executed
  121. # during a test suite run... The configure and build commands are set to
  122. # nothing to make the test quicker. To make this more complete, I should add
  123. # a diff between this and the TGZ source tree since that one does build...)
  124. #
  125. set(proj TutorialStep1-LocalBZ2)
  126. ExternalProject_Add(${proj}
  127. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tar.bz2"
  128. CONFIGURE_COMMAND ""
  129. BUILD_COMMAND ""
  130. INSTALL_COMMAND ""
  131. )
  132. set_property(TARGET ${proj} PROPERTY FOLDER "Local/BZ2")
  133. set(proj TutorialStep1-LocalNoDirBZ2)
  134. ExternalProject_Add(${proj}
  135. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar.bz2"
  136. CONFIGURE_COMMAND ""
  137. BUILD_COMMAND ""
  138. INSTALL_COMMAND ""
  139. )
  140. set_property(TARGET ${proj} PROPERTY FOLDER "Local/BZ2")
  141. # Local ZIP:
  142. #
  143. # (The zip tests are here just to verify that the zip decompression is executed
  144. # during a test suite run... The configure and build commands are set to
  145. # nothing to make the test quicker. To make this more complete, I should add
  146. # a diff between this and the TGZ source tree since that one does build...)
  147. #
  148. set(proj TutorialStep1-LocalZIP)
  149. ExternalProject_Add(${proj}
  150. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.zip"
  151. CONFIGURE_COMMAND ""
  152. BUILD_COMMAND ""
  153. INSTALL_COMMAND ""
  154. )
  155. set_property(TARGET ${proj} PROPERTY FOLDER "Local/ZIP")
  156. set(proj TutorialStep1-LocalNoDirZIP)
  157. ExternalProject_Add(${proj}
  158. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.zip"
  159. CONFIGURE_COMMAND ""
  160. BUILD_COMMAND ""
  161. INSTALL_COMMAND ""
  162. )
  163. set_property(TARGET ${proj} PROPERTY FOLDER "Local/ZIP")
  164. # Test the testable built/installed products:
  165. #
  166. enable_testing()
  167. # Do at least a smoke test of a built executable from each
  168. # project's build directory...
  169. #
  170. # BuildTree tests:
  171. #
  172. add_test(TutorialStep5-Local-BuildTreeTest
  173. "${binary_base}/TutorialStep5-Local/Tutorial" 42)
  174. set_property(TEST TutorialStep5-Local-BuildTreeTest
  175. APPEND PROPERTY LABELS Step5 BuildTree)
  176. add_test(TutorialStep1-LocalTAR-BuildTreeTest
  177. "${binary_base}/TutorialStep1-LocalTAR/EP-Tutorial" 36)
  178. set_property(TEST TutorialStep1-LocalTAR-BuildTreeTest
  179. APPEND PROPERTY LABELS TAR)
  180. add_test(TutorialStep1-LocalNoDirTAR-BuildTreeTest
  181. "${binary_base}/TutorialStep1-LocalNoDirTAR/EP-Tutorial" 25)
  182. add_test(TutorialStep1-LocalTGZ-BuildTreeTest
  183. "${binary_base}/TutorialStep1-LocalTGZ/Tutorial" 16)
  184. set_property(TEST TutorialStep1-LocalTGZ-BuildTreeTest
  185. APPEND PROPERTY LABELS TGZ)
  186. add_test(TutorialStep1-LocalNoDirTGZ-BuildTreeTest
  187. "${binary_base}/TutorialStep1-LocalNoDirTGZ/Tutorial" 9)
  188. # InstallTree tests:
  189. #
  190. add_test(TutorialStep5-InstallTreeTest
  191. "${TutorialStep5_install_dir}/bin/Tutorial" 49)
  192. set_property(TEST TutorialStep5-InstallTreeTest
  193. APPEND PROPERTY LABELS Step5 InstallTree)