Parcourir la source

Ensure code following superbuild_include_dependencies(CTK) is executed.

This commit ensured that code located after the call to
'superbuild_include_dependencies(<top-level-project>)' is executed.

Also fixes the test accordingly.

See #418
Jean-Christophe Fillion-Robin il y a 11 ans
Parent
commit
0de8b47b54

+ 3 - 3
CMake/Testing/SuperBuildTest/CMakeLists.txt

@@ -93,16 +93,16 @@ check_variable(BAR_VAR_WITH_LABELS "BarVarWithLabels")
 check_variable(SuperBuildTest_EP_LABEL_LABEL_A "FOO_VAR_WITH_LABELS")
 check_variable(SuperBuildTest_EP_LABEL_LABEL_B "FOO_VAR_WITH_LABELS;BAR_VAR_WITH_LABELS")
 
-check_variable(SuperBuildTest_EP_LABEL_FIND_PACKAGE "LibA_DIR")
+check_variable(SuperBuildTest_EP_LABEL_FIND_PACKAGE "LibA_DIR;LibB_DIR")
+
 get_filename_component(expected_LibA_DIR "${CMAKE_CURRENT_BINARY_DIR}/../LibA-build" REALPATH)
 check_variable(LibA_DIR ${expected_LibA_DIR})
 
-check_variable(SuperBuildTest_EP_LABEL_FIND_PACKAGE "LibB_DIR")
 get_filename_component(expected_LibB_DIR "${CMAKE_CURRENT_BINARY_DIR}/../LibB-build" REALPATH)
 check_variable(LibB_DIR ${expected_LibB_DIR})
 
 check_variable(SuperBuildTest_EP_LABEL_USE_SYSTEM
-  "${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibA;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibB;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibC;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibD")
+  "${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibA;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibB;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibD;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibC")
 check_variable(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibA "")
 check_variable(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibB "")
 check_variable(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibC 1)

+ 17 - 13
CMake/ctkMacroCheckExternalProjectDependency.cmake

@@ -150,7 +150,7 @@ endfunction()
 #!
 #! <vartype_var> is an optional variable name that will be set to "<vartype>"
 function(_sb_extract_varname_and_vartype cmake_varname_and_type varname_var)
-  set(_vartype_var ${ARGV2})
+  set(_vartype_var "${ARGV2}")
   string(REPLACE ":" ";" varname_and_vartype ${cmake_varname_and_type})
   list(GET varname_and_vartype 0 _varname)
   list(GET varname_and_vartype 1 _vartype)
@@ -177,8 +177,8 @@ endfunction()
 #!
 #! <vartype_var> is an optional variable name that will be set to "<vartype>"
 function(_sb_cmakevar_to_cmakearg cmake_varname_and_type cmake_arg_var cmake_arg_type)
-  set(_varname_var ${ARGV3})
-  set(_vartype_var ${ARGV4})
+  set(_varname_var "${ARGV3}")
+  set(_vartype_var "${ARGV4}")
 
   # XXX Add check for <cmake_arg_type> value
 
@@ -192,7 +192,6 @@ function(_sb_cmakevar_to_cmakearg cmake_varname_and_type cmake_arg_var cmake_arg
 
   if(cmake_arg_type STREQUAL "CMAKE_CMD")
     # Separate list item with <EP_LIST_SEPARATOR>
-    set(ep_arg_as_string "")
     ctk_list_to_string(${EP_LIST_SEPARATOR} "${_var_value}" _var_value)
   endif()
 
@@ -459,14 +458,17 @@ macro(superbuild_include_dependencies)
     superbuild_message(${proj} "${proj} => Requires${dependency_str}")
   endif()
 
-  foreach(dep ${${proj}_DEPENDENCIES})
-    if(${${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}})
-      set(${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${dep} ${${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}})
-    endif()
-    #if(SUPERBUILD_FIRST_PASS)
-    #  message("${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${dep} set to [${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}:${${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}}]")
-    #endif()
-  endforeach()
+  if(NOT ${proj} STREQUAL ${SUPERBUILD_TOPLEVEL_PROJECT})
+    foreach(dep ${${proj}_DEPENDENCIES})
+      if(${${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}})
+        set(${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${dep} ${${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}})
+      endif()
+      #if(SUPERBUILD_FIRST_PASS)
+      #  message("${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${dep} set to "
+      #          "[${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}:${${SUPERBUILD_TOPLEVEL_PROJECT}_USE_SYSTEM_${proj}}]")
+      #endif()
+    endforeach()
+  endif()
 
   superbuild_stack_push(SUPERBUILD_PROJECT_STACK ${proj})
 
@@ -536,7 +538,9 @@ macro(superbuild_include_dependencies)
   endif()
 
   if(SUPERBUILD_FIRST_PASS)
-    return()
+    if(NOT ${proj} STREQUAL ${SUPERBUILD_TOPLEVEL_PROJECT})
+      return()
+    endif()
   else()
     unset(${proj}_EXTERNAL_PROJECT_ARGS)
     _sb_get_external_project_arguments(${proj} ${proj}_EXTERNAL_PROJECT_ARGS)

+ 13 - 0
CMake/ctkMacroCheckExternalProjectDependencyTest.cmake

@@ -26,6 +26,15 @@ function(_sb_cmakevar_to_cmakearg_test)
     endif()
   endfunction()
 
+  function(check_variable id var_name expected_value)
+    if(NOT "x${${var_name}}" STREQUAL "x${expected_value}")
+      message(FATAL_ERROR "Problem with _sb_cmakevar_to_cmakearg() - See testcase: ${id}\n"
+                          "CMake variable [${var_name}] has wrong value !\n"
+                          "current:${${var_name}}\n"
+                          "expected:${expected_value}")
+    endif()
+  endfunction()
+
   set(id 1)
   set(case${id}_input "Hello")
   set(case${id}_expected_varname "")
@@ -38,6 +47,7 @@ function(_sb_cmakevar_to_cmakearg_test)
       "${case${id}_cmake_arg_var}" "${case${id}_expected_cmake_arg_var}"
       "${case${id}_varname}" "${case${id}_expected_varname}"
       "${case${id}_vartype}" "${case${id}_expected_vartype}")
+  check_variable(${id} case${id}_input "Hello")
 
   set(id 2)
   set(case${id}_input "Hello")
@@ -51,6 +61,7 @@ function(_sb_cmakevar_to_cmakearg_test)
       "${case${id}_cmake_arg_var}" "${case${id}_expected_cmake_arg_var}"
       "${case${id}_varname}" "${case${id}_expected_varname}"
       "${case${id}_vartype}" "${case${id}_expected_vartype}")
+  check_variable(${id} case${id}_input "Hello")
 
   set(id 3)
   set(case${id}_input Hello World)
@@ -64,6 +75,7 @@ function(_sb_cmakevar_to_cmakearg_test)
       "${case${id}_cmake_arg_var}" "${case${id}_expected_cmake_arg_var}"
       "${case${id}_varname}" "${case${id}_expected_varname}"
       "${case${id}_vartype}" "${case${id}_expected_vartype}")
+  check_variable(${id} case${id}_input "Hello;World")
 
   set(id 4)
   set(case${id}_input Hello World)
@@ -77,6 +89,7 @@ function(_sb_cmakevar_to_cmakearg_test)
       "${case${id}_cmake_arg_var}" "${case${id}_expected_cmake_arg_var}"
       "${case${id}_varname}" "${case${id}_expected_varname}"
       "${case${id}_vartype}" "${case${id}_expected_vartype}")
+  check_variable(${id} case${id}_input "Hello;World")
 
   message("SUCCESS")
 endfunction()