CMakeLists.txt 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. cmake_minimum_required(VERSION 2.6)
  2. project(ExternalProjectTest NONE)
  3. include(AddExternalProject)
  4. get_external_project_directories(base_dir build_dir downloads_dir install_dir
  5. sentinels_dir source_dir tmp_dir)
  6. set(prefix "${install_dir}")
  7. # Use a "TryCheckout" technique on small subtrees of certain projects
  8. # to see if cvs checkout and svn checkout may be used on this machine
  9. # without problems. If so, we can test the projects that use those
  10. # download techniques. If not, we skip them on this machine...
  11. #
  12. include("${CMAKE_CURRENT_SOURCE_DIR}/TryCheckout.cmake")
  13. if(NOT DEFINED can_build_kwstyle)
  14. if(WATCOM)
  15. set(can_build_kwstyle 0)
  16. else()
  17. set(can_build_kwstyle 1)
  18. endif()
  19. endif()
  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 "${build_dir}/TutorialStep5-Local" n)
  29. if(n GREATER 72)
  30. set(can_build_tutorial_step5 0)
  31. endif()
  32. endif()
  33. endif()
  34. if(NOT DEFINED can_use_cvs)
  35. try_cvs_checkout(
  36. ":pserver:anonymous:[email protected]:/cvsroot/CMake"
  37. "CMake/Tests/Tutorial/Step1"
  38. "${CMAKE_CURRENT_BINARY_DIR}/TryCheckout/TutorialStep1"
  39. can_use_cvs
  40. )
  41. set(can_use_cvs ${can_use_cvs} CACHE STRING "Was try_cvs_checkout successful?")
  42. endif()
  43. if(NOT DEFINED can_use_svn)
  44. try_svn_checkout(
  45. "http://gdcm.svn.sourceforge.net/svnroot/gdcm/trunk/Utilities/gdcmmd5"
  46. "${CMAKE_CURRENT_BINARY_DIR}/TryCheckout/gdcmmd5"
  47. can_use_svn
  48. )
  49. set(can_use_svn ${can_use_svn} CACHE STRING "Was try_svn_checkout successful?")
  50. endif()
  51. message(STATUS "can_build_kwstyle='${can_build_kwstyle}'")
  52. message(STATUS "can_build_tutorial_step5='${can_build_tutorial_step5}'")
  53. message(STATUS "can_use_cvs='${can_use_cvs}'")
  54. message(STATUS "can_use_svn='${can_use_svn}'")
  55. # Empty projects that test all the known add_external_project argument key words:
  56. #
  57. set(proj MinimalNoOpProject)
  58. add_external_project(${proj}
  59. BUILD_COMMAND ""
  60. CONFIGURE_COMMAND ""
  61. DOWNLOAD_COMMAND ""
  62. INSTALL_COMMAND ""
  63. )
  64. set(proj EmptyNoOpProject)
  65. add_external_project(${proj}
  66. BUILD_ARGS ""
  67. BUILD_COMMAND ""
  68. CMAKE_ARGS ""
  69. CONFIGURE_COMMAND ""
  70. CONFIGURE_DIR ""
  71. CVS_REPOSITORY ""
  72. CVS_MODULE ""
  73. CVS_TAG ""
  74. DEPENDS "MinimalNoOpProject"
  75. DIR ""
  76. DOWNLOAD_COMMAND ""
  77. INSTALL_ARGS ""
  78. INSTALL_COMMAND ""
  79. PATCH_COMMAND ""
  80. SVN_REPOSITORY ""
  81. SVN_TAG ""
  82. TAR ""
  83. TAR_URL ""
  84. TGZ ""
  85. TGZ_URL ""
  86. UPDATE_COMMAND ""
  87. )
  88. # Local DIR:
  89. #
  90. if(can_build_tutorial_step5)
  91. set(proj TutorialStep5-Local)
  92. add_external_project(${proj}
  93. DIR "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5"
  94. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${prefix} -G ${CMAKE_GENERATOR} ${source_dir}/${proj}
  95. )
  96. endif()
  97. # Local TAR:
  98. #
  99. set(proj TutorialStep1-LocalTAR)
  100. add_external_project(${proj}
  101. TAR "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tar"
  102. LIST_SEPARATOR ::
  103. PATCH_COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
  104. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  105. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${prefix}
  106. -DTEST_LIST:STRING=A::B::C
  107. INSTALL_COMMAND ""
  108. )
  109. set(proj TutorialStep1-LocalNoDirTAR)
  110. add_external_project(${proj}
  111. TAR "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar"
  112. LIST_SEPARATOR @@
  113. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${prefix} -G ${CMAKE_GENERATOR} ${source_dir}/${proj}
  114. -DTEST_LIST:STRING=1@@2@@3
  115. INSTALL_COMMAND ""
  116. )
  117. add_external_project_step(${proj} mypatch
  118. COMMAND ${CMAKE_COMMAND} -E echo "This is a custom external project step."
  119. COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
  120. WORKING_DIRECTORY ${source_dir}/TutorialStep1-LocalNoDirTAR
  121. DEPENDEES download
  122. DEPENDERS configure
  123. )
  124. # Local TGZ:
  125. #
  126. set(proj TutorialStep1-LocalTGZ)
  127. add_external_project(${proj}
  128. TGZ "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tgz"
  129. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${prefix} -G ${CMAKE_GENERATOR} ${source_dir}/${proj}
  130. INSTALL_COMMAND ""
  131. )
  132. set(proj TutorialStep1-LocalNoDirTGZ)
  133. add_external_project(${proj}
  134. TGZ "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tgz"
  135. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  136. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${prefix}
  137. INSTALL_COMMAND ""
  138. )
  139. # Download TAR:
  140. #
  141. # TODO: Add a remote .tar file
  142. # Download TGZ:
  143. #
  144. # TODO: Add a remote .tgz file
  145. # Download CVS:
  146. #
  147. if(can_use_cvs)
  148. # CVS by date stamp:
  149. #
  150. set(proj TutorialStep1-20081201)
  151. add_external_project(${proj}
  152. CVS_REPOSITORY ":pserver:anonymous:[email protected]:/cvsroot/CMake"
  153. CVS_MODULE "CMake/Tests/Tutorial/Step1"
  154. CVS_TAG "-D2008-12-01 01:00:00 UTC"
  155. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  156. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${prefix}
  157. INSTALL_COMMAND ""
  158. )
  159. # CVS by tag:
  160. #
  161. set(proj kwsys-from-CMake-2-6-2)
  162. add_external_project(${proj}
  163. CVS_REPOSITORY ":pserver:anonymous:[email protected]:/cvsroot/CMake"
  164. CVS_MODULE "CMake/Source/kwsys"
  165. CVS_TAG -rCMake-2-6-2
  166. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  167. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${prefix}
  168. INSTALL_COMMAND ""
  169. )
  170. if(can_build_kwstyle)
  171. # Live CVS / HEAD (no CVS_TAG):
  172. #
  173. set(proj KWStyle-CVSHEAD)
  174. add_external_project(${proj}
  175. CVS_REPOSITORY ":pserver:[email protected]:/cvsroot/KWStyle"
  176. CVS_MODULE "KWStyle"
  177. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  178. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${prefix}
  179. DEPENDS "EmptyNoOpProject"
  180. DEPENDS "TutorialStep1-LocalTAR"
  181. DEPENDS "TutorialStep1-LocalNoDirTAR"
  182. DEPENDS "TutorialStep1-LocalTGZ"
  183. DEPENDS "TutorialStep1-LocalNoDirTGZ"
  184. DEPENDS "TutorialStep1-20081201"
  185. DEPENDS "kwsys-from-CMake-2-6-2"
  186. )
  187. endif()
  188. endif()
  189. # Download SVN:
  190. #
  191. if(can_use_svn)
  192. # SVN by date stamp:
  193. #
  194. set(proj gdcm-md5-20081204)
  195. add_external_project(${proj}
  196. SVN_REPOSITORY "http://gdcm.svn.sourceforge.net/svnroot/gdcm/trunk/Utilities/gdcmmd5"
  197. SVN_TAG "-r{2008-12-04 01:00:00 +0000}"
  198. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  199. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${prefix}
  200. )
  201. # SVN by revision number:
  202. #
  203. set(proj gdcm-md5-r4824)
  204. add_external_project(${proj}
  205. SVN_REPOSITORY "http://gdcm.svn.sourceforge.net/svnroot/gdcm/trunk/Utilities/gdcmmd5"
  206. SVN_TAG "-r4824"
  207. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  208. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${prefix}
  209. INSTALL_COMMAND ""
  210. )
  211. # Live SVN / trunk (no SVN_TAG):
  212. #
  213. set(proj gdcm-md5-SVNtrunk)
  214. add_external_project(${proj}
  215. SVN_REPOSITORY "http://gdcm.svn.sourceforge.net/svnroot/gdcm/trunk/Utilities/gdcmmd5"
  216. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  217. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${prefix}
  218. INSTALL_COMMAND ""
  219. )
  220. endif()
  221. # Test the testable built/installed products:
  222. #
  223. enable_testing()
  224. # Use these as input to the KWStyle tests:
  225. #
  226. set(kwstyleXmlFile "${source_dir}/KWStyle-CVSHEAD/Testing/Data/0001-KWStyleConfiguration.kws.xml")
  227. set(header "${install_dir}/include/TutorialConfig.h")
  228. # Do at least a smoke test of a built executable from each
  229. # project's build directory...
  230. #
  231. # BuildTree tests:
  232. #
  233. if(can_build_tutorial_step5)
  234. add_test(TutorialStep5-Local-BuildTreeTest
  235. "${build_dir}/TutorialStep5-Local/Tutorial" 42)
  236. endif()
  237. add_test(TutorialStep1-LocalTAR-BuildTreeTest
  238. "${build_dir}/TutorialStep1-LocalTAR/EP-Tutorial" 36)
  239. add_test(TutorialStep1-LocalNoDirTAR-BuildTreeTest
  240. "${build_dir}/TutorialStep1-LocalNoDirTAR/EP-Tutorial" 25)
  241. add_test(TutorialStep1-LocalTGZ-BuildTreeTest
  242. "${build_dir}/TutorialStep1-LocalTGZ/Tutorial" 16)
  243. add_test(TutorialStep1-LocalNoDirTGZ-BuildTreeTest
  244. "${build_dir}/TutorialStep1-LocalNoDirTGZ/Tutorial" 9)
  245. if(can_use_cvs)
  246. add_test(TutorialStep1-20081201-BuildTreeTest
  247. "${build_dir}/TutorialStep1-20081201/Tutorial" 4)
  248. add_test(kwsys-from-CMake-2-6-2-BuildTreeTest
  249. "${build_dir}/kwsys-from-CMake-2-6-2/kwsysTestProcess" 1)
  250. if(can_build_kwstyle)
  251. add_test(KWStyle-CVSHEAD-BuildTreeTest
  252. "${build_dir}/KWStyle-CVSHEAD/KWStyle" -xml "${kwstyleXmlFile}" "${header}")
  253. endif()
  254. endif()
  255. if(can_use_svn)
  256. add_test(gdcm-md5-20081204-BuildTreeTest
  257. "${build_dir}/gdcm-md5-20081204/md5main" --version)
  258. add_test(gdcm-md5-r4824-BuildTreeTest
  259. "${build_dir}/gdcm-md5-r4824/md5main" --version)
  260. add_test(gdcm-md5-SVNtrunk-BuildTreeTest
  261. "${build_dir}/gdcm-md5-SVNtrunk/md5main" --version)
  262. endif()
  263. # InstallTree tests:
  264. #
  265. if(can_build_tutorial_step5)
  266. add_test(TutorialStep5-InstallTreeTest
  267. "${install_dir}/bin/Tutorial" 49)
  268. endif()
  269. if(can_use_cvs)
  270. if(can_build_kwstyle)
  271. add_test(KWStyle-InstallTreeTest
  272. "${install_dir}/bin/KWStyle" -xml "${kwstyleXmlFile}" "${header}")
  273. endif()
  274. endif()
  275. if(can_use_svn)
  276. add_test(gdcm-md5-InstallTreeTest
  277. "${install_dir}/bin/md5main" --version)
  278. endif()