Quellcode durchsuchen

ENH: Update CMakeLists.txt to build DGraph program and execute it using the generated DGraphInput.txt file.

The variable CTEST_PROJECT_SUBPROJECTS is set to the output of DGraph which
correspond to the list of CTK libraries topologically ordered.

CTEST_PROJECT_SUBPROJECTS is used to configure the file CTestSubProjectCongig.cmake.in
This later one could be used by a CTest driver scripts that want to configure, build and test
by subproject (a subproject corresponding to a CTK library)
Jean-Christophe Fillion-Robin vor 15 Jahren
Ursprung
Commit
98f28da90d
2 geänderte Dateien mit 30 neuen und 1 gelöschten Zeilen
  1. 1 0
      CMake/ctkMacroBuildQtPlugin.cmake
  2. 29 1
      CMakeLists.txt

+ 1 - 0
CMake/ctkMacroBuildQtPlugin.cmake

@@ -74,6 +74,7 @@ MACRO(ctkMacroBuildQtPlugin)
 
   # Set labels associated with the target.
   SET_TARGET_PROPERTIES(${lib_name} PROPERTIES LABELS ${lib_name})
+  
   # Note: The plugin may be installed in some other location ???
   # Install rules
 #   IF(CTK_BUILD_SHARED_LIBS)

+ 29 - 1
CMakeLists.txt

@@ -224,7 +224,7 @@ ENDFOREACH()
 ctkMacroGenerateProjectXml(${CTK_BINARY_DIR} ${PROJECT_NAME} "${target_directories}" ${CTK_SUPERBUILD})
 
 #-----------------------------------------------------------------------------
-# Collect CTK library target dependencies
+# DGraph
 #
 ctkMacroCollectAllTargetLibraries("${CTK_LIBS}" "Libs" ALL_TARGET_LIBRARIES)
 ctkMacroCollectAllTargetLibraries("${CTK_PLUGINS}" "Plugins" ALL_TARGET_LIBRARIES)
@@ -233,6 +233,34 @@ ctkMacroCollectAllTargetLibraries("${CTK_APPLICATIONS}" "Applications" ALL_TARGE
 
 # Collect CTK only libraries
 ctkMacroGetAllCTKTargetLibraries("${ALL_TARGET_LIBRARIES}" CTEST_PROJECT_SUBPROJECTS)
+# Generate DGraph input file expected by DGraph
+ctkMacroGenerateDGraphInput(${CTK_BINARY_DIR} ${PROJECT_NAME} "${target_directories}")
+
+# Compile DGraph - An application allowing to check for cycle in DAG and also obtain the
+# topological order.
+TRY_COMPILE(RESULT_VAR ${CTK_BINARY_DIR}/Utilities/DGraph ${CTK_SOURCE_DIR}/Utilities/DGraph
+              DGraph
+              CMAKE_FLAGS
+                -DQT_QMAKE_EXECUTABLE:BOOL=${QT_QMAKE_EXECUTABLE}
+                -DCMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
+              OUTPUT_VARIABLE output)
+IF(NOT RESULT_VAR)
+  MESSAGE(FATAL_ERROR "Failed to compile DGraph application.\n${output}")
+ENDIF()
+SET(DGraph_EXECUTABLE ${CTK_BINARY_DIR}/Utilities/DGraph/DGraph)
+
+# Obtain list of target ordered topologically
+EXECUTE_PROCESS(
+  COMMAND ${DGraph_EXECUTABLE} ${CTK_BINARY_DIR}/DGraphInput.txt  
+  WORKING_DIRECTORY ${CTK_BINARY_DIR}
+  RESULT_VARIABLE RESULT_VAR
+  OUTPUT_VARIABLE CTEST_PROJECT_SUBPROJECTS
+  ERROR_VARIABLE error
+  OUTPUT_STRIP_TRAILING_WHITESPACE
+  )
+IF(RESULT_VAR)
+  MESSAGE(FATAL_ERROR "Failed to obtain list of target ordered topologically.\n${error}")
+ENDIF()         
 
 # Configure CTestConfigSubProject.cmake used that could be used by CTest scripts
 CONFIGURE_FILE(${CTK_SOURCE_DIR}/CTestConfigSubProject.cmake.in