ctkMacroGenerateProjectXml.cmake 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #
  2. #
  3. #
  4. MACRO(ctkMacroGenerateProjectXml dir name target_directories is_superbuild)
  5. IF(NOT EXISTS ${dir})
  6. MESSAGE(FATAL_ERROR "Directory ${dir} doesn't exist!")
  7. ENDIF()
  8. SET(xml_subprojects )
  9. IF(${is_superbuild})
  10. SET(xml_subprojects ${xml_subprojects} " <SubProject name=\"SuperBuild\">\n")
  11. ENDIF()
  12. FOREACH(target_info ${target_directories})
  13. # extract target_dir and option_name
  14. STRING(REPLACE "^^" "\\;" target_info ${target_info})
  15. SET(target_info_list ${target_info})
  16. LIST(GET target_info_list 0 target_dir)
  17. LIST(GET target_info_list 1 option_name)
  18. #MESSAGE(STATUS target_dir:${target_dir})
  19. #MESSAGE(STATUS option_name:${option_name})
  20. # make sure the directory exists
  21. IF(NOT EXISTS ${target_dir}/CMakeLists.txt)
  22. MESSAGE(FATAL_ERROR "Target directory ${target_dir}/CMakeLists.txt doesn't exists !")
  23. ENDIF()
  24. # Remarks: Project.xml should contains all sub-project. That way
  25. # all dashboards should submit a similar file.
  26. #IF(${${option_name}})
  27. # extract project name from CMakeLists.txt
  28. FILE(STRINGS "${target_dir}/CMakeLists.txt" project_string
  29. REGEX "^ *(P|p)(R|r)(O|o)(J|j)(E|e)(C|c)(T|t)\\("
  30. LIMIT_COUNT 10)
  31. STRING(REGEX MATCH "\\((.*)\\)" target_project_name ${project_string})
  32. STRING(REGEX REPLACE "\\(|\\)" "" target_project_name ${target_project_name})
  33. IF(${target_project_name} STREQUAL "")
  34. MESSAGE(FATAL_ERROR "Failed to extract project name from ${target_dir}/CMakeLists.txt")
  35. ENDIF()
  36. #MESSAGE(STATUS target_project_name:${target_project_name})
  37. SET(xml_subprojects ${xml_subprojects} " <SubProject name=\"${target_project_name}\">\n")
  38. # Make sure the variable is cleared
  39. SET(dependencies )
  40. # get dependencies
  41. ctkMacroCollectTargetLibraryNames(${target_dir} dependencies)
  42. # Make sure the variable is cleared
  43. SET(ctk_dependencies)
  44. # filter dependencies starting with CTK
  45. ctkMacroGetAllCTKTargetLibraries("${dependencies}" ctk_dependencies)
  46. IF(${is_superbuild})
  47. SET(xml_subprojects ${xml_subprojects} " <Dependency name=\"SuperBuild\"/>\n")
  48. ENDIF()
  49. # Generate XML related to the dependencies
  50. FOREACH(dependency_name ${ctk_dependencies})
  51. SET(xml_subprojects ${xml_subprojects} " <Dependency name=\"${dependency_name}\"/>\n")
  52. ENDFOREACH()
  53. SET(xml_subprojects ${xml_subprojects} " </SubProject>\n")
  54. #ENDIF()
  55. ENDFOREACH()
  56. SET(xml_content "<Project name=\"${name}\">\n${xml_subprojects}</Project>")
  57. SET(filename "${dir}/Project.xml")
  58. FILE(WRITE ${filename} ${xml_content})
  59. MESSAGE(STATUS "Generated: ${filename}")
  60. ENDMACRO()