Browse Source

ENH: Added ctkMacro ctkMacroGenerateDGraphInput expecting parameter similar to ctkMacroGenerateProjectXml.

This macro generates CTK_BINARY_DIR/DGraphInput.txt file expected by the DGraph program.
Jean-Christophe Fillion-Robin 15 years ago
parent
commit
bb5ec9ba50
2 changed files with 73 additions and 0 deletions
  1. 72 0
      CMake/ctkMacroGenerateDGraphInput.cmake
  2. 1 0
      CMakeLists.txt

+ 72 - 0
CMake/ctkMacroGenerateDGraphInput.cmake

@@ -0,0 +1,72 @@
+
+#
+#
+#
+MACRO(ctkMacroGenerateDGraphInput dir name target_directories)
+  IF(NOT EXISTS ${dir})
+    MESSAGE(FATAL_ERROR "Directory ${dir} doesn't exist!")
+  ENDIF()
+
+  SET(dgraph_list )
+
+  SET(edges)
+  SET(vertices)
+  
+  FOREACH(target_info ${target_directories})
+
+    # extract target_dir and option_name
+    STRING(REPLACE ":" "\\;" target_info ${target_info})
+    SET(target_info_list ${target_info})
+    LIST(GET target_info_list 0 target_dir)
+    LIST(GET target_info_list 1 option_name)
+    #MESSAGE(STATUS target_dir:${target_dir})
+    #MESSAGE(STATUS option_name:${option_name})
+    
+    # make sure the directory exists
+    IF(NOT EXISTS ${target_dir}/CMakeLists.txt)
+      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})
+    
+    LIST(APPEND vertices ${target_project_name})
+
+    # 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)
+
+    # 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()
+    
+  ENDFOREACH()
+
+  LIST(LENGTH vertices numberOfVertices)
+  LIST(LENGTH edges numberOfEdges)
+
+  SET(dgraph_list "${numberOfVertices} ${numberOfEdges}\n" ${dgraph_list})
+  
+  SET(filename "${dir}/DGraphInput.txt")
+
+  FILE(WRITE ${filename} ${dgraph_list})
+  MESSAGE(STATUS "Generated: ${filename}")
+ENDMACRO()

+ 1 - 0
CMakeLists.txt

@@ -58,6 +58,7 @@ INCLUDE(CMake/ctkMacroBuildQtApp.cmake)
 INCLUDE(CMake/ctkMacroSetupQt.cmake)
 INCLUDE(CMake/ctkMacroTargetLibraries.cmake) # Import multiple macros
 INCLUDE(CMake/ctkMacroAddCtkLibraryOptions.cmake)
+INCLUDE(CMake/ctkMacroGenerateDGraphInput.cmake)
 INCLUDE(CMake/ctkMacroGenerateProjectXml.cmake)
 
 #-----------------------------------------------------------------------------