CMakeLists.txt 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. cmake_minimum_required(VERSION 2.6)
  2. project(ExternalProjectTest NONE)
  3. include(ExternalProject)
  4. find_package(CVS)
  5. find_package(Subversion)
  6. set(base "${CMAKE_BINARY_DIR}/CMakeExternals")
  7. set(binary_base "${base}/Build")
  8. set_property(DIRECTORY PROPERTY EP_BASE ${base})
  9. if(NOT DEFINED can_build_tutorial_step5)
  10. set(can_build_tutorial_step5 1)
  11. # Tutorial Step5 cannot build correctly using Visual Studio 6
  12. # on Windows 98 if the path of its build tree exceeds 72
  13. # characters in length... So don't attempt to build it
  14. # in a long path on Win98:
  15. #
  16. if(CMAKE_SYSTEM STREQUAL "Windows-4.10")
  17. string(LENGTH "${binary_base}/TutorialStep5-Local" n)
  18. if(n GREATER 72)
  19. set(can_build_tutorial_step5 0)
  20. endif()
  21. endif()
  22. endif()
  23. message(STATUS "can_build_tutorial_step5='${can_build_tutorial_step5}'")
  24. # Empty projects that test all the known ExternalProject_Add argument key words:
  25. #
  26. set(proj MinimalNoOpProject)
  27. ExternalProject_Add(${proj}
  28. BUILD_COMMAND ""
  29. CONFIGURE_COMMAND ""
  30. DOWNLOAD_COMMAND ""
  31. INSTALL_COMMAND ""
  32. )
  33. set(proj EmptyNoOpProject)
  34. ExternalProject_Add(${proj}
  35. BUILD_COMMAND ""
  36. CMAKE_ARGS ""
  37. CONFIGURE_COMMAND ""
  38. CVS_REPOSITORY ""
  39. CVS_MODULE ""
  40. CVS_TAG ""
  41. DEPENDS "MinimalNoOpProject"
  42. DOWNLOAD_COMMAND ""
  43. INSTALL_COMMAND ""
  44. PATCH_COMMAND ""
  45. SVN_REPOSITORY ""
  46. SVN_REVISION ""
  47. TEST_COMMAND ""
  48. URL ""
  49. UPDATE_COMMAND ""
  50. )
  51. # Local DIR:
  52. #
  53. if(can_build_tutorial_step5)
  54. set(proj TutorialStep5-Local)
  55. ExternalProject_Add(${proj}
  56. URL "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5"
  57. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  58. TEST_BEFORE_INSTALL 1
  59. )
  60. ExternalProject_Get_Property(${proj} install_dir)
  61. set(TutorialStep5_install_dir ${install_dir})
  62. set(proj TutorialStep5-Local-TestAfterInstall)
  63. ExternalProject_Add(${proj}
  64. URL "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5"
  65. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  66. TEST_AFTER_INSTALL 1
  67. )
  68. endif()
  69. # Local TAR:
  70. #
  71. set(proj TutorialStep1-LocalTAR)
  72. ExternalProject_Add(${proj}
  73. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tar"
  74. LIST_SEPARATOR ::
  75. PATCH_COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
  76. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  77. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  78. -DTEST_LIST:STRING=A::B::C
  79. INSTALL_COMMAND ""
  80. )
  81. set(proj TutorialStep1-LocalNoDirTAR)
  82. ExternalProject_Add(${proj}
  83. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar"
  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. ExternalProject_Add_Step(${proj} mypatch
  90. COMMAND ${CMAKE_COMMAND} -E echo "This is a custom external project step."
  91. COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
  92. WORKING_DIRECTORY <SOURCE_DIR>
  93. DEPENDEES download
  94. DEPENDERS configure
  95. )
  96. # Local TGZ:
  97. #
  98. set(proj TutorialStep1-LocalTGZ)
  99. ExternalProject_Add(${proj}
  100. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tgz"
  101. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  102. INSTALL_COMMAND ""
  103. )
  104. set(proj TutorialStep1-LocalNoDirTGZ)
  105. ExternalProject_Add(${proj}
  106. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tgz"
  107. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  108. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  109. INSTALL_COMMAND ""
  110. )
  111. set(do_cvs_tests 0)
  112. if(CVS_EXECUTABLE)
  113. set(do_cvs_tests 1)
  114. endif()
  115. if(do_cvs_tests AND NOT UNIX)
  116. if("${CVS_EXECUTABLE}" MATCHES "cygwin")
  117. message(STATUS "No ExternalProject cvs tests with cygwin cvs.exe outside cygwin!")
  118. set(do_cvs_tests 0)
  119. endif()
  120. endif()
  121. if(do_cvs_tests)
  122. # Unzip/untar the CVS repository in our source folder so that other
  123. # projects below may use it to test CVS args of ExternalProject_Add
  124. #
  125. set(proj SetupLocalCVSRepository)
  126. set(local_cvs_repo "${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/CVS")
  127. ExternalProject_Add(${proj}
  128. SOURCE_DIR ${local_cvs_repo}
  129. URL ${CMAKE_CURRENT_SOURCE_DIR}/cvsrepo.tgz
  130. BUILD_COMMAND ""
  131. CONFIGURE_COMMAND ${CVS_EXECUTABLE} --version
  132. INSTALL_COMMAND ""
  133. )
  134. # CVS by date stamp:
  135. #
  136. set(proj TutorialStep1-CVS-20090626)
  137. ExternalProject_Add(${proj}
  138. CVS_REPOSITORY "${local_cvs_repo}"
  139. CVS_MODULE "TutorialStep1"
  140. CVS_TAG "-D2009-06-26 16:50:00 UTC"
  141. UPDATE_COMMAND ""
  142. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  143. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  144. INSTALL_COMMAND ""
  145. DEPENDS "SetupLocalCVSRepository"
  146. )
  147. # CVS by tag:
  148. #
  149. set(proj TutorialStep1-CVS-testtag1)
  150. ExternalProject_Add(${proj}
  151. CVS_REPOSITORY "${local_cvs_repo}"
  152. CVS_MODULE "TutorialStep1"
  153. CVS_TAG -rtesttag1
  154. UPDATE_COMMAND ""
  155. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  156. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  157. INSTALL_COMMAND ""
  158. DEPENDS "SetupLocalCVSRepository"
  159. )
  160. # Live CVS / HEAD (no CVS_TAG):
  161. #
  162. set(proj TutorialStep1-CVS-HEAD)
  163. ExternalProject_Add(${proj}
  164. CVS_REPOSITORY "${local_cvs_repo}"
  165. CVS_MODULE "TutorialStep1"
  166. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  167. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  168. INSTALL_COMMAND ""
  169. DEPENDS "SetupLocalCVSRepository"
  170. DEPENDS "EmptyNoOpProject"
  171. DEPENDS "TutorialStep1-LocalTAR"
  172. DEPENDS "TutorialStep1-LocalNoDirTAR"
  173. DEPENDS "TutorialStep1-LocalTGZ"
  174. DEPENDS "TutorialStep1-LocalNoDirTGZ"
  175. DEPENDS "TutorialStep1-CVS-20090626"
  176. DEPENDS "TutorialStep1-CVS-testtag1"
  177. )
  178. endif()
  179. set(do_svn_tests 0)
  180. if(Subversion_SVN_EXECUTABLE)
  181. set(do_svn_tests 1)
  182. endif()
  183. # Only do svn tests with svn >= version 1.2
  184. #
  185. if(do_svn_tests)
  186. execute_process(COMMAND ${Subversion_SVN_EXECUTABLE} --version
  187. OUTPUT_VARIABLE Subversion_VERSION_SVN
  188. OUTPUT_STRIP_TRAILING_WHITESPACE)
  189. string(REGEX REPLACE "^(.*\n)?svn, version ([.0-9]+).*"
  190. "\\2" Subversion_VERSION_SVN "${Subversion_VERSION_SVN}")
  191. message(STATUS "Subversion_VERSION_SVN='${Subversion_VERSION_SVN}'")
  192. if(Subversion_VERSION_SVN VERSION_LESS 1.2)
  193. message(STATUS "No ExternalProject svn tests with svn client less than version 1.2")
  194. set(do_svn_tests 0)
  195. endif()
  196. endif()
  197. # Only do svn tests in cygwin/cygwin or not-cygwin/not-cygwin arrangements:
  198. #
  199. if(do_svn_tests)
  200. if(CMAKE_CURRENT_BINARY_DIR MATCHES "cygdrive/" AND
  201. NOT "${Subversion_SVN_EXECUTABLE}" MATCHES "cygwin")
  202. message(STATUS "No ExternalProject svn tests with non-cygwin svn client in a /cygdrive based build")
  203. set(do_svn_tests 0)
  204. endif()
  205. endif()
  206. if(do_svn_tests)
  207. # Unzip/untar the SVN repository in our source folder so that other
  208. # projects below may use it to test SVN args of ExternalProject_Add
  209. #
  210. set(proj SetupLocalSVNRepository)
  211. set(local_svn_repo "${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/SVN")
  212. set(local_svn_repo_url "file:///${local_svn_repo}/TutorialStep1")
  213. ExternalProject_Add(${proj}
  214. SOURCE_DIR ${local_svn_repo}
  215. URL ${CMAKE_CURRENT_SOURCE_DIR}/svnrepo.tgz
  216. BUILD_COMMAND ""
  217. CONFIGURE_COMMAND ${Subversion_SVN_EXECUTABLE} --version
  218. INSTALL_COMMAND ""
  219. )
  220. # SVN by date stamp:
  221. #
  222. set(proj TutorialStep1-SVN-20090626)
  223. ExternalProject_Add(${proj}
  224. SVN_REPOSITORY "${local_svn_repo_url}"
  225. SVN_REVISION "-r{2009-06-26 16:50:00 +0000}"
  226. UPDATE_COMMAND ""
  227. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  228. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  229. INSTALL_COMMAND ""
  230. DEPENDS "SetupLocalSVNRepository"
  231. )
  232. # SVN by revision number:
  233. #
  234. set(proj TutorialStep1-SVN-r2)
  235. ExternalProject_Add(${proj}
  236. SVN_REPOSITORY "${local_svn_repo_url}"
  237. SVN_REVISION "-r2"
  238. UPDATE_COMMAND ""
  239. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  240. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  241. INSTALL_COMMAND ""
  242. DEPENDS "SetupLocalSVNRepository"
  243. )
  244. # Live SVN / trunk (no SVN_REVISION):
  245. #
  246. set(proj TutorialStep1-SVN-trunk)
  247. ExternalProject_Add(${proj}
  248. SVN_REPOSITORY "${local_svn_repo_url}"
  249. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  250. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  251. INSTALL_COMMAND ""
  252. DEPENDS "SetupLocalSVNRepository"
  253. )
  254. endif()
  255. # Test the testable built/installed products:
  256. #
  257. enable_testing()
  258. # Do at least a smoke test of a built executable from each
  259. # project's build directory...
  260. #
  261. # BuildTree tests:
  262. #
  263. if(can_build_tutorial_step5)
  264. add_test(TutorialStep5-Local-BuildTreeTest
  265. "${binary_base}/TutorialStep5-Local/Tutorial" 42)
  266. set_property(TEST TutorialStep5-Local-BuildTreeTest
  267. APPEND PROPERTY LABELS Step5 BuildTree)
  268. endif()
  269. add_test(TutorialStep1-LocalTAR-BuildTreeTest
  270. "${binary_base}/TutorialStep1-LocalTAR/EP-Tutorial" 36)
  271. set_property(TEST TutorialStep1-LocalTAR-BuildTreeTest
  272. APPEND PROPERTY LABELS TAR)
  273. add_test(TutorialStep1-LocalNoDirTAR-BuildTreeTest
  274. "${binary_base}/TutorialStep1-LocalNoDirTAR/EP-Tutorial" 25)
  275. add_test(TutorialStep1-LocalTGZ-BuildTreeTest
  276. "${binary_base}/TutorialStep1-LocalTGZ/Tutorial" 16)
  277. set_property(TEST TutorialStep1-LocalTGZ-BuildTreeTest
  278. APPEND PROPERTY LABELS TGZ)
  279. add_test(TutorialStep1-LocalNoDirTGZ-BuildTreeTest
  280. "${binary_base}/TutorialStep1-LocalNoDirTGZ/Tutorial" 9)
  281. if(do_cvs_tests)
  282. add_test(TutorialStep1-CVS-20090626-BuildTreeTest
  283. "${binary_base}/TutorialStep1-CVS-20090626/Tutorial" 4)
  284. add_test(TutorialStep1-CVS-testtag1-BuildTreeTest
  285. "${binary_base}/TutorialStep1-CVS-testtag1/Tutorial" 64)
  286. add_test(TutorialStep1-CVS-HEAD-BuildTreeTest
  287. "${binary_base}/TutorialStep1-CVS-HEAD/Tutorial" 81)
  288. endif()
  289. if(do_svn_tests)
  290. add_test(TutorialStep1-SVN-20090626-BuildTreeTest
  291. "${binary_base}/TutorialStep1-SVN-20090626/Tutorial" 100)
  292. add_test(TutorialStep1-SVN-r2-BuildTreeTest
  293. "${binary_base}/TutorialStep1-SVN-r2/Tutorial" 99)
  294. add_test(TutorialStep1-SVN-trunk-BuildTreeTest
  295. "${binary_base}/TutorialStep1-SVN-trunk/Tutorial" 98)
  296. endif()
  297. # InstallTree tests:
  298. #
  299. if(can_build_tutorial_step5)
  300. add_test(TutorialStep5-InstallTreeTest
  301. "${TutorialStep5_install_dir}/bin/Tutorial" 49)
  302. set_property(TEST TutorialStep5-InstallTreeTest
  303. APPEND PROPERTY LABELS Step5 InstallTree)
  304. endif()