瀏覽代碼

Merge branch '418-support-use-system-option'

* 418-support-use-system-option:
  Ensure 'superbuild_include_once' works independently of the caller scope.
  Rename macro "ctk_include_once" into "superbuild_include_once"
Jean-Christophe Fillion-Robin 11 年之前
父節點
當前提交
36fb628b14

+ 22 - 6
CMake/ctkMacroCheckExternalProjectDependency.cmake

@@ -26,13 +26,27 @@ if(NOT DEFINED EXTERNAL_PROJECT_FILE_PREFIX)
   set(EXTERNAL_PROJECT_FILE_PREFIX "External_")
 endif()
 
-macro(ctk_include_once)
+#
+# superbuild_include_once()
+#
+# superbuild_include_once() is a macro intented to be used as include guard.
+#
+# It ensures that the CMake code placed after the include guard in a CMake file included
+# using either 'include(/path/to/file.cmake)' or 'include(cmake_module)' will be executed
+# once.
+#
+# It internally set the global property '<CMAKE_CURRENT_LIST_FILENAME>_FILE_INCLUDED' to check if
+# a file has already been included.
+#
+macro(superbuild_include_once)
   # Make sure this file is included only once
   get_filename_component(CMAKE_CURRENT_LIST_FILENAME ${CMAKE_CURRENT_LIST_FILE} NAME_WE)
-  if(${CMAKE_CURRENT_LIST_FILENAME}_FILE_INCLUDED)
+  set(_property_name ${CMAKE_CURRENT_LIST_FILENAME}_FILE_INCLUDED)
+  get_property(${_property_name} GLOBAL PROPERTY ${_property_name})
+  if(${_property_name})
     return()
   endif()
-  set(${CMAKE_CURRENT_LIST_FILENAME}_FILE_INCLUDED 1)
+  set_property(GLOBAL PROPERTY ${_property_name} 1)
 endmacro()
 
 macro(_epd_status txt)
@@ -77,7 +91,8 @@ macro(ctkMacroCheckExternalProjectDependency proj)
   else()
     set(dependency_str " ")
     foreach(dep ${${proj}_DEPENDENCIES})
-      if(${EXTERNAL_PROJECT_FILE_PREFIX}${dep}_FILE_INCLUDED)
+      get_property(_is_included GLOBAL PROPERTY ${EXTERNAL_PROJECT_FILE_PREFIX}${dep}_FILE_INCLUDED)
+      if(_is_included)
         set(dependency_str "${dependency_str}${dep}[INCLUDED], ")
       else()
         set(dependency_str "${dependency_str}${dep}, ")
@@ -97,7 +112,8 @@ macro(ctkMacroCheckExternalProjectDependency proj)
 
   # Include dependencies
   foreach(dep ${${proj}_DEPENDENCIES})
-    if(NOT External_${dep}_FILE_INCLUDED)
+    get_property(_is_included GLOBAL PROPERTY External_${dep}_FILE_INCLUDED)
+    if(NOT _is_included)
       # XXX - Refactor - Add a single variable named 'EXTERNAL_PROJECT_DIRS'
       if(EXISTS "${EXTERNAL_PROJECT_DIR}/${EXTERNAL_PROJECT_FILE_PREFIX}${dep}.cmake")
         include(${EXTERNAL_PROJECT_DIR}/${EXTERNAL_PROJECT_FILE_PREFIX}${dep}.cmake)
@@ -135,7 +151,7 @@ macro(ctkMacroCheckExternalProjectDependency proj)
     foreach(possible_proj ${__epd_${CMAKE_PROJECT_NAME}_projects})
       if(NOT ${possible_proj} STREQUAL ${CMAKE_PROJECT_NAME})
 
-        unset(${EXTERNAL_PROJECT_FILE_PREFIX}${possible_proj}_FILE_INCLUDED)
+        set_property(GLOBAL PROPERTY ${EXTERNAL_PROJECT_FILE_PREFIX}${possible_proj}_FILE_INCLUDED 0)
 
         # XXX - Refactor - The following code should be re-organized
         if(DEFINED ${possible_proj}_enabling_variable)

+ 1 - 1
CMakeExternals/CTKData.cmake

@@ -2,7 +2,7 @@
 # CTKData
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(CTKData_DEPENDENCIES "")
 

+ 1 - 1
CMakeExternals/DCMTK.cmake

@@ -2,7 +2,7 @@
 # DCMTK
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(DCMTK_enabling_variable DCMTK_LIBRARIES)
 set(${DCMTK_enabling_variable}_INCLUDE_DIRS DCMTK_INCLUDE_DIR)

+ 1 - 1
CMakeExternals/ITK.cmake

@@ -2,7 +2,7 @@
 # ITK
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(ITK_enabling_variable ITK_LIBRARIES)
 set(${ITK_enabling_variable}_LIBRARY_DIRS ITK_LIBRARY_DIRS)

+ 1 - 1
CMakeExternals/KWStyle.cmake

@@ -2,7 +2,7 @@
 # KWStyle
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(KWStyle_DEPENDENCIES "")
 

+ 1 - 1
CMakeExternals/Log4Qt.cmake

@@ -2,7 +2,7 @@
 # Log4Qt
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(Log4Qt_enabling_variable Log4Qt_LIBRARIES)
 set(${Log4Qt_enabling_variable}_INCLUDE_DIRS Log4Qt_INCLUDE_DIRS)

+ 1 - 1
CMakeExternals/OpenIGTLink.cmake

@@ -2,7 +2,7 @@
 # OpenIGTLink
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(OpenIGTLink_enabling_variable OpenIGTLink_LIBRARIES)
 set(${OpenIGTLink_enabling_variable}_LIBRARY_DIRS OpenIGTLink_LIBRARY_DIRS)

+ 1 - 1
CMakeExternals/PythonQt.cmake

@@ -2,7 +2,7 @@
 # PythonQt
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(PythonQt_enabling_variable PYTHONQT_LIBRARIES)
 set(${PythonQt_enabling_variable}_INCLUDE_DIRS PYTHONQT_INCLUDE_DIR PYTHON_INCLUDE_DIRS)

+ 1 - 1
CMakeExternals/PythonQtGenerator.cmake

@@ -2,7 +2,7 @@
 # PythonQtGenerator
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 # Sanity checks
 if(DEFINED PYTHONQTGENERATOR_EXECUTABLE AND NOT EXISTS ${PYTHONQTGENERATOR_EXECUTABLE})

+ 1 - 1
CMakeExternals/QtSOAP.cmake

@@ -2,7 +2,7 @@
 # QtSOAP
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(QtSOAP_enabling_variable QtSOAP_LIBRARIES)
 set(${QtSOAP_enabling_variable}_LIBRARY_DIRS QtSOAP_LIBRARY_DIRS)

+ 1 - 1
CMakeExternals/QtTesting.cmake

@@ -2,7 +2,7 @@
 # QtTesting
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(QtTesting_DEPENDS)
 

+ 1 - 1
CMakeExternals/VTK.cmake

@@ -2,7 +2,7 @@
 # VTK
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(VTK_enabling_variable VTK_LIBRARIES)
 set(${VTK_enabling_variable}_LIBRARY_DIRS VTK_LIBRARY_DIRS)

+ 1 - 1
CMakeExternals/XIP.cmake

@@ -2,7 +2,7 @@
 # XIP
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(XIP_enabling_variable XIP_LIBRARIES)
 set(${XIP_enabling_variable}_LIBRARY_DIRS XIP_LIBRARY_DIRS)

+ 1 - 1
CMakeExternals/ZMQ.cmake

@@ -2,7 +2,7 @@
 # ZMQ
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(ZMQ_enabling_variable ZMQ_LIBRARIES)
 set(${ZMQ_enabling_variable}_LIBRARY_DIRS ZMQ_LIBRARY_DIRS)

+ 1 - 1
CMakeExternals/qxmlrpc.cmake

@@ -2,7 +2,7 @@
 # qxmlrpc
 #
 
-ctk_include_once()
+superbuild_include_once()
 
 set(qxmlrpc_enabling_variable qxmlrpc_LIBRARY)
 set(${qxmlrpc_enabling_variable}_LIBRARY_DIRS qxmlrpc_LIBRARY_DIRS)

+ 1 - 1
CMakeLists.txt

@@ -875,7 +875,7 @@ if(CTK_USE_CONTRIBUTED_PLUGINS)
     ctkFunctionCheckoutRepo(
       NAME ExternalProjectsContrib
       GIT_URL github.com/commontk/ExternalProjectsContrib.git
-      GIT_TAG 4710b4b
+      GIT_TAG 80ce3d5
       )
   endif()