Parcourir la source

Introduce "SUPERBUILD_TOPLEVEL_PROJECT" project variable

For any explicit call to "ctkMacroCheckExternalProjectDependency(<projname>)",
the variable SUPERBUILD_TOPLEVEL_PROJECT will be ensured to be set to <projname>
within each of the dependent external project.

This variable can be used within any external project to set variable or
property specific to a given top-level project.

See #418
Jean-Christophe Fillion-Robin il y a 11 ans
Parent
commit
567d8d86db
1 fichiers modifiés avec 24 ajouts et 19 suppressions
  1. 24 19
      CMake/ctkMacroCheckExternalProjectDependency.cmake

+ 24 - 19
CMake/ctkMacroCheckExternalProjectDependency.cmake

@@ -69,11 +69,15 @@ macro(ctkMacroCheckExternalProjectDependency proj)
     message(FATAL_ERROR "${__indent}${proj}_DEPENDENCIES variable is NOT defined !")
   endif()
 
+  if(NOT DEFINED SUPERBUILD_TOPLEVEL_PROJECT)
+    set(SUPERBUILD_TOPLEVEL_PROJECT ${proj})
+  endif()
+
   # Keep track of the projects
-  list(APPEND __epd_${CMAKE_PROJECT_NAME}_projects ${proj})
+  list(APPEND __epd_${SUPERBUILD_TOPLEVEL_PROJECT}_projects ${proj})
 
-  # Is this the first run ? (used to set the <CMAKE_PROJECT_NAME>_USE_SYSTEM_* variables)
-  if(${proj} STREQUAL ${CMAKE_PROJECT_NAME} AND NOT DEFINED __epd_first_pass)
+  # Is this the first run ? (used to set the <SUPERBUILD_TOPLEVEL_PROJECT>_USE_SYSTEM_* variables)
+  if(${proj} STREQUAL ${SUPERBUILD_TOPLEVEL_PROJECT} AND NOT DEFINED __epd_first_pass)
     message(STATUS "SuperBuild - First pass")
     set(__epd_first_pass TRUE)
   endif()
@@ -81,7 +85,7 @@ macro(ctkMacroCheckExternalProjectDependency proj)
   # Set message strings
   set(__${proj}_indent ${__indent})
   set(__${proj}_superbuild_message "SuperBuild - ${__indent}${proj}[OK]")
-  if(${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj})
+  if(${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj})
     set(__${proj}_superbuild_message "${__${proj}_superbuild_message} (SYSTEM)")
   endif()
 
@@ -102,11 +106,11 @@ macro(ctkMacroCheckExternalProjectDependency proj)
   endif()
 
   foreach(dep ${${proj}_DEPENDENCIES})
-    if(${${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj}})
-      set(${CMAKE_PROJECT_NAME}_USE_SYSTEM_${dep} ${${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj}})
+    if(${${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}})
+      set(${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${dep} ${${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}})
     endif()
     #if(__epd_first_pass)
-    #  message("${CMAKE_PROJECT_NAME}_USE_SYSTEM_${dep} set to [${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj}:${${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj}}]")
+    #  message("${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${dep} set to [${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}:${${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}}]")
     #endif()
   endforeach()
 
@@ -139,17 +143,17 @@ macro(ctkMacroCheckExternalProjectDependency proj)
     string(SUBSTRING "${__indent}" 0 ${__indent_length} __indent)
   endif()
 
-  if(${proj} STREQUAL ${CMAKE_PROJECT_NAME} AND __epd_first_pass)
+  if(${proj} STREQUAL ${SUPERBUILD_TOPLEVEL_PROJECT} AND __epd_first_pass)
     message(STATUS "SuperBuild - First pass - done")
     unset(__indent)
-    if(${CMAKE_PROJECT_NAME}_SUPERBUILD)
+    if(${SUPERBUILD_TOPLEVEL_PROJECT}_SUPERBUILD)
       set(__epd_first_pass FALSE)
     endif()
 
-    unset(${CMAKE_PROJECT_NAME}_DEPENDENCIES) # XXX - Refactor
+    unset(${SUPERBUILD_TOPLEVEL_PROJECT}_DEPENDENCIES) # XXX - Refactor
 
-    foreach(possible_proj ${__epd_${CMAKE_PROJECT_NAME}_projects})
-      if(NOT ${possible_proj} STREQUAL ${CMAKE_PROJECT_NAME})
+    foreach(possible_proj ${__epd_${SUPERBUILD_TOPLEVEL_PROJECT}_projects})
+      if(NOT ${possible_proj} STREQUAL ${SUPERBUILD_TOPLEVEL_PROJECT})
 
         set_property(GLOBAL PROPERTY ${EXTERNAL_PROJECT_FILE_PREFIX}${possible_proj}_FILE_INCLUDED 0)
 
@@ -157,23 +161,23 @@ macro(ctkMacroCheckExternalProjectDependency proj)
         if(DEFINED ${possible_proj}_enabling_variable)
           ctkMacroShouldAddExternalproject(${${possible_proj}_enabling_variable} add_project)
           if(${add_project})
-            list(APPEND ${CMAKE_PROJECT_NAME}_DEPENDENCIES ${possible_proj})
+            list(APPEND ${SUPERBUILD_TOPLEVEL_PROJECT}_DEPENDENCIES ${possible_proj})
           else()
             # XXX HACK
             if(${possible_proj} STREQUAL "VTK"
                AND CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)
-              list(APPEND ${CMAKE_PROJECT_NAME}_DEPENDENCIES VTK)
+              list(APPEND ${SUPERBUILD_TOPLEVEL_PROJECT}_DEPENDENCIES VTK)
             else()
               unset(${${possible_proj}_enabling_variable}_INCLUDE_DIRS)
               unset(${${possible_proj}_enabling_variable}_LIBRARY_DIRS)
               unset(${${possible_proj}_enabling_variable}_FIND_PACKAGE_CMD)
-              if(${CMAKE_PROJECT_NAME}_SUPERBUILD)
+              if(${SUPERBUILD_TOPLEVEL_PROJECT}_SUPERBUILD)
                 message(STATUS "SuperBuild - ${possible_proj}[OPTIONAL]")
               endif()
             endif()
           endif()
         else()
-          list(APPEND ${CMAKE_PROJECT_NAME}_DEPENDENCIES ${possible_proj})
+          list(APPEND ${SUPERBUILD_TOPLEVEL_PROJECT}_DEPENDENCIES ${possible_proj})
         endif()
         # XXX
 
@@ -182,10 +186,11 @@ macro(ctkMacroCheckExternalProjectDependency proj)
       endif()
     endforeach()
 
-    list(REMOVE_DUPLICATES ${CMAKE_PROJECT_NAME}_DEPENDENCIES)
+    list(REMOVE_DUPLICATES ${SUPERBUILD_TOPLEVEL_PROJECT}_DEPENDENCIES)
+
+    if(${SUPERBUILD_TOPLEVEL_PROJECT}_SUPERBUILD)
 
-    if(${CMAKE_PROJECT_NAME}_SUPERBUILD)
-      ctkMacroCheckExternalProjectDependency(${CMAKE_PROJECT_NAME})
+      ctkMacroCheckExternalProjectDependency(${SUPERBUILD_TOPLEVEL_PROJECT})
     endif()
 
   endif()