Explorar o código

ENH: Update ctkMacroCollectTargetLibraryNames - Do not use option_name option anymore

This macro always return the list of target libraries associated with a target.

Macros ctkMacroGenerateProjectXml and ctkMacroGenerateDGraphInput have been updated to
account for this change.
Jean-Christophe Fillion-Robin %!s(int64=15) %!d(string=hai) anos
pai
achega
12a9af8e3c

+ 30 - 26
CMake/ctkMacroGenerateDGraphInput.cmake

@@ -27,36 +27,40 @@ MACRO(ctkMacroGenerateDGraphInput dir name target_directories)
       MESSAGE(FATAL_ERROR "Target directory ${target_dir}/CMakeLists.txt doesn't exists !")
     ENDIF()
 
-    # extract project name from CMakeLists.txt
-    FILE(STRINGS "${target_dir}/CMakeLists.txt" project_string
-      REGEX "^ *(P|p)(R|r)(O|o)(J|j)(E|e)(C|c)(T|t)\\("
-      LIMIT_COUNT 10)
-    STRING(REGEX MATCH "\\((.*)\\)" target_project_name ${project_string})
-    STRING(REGEX REPLACE "\\(|\\)" "" target_project_name ${target_project_name})
-    IF(${target_project_name} STREQUAL "")
-      MESSAGE(FATAL_ERROR "Failed to extract project name from ${target_dir}/CMakeLists.txt")
-    ENDIF()
-    #MESSAGE(STATUS target_project_name:${target_project_name})
+    IF(${option_name})
     
-    LIST(APPEND vertices ${target_project_name})
+      # extract project name from CMakeLists.txt
+      FILE(STRINGS "${target_dir}/CMakeLists.txt" project_string
+        REGEX "^ *(P|p)(R|r)(O|o)(J|j)(E|e)(C|c)(T|t)\\("
+        LIMIT_COUNT 10)
+      STRING(REGEX MATCH "\\((.*)\\)" target_project_name ${project_string})
+      STRING(REGEX REPLACE "\\(|\\)" "" target_project_name ${target_project_name})
+      IF(${target_project_name} STREQUAL "")
+        MESSAGE(FATAL_ERROR "Failed to extract project name from ${target_dir}/CMakeLists.txt")
+      ENDIF()
+      #MESSAGE(STATUS target_project_name:${target_project_name})
+      
+      LIST(APPEND vertices ${target_project_name})
 
-    # Make sure the variable is cleared
-    SET(dependencies )
+      # Make sure the variable is cleared
+      SET(dependencies )
 
-    # get dependencies
-    ctkMacroCollectTargetLibraryNames(${target_dir} ${option_name} dependencies)
-    
-    # Make sure the variable is cleared
-    SET(ctk_dependencies)
+      # get dependencies
+      ctkMacroCollectTargetLibraryNames(${target_dir} dependencies)
+      
+      # Make sure the variable is cleared
+      SET(ctk_dependencies)
 
-    # filter dependencies starting with CTK
-    ctkMacroGetAllCTKTargetLibraries("${dependencies}" ctk_dependencies)
-    
-    # Generate XML related to the dependencies
-    FOREACH(dependency_name ${ctk_dependencies})
-      LIST(APPEND edges ${dependency_name})
-      SET(dgraph_list ${dgraph_list} "${target_project_name} ${dependency_name}\n")
-    ENDFOREACH()
+      # filter dependencies starting with CTK
+      ctkMacroGetAllCTKTargetLibraries("${dependencies}" ctk_dependencies)
+      
+      # Generate XML related to the dependencies
+      FOREACH(dependency_name ${ctk_dependencies})
+        LIST(APPEND edges ${dependency_name})
+        SET(dgraph_list ${dgraph_list} "${target_project_name} ${dependency_name}\n")
+      ENDFOREACH()
+
+    ENDIF()
     
   ENDFOREACH()
 

+ 33 - 30
CMake/ctkMacroGenerateProjectXml.cmake

@@ -29,41 +29,44 @@ MACRO(ctkMacroGenerateProjectXml dir name target_directories is_superbuild)
       MESSAGE(FATAL_ERROR "Target directory ${target_dir}/CMakeLists.txt doesn't exists !")
     ENDIF()
 
