CMakeLists.txt 19 KB

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