Bläddra i källkod

Merge branch 'simplify-externalproject-definition'

* simplify-externalproject-definition:
  Move definition of the list of external project to the top of Superbuild,cmake
  Generate list of CTK dependencies instead of explicitly using <EP>_DEPENDS
  Superbuild.cmake - Remove some comments
  CTK library options passed down to CTK only when required
  ExternalProject definition specifies which variable should be passed down to CTK
Jean-Christophe Fillion-Robin 14 år sedan
förälder
incheckning
f07a1b64d6

+ 2 - 0
CMakeExternals/CTKData.cmake

@@ -29,4 +29,6 @@ IF(BUILD_TESTING)
 	ELSE()
 	  ctkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}")
   ENDIF()
+  
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DCTKData_DIR:PATH=${CTKData_DIR})
 ENDIF()

+ 2 - 0
CMakeExternals/DCMTK.cmake

@@ -47,6 +47,8 @@ IF(${add_project})
   ELSE()
     ctkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}")
   ENDIF()
+  
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DDCMTK_DIR:PATH=${DCMTK_DIR})
 
   SET(${DCMTK_enabling_variable}_INCLUDE_DIRS DCMTK_INCLUDE_DIR)
   SET(${DCMTK_enabling_variable}_FIND_PACKAGE_CMD DCMTK)

+ 2 - 0
CMakeExternals/ITK.cmake

@@ -46,6 +46,8 @@ IF(${add_project})
   ELSE()
     ctkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}")
   ENDIF()
+  
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DITK_DIR:PATH=${ITK_DIR})
 
   SET(${ITK_enabling_variable}_LIBRARY_DIRS ITK_LIBRARY_DIRS)
   SET(${ITK_enabling_variable}_INCLUDE_DIRS ITK_INCLUDE_DIRS)

+ 3 - 0
CMakeExternals/KWStyle.cmake

@@ -32,4 +32,7 @@ IF(CTK_USE_KWSTYLE)
   ELSE()
     ctkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}")
   ENDIF()
+  
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DCTK_KWSTYLE_EXECUTABLE:FILEPATH=${CTK_KWSTYLE_EXECUTABLE})
+  
 ENDIF()

+ 2 - 0
CMakeExternals/Log4Qt.cmake

@@ -38,6 +38,8 @@ IF(${add_project})
   ELSE()
     ctkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}")
   ENDIF()
+  
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DLog4Qt_DIR:PATH=${Log4Qt_DIR})
 
   SET(${Log4Qt_enabling_variable}_INCLUDE_DIRS Log4Qt_INCLUDE_DIR)
   SET(${Log4Qt_enabling_variable}_FIND_PACKAGE_CMD Log4Qt)

+ 2 - 0
CMakeExternals/OpenIGTLink.cmake

@@ -35,6 +35,8 @@ IF(${add_project})
     ctkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}")
   ENDIF()
   
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DOpenIGTLink_DIR:PATH=${OpenIGTLink_DIR})
+  
   SET(${OpenIGTLink_enabling_variable}_LIBRARY_DIRS OpenIGTLink_LIBRARY_DIRS)
   SET(${OpenIGTLink_enabling_variable}_INCLUDE_DIRS OpenIGTLink_INCLUDE_DIRS)
   SET(${OpenIGTLink_enabling_variable}_FIND_PACKAGE_CMD OpenIGTLink)

+ 7 - 0
CMakeExternals/PythonQt.cmake

@@ -63,6 +63,13 @@ IF(${add_project})
   ELSE()
     ctkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}")
   ENDIF()
+    
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS 
+    -DPYTHONQT_INSTALL_DIR:PATH=${PYTHONQT_INSTALL_DIR}
+    -DPYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}   # FindPythonInterp expects PYTHON_EXECUTABLE variable to be defined
+    -DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR}     # FindPythonQt expects PYTHON_INCLUDE_DIR variable to be defined
+    -DPYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY}         # FindPythonQt expects PYTHON_LIBRARY variable to be defined
+    )
 
   SET(${PythonQt_enabling_variable}_INCLUDE_DIRS PYTHONQT_INCLUDE_DIR PYTHON_INCLUDE_DIRS)
   SET(${PythonQt_enabling_variable}_FIND_PACKAGE_CMD PythonQt)

+ 3 - 0
CMakeExternals/PythonQtGenerator.cmake

@@ -63,4 +63,7 @@ IF(CTK_WRAP_PYTHONQT_FULL)
     # library output directory to CTK_EXTERNAL_LIBRARY_DIRS
         
   ENDIF()
+  
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DPYTHONQTGENERATOR_EXECUTABLE:FILEPATH=${PYTHONQTGENERATOR_EXECUTABLE})
+  
 ENDIF()

+ 2 - 0
CMakeExternals/QtMobility.cmake

@@ -98,6 +98,8 @@ IF(${add_project})
     
   # Since the full path of QtMobility library is used, there is not need to add 
   # its corresponding library output directory to CTK_EXTERNAL_LIBRARY_DIRS
+  
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DQtMobility_DIR:PATH=${QtMobility_DIR})
 
   SET(${QtMobility_enabling_variable}_INCLUDE_DIRS QtMobility_INCLUDE_DIRS)
   SET(${QtMobility_enabling_variable}_FIND_PACKAGE_CMD QtMobility)

+ 2 - 0
CMakeExternals/QtSOAP.cmake

@@ -40,6 +40,8 @@ IF(${add_project})
   ELSE()
     ctkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}")
   ENDIF()
+  
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DQtSOAP_DIR:PATH=${QtSOAP_DIR})
 
   SET(${QtSOAP_enabling_variable}_LIBRARY_DIRS QtSOAP_LIBRARY_DIRS)
   SET(${QtSOAP_enabling_variable}_INCLUDE_DIRS QtSOAP_INCLUDE_DIRS)

+ 2 - 0
CMakeExternals/VTK.cmake

@@ -61,6 +61,8 @@ IF(${add_project} OR CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)
   ELSE()
     ctkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}")
   ENDIF()
+  
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DVTK_DIR:PATH=${VTK_DIR})
 
   SET(${VTK_enabling_variable}_LIBRARY_DIRS VTK_LIBRARY_DIRS)
   SET(${VTK_enabling_variable}_INCLUDE_DIRS VTK_INCLUDE_DIRS)

+ 2 - 0
CMakeExternals/XIP.cmake

@@ -34,6 +34,8 @@ IF(${add_project})
     ctkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}")
   ENDIF()
   
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DXIP_DIR:PATH=${XIP_DIR})
+  
   SET(${XIP_enabling_variable}_INCLUDE_DIRS XIP_LIBRARY_DIRS)
   SET(${XIP_enabling_variable}_INCLUDE_DIRS XIP_INCLUDE_DIRS)
   SET(${XIP_enabling_variable}_FIND_PACKAGE_CMD XIP)

+ 2 - 0
CMakeExternals/ZMQ.cmake

@@ -37,6 +37,8 @@ IF(${add_project})
   ELSE()
     ctkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}")
   ENDIF()
+  
+  LIST(APPEND CTK_SUPERBUILD_EP_ARGS -DZMQ_DIR:PATH=${ZMQ_DIR})
 
   SET(${ZMQ_enabling_variable}_INCLUDE_DIRS ZMQ_LIBRARY_DIRS)
   SET(${ZMQ_enabling_variable}_INCLUDE_DIRS ZMQ_INCLUDE_DIRS)

+ 3 - 1
CMakeLists.txt

@@ -405,7 +405,9 @@ SET(ctk_lib_options_list) # This list will be updated in ctkFunctionExtractOptio
 FOREACH(lib ${CTK_LIBS})
   ctkFunctionExtractOptionNameAndValue(${lib} lib_name lib_value)
   OPTION(CTK_LIB_${lib_name} "Enable ${lib_name} Library." ${lib_value})
-  ctkMacroAddCtkLibraryOptions(${lib_name})
+  IF(CTK_LIB_${lib_name})
+    ctkMacroAddCtkLibraryOptions(${lib_name})
+  ENDIF()
   LIST(APPEND CTK_LIBS_SUBDIRS "${lib_name}")
 ENDFOREACH()
 

+ 42 - 71
SuperBuild.cmake

@@ -18,16 +18,30 @@
 #
 ###########################################################################
 
-# 
-# CTK_KWSTYLE_EXECUTABLE
-# DCMTK_DIR
-# QT_QMAKE_EXECUTABLE
-# VTK_DIR
-# PYTHONQT_INSTALL_DIR
-# PYTHON_LIBRARY
-# PYTHON_INCLUDE_DIR
-#
-
+#-----------------------------------------------------------------------------
+# ExternalProjects - Project should be topologically ordered
+#-----------------------------------------------------------------------------
+SET(external_projects
+  CTKData
+  Log4Qt
+  KWStyle
+  VTK
+  PythonQt
+  PythonQtGenerator # Should be added after PythonQt - See comment in CMakeExternals/PythonQtGenerator.cmake
+  DCMTK
+  ZMQ
+  QtMobility
+  QtSOAP
+  OpenIGTLink
+  XIP
+  ITK
+  )
+  
+#-----------------------------------------------------------------------------
+# WARNING - No change should be required after this comment 
+#           when you are adding a new external project dependency.
+#-----------------------------------------------------------------------------
+  
 #-----------------------------------------------------------------------------
 # Declare CTK_EXTERNAL_LIBRARY_DIRS variable - This variable stores
 # the library output directory associated with the different external project
@@ -113,25 +127,18 @@ ctkMacroGetAllNonCTKTargetLibraries("${ALL_TARGET_LIBRARIES}" NON_CTK_DEPENDENCI
 FIND_PACKAGE(Doxygen QUIET)
 
 #-----------------------------------------------------------------------------
-# ExternalProjects - Project should be topologically ordered
+# Include external projects
 #
-SET(external_projects
-  CTKData
-  Log4Qt
-  KWStyle
-  VTK
-  PythonQt
-  PythonQtGenerator # Should be added after PythonQt - See comment in CMakeExternals/PythonQtGenerator.cmake
-  DCMTK
-  ZMQ
-  QtMobility
-  QtSOAP
-  OpenIGTLink
-  XIP
-  ITK
-  )
 
-# Include external projects
+# This variable will contain the list of CMake variable specific to each external project 
+# that should passed to CTK.
+# The item of this list should have the following form: -D<EP>_DIR:PATH=${<EP>_DIR}
+# where '<EP>' is an external project name.
+SET(CTK_SUPERBUILD_EP_ARGS)
+
+# This variable will contain the list of external project that CTK depends on.
+SET(CTK_DEPENDS)
+
 SET(dependency_args )
 FOREACH(p ${external_projects})
   INCLUDE(CMakeExternals/${p}.cmake)
@@ -152,36 +159,15 @@ FOREACH(p ${external_projects})
            -D${${p}_enabling_variable}_FIND_PACKAGE_CMD:STRING=${${${p}_enabling_variable}_FIND_PACKAGE_CMD})
     ENDIF()
   ENDIF()
+  LIST(APPEND CTK_DEPENDS ${${p}_DEPENDS})
 ENDFOREACH()
 
 #MESSAGE("Superbuild args: ${dependency_args}")
-   
-#-----------------------------------------------------------------------------
-# CTK Utilities
-#
-set(proj CTK-Utilities)
-ExternalProject_Add(${proj}
-  DOWNLOAD_COMMAND ""
-  CONFIGURE_COMMAND ""
-  BUILD_COMMAND ""
-  INSTALL_COMMAND ""
-  DEPENDS
-    # Mandatory dependencies
-    ${Log4Qt_DEPENDS}
-    # Optionnal dependencies
-    ${CTKData_DEPENDS}
-    ${QtMobility_DEPENDS}
-    ${QtSOAP_DEPENDS}
-    ${kwstyle_DEPENDS}
-    ${DCMTK_DEPENDS}
-    ${PythonQt_DEPENDS}
-    ${PythonQtGenerator_DEPENDS}
-    ${ZMQ_DEPENDS}
-    ${OpenIGTLink_DEPENDS}
-    ${VTK_DEPENDS}
-    ${XIP_DEPENDS}
-    ${ITK_DEPENDS}
-)
+
+# MESSAGE("CTK_DEPENDS:")
+# FOREACH(dep ${CTK_DEPENDS})
+#   MESSAGE("  ${dep}")
+# ENDFOREACH()
 
 #-----------------------------------------------------------------------------
 # Generate cmake variable name corresponding to Libs, Plugins and Applications
@@ -257,29 +243,14 @@ ExternalProject_Add(${proj}
     -DCTK_C_FLAGS:STRING=${CTK_C_FLAGS}
     -DCTK_EXTERNAL_LIBRARY_DIRS:STRING=${CTK_EXTERNAL_LIBRARY_DIRS}
     -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
-    # External projects
-    -DCTKData_DIR:PATH=${CTKData_DIR}
-	  -DZMQ_DIR:PATH=${ZMQ_DIR}                     # FindVTK expects VTK_DIR variable to be defined
-	  -DOpenIGTLink_DIR:PATH=${OpenIGTLink_DIR}     # FindOpenIGTLink expects OpenIGTLink_DIR variable to be defined
-    -DCTK_KWSTYLE_EXECUTABLE:FILEPATH=${CTK_KWSTYLE_EXECUTABLE}
-    -DDCMTK_DIR:PATH=${DCMTK_DIR} # FindDCMTK expects DCMTK_DIR variable to be defined
-    -DVTK_DIR:PATH=${VTK_DIR}     # FindVTK expects VTK_DIR variable to be defined
-    -DPYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}   # FindPythonInterp expects PYTHON_EXECUTABLE variable to be defined
-    -DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR}     # FindPythonQt expects PYTHON_INCLUDE_DIR variable to be defined
-    -DPYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY}         # FindPythonQt expects PYTHON_LIBRARY variable to be defined
-    -DPYTHONQT_INSTALL_DIR:PATH=${PYTHONQT_INSTALL_DIR} # FindPythonQt expects PYTHONQT_INSTALL_DIR variable to be defined
-    -DPYTHONQTGENERATOR_EXECUTABLE:FILEPATH=${PYTHONQTGENERATOR_EXECUTABLE} #FindPythonQtGenerator expects PYTHONQTGENERATOR_EXECUTABLE to be defined
-    -DLog4Qt_DIR:PATH=${Log4Qt_DIR} # FindLog4Qt expects Log4Qt_DIR variable to be defined
-    -DQtSOAP_DIR:PATH=${QtSOAP_DIR} # FindQtSOAP expects QtSOAP_DIR variable to be defined
-    -DQtMobility_DIR:PATH=${QtMobility_DIR}
-    -DITK_DIR:PATH=${ITK_DIR} # FindITK expects ITK_DIR variable to be defined
+    ${CTK_SUPERBUILD_EP_ARGS}
     ${dependency_args}
   SOURCE_DIR ${CTK_SOURCE_DIR}
   BINARY_DIR ${CTK_BINARY_DIR}/CTK-build
   BUILD_COMMAND ""
   INSTALL_COMMAND ""
   DEPENDS
-    "CTK-Utilities"
+    ${CTK_DEPENDS}
   )