2
0

aFunlangConfig.cmake.in 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. @PACKAGE_INIT@
  2. # 以上为configure_package_config_file自动生成的初始化程序
  3. set_and_check(target ${CMAKE_CURRENT_LIST_DIR}/aFunlang.cmake)
  4. include(${target}) # 调用msgTargets.cmake导入模块
  5. set(components_list) # 记录组件的list
  6. # 检查是否存在对应 target
  7. if (TARGET aFunlang::tool-shared)
  8. list(APPEND components_list tool-shared)
  9. endif()
  10. if (TARGET aFunlang::tool-static)
  11. list(APPEND components_list tool-shared)
  12. endif()
  13. if (TARGET aFunlang::core-shared)
  14. list(APPEND components_list core-shared)
  15. endif()
  16. if (TARGET aFunlang::core-static)
  17. list(APPEND components_list core-static)
  18. endif()
  19. # 查找可执行程序
  20. set_and_check(aFunlang_ROOT @PACKAGE_INSTALL_DIR@)
  21. set_and_check(aFunlang_INCLUDE_DIRS @PACKAGE_INCLUDEDIR@)
  22. set_and_check(aFunlang_RUNTIME_DIRS @PACKAGE_BINDIR@)
  23. if(WIN32 OR CYGWIN) # cygwin 和 win32 一样使用.dll
  24. set_and_check(aFunlang_RUNTIME_LIBRARIES_DIRS @PACKAGE_BINDIR@)
  25. else()
  26. set_and_check(aFunlang_RUNTIME_LIBRARIES_DIRS @PACKAGE_LIBDIR@)
  27. endif()
  28. find_program(aFunlang_EXECUTABLE NAMES aFun aFun-ct aFun-ct aFun-xx HINTS ${aFunlang_RUNTIME_DIRS} DOC "aFun executable" NO_DEFAULT_PATH)
  29. find_program(aFunlang_ct_EXECUTABLE NAMES aFun-ct HINTS ${aFunlang_RUNTIME_DIRS} DOC "aFun-ct executable" NO_DEFAULT_PATH)
  30. find_program(aFunlang_cx_EXECUTABLE NAMES aFun-ct HINTS ${aFunlang_RUNTIME_DIRS} DOC "aFun-ct executable" NO_DEFAULT_PATH)
  31. find_program(aFunlang_xx_EXECUTABLE NAMES aFun-xx HINTS ${aFunlang_RUNTIME_DIRS} DOC "aFun-xx executable" NO_DEFAULT_PATH)
  32. if (aFunlang_EXECUTABLE)
  33. list(APPEND components_list aFun)
  34. endif()
  35. if (aFunlang_ct_EXECUTABLE)
  36. list(APPEND components_list aFun-ct)
  37. endif()
  38. if (aFunlang_cx_EXECUTABLE)
  39. list(APPEND components_list aFun-ct)
  40. endif()
  41. if (aFunlang_xx_EXECUTABLE)
  42. list(APPEND components_list aFun-xx)
  43. endif()
  44. # 用该函数取代find_package 避免变量污染
  45. function(find_package_safe)
  46. set(multiValueArgs PACKAGE VARS)
  47. cmake_parse_arguments(fp "" "" "${multiValueArgs}" ${ARGN})
  48. set(_find_package_arg ${fp_PACKAGE})
  49. set(_vars ${fp_VARS})
  50. find_package(${_find_package_arg})
  51. foreach(_var IN LISTS _vars)
  52. set(${_var} ${${_var}} PARENT_SCOPE)
  53. endforeach()
  54. endfunction()
  55. # 查找依赖
  56. if (WIN32 AND NOT CYGWIN) # cygwin 不需要 dl
  57. set_and_check(aFunlang_dlfcn_ROOT @PACKAGE_dlfcn_INSTALL_DIR@)
  58. find_package_safe(PACKAGE dlfcn-win32 QUIET HINTS @PACKAGE_dlfcn_CMAKEDIR@) # 指定路径
  59. if (NOT TARGET dlfcn-win32::dl)
  60. message(FATAL_ERROR "Target dlfcn-win32::dl not found.") # find_package的报错出自此处, 不需要REQUIRED
  61. endif()
  62. endif()
  63. set(PCRE2_USE_STATIC_LIBS TRUE)
  64. set_and_check(aFunlang_pcre2_ROOT @PACKAGE_pcre2_INSTALL_DIR@)
  65. find_package_safe(PACKAGE PCRE2 QUIET COMPONENTS 8BIT HINTS @PACKAGE_pcre2_CMAKEDIR@) # 不能用REQUIRED, 是PCRE2的bug
  66. unset(PCRE2_USE_STATIC_LIBS)
  67. if (NOT TARGET PCRE2::8BIT)
  68. message(FATAL_ERROR "Target PCRE2::8BIT not found.")
  69. endif()
  70. set_and_check(aFunlang_fflags_ROOT @PACKAGE_fflags_INSTALL_DIR@)
  71. set(FFlags_ROOT ${aFunlang_fflags_ROOT})
  72. set(_CMAKE_MODULE_PATH_bak ${CMAKE_MODULE_PATH})
  73. list(APPEND CMAKE_MODULE_PATH @PACKAGE_fflags_CMAKEDIR@)
  74. find_package_safe(PACKAGE FFlags QUIET)
  75. if (NOT TARGET FFlags::fflags)
  76. message(FATAL_ERROR "Target FFlags::fflags not found.")
  77. endif()
  78. set(CMAKE_MODULE_PATH ${_CMAKE_MODULE_PATH_bak})
  79. unset(_CMAKE_MODULE_PATH_bak)
  80. check_required_components(${components_list})