SuperBuild.cmake 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. SET(cmake_version_required "2.8")
  2. SET(cmake_version_required_dash "2-8")
  3. CMAKE_MINIMUM_REQUIRED(VERSION ${cmake_version_required})
  4. #
  5. # CTK_KWSTYLE_EXECUTABLE
  6. # DCMTK_DIR
  7. # QT_QMAKE_EXECUTABLE
  8. #
  9. #-----------------------------------------------------------------------------
  10. # Enable and setup External project global properties
  11. #
  12. INCLUDE(ExternalProject)
  13. SET(ep_base "${CMAKE_BINARY_DIR}/CMakeExternals")
  14. SET_PROPERTY(DIRECTORY PROPERTY EP_BASE ${ep_base})
  15. SET(ep_install_dir ${ep_base}/Install)
  16. SET(ep_build_dir ${ep_base}/Build)
  17. SET(ep_source_dir ${ep_base}/Source)
  18. #SET(ep_parallelism_level)
  19. SET(ep_build_shared_libs ON)
  20. SET(ep_build_testing OFF)
  21. SET(ep_common_args
  22. -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
  23. -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
  24. -DBUILD_TESTING:BOOL=${ep_build_testing}
  25. )
  26. # Compute -G arg for configuring external projects with the same CMake generator:
  27. IF(CMAKE_EXTRA_GENERATOR)
  28. SET(gen "${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}")
  29. ELSE()
  30. SET(gen "${CMAKE_GENERATOR}")
  31. ENDIF()
  32. # Use this value where semi-colons are needed in ep_add args:
  33. set(sep "^^")
  34. #-----------------------------------------------------------------------------
  35. # Update CMake module path
  36. #
  37. SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/CMake)
  38. #-----------------------------------------------------------------------------
  39. # Qt is expected to be setup by CTK/CMakeLists.txt just before it includes the SuperBuild script
  40. #
  41. #-----------------------------------------------------------------------------
  42. # KWStyle
  43. #
  44. SET (kwstyle_DEPENDS)
  45. IF (CTK_USE_KWSTYLE)
  46. IF (NOT DEFINED CTK_KWSTYLE_EXECUTABLE)
  47. SET(proj KWStyle-CVSHEAD)
  48. SET(kwstyle_DEPENDS ${proj})
  49. ExternalProject_Add(${proj}
  50. LIST_SEPARATOR ${sep}
  51. CVS_REPOSITORY ":pserver:anoncvs:@public.kitware.com:/cvsroot/KWStyle"
  52. CVS_MODULE "KWStyle"
  53. CMAKE_GENERATOR ${gen}
  54. CMAKE_ARGS
  55. ${ep_common_args}
  56. )
  57. SET(CTK_KWSTYLE_EXECUTABLE ${ep_install_dir}/bin/KWStyle)
  58. ENDIF()
  59. ENDIF()
  60. #-----------------------------------------------------------------------------
  61. # PythonQt
  62. #
  63. SET (PythonQt_DEPENDS)
  64. # IF ()
  65. # SET(proj PythonQt)
  66. # SET(PythonQt_DEPENDS ${proj})
  67. # ExternalProject_Add(${proj}
  68. # SVN_REPOSITORY "https://pythonqt.svn.sourceforge.net/svnroot/pythonqt/trunk"
  69. # CMAKE_GENERATOR ${gen}
  70. # PATCH_COMMAND ${CMAKE_COMMAND} -P ${pythonqt_patch_script}
  71. # BUILD_COMMAND ""
  72. # CMAKE_ARGS
  73. # ${ep_common_args}
  74. # -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
  75. # #${vtk_PYTHON_ARGS}
  76. # INSTALL_COMMAND "")
  77. # ENDIF()
  78. #-----------------------------------------------------------------------------
  79. # Utilities/DCMTK
  80. #
  81. SET (DCMTK_DEPENDS)
  82. IF (NOT DEFINED DCMTK_DIR)
  83. SET(proj DCMTK)
  84. SET(DCMTK_DEPENDS ${proj})
  85. ExternalProject_Add(${proj}
  86. DOWNLOAD_COMMAND ""
  87. CMAKE_GENERATOR ${gen}
  88. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/${proj}
  89. CMAKE_ARGS
  90. ${ep_common_args}
  91. -DDCMTK_BUILD_APPS:BOOL=ON # Build also dmctk tools (movescu, storescp, ...)
  92. )
  93. SET(DCMTK_DIR ${ep_install_dir})
  94. ENDIF()
  95. #-----------------------------------------------------------------------------
  96. # Utilities/ZMQ
  97. #
  98. SET (ZMQ_DEPENDS)
  99. #IF ()
  100. SET(proj ZMQ)
  101. SET(ZMQ_DEPENDS ${proj})
  102. ExternalProject_Add(${proj}
  103. DOWNLOAD_COMMAND ""
  104. INSTALL_COMMAND ""
  105. CMAKE_GENERATOR ${gen}
  106. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ZMQ
  107. CMAKE_ARGS
  108. ${ep_common_args}
  109. )
  110. #ENDIF()
  111. #-----------------------------------------------------------------------------
  112. # QtMobility
  113. #
  114. SET(proj QtMobility)
  115. # Configure patch script
  116. SET(qtmobility_src_dir ${ep_source_dir}/${proj})
  117. SET(qtmobility_patch_dir ${CTK_SOURCE_DIR}/Utilities/QtMobility/)
  118. SET(qtmobility_configured_patch_dir ${CTK_BINARY_DIR}/Utilities/QtMobility/)
  119. SET(qtmobility_patchscript
  120. ${CTK_BINARY_DIR}/Utilities/QtMobility/QtMobilityBeta1-patch.cmake)
  121. CONFIGURE_FILE(
  122. ${CTK_SOURCE_DIR}/Utilities/QtMobility/QtMobilityBeta1-patch.cmake.in
  123. ${qtmobility_patchscript} @ONLY)
  124. # Define configure options
  125. SET(qtmobility_modules "serviceframework")
  126. SET(qtmobility_build_type "release")
  127. IF(UNIX)
  128. IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
  129. SET(qtmobility_build_type "debug")
  130. ENDIF()
  131. ELSEIF(NOT ${CMAKE_CFG_INTDIR} STREQUAL "Release")
  132. SET(qtmobility_build_type "debug")
  133. ENDIf()
  134. ExternalProject_Add(${proj}
  135. URL "http://get.qt.nokia.com/qt/solutions/qt-mobility-src-1.0.0-beta1.tar.gz"
  136. CONFIGURE_COMMAND <SOURCE_DIR>/configure -${qtmobility_build_type} -libdir ${CMAKE_BINARY_DIR}/CTK-build/bin -no-docs -modules ${qtmobility_modules}
  137. PATCH_COMMAND ${CMAKE_COMMAND} -P ${qtmobility_patchscript}
  138. BUILD_IN_SOURCE 1
  139. )
  140. #-----------------------------------------------------------------------------
  141. # Utilities/OpenIGTLink
  142. #
  143. SET (OpenIGTLink_DEPENDS)
  144. #IF ()
  145. SET(proj OpenIGTLink)
  146. SET(OpenIGTLink_DEPENDS ${proj})
  147. ExternalProject_Add(${proj}
  148. SVN_REPOSITORY "http://svn.na-mic.org/NAMICSandBox/trunk/OpenIGTLink"
  149. INSTALL_COMMAND ""
  150. CMAKE_GENERATOR ${gen}
  151. CMAKE_ARGS
  152. ${ep_common_args}
  153. )
  154. #ENDIF()
  155. #-----------------------------------------------------------------------------
  156. # XIP
  157. #
  158. SET (XIP_DEPENDS)
  159. #IF ()
  160. # SET(proj XIP)
  161. # SET(XIP_DEPENDS ${proj})
  162. # SET(url https://collab01a.scr.siemens.com/svn/xip/releases/latest)
  163. # ExternalProject_Add(${proj}
  164. # SVN_REPOSITORY "https://collab01a.scr.siemens.com/svn/xip/releases/latest"
  165. # SVN_USERNAME "anonymous"
  166. # INSTALL_COMMAND ""
  167. # CMAKE_GENERATOR ${gen}
  168. # CMAKE_ARGS
  169. # ${ep_common_args}
  170. # )
  171. #ENDIF()
  172. #-----------------------------------------------------------------------------
  173. # CTK Utilities
  174. #
  175. set(proj CTK-Utilities)
  176. ExternalProject_Add(${proj}
  177. DOWNLOAD_COMMAND ""
  178. CONFIGURE_COMMAND ""
  179. BUILD_COMMAND ""
  180. INSTALL_COMMAND ""
  181. DEPENDS
  182. # Mandatory dependencies
  183. QtMobility
  184. # Optionnal dependencies
  185. ${kwstyle_DEPENDS}
  186. ${DCMTK_DEPENDS}
  187. ${PythonQt_DEPENDS}
  188. ${ZMQ_DEPENDS}
  189. ${OpenIGTLink_DEPENDS}
  190. ${XIP_DEPENDS}
  191. )
  192. #-----------------------------------------------------------------------------
  193. # Generate cmake variable name corresponding to Libs, Plugins and Applications
  194. #
  195. SET(ctk_libs_bool_vars)
  196. FOREACH(lib ${ctk_libs})
  197. LIST(APPEND ctk_libs_bool_vars CTK_LIB_${lib})
  198. ENDFOREACH()
  199. SET(ctk_plugins_bool_vars)
  200. FOREACH(plugin ${ctk_plugins})
  201. LIST(APPEND ctk_plugins_bool_vars CTK_PLUGIN_${plugin})
  202. ENDFOREACH()
  203. SET(ctk_applications_bool_vars)
  204. FOREACH(app ${ctk_applications})
  205. LIST(APPEND ctk_applications_bool_vars CTK_APP_${app})
  206. ENDFOREACH()
  207. #-----------------------------------------------------------------------------
  208. # Convenient macro allowing to define superbuild arg
  209. #
  210. MACRO(ctk_set_superbuild_boolean_arg ctk_cmake_var)
  211. SET(superbuild_${ctk_cmake_var} ON)
  212. IF(DEFINED ${ctk_cmake_var} AND NOT ${ctk_cmake_var})
  213. SET(superbuild_${ctk_cmake_var} OFF)
  214. ENDIF()
  215. ENDMACRO()
  216. #-----------------------------------------------------------------------------
  217. # Set superbuild boolean args
  218. #
  219. SET(ctk_cmake_boolean_args
  220. BUILD_TESTING
  221. CTK_USE_KWSTYLE
  222. ${ctk_libs_bool_vars}
  223. ${ctk_plugins_bool_vars}
  224. ${ctk_applications_bool_vars}
  225. )
  226. SET(ctk_superbuild_boolean_args)
  227. FOREACH(ctk_cmake_arg ${ctk_cmake_boolean_args})
  228. ctk_set_superbuild_boolean_arg(${ctk_cmake_arg})
  229. LIST(APPEND ctk_superbuild_boolean_args -D${ctk_cmake_arg}:BOOL=${superbuild_${ctk_cmake_arg}})
  230. ENDFOREACH()
  231. #-----------------------------------------------------------------------------
  232. # CTK Configure
  233. #
  234. SET(proj CTK-Configure)
  235. ExternalProject_Add(${proj}
  236. DOWNLOAD_COMMAND ""
  237. CMAKE_GENERATOR ${gen}
  238. CMAKE_ARGS
  239. ${ctk_superbuild_boolean_args}
  240. -DCTK_SUPERBUILD:BOOL=OFF
  241. -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
  242. -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
  243. -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
  244. -DCTK_KWSTYLE_EXECUTABLE:FILEPATH=${CTK_KWSTYLE_EXECUTABLE}
  245. -DDCMTK_DIR=${DCMTK_DIR} # FindDCMTK expects DCMTK_DIR
  246. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
  247. BINARY_DIR ${CMAKE_BINARY_DIR}/CTK-build
  248. BUILD_COMMAND ""
  249. INSTALL_COMMAND ""
  250. DEPENDS
  251. "CTK-Utilities"
  252. )
  253. #-----------------------------------------------------------------------------
  254. # CTK
  255. #
  256. set(proj CTK-build)
  257. ExternalProject_Add(${proj}
  258. DOWNLOAD_COMMAND ""
  259. CMAKE_GENERATOR ${gen}
  260. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
  261. BINARY_DIR CTK-build
  262. #BUILD_COMMAND ""
  263. INSTALL_COMMAND ""
  264. DEPENDS
  265. "CTK-Configure"
  266. )