ctkMacroValidateBuildOptions.cmake 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #
  2. #
  3. #
  4. MACRO(ctkMacroGetOptionName target_directories_with_target_name target_name option_name_var)
  5. FOREACH(target_info ${target_directories_with_target_name})
  6. # extract target_dir and option_name
  7. #MESSAGE("target_info:${target_info}")
  8. STRING(REPLACE "^^" "\\;" target_info_list ${target_info})
  9. SET(target_info_list ${target_info_list})
  10. LIST(GET target_info_list 0 _target_dir)
  11. LIST(GET target_info_list 1 _option_name)
  12. LIST(GET target_info_list 2 _target_name)
  13. IF(${_target_name} STREQUAL ${target_name})
  14. SET(${option_name_var} ${_option_name})
  15. ENDIF()
  16. ENDFOREACH()
  17. ENDMACRO()
  18. #
  19. #
  20. #
  21. MACRO(ctkMacroValidateBuildOptions dir executable target_directories)
  22. IF(NOT EXISTS ${dir})
  23. MESSAGE(FATAL_ERROR "Directory ${dir} doesn't exist!")
  24. ENDIF()
  25. IF(NOT EXISTS ${executable})
  26. MESSAGE(FATAL_ERROR "Executable ${executable} doesn't exist!")
  27. ENDIF()
  28. SET(target_directories_with_target_name)
  29. # Create target_directories_with_target_name
  30. FOREACH(target_info ${target_directories})
  31. # extract target_dir and option_name
  32. STRING(REPLACE "^^" "\\;" target_info ${target_info})
  33. SET(target_info_list ${target_info})
  34. LIST(GET target_info_list 0 target_dir)
  35. LIST(GET target_info_list 1 option_name)
  36. #MESSAGE(STATUS target_dir:${target_dir})
  37. #MESSAGE(STATUS option_name:${option_name})
  38. #MESSAGE(STATUS option_name-value:${${option_name}})
  39. # make sure the directory exists
  40. IF(NOT EXISTS ${target_dir}/CMakeLists.txt)
  41. MESSAGE(FATAL_ERROR "Target directory ${target_dir}/CMakeLists.txt doesn't exists !")
  42. ENDIF()
  43. # extract project name from CMakeLists.txt
  44. FILE(STRINGS "${target_dir}/CMakeLists.txt" project_string
  45. REGEX "^ *(P|p)(R|r)(O|o)(J|j)(E|e)(C|c)(T|t)\\("
  46. LIMIT_COUNT 10)
  47. STRING(REGEX MATCH "\\((.*)\\)" target_project_name ${project_string})
  48. STRING(REGEX REPLACE "\\(|\\)" "" target_project_name ${target_project_name})
  49. IF(${target_project_name} STREQUAL "")
  50. MESSAGE(FATAL_ERROR "Failed to extract project name from ${target_dir}/CMakeLists.txt")
  51. ENDIF()
  52. #MESSAGE(STATUS target_project_name:${target_project_name})
  53. LIST(APPEND target_directories_with_target_name
  54. ${target_dir}^^${option_name}^^${target_project_name}
  55. )
  56. ENDFOREACH()
  57. FOREACH(target_info ${target_directories_with_target_name})
  58. # extract target_dir and option_name
  59. STRING(REPLACE "^^" "\\;" target_info ${target_info})
  60. SET(target_info_list ${target_info})
  61. LIST(GET target_info_list 0 target_dir)
  62. LIST(GET target_info_list 1 option_name)
  63. #MESSAGE(STATUS target_dir:${target_dir})
  64. #MESSAGE(STATUS option_name:${option_name})
  65. #MESSAGE(STATUS option_name-value:${${option_name}})
  66. # make sure the directory exists
  67. IF(NOT EXISTS ${target_dir}/CMakeLists.txt)
  68. MESSAGE(FATAL_ERROR "Target directory ${target_dir}/CMakeLists.txt doesn't exists !")
  69. ENDIF()
  70. # extract project name from CMakeLists.txt
  71. FILE(STRINGS "${target_dir}/CMakeLists.txt" project_string
  72. REGEX "^ *(P|p)(R|r)(O|o)(J|j)(E|e)(C|c)(T|t)\\("
  73. LIMIT_COUNT 10)
  74. STRING(REGEX MATCH "\\((.*)\\)" target_project_name ${project_string})
  75. STRING(REGEX REPLACE "\\(|\\)" "" target_project_name ${target_project_name})
  76. IF(${target_project_name} STREQUAL "")
  77. MESSAGE(FATAL_ERROR "Failed to extract project name from ${target_dir}/CMakeLists.txt")
  78. ENDIF()
  79. #MESSAGE(STATUS target_project_name:${target_project_name})
  80. IF(${${option_name}})
  81. # Obtain dependency path
  82. ctkFunctionExecuteProcess(
  83. COMMAND "${executable}" "${CTK_BINARY_DIR}/DGraphInput-alldep.txt" -paths ${target_project_name}
  84. PATH_LIST ${QT_LIBRARY_DIR}
  85. WORKING_DIRECTORY ${CTK_BINARY_DIR}
  86. RESULT_VARIABLE RESULT_VAR
  87. OUTPUT_VARIABLE dep_paths
  88. ERROR_VARIABLE error
  89. OUTPUT_STRIP_TRAILING_WHITESPACE
  90. )
  91. IF(RESULT_VAR)
  92. MESSAGE(FATAL_ERROR "Failed to obtain dependence path of ${subir}.\n${RESULT_VAR}\n${CTK_BINARY_DIR}\n${error}")
  93. ENDIF()
  94. FOREACH(dep_path ${dep_paths})
  95. # Convert 'dep_path' to a list
  96. STRING(REPLACE " " "\\;" dep_path_list ${dep_path})
  97. SET(dep_path_list ${dep_path_list})
  98. #MESSAGE("path for ${target_project_name} is: ${dep_path}")
  99. # Check if all target included in the dependency path are enabled
  100. FOREACH(dep ${dep_path_list})
  101. ctkMacroGetOptionName("${target_directories_with_target_name}" ${dep} dep_option)
  102. IF(NOT ${${dep_option}})
  103. # Enable option
  104. MESSAGE(STATUS "Enabling option [${dep_option}] required by [${target_project_name}]")
  105. SET(${dep_option} ON CACHE BOOL "Enable ${target_project_name} library" FORCE)
  106. ENDIF()
  107. ENDFOREACH()
  108. ENDFOREACH()
  109. ENDIF()
  110. ENDFOREACH()
  111. #MESSAGE(STATUS "Validated: CTK_LIB_*, CTK_PLUGIN_*, CTK_APP_*")
  112. ENDMACRO()