-    # extract project name from CMakeLists.txt
-    FILE(STRINGS "${target_dir}/CMakeLists.txt" project_string
-      REGEX "^ *(P|p)(R|r)(O|o)(J|j)(E|e)(C|c)(T|t)\\("
-      LIMIT_COUNT 10)
-    STRING(REGEX MATCH "\\((.*)\\)" target_project_name ${project_string})
-    STRING(REGEX REPLACE "\\(|\\)" "" target_project_name ${target_project_name})
-    IF(${target_project_name} STREQUAL "")
-      MESSAGE(FATAL_ERROR "Failed to extract project name from ${target_dir}/CMakeLists.txt")
-    ENDIF()
-    #MESSAGE(STATUS target_project_name:${target_project_name})
-    
-    SET(xml_subprojects ${xml_subprojects} "  <SubProject name=\"${target_project_name}\">\n")
+    IF(${option_name})
+
+      # extract project name from CMakeLists.txt
+      FILE(STRINGS "${target_dir}/CMakeLists.txt" project_string
+        REGEX "^ *(P|p)(R|r)(O|o)(J|j)(E|e)(C|c)(T|t)\\("
+        LIMIT_COUNT 10)
+      STRING(REGEX MATCH "\\((.*)\\)" target_project_name ${project_string})
+      STRING(REGEX REPLACE "\\(|\\)" "" target_project_name ${target_project_name})
+      IF(${target_project_name} STREQUAL "")
+        MESSAGE(FATAL_ERROR "Failed to extract project name from ${target_dir}/CMakeLists.txt")
+      ENDIF()
+      #MESSAGE(STATUS target_project_name:${target_project_name})
+      
+      SET(xml_subprojects ${xml_subprojects} "  <SubProject name=\"${target_project_name}\">\n")
 
-    # Make sure the variable is cleared
-    SET(dependencies )
+      # Make sure the variable is cleared
+      SET(dependencies )
 
-    # get dependencies
-    ctkMacroCollectTargetLibraryNames(${target_dir} ${option_name} dependencies)
-     
-    # Make sure the variable is cleared
-    SET(ctk_dependencies)
+      # get dependencies
+      ctkMacroCollectTargetLibraryNames(${target_dir} dependencies)
+      
+      # Make sure the variable is cleared
+      SET(ctk_dependencies)
 
-    # filter dependencies starting with CTK
-    ctkMacroGetAllCTKTargetLibraries("${dependencies}" ctk_dependencies)
+      # filter dependencies starting with CTK
+      ctkMacroGetAllCTKTargetLibraries("${dependencies}" ctk_dependencies)
 
-    IF(${is_superbuild})
-      SET(xml_subprojects ${xml_subprojects} "    <Dependency name=\"SuperBuild\"/>\n")
+      IF(${is_superbuild})
+        SET(xml_subprojects ${xml_subprojects} "    <Dependency name=\"SuperBuild\"/>\n")
+      ENDIF()
+      
+      # Generate XML related to the dependencies 
+      FOREACH(dependency_name ${ctk_dependencies})
+        SET(xml_subprojects ${xml_subprojects} "    <Dependency name=\"${dependency_name}\"/>\n")
+      ENDFOREACH()
+      
+      SET(xml_subprojects ${xml_subprojects} "  </SubProject>\n")
     ENDIF()
-    
-    # Generate XML related to the dependencies 
-    FOREACH(dependency_name ${ctk_dependencies})
-      SET(xml_subprojects ${xml_subprojects} "    <Dependency name=\"${dependency_name}\"/>\n")
-    ENDFOREACH()
-    
-    SET(xml_subprojects ${xml_subprojects} "  </SubProject>\n")
   ENDFOREACH()
    
   SET(xml_content "<Project name=\"${name}\">\n${xml_subprojects}</Project>")

+ 28 - 26
CMake/ctkMacroTargetLibraries.cmake

@@ -38,37 +38,34 @@ ENDMACRO()
 #
 #
 #
-MACRO(ctkMacroCollectTargetLibraryNames target_dir option_name varname)
+MACRO(ctkMacroCollectTargetLibraryNames target_dir varname)
 
-  #MESSAGE(STATUS option_name:${option_name})
-  IF(${${option_name}})
-    #MESSAGE(STATUS target:${target})
-    SET(lib_targets)
+  #MESSAGE(STATUS target:${target})
+  SET(lib_targets)
 
-    SET(filepath ${target_dir}/target_libraries.cmake)
-    #MESSAGE(STATUS filepath:${filepath})
+  SET(filepath ${target_dir}/target_libraries.cmake)
+  #MESSAGE(STATUS filepath:${filepath})
 
-    # Check if "target_libraries.cmake" file exists
-    IF(NOT EXISTS ${filepath})
-      MESSAGE(FATAL_ERROR "${filepath} doesn't exists !")
-    ENDIF()
+  # Check if "target_libraries.cmake" file exists
+  IF(NOT EXISTS ${filepath})
+    MESSAGE(FATAL_ERROR "${filepath} doesn't exists !")
+  ENDIF()
 
-    # Let's make sure target_libraries contains only strings
-    FILE(STRINGS "${filepath}" stringtocheck)
-    STRING(REGEX MATCHALL "[^#]\\$\\{.*\\}" incorrect_elements ${stringtocheck})
-    FOREACH(incorrect_element ${incorrect_elements})
-      STRING(REGEX REPLACE "\\$|\\{|\\}" "" correct_element ${incorrect_element})
-      MESSAGE(FATAL_ERROR "In ${filepath}, ${incorrect_element} should be replaced by ${correct_element}")
-    ENDFOREACH()
+  # Let's make sure target_libraries contains only strings
+  FILE(STRINGS "${filepath}" stringtocheck)
+  STRING(REGEX MATCHALL "[^#]\\$\\{.*\\}" incorrect_elements ${stringtocheck})
+  FOREACH(incorrect_element ${incorrect_elements})
+    STRING(REGEX REPLACE "\\$|\\{|\\}" "" correct_element ${incorrect_element})
+    MESSAGE(FATAL_ERROR "In ${filepath}, ${incorrect_element} should be replaced by ${correct_element}")
+  ENDFOREACH()
 
-    # Make sure the variable is cleared
-    SET(target_libraries)
+  # Make sure the variable is cleared
+  SET(target_libraries)
 
-    INCLUDE(${filepath})
-    
-    LIST(APPEND ${varname} ${target_libraries})
-    LIST(REMOVE_DUPLICATES ${varname})
-  ENDIF()
+  INCLUDE(${filepath})
+
+  LIST(APPEND ${varname} ${target_libraries})
+  LIST(REMOVE_DUPLICATES ${varname})
 ENDMACRO()
 
 #
@@ -97,8 +94,13 @@ MACRO(ctkMacroCollectAllTargetLibraries targets subdir varname)
 
     SET(target_dir "${CTK_SOURCE_DIR}/${subdir}/${target}")
     #MESSAGE(STATUS target_dir:${target_dir})
+
+    SET(target_libraries)
     
-    ctkMacroCollectTargetLibraryNames(${target_dir} ${option_name} target_libraries)
+    # Collect target libraries only if option is ON
+    IF(${option_name})
+      ctkMacroCollectTargetLibraryNames(${target_dir} target_libraries)
+    ENDIF()
 
     LIST(APPEND ${varname} ${target_libraries})
     LIST(REMOVE_DUPLICATES ${varname})

+ 1 - 0
CMakeLists.txt

@@ -99,6 +99,7 @@ INCLUDE(CMake/ctkMacroBuildApp.cmake)
 INCLUDE(CMake/ctkMacroBuildQtDesignerPlugin.cmake)
 INCLUDE(CMake/ctkMacroSetupQt.cmake)
 INCLUDE(CMake/ctkMacroTargetLibraries.cmake) # Import multiple macros
+INCLUDE(CMake/ctkMacroExtractOptionNameAndValue.cmake)
 INCLUDE(CMake/ctkMacroAddCtkLibraryOptions.cmake)
 INCLUDE(CMake/ctkMacroGenerateDGraphInput.cmake)
 INCLUDE(CMake/ctkMacroGenerateProjectXml.cmake)