SuperBuild.cmake 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  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. # Initialize NON_CTK_DEPENDENCIES variable
  40. #
  41. # Using the variable ALL_TARGET_LIBRARIES initialized in the main CMakeLists.txt with the help
  42. # of the macro ctkMacroGetAllTargetLibraries, let's get the list of all Non-CTK dependencies.
  43. # NON_CTK_DEPENDENCIES is expected by the macro ctkMacroShouldAddExternalProject
  44. ctkMacroGetAllNonCTKTargetLibraries("${ALL_TARGET_LIBRARIES}" NON_CTK_DEPENDENCIES)
  45. #MESSAGE(STATUS NON_CTK_DEPENDENCIES:${NON_CTK_DEPENDENCIES})
  46. #-----------------------------------------------------------------------------
  47. # Qt is expected to be setup by CTK/CMakeLists.txt just before it includes the SuperBuild script
  48. #
  49. #-----------------------------------------------------------------------------
  50. # KWStyle
  51. #
  52. SET(kwstyle_DEPENDS)
  53. IF(CTK_USE_KWSTYLE)
  54. IF(NOT DEFINED CTK_KWSTYLE_EXECUTABLE)
  55. SET(proj KWStyle-CVSHEAD)
  56. SET(kwstyle_DEPENDS ${proj})
  57. ExternalProject_Add(${proj}
  58. LIST_SEPARATOR ${sep}
  59. CVS_REPOSITORY ":pserver:anoncvs:@public.kitware.com:/cvsroot/KWStyle"
  60. CVS_MODULE "KWStyle"
  61. CMAKE_GENERATOR ${gen}
  62. CMAKE_ARGS
  63. ${ep_common_args}
  64. )
  65. SET(CTK_KWSTYLE_EXECUTABLE ${ep_install_dir}/bin/KWStyle)
  66. ENDIF()
  67. ENDIF()
  68. #-----------------------------------------------------------------------------
  69. # PythonQt
  70. #
  71. SET(PythonQt_DEPENDS)
  72. ctkMacroShouldAddExternalProject(PYTHONQT_LIBRARIES add_project)
  73. IF(${add_project})
  74. # SET(proj PythonQt)
  75. # SET(PythonQt_DEPENDS ${proj})
  76. # ExternalProject_Add(${proj}
  77. # SVN_REPOSITORY "https://pythonqt.svn.sourceforge.net/svnroot/pythonqt/trunk"
  78. # CMAKE_GENERATOR ${gen}
  79. # PATCH_COMMAND ${CMAKE_COMMAND} -P ${pythonqt_patch_script}
  80. # BUILD_COMMAND ""
  81. # CMAKE_ARGS
  82. # ${ep_common_args}
  83. # -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
  84. # #${vtk_PYTHON_ARGS}
  85. # INSTALL_COMMAND "")
  86. ENDIF()
  87. #-----------------------------------------------------------------------------
  88. # Utilities/DCMTK
  89. #
  90. SET(DCMTK_DEPENDS)
  91. ctkMacroShouldAddExternalProject(DCMTK_LIBRARIES add_project)
  92. IF(${add_project})
  93. IF(NOT DEFINED DCMTK_DIR)
  94. SET(proj DCMTK)
  95. # MESSAGE(STATUS "Adding project:${proj}")
  96. SET(DCMTK_DEPENDS ${proj})
  97. ExternalProject_Add(${proj}
  98. DOWNLOAD_COMMAND ""
  99. CMAKE_GENERATOR ${gen}
  100. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/${proj}
  101. CMAKE_ARGS
  102. ${ep_common_args}
  103. -DDCMTK_BUILD_APPS:BOOL=ON # Build also dmctk tools (movescu, storescp, ...)
  104. )
  105. SET(DCMTK_DIR ${ep_install_dir})
  106. ENDIF()
  107. ENDIF()
  108. #-----------------------------------------------------------------------------
  109. # Utilities/ZMQ
  110. #
  111. SET(ZMQ_DEPENDS)
  112. ctkMacroShouldAddExternalProject(ZMQ_LIBRARIES add_project)
  113. IF(${add_project})
  114. SET(proj ZMQ)
  115. # MESSAGE(STATUS "Adding project:${proj}")
  116. SET(ZMQ_DEPENDS ${proj})
  117. ExternalProject_Add(${proj}
  118. DOWNLOAD_COMMAND ""
  119. INSTALL_COMMAND ""
  120. CMAKE_GENERATOR ${gen}
  121. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ZMQ
  122. CMAKE_ARGS
  123. ${ep_common_args}
  124. )
  125. ENDIF()
  126. #-----------------------------------------------------------------------------
  127. # QtMobility
  128. #
  129. SET(QtMobility_DEPENDS)
  130. ctkMacroShouldAddExternalProject(QTMOBILITY_QTSERVICEFW_LIBRARIES add_project)
  131. IF(${add_project})
  132. SET(proj QtMobility)
  133. # MESSAGE(STATUS "Adding project:${proj}")
  134. SET(QtMobility_DEPENDS ${proj})
  135. # Configure patch script
  136. SET(qtmobility_src_dir ${ep_source_dir}/${proj})
  137. SET(qtmobility_patch_dir ${CTK_SOURCE_DIR}/Utilities/QtMobility/)
  138. SET(qtmobility_configured_patch_dir ${CTK_BINARY_DIR}/Utilities/QtMobility/)
  139. SET(qtmobility_patchscript
  140. ${CTK_BINARY_DIR}/Utilities/QtMobility/QtMobilityBeta1-patch.cmake)
  141. CONFIGURE_FILE(
  142. ${CTK_SOURCE_DIR}/Utilities/QtMobility/QtMobilityBeta1-patch.cmake.in
  143. ${qtmobility_patchscript} @ONLY)
  144. # Define configure options
  145. SET(qtmobility_modules "serviceframework")
  146. SET(qtmobility_build_type "release")
  147. IF(UNIX)
  148. IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
  149. SET(qtmobility_build_type "debug")
  150. ENDIF()
  151. ELSEIF(NOT ${CMAKE_CFG_INTDIR} STREQUAL "Release")
  152. SET(qtmobility_build_type "debug")
  153. ENDIf()
  154. ExternalProject_Add(${proj}
  155. URL "http://get.qt.nokia.com/qt/solutions/qt-mobility-src-1.0.0-beta1.tar.gz"
  156. CONFIGURE_COMMAND <SOURCE_DIR>/configure -${qtmobility_build_type} -libdir ${CMAKE_BINARY_DIR}/CTK-build/bin -no-docs -modules ${qtmobility_modules}
  157. PATCH_COMMAND ${CMAKE_COMMAND} -P ${qtmobility_patchscript}
  158. BUILD_IN_SOURCE 1
  159. )
  160. ENDIF()
  161. #-----------------------------------------------------------------------------
  162. # Utilities/OpenIGTLink
  163. #
  164. SET (OpenIGTLink_DEPENDS)
  165. ctkMacroShouldAddExternalProject(OpenIGTLink_LIBRARIES add_project)
  166. IF(${add_project})
  167. IF(NOT DEFINED OpenIGTLink_DIR)
  168. SET(proj OpenIGTLink)
  169. # MESSAGE(STATUS "Adding project:${proj}")
  170. SET(OpenIGTLink_DEPENDS ${proj})
  171. ExternalProject_Add(${proj}
  172. SVN_REPOSITORY "http://svn.na-mic.org/NAMICSandBox/trunk/OpenIGTLink"
  173. INSTALL_COMMAND ""
  174. CMAKE_GENERATOR ${gen}
  175. CMAKE_ARGS
  176. ${ep_common_args}
  177. )
  178. SET(OpenIGTLink_DIR ${ep_build_dir}/${proj})
  179. ENDIF()
  180. ENDIF()
  181. #-----------------------------------------------------------------------------
  182. # XIP
  183. #
  184. SET (XIP_DEPENDS)
  185. ctkMacroShouldAddExternalProject(XIP_LIBRARIES add_project)
  186. IF(${add_project})
  187. SET(proj XIP)
  188. # MESSAGE(STATUS "Adding project:${proj}")
  189. SET(XIP_DEPENDS ${proj})
  190. ExternalProject_Add(${proj}
  191. SVN_REPOSITORY "https://collab01a.scr.siemens.com/svn/xip/releases/latest"
  192. SVN_USERNAME "anonymous"
  193. INSTALL_COMMAND ""
  194. CMAKE_GENERATOR ${gen}
  195. CMAKE_ARGS
  196. ${ep_common_args}
  197. )
  198. ENDIF()
  199. #-----------------------------------------------------------------------------
  200. # CTK Utilities
  201. #
  202. set(proj CTK-Utilities)
  203. ExternalProject_Add(${proj}
  204. DOWNLOAD_COMMAND ""
  205. CONFIGURE_COMMAND ""
  206. BUILD_COMMAND ""
  207. INSTALL_COMMAND ""
  208. DEPENDS
  209. # Mandatory dependencies
  210. ${QtMobility_DEPENDS}
  211. # Optionnal dependencies
  212. ${kwstyle_DEPENDS}
  213. ${DCMTK_DEPENDS}
  214. ${PythonQt_DEPENDS}
  215. ${ZMQ_DEPENDS}
  216. ${OpenIGTLink_DEPENDS}
  217. ${XIP_DEPENDS}
  218. )
  219. #-----------------------------------------------------------------------------
  220. # Generate cmake variable name corresponding to Libs, Plugins and Applications
  221. #
  222. SET(ctk_libs_bool_vars)
  223. FOREACH(lib ${ctk_libs})
  224. LIST(APPEND ctk_libs_bool_vars CTK_LIB_${lib})
  225. ENDFOREACH()
  226. SET(ctk_plugins_bool_vars)
  227. FOREACH(plugin ${ctk_plugins})
  228. LIST(APPEND ctk_plugins_bool_vars CTK_PLUGIN_${plugin})
  229. ENDFOREACH()
  230. SET(ctk_applications_bool_vars)
  231. FOREACH(app ${ctk_applications})
  232. LIST(APPEND ctk_applications_bool_vars CTK_APP_${app})
  233. ENDFOREACH()
  234. #-----------------------------------------------------------------------------
  235. # Convenient macro allowing to define superbuild arg
  236. #
  237. MACRO(ctk_set_superbuild_boolean_arg ctk_cmake_var)
  238. SET(superbuild_${ctk_cmake_var} ON)
  239. IF(DEFINED ${ctk_cmake_var} AND NOT ${ctk_cmake_var})
  240. SET(superbuild_${ctk_cmake_var} OFF)
  241. ENDIF()
  242. ENDMACRO()
  243. #-----------------------------------------------------------------------------
  244. # Set superbuild boolean args
  245. #
  246. SET(ctk_cmake_boolean_args
  247. BUILD_TESTING
  248. CTK_USE_KWSTYLE
  249. ${ctk_libs_bool_vars}
  250. ${ctk_plugins_bool_vars}
  251. ${ctk_applications_bool_vars}
  252. )
  253. SET(ctk_superbuild_boolean_args)
  254. FOREACH(ctk_cmake_arg ${ctk_cmake_boolean_args})
  255. ctk_set_superbuild_boolean_arg(${ctk_cmake_arg})
  256. LIST(APPEND ctk_superbuild_boolean_args -D${ctk_cmake_arg}:BOOL=${superbuild_${ctk_cmake_arg}})
  257. ENDFOREACH()
  258. #-----------------------------------------------------------------------------
  259. # CTK Configure
  260. #
  261. SET(proj CTK-Configure)
  262. ExternalProject_Add(${proj}
  263. DOWNLOAD_COMMAND ""
  264. CMAKE_GENERATOR ${gen}
  265. CMAKE_ARGS
  266. ${ctk_superbuild_boolean_args}
  267. -DCTK_SUPERBUILD:BOOL=OFF
  268. -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
  269. -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
  270. -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
  271. -DCTK_KWSTYLE_EXECUTABLE:FILEPATH=${CTK_KWSTYLE_EXECUTABLE}
  272. -DDCMTK_DIR=${DCMTK_DIR} # FindDCMTK expects DCMTK_DIR
  273. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
  274. BINARY_DIR ${CMAKE_BINARY_DIR}/CTK-build
  275. BUILD_COMMAND ""
  276. INSTALL_COMMAND ""
  277. DEPENDS
  278. "CTK-Utilities"
  279. )
  280. #-----------------------------------------------------------------------------
  281. # CTK
  282. #
  283. SET(proj CTK-build)
  284. ExternalProject_Add(${proj}
  285. DOWNLOAD_COMMAND ""
  286. CMAKE_GENERATOR ${gen}
  287. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
  288. BINARY_DIR CTK-build
  289. #BUILD_COMMAND ""
  290. INSTALL_COMMAND ""
  291. DEPENDS
  292. "CTK-Configure"
  293. )
  294. #-----------------------------------------------------------------------------
  295. # Custom target allowing to drive the build of CTK project itself
  296. #
  297. ADD_CUSTOM_TARGET(CTK
  298. COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/CTK-build
  299. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CTK-build
  300. )