CMakeLists.txt 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656
  1. cmake_minimum_required(VERSION 2.8)
  2. project(ExternalProjectTest NONE)
  3. include(ExternalProject)
  4. find_package(CVS)
  5. find_package(Subversion)
  6. find_package(Git)
  7. find_package(Hg)
  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}/CMakeExternals")
  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. if(NOT DEFINED can_build_tutorial_step5)
  21. set(can_build_tutorial_step5 1)
  22. # Tutorial Step5 cannot build correctly using Visual Studio 6
  23. # on Windows 98 if the path of its build tree exceeds 72
  24. # characters in length... So don't attempt to build it
  25. # in a long path on Win98:
  26. #
  27. if(CMAKE_SYSTEM STREQUAL "Windows-4.10")
  28. string(LENGTH "${binary_base}/TutorialStep5-Local" n)
  29. if(n GREATER 72)
  30. set(can_build_tutorial_step5 0)
  31. endif()
  32. endif()
  33. # The ExternalProject builds of Tutorial Step5 cannot be built
  34. # correctly 2nd and later times in an in-source build...
  35. # (because the CMakeCache.txt from the real in-source build of
  36. # the Tests/Tutorial/Step5 directory gets copied when we do
  37. # the "source directory copy" step... but it still refers to
  38. # its original path which yields a configure error.) So:
  39. #
  40. if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
  41. set(can_build_tutorial_step5 0)
  42. endif()
  43. endif()
  44. # Empty projects that test all the known ExternalProject_Add argument key words:
  45. #
  46. set(proj AAA-TestAlphabetization)
  47. ExternalProject_Add(${proj}
  48. BUILD_COMMAND ""
  49. CONFIGURE_COMMAND ""
  50. DOWNLOAD_COMMAND ""
  51. INSTALL_COMMAND ""
  52. )
  53. set(proj ZZZ-TestAlphabetization)
  54. ExternalProject_Add(${proj}
  55. BUILD_COMMAND ""
  56. CONFIGURE_COMMAND ""
  57. DOWNLOAD_COMMAND ""
  58. INSTALL_COMMAND ""
  59. )
  60. set(proj TargetNameSameAsFolder)
  61. ExternalProject_Add(${proj}
  62. BUILD_COMMAND ""
  63. CONFIGURE_COMMAND ""
  64. DOWNLOAD_COMMAND ""
  65. INSTALL_COMMAND ""
  66. )
  67. set_property(TARGET ${proj} PROPERTY FOLDER "${proj}")
  68. set(proj MinimalNoOpProject)
  69. ExternalProject_Add(${proj}
  70. BUILD_COMMAND ""
  71. CONFIGURE_COMMAND ""
  72. DOWNLOAD_COMMAND ""
  73. INSTALL_COMMAND ""
  74. )
  75. set(proj EmptyNoOpProject)
  76. ExternalProject_Add(${proj}
  77. BUILD_COMMAND ""
  78. CMAKE_ARGS ""
  79. CONFIGURE_COMMAND ""
  80. CVS_REPOSITORY ""
  81. CVS_MODULE ""
  82. CVS_TAG ""
  83. DEPENDS "MinimalNoOpProject"
  84. DOWNLOAD_COMMAND ""
  85. INSTALL_COMMAND ""
  86. PATCH_COMMAND ""
  87. STEP_TARGETS install update
  88. SVN_REPOSITORY ""
  89. SVN_REVISION ""
  90. SVN_USERNAME ""
  91. SVN_PASSWORD ""
  92. SVN_TRUST_CERT 1
  93. TEST_COMMAND ""
  94. TIMEOUT ""
  95. URL ""
  96. URL_MD5 ""
  97. UPDATE_COMMAND ""
  98. )
  99. set_property(TARGET ${proj} PROPERTY FOLDER "")
  100. # Local DIR:
  101. #
  102. if(can_build_tutorial_step5)
  103. set(proj TutorialStep5-Local)
  104. ExternalProject_Add(${proj}
  105. URL "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5"
  106. CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  107. CMAKE_ARGS -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  108. TEST_BEFORE_INSTALL 1
  109. LOG_INSTALL 1
  110. )
  111. set_property(TARGET ${proj} PROPERTY FOLDER "Local")
  112. ExternalProject_Get_Property(${proj} install_dir)
  113. set(TutorialStep5_install_dir ${install_dir})
  114. set(proj TutorialStep5-Local-TestAfterInstall)
  115. ExternalProject_Add(${proj}
  116. URL "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5"
  117. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  118. TEST_AFTER_INSTALL 1
  119. LOG_TEST 1
  120. )
  121. set_property(TARGET ${proj} PROPERTY FOLDER "Local")
  122. endif()
  123. # Local TAR:
  124. #
  125. set(proj TutorialStep1-LocalTAR)
  126. ExternalProject_Add(${proj}
  127. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tar"
  128. URL_MD5 a87c5b47c0201c09ddfe1d5738fdb1e3
  129. LIST_SEPARATOR ::
  130. PATCH_COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
  131. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  132. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  133. -DTEST_LIST:STRING=A::B::C
  134. INSTALL_COMMAND ""
  135. LOG_CONFIGURE 1
  136. )
  137. set_property(TARGET ${proj} PROPERTY FOLDER "Local/TAR")
  138. set(proj TutorialStep1-LocalNoDirTAR)
  139. ExternalProject_Add(${proj}
  140. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar"
  141. URL_MD5 d09e3d370c5c908fa035c30939ee438e
  142. LIST_SEPARATOR @@
  143. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  144. -DTEST_LIST:STRING=1@@2@@3
  145. INSTALL_COMMAND ""
  146. )
  147. set_property(TARGET ${proj} PROPERTY FOLDER "Local/TAR")
  148. ExternalProject_Add_Step(${proj} mypatch
  149. COMMAND ${CMAKE_COMMAND} -E echo "This is a custom external project step."
  150. COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
  151. WORKING_DIRECTORY <SOURCE_DIR>
  152. DEPENDEES download
  153. DEPENDERS configure
  154. )
  155. # Local TGZ:
  156. #
  157. set(proj TutorialStep1-LocalTGZ)
  158. ExternalProject_Add(${proj}
  159. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tgz"
  160. URL_MD5 38c648e817339c356f6be00eeed79bd0
  161. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  162. INSTALL_COMMAND ""
  163. LOG_BUILD 1
  164. )
  165. set_property(TARGET ${proj} PROPERTY FOLDER "Local/TGZ")
  166. set(proj TutorialStep1-LocalNoDirTGZ)
  167. ExternalProject_Add(${proj}
  168. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tgz"
  169. URL_MD5 0b8182edcecdf40bf1c9d71d7d259f78
  170. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  171. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  172. INSTALL_COMMAND ""
  173. )
  174. set_property(TARGET ${proj} PROPERTY FOLDER "Local/TGZ")
  175. # Local BZ2:
  176. #
  177. # (The bz2 tests are here just to verify that the bz2 decompression is executed
  178. # during a test suite run... The configure and build commands are set to
  179. # nothing to make the test quicker. To make this more complete, I should add
  180. # a diff between this and the TGZ source tree since that one does build...)
  181. #
  182. set(proj TutorialStep1-LocalBZ2)
  183. ExternalProject_Add(${proj}
  184. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tar.bz2"
  185. CONFIGURE_COMMAND ""
  186. BUILD_COMMAND ""
  187. INSTALL_COMMAND ""
  188. )
  189. set_property(TARGET ${proj} PROPERTY FOLDER "Local/BZ2")
  190. set(proj TutorialStep1-LocalNoDirBZ2)
  191. ExternalProject_Add(${proj}
  192. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar.bz2"
  193. CONFIGURE_COMMAND ""
  194. BUILD_COMMAND ""
  195. INSTALL_COMMAND ""
  196. )
  197. set_property(TARGET ${proj} PROPERTY FOLDER "Local/BZ2")
  198. # Local ZIP:
  199. #
  200. # (The zip tests are here just to verify that the zip decompression is executed
  201. # during a test suite run... The configure and build commands are set to
  202. # nothing to make the test quicker. To make this more complete, I should add
  203. # a diff between this and the TGZ source tree since that one does build...)
  204. #
  205. set(proj TutorialStep1-LocalZIP)
  206. ExternalProject_Add(${proj}
  207. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.zip"
  208. CONFIGURE_COMMAND ""
  209. BUILD_COMMAND ""
  210. INSTALL_COMMAND ""
  211. )
  212. set_property(TARGET ${proj} PROPERTY FOLDER "Local/ZIP")
  213. set(proj TutorialStep1-LocalNoDirZIP)
  214. ExternalProject_Add(${proj}
  215. URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.zip"
  216. CONFIGURE_COMMAND ""
  217. BUILD_COMMAND ""
  218. INSTALL_COMMAND ""
  219. )
  220. set_property(TARGET ${proj} PROPERTY FOLDER "Local/ZIP")
  221. # CVS-based tests:
  222. #
  223. set(do_cvs_tests 0)
  224. if(CVS_EXECUTABLE)
  225. set(do_cvs_tests 1)
  226. endif()
  227. if(do_cvs_tests AND NOT UNIX)
  228. if("${CVS_EXECUTABLE}" MATCHES "cygwin")
  229. message(STATUS "No ExternalProject cvs tests with cygwin cvs.exe outside cygwin!")
  230. set(do_cvs_tests 0)
  231. endif()
  232. endif()
  233. if(do_cvs_tests)
  234. # Unzip/untar the CVS repository in our source folder so that other
  235. # projects below may use it to test CVS args of ExternalProject_Add
  236. #
  237. set(proj SetupLocalCVSRepository)
  238. set(local_cvs_repo "${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/CVS")
  239. ExternalProject_Add(${proj}
  240. SOURCE_DIR ${local_cvs_repo}
  241. URL ${CMAKE_CURRENT_SOURCE_DIR}/cvsrepo.tgz
  242. URL_MD5 55fc85825ffdd9ed2597123c68b79f7e
  243. BUILD_COMMAND ""
  244. CONFIGURE_COMMAND "${CVS_EXECUTABLE}" --version
  245. INSTALL_COMMAND ""
  246. )
  247. set_property(TARGET ${proj}
  248. PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
  249. # The MSYS cvs tool interprets "c:/" as a "machine:" name for SSH.
  250. # Detect the MSYS cvs and convert the repo path to an MSYS path.
  251. if(WIN32)
  252. if(EXISTS "${CVS_EXECUTABLE}")
  253. file(STRINGS "${CVS_EXECUTABLE}" cvs_is_msys LIMIT_COUNT 1 REGEX "[Mm][Ss][Yy][Ss]")
  254. if(cvs_is_msys)
  255. message(STATUS "'${CVS_EXECUTABLE}' is from MSYS (contains '${cvs_is_msys}')")
  256. string(REGEX REPLACE "^([A-Za-z]):" "/\\1" local_cvs_repo "${local_cvs_repo}")
  257. endif()
  258. endif()
  259. endif()
  260. # CVS by date stamp:
  261. #
  262. set(proj TutorialStep1-CVS-20090626)
  263. ExternalProject_Add(${proj}
  264. CVS_REPOSITORY "${local_cvs_repo}"
  265. CVS_MODULE "TutorialStep1"
  266. CVS_TAG "-D2009-06-26 16:50:00 UTC"
  267. UPDATE_COMMAND ""
  268. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  269. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  270. INSTALL_COMMAND ""
  271. DEPENDS "SetupLocalCVSRepository"
  272. )
  273. set_property(TARGET ${proj} PROPERTY FOLDER "CVS")
  274. # CVS by tag:
  275. #
  276. set(proj TutorialStep1-CVS-testtag1)
  277. ExternalProject_Add(${proj}
  278. CVS_REPOSITORY "${local_cvs_repo}"
  279. CVS_MODULE "TutorialStep1"
  280. CVS_TAG -rtesttag1
  281. UPDATE_COMMAND ""
  282. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  283. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  284. INSTALL_COMMAND ""
  285. DEPENDS "SetupLocalCVSRepository"
  286. )
  287. set_property(TARGET ${proj} PROPERTY FOLDER "CVS")
  288. # Live CVS / HEAD (no CVS_TAG):
  289. #
  290. set(proj TutorialStep1-CVS-HEAD)
  291. ExternalProject_Add(${proj}
  292. CVS_REPOSITORY "${local_cvs_repo}"
  293. CVS_MODULE "TutorialStep1"
  294. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  295. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  296. INSTALL_COMMAND ""
  297. DEPENDS "SetupLocalCVSRepository"
  298. DEPENDS "EmptyNoOpProject"
  299. DEPENDS "TutorialStep1-LocalTAR"
  300. DEPENDS "TutorialStep1-LocalNoDirTAR"
  301. DEPENDS "TutorialStep1-LocalTGZ"
  302. DEPENDS "TutorialStep1-LocalNoDirTGZ"
  303. DEPENDS "TutorialStep1-CVS-20090626"
  304. DEPENDS "TutorialStep1-CVS-testtag1"
  305. )
  306. set_property(TARGET ${proj} PROPERTY FOLDER "CVS")
  307. endif()
  308. # SVN-based tests:
  309. #
  310. set(do_svn_tests 0)
  311. if(Subversion_SVN_EXECUTABLE)
  312. set(do_svn_tests 1)
  313. endif()
  314. # Only do svn tests with svn >= version 1.2
  315. #
  316. if(do_svn_tests)
  317. if(Subversion_VERSION_SVN VERSION_LESS 1.2)
  318. message(STATUS "No ExternalProject svn tests with svn client less than version 1.2")
  319. set(do_svn_tests 0)
  320. endif()
  321. endif()
  322. # Only do svn tests in cygwin/cygwin or not-cygwin/not-cygwin arrangements:
  323. #
  324. if(do_svn_tests)
  325. if(CMAKE_CURRENT_BINARY_DIR MATCHES "cygdrive/" AND
  326. NOT "${Subversion_SVN_EXECUTABLE}" MATCHES "cygwin")
  327. message(STATUS "No ExternalProject svn tests with non-cygwin svn client in a /cygdrive based build")
  328. set(do_svn_tests 0)
  329. endif()
  330. endif()
  331. if(do_svn_tests)
  332. # Unzip/untar the SVN repository in our source folder so that other
  333. # projects below may use it to test SVN args of ExternalProject_Add
  334. #
  335. set(proj SetupLocalSVNRepository)
  336. set(local_svn_repo "${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/SVN")
  337. set(local_svn_repo_url "file:///${local_svn_repo}/TutorialStep1")
  338. ExternalProject_Add(${proj}
  339. SOURCE_DIR ${local_svn_repo}
  340. URL ${CMAKE_CURRENT_SOURCE_DIR}/svnrepo.tgz
  341. URL_MD5 2f468be4ed1fa96377fca0cc830819c4
  342. BUILD_COMMAND ""
  343. CONFIGURE_COMMAND "${Subversion_SVN_EXECUTABLE}" --version
  344. INSTALL_COMMAND ""
  345. )
  346. set_property(TARGET ${proj}
  347. PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
  348. # SVN by date stamp:
  349. #
  350. set(proj TutorialStep1-SVN-20090626)
  351. ExternalProject_Add(${proj}
  352. SVN_REPOSITORY "${local_svn_repo_url}"
  353. SVN_REVISION "-r{2009-06-26 16:50:00 +0000}"
  354. UPDATE_COMMAND ""
  355. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  356. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  357. INSTALL_COMMAND ""
  358. DEPENDS "SetupLocalSVNRepository"
  359. )
  360. set_property(TARGET ${proj} PROPERTY FOLDER "SVN")
  361. # SVN by revision number:
  362. #
  363. set(proj TutorialStep1-SVN-r2)
  364. ExternalProject_Add(${proj}
  365. SVN_REPOSITORY "${local_svn_repo_url}"
  366. SVN_REVISION "-r2"
  367. UPDATE_COMMAND ""
  368. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  369. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  370. INSTALL_COMMAND ""
  371. DEPENDS "SetupLocalSVNRepository"
  372. )
  373. set_property(TARGET ${proj} PROPERTY FOLDER "SVN")
  374. # Live SVN / trunk (no SVN_REVISION):
  375. #
  376. set(proj TutorialStep1-SVN-trunk)
  377. ExternalProject_Add(${proj}
  378. SVN_REPOSITORY "${local_svn_repo_url}"
  379. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  380. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  381. INSTALL_COMMAND ""
  382. DEPENDS "SetupLocalSVNRepository"
  383. LOG_DOWNLOAD 1
  384. )
  385. set_property(TARGET ${proj} PROPERTY FOLDER "SVN")
  386. endif()
  387. set(do_git_tests 0)
  388. if(GIT_EXECUTABLE)
  389. set(do_git_tests 1)
  390. execute_process(
  391. COMMAND "${GIT_EXECUTABLE}" --version
  392. OUTPUT_VARIABLE ov
  393. OUTPUT_STRIP_TRAILING_WHITESPACE
  394. )
  395. string(REGEX REPLACE "^git version (.+)$" "\\1" git_version "${ov}")
  396. message(STATUS "git_version='${git_version}'")
  397. if(git_version VERSION_LESS 1.6.5)
  398. message(STATUS "No ExternalProject git tests with git client less than version 1.6.5")
  399. set(do_git_tests 0)
  400. endif()
  401. endif()
  402. if(do_git_tests)
  403. set(local_git_repo "../../LocalRepositories/GIT")
  404. # Unzip/untar the git repository in our source folder so that other
  405. # projects below may use it to test git args of ExternalProject_Add
  406. #
  407. set(proj SetupLocalGITRepository)
  408. ExternalProject_Add(${proj}
  409. SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/GIT
  410. URL ${CMAKE_CURRENT_SOURCE_DIR}/gitrepo.tgz
  411. BUILD_COMMAND ""
  412. CONFIGURE_COMMAND "${GIT_EXECUTABLE}" --version
  413. INSTALL_COMMAND ""
  414. )
  415. set_property(TARGET ${proj}
  416. PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
  417. # git by commit id:
  418. #
  419. set(proj TutorialStep1-GIT-byhash)
  420. ExternalProject_Add(${proj}
  421. GIT_REPOSITORY "${local_git_repo}"
  422. GIT_TAG d1970730310fe8bc07e73f15dc570071f9f9654a
  423. UPDATE_COMMAND ""
  424. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  425. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  426. INSTALL_COMMAND ""
  427. DEPENDS "SetupLocalGITRepository"
  428. )
  429. set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
  430. # git by explicit branch/tag name:
  431. #
  432. set(proj TutorialStep1-GIT-bytag)
  433. ExternalProject_Add(${proj}
  434. GIT_REPOSITORY "${local_git_repo}"
  435. GIT_TAG "origin/master"
  436. UPDATE_COMMAND ""
  437. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  438. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  439. INSTALL_COMMAND ""
  440. DEPENDS "SetupLocalGITRepository"
  441. )
  442. set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
  443. # Live git / master (no GIT_TAG):
  444. #
  445. set(proj TutorialStep1-GIT-master)
  446. ExternalProject_Add(${proj}
  447. GIT_REPOSITORY "${local_git_repo}"
  448. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  449. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  450. INSTALL_COMMAND ""
  451. DEPENDS "SetupLocalGITRepository"
  452. LOG_UPDATE 1
  453. )
  454. set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
  455. endif()
  456. set(do_hg_tests 0)
  457. if(HG_EXECUTABLE)
  458. set(do_hg_tests 1)
  459. endif()
  460. if(do_hg_tests)
  461. set(local_hg_repo "../../LocalRepositories/HG")
  462. # Unzip/untar the hg repository in our source folder so that other
  463. # projects below may use it to test hg args of ExternalProject_Add
  464. #
  465. set(proj SetupLocalHGRepository)
  466. ExternalProject_Add(${proj}
  467. SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/HG
  468. URL ${CMAKE_CURRENT_SOURCE_DIR}/hgrepo.tgz
  469. BUILD_COMMAND ""
  470. CONFIGURE_COMMAND "${HG_EXECUTABLE}" --version
  471. INSTALL_COMMAND ""
  472. )
  473. set_property(TARGET ${proj}
  474. PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
  475. # hg by commit id:
  476. #
  477. set(proj TutorialStep1-HG-byhash)
  478. ExternalProject_Add(${proj}
  479. HG_REPOSITORY "${local_hg_repo}"
  480. HG_TAG dd2ce38a6b8a
  481. UPDATE_COMMAND ""
  482. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  483. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  484. INSTALL_COMMAND ""
  485. DEPENDS "SetupLocalHGRepository"
  486. )
  487. set_property(TARGET ${proj} PROPERTY FOLDER "HG")
  488. # hg by explicit branch/tag name:
  489. #
  490. set(proj TutorialStep1-HG-bytag)
  491. ExternalProject_Add(${proj}
  492. HG_REPOSITORY "${local_hg_repo}"
  493. HG_TAG "default"
  494. UPDATE_COMMAND ""
  495. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  496. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  497. INSTALL_COMMAND ""
  498. DEPENDS "SetupLocalHGRepository"
  499. )
  500. set_property(TARGET ${proj} PROPERTY FOLDER "HG")
  501. # Live hg / tip (no HG_TAG):
  502. #
  503. # Mercurial 2.1 does not distinguish an empty pull from a failed pull,
  504. # so do not run the test with that version.
  505. if(NOT "${HG_VERSION_STRING}" STREQUAL "2.1")
  506. set(proj TutorialStep1-HG-tip)
  507. ExternalProject_Add(${proj}
  508. HG_REPOSITORY "${local_hg_repo}"
  509. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  510. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  511. INSTALL_COMMAND ""
  512. DEPENDS "SetupLocalHGRepository"
  513. LOG_UPDATE 1
  514. )
  515. set_property(TARGET ${proj} PROPERTY FOLDER "HG")
  516. endif()
  517. endif()
  518. # Test the testable built/installed products:
  519. #
  520. enable_testing()
  521. # Do at least a smoke test of a built executable from each
  522. # project's build directory...
  523. #
  524. # BuildTree tests:
  525. #
  526. if(can_build_tutorial_step5)
  527. add_test(TutorialStep5-Local-BuildTreeTest
  528. "${binary_base}/TutorialStep5-Local/Tutorial" 42)
  529. set_property(TEST TutorialStep5-Local-BuildTreeTest
  530. APPEND PROPERTY LABELS Step5 BuildTree)
  531. endif()
  532. add_test(TutorialStep1-LocalTAR-BuildTreeTest
  533. "${binary_base}/TutorialStep1-LocalTAR/EP-Tutorial" 36)
  534. set_property(TEST TutorialStep1-LocalTAR-BuildTreeTest
  535. APPEND PROPERTY LABELS TAR)
  536. add_test(TutorialStep1-LocalNoDirTAR-BuildTreeTest
  537. "${binary_base}/TutorialStep1-LocalNoDirTAR/EP-Tutorial" 25)
  538. add_test(TutorialStep1-LocalTGZ-BuildTreeTest
  539. "${binary_base}/TutorialStep1-LocalTGZ/Tutorial" 16)
  540. set_property(TEST TutorialStep1-LocalTGZ-BuildTreeTest
  541. APPEND PROPERTY LABELS TGZ)
  542. add_test(TutorialStep1-LocalNoDirTGZ-BuildTreeTest
  543. "${binary_base}/TutorialStep1-LocalNoDirTGZ/Tutorial" 9)
  544. if(do_cvs_tests)
  545. add_test(TutorialStep1-CVS-20090626-BuildTreeTest
  546. "${binary_base}/TutorialStep1-CVS-20090626/Tutorial" 4)
  547. add_test(TutorialStep1-CVS-testtag1-BuildTreeTest
  548. "${binary_base}/TutorialStep1-CVS-testtag1/Tutorial" 64)
  549. add_test(TutorialStep1-CVS-HEAD-BuildTreeTest
  550. "${binary_base}/TutorialStep1-CVS-HEAD/Tutorial" 81)
  551. endif()
  552. if(do_svn_tests)
  553. add_test(TutorialStep1-SVN-20090626-BuildTreeTest
  554. "${binary_base}/TutorialStep1-SVN-20090626/Tutorial" 100)
  555. add_test(TutorialStep1-SVN-r2-BuildTreeTest
  556. "${binary_base}/TutorialStep1-SVN-r2/Tutorial" 99)
  557. add_test(TutorialStep1-SVN-trunk-BuildTreeTest
  558. "${binary_base}/TutorialStep1-SVN-trunk/Tutorial" 98)
  559. endif()
  560. # InstallTree tests:
  561. #
  562. if(can_build_tutorial_step5)
  563. add_test(TutorialStep5-InstallTreeTest
  564. "${TutorialStep5_install_dir}/bin/Tutorial" 49)
  565. set_property(TEST TutorialStep5-InstallTreeTest
  566. APPEND PROPERTY LABELS Step5 InstallTree)
  567. endif()
  568. message(STATUS "can_build_tutorial_step5='${can_build_tutorial_step5}'")
  569. message(STATUS "do_cvs_tests='${do_cvs_tests}'")
  570. message(STATUS "do_svn_tests='${do_svn_tests}'")
  571. message(STATUS "do_git_tests='${do_git_tests}' GIT_EXECUTABLE='${GIT_EXECUTABLE}'")
  572. message(STATUS "do_hg_tests='${do_hg_tests}' HG_EXECUTABLE='${HG_EXECUTABLE}'")