ctkMacroTargetLibraries.cmake 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #
  2. #
  3. #
  4. MACRO(ctkMacroGetTargetLibraries varname)
  5. SET(filepath ${CMAKE_CURRENT_SOURCE_DIR}/target_libraries.cmake)
  6. # Check if "target_libraries.cmake" file exists
  7. IF(NOT EXISTS ${filepath})
  8. MESSAGE(FATAL_ERROR "${filepath} doesn't exists !")
  9. ENDIF()
  10. # Make sure the variable is cleared
  11. SET(target_libraries )
  12. # Let's make sure target_libraries contains only strings
  13. FILE(STRINGS "${filepath}" stringtocheck) # read content of 'filepath' into 'stringtocheck'
  14. STRING(REGEX MATCHALL "[^\\#]\\$\\{.*\\}" incorrect_elements ${stringtocheck})
  15. FOREACH(incorrect_element ${incorrect_elements})
  16. STRING(REGEX REPLACE "\\$|\\{|\\}" "" correct_element ${incorrect_element})
  17. MESSAGE(FATAL_ERROR "In ${filepath}, ${incorrect_element} should be replaced by ${correct_element}")
  18. ENDFOREACH()
  19. INCLUDE(${filepath})
  20. # Loop over all target library, if it does *NOT* start with "CTK",
  21. # let's resolve the variable to access its content
  22. FOREACH(target_library ${target_libraries})
  23. IF(${target_library} MATCHES "^CTK[a-zA-Z0-9]+$")
  24. LIST(APPEND ${varname} ${target_library})
  25. ELSE()
  26. LIST(APPEND ${varname} "${${target_library}}")
  27. ENDIF()
  28. ENDFOREACH()
  29. ENDMACRO()
  30. #
  31. #
  32. #
  33. MACRO(ctkMacroCollectTargetLibraryNames target_dir option_name varname)
  34. #MESSAGE(STATUS option_name:${option_name})
  35. IF(${${option_name}})
  36. #MESSAGE(STATUS target:${target})
  37. SET(lib_targets)
  38. SET(filepath ${target_dir}/target_libraries.cmake)
  39. #MESSAGE(STATUS filepath:${filepath})
  40. # Check if "target_libraries.cmake" file exists
  41. IF(NOT EXISTS ${filepath})
  42. MESSAGE(FATAL_ERROR "${filepath} doesn't exists !")
  43. ENDIF()
  44. # Let's make sure target_libraries contains only strings
  45. FILE(STRINGS "${filepath}" stringtocheck)
  46. STRING(REGEX MATCHALL "[^#]\\$\\{.*\\}" incorrect_elements ${stringtocheck})
  47. FOREACH(incorrect_element ${incorrect_elements})
  48. STRING(REGEX REPLACE "\\$|\\{|\\}" "" correct_element ${incorrect_element})
  49. MESSAGE(FATAL_ERROR "In ${filepath}, ${incorrect_element} should be replaced by ${correct_element}")
  50. ENDFOREACH()
  51. # Make sure the variable is cleared
  52. SET(target_libraries)
  53. INCLUDE(${filepath})
  54. LIST(APPEND ${varname} ${target_libraries})
  55. LIST(REMOVE_DUPLICATES ${varname})
  56. ENDIF()
  57. ENDMACRO()
  58. #
  59. #
  60. #
  61. MACRO(ctkMacroCollectAllTargetLibraries targets subdir varname)
  62. SET(option_prefix)
  63. IF(${subdir} STREQUAL "Libs")
  64. SET(option_prefix CTK_LIB_)
  65. ELSEIF(${subdir} STREQUAL "Plugins")
  66. SET(option_prefix CTK_PLUGIN_)
  67. ELSEIF(${subdir} STREQUAL "Applications")
  68. SET(option_prefix CTK_APP_)
  69. ELSE()
  70. MESSAGE(FATAL_ERROR "Unknown subdir:${subdir}, expected value are: 'Libs, 'Plugins' or 'Applications'")
  71. ENDIF()
  72. FOREACH(target ${targets})
  73. # Make sure the variable is cleared
  74. SET(target_libraries )
  75. SET(option_name ${option_prefix}${target})
  76. #MESSAGE(STATUS option_name:${option_name})
  77. SET(target_dir "${CTK_SOURCE_DIR}/${subdir}/${target}")
  78. #MESSAGE(STATUS target_dir:${target_dir})
  79. ctkMacroCollectTargetLibraryNames(${target_dir} ${option_name} target_libraries)
  80. LIST(APPEND ${varname} ${target_libraries})
  81. LIST(REMOVE_DUPLICATES ${varname})
  82. ENDFOREACH()
  83. ENDMACRO()
  84. #
  85. # Extract all library names starting with CTK uppercase
  86. #
  87. MACRO(ctkMacroGetAllCTKTargetLibraries all_target_libraries varname)
  88. SET(re_ctklib "^(c|C)(t|T)(k|K)[a-zA-Z0-9]+$")
  89. SET(_tmp_list)
  90. LIST(APPEND _tmp_list ${all_target_libraries})
  91. ctkMacroListFilter(_tmp_list re_ctklib OUTPUT_VARIABLE ${varname})
  92. #MESSAGE(STATUS varname:${varname}:${${varname}})
  93. ENDMACRO()
  94. #
  95. # Extract all library names *NOT* starting with CTK uppercase
  96. #
  97. MACRO(ctkMacroGetAllNonCTKTargetLibraries all_target_libraries varname)
  98. ctkMacroGetAllCTKTargetLibraries("${all_target_libraries}" all_ctk_libraries)
  99. SET(_tmp_list ${all_target_libraries})
  100. LIST(REMOVE_ITEM _tmp_list ${all_ctk_libraries})
  101. SET(${varname} ${_tmp_list})
  102. #MESSAGE(STATUS varname:${varname}:${${varname}})
  103. ENDMACRO()
  104. #
  105. #
  106. #
  107. MACRO(ctkMacroShouldAddExternalProject libraries_variable_name resultvar)
  108. IF(NOT DEFINED NON_CTK_DEPENDENCIES)
  109. MESSAGE(FATAL_ERROR "Variable NON_CTK_DEPENDENCIES is undefined !")
  110. ENDIF()
  111. LIST(FIND NON_CTK_DEPENDENCIES ${libraries_variable_name} index)
  112. SET(${resultvar} FALSE)
  113. IF(${index} GREATER -1)
  114. SET(${resultvar} TRUE)
  115. ENDIF()
  116. ENDMACRO()