aFunlangConfig.cmake.in 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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-t)
  14. list(APPEND components_list core-shared-t)
  15. endif()
  16. if (TARGET aFunlang::core-shared-s)
  17. list(APPEND components_list core-shared-s)
  18. endif()
  19. if (TARGET aFunlang::core-static-s)
  20. list(APPEND components_list core-static-s)
  21. endif()
  22. # 查找可执行程序
  23. set_and_check(aFunlang_ROOT @PACKAGE_INSTALL_DIR@)
  24. set_and_check(aFunlang_INCLUDE_DIRS @PACKAGE_INCLUDEDIR@)
  25. set_and_check(aFunlang_RUNTIME_DIRS @PACKAGE_BINDIR@)
  26. if(WIN32 AND NOT CYGWIN)
  27. set_and_check(aFunlang_RUNTIME_LIBRARIES_DIRS @PACKAGE_BINDIR@)
  28. else()
  29. set_and_check(aFunlang_RUNTIME_LIBRARIES_DIRS @PACKAGE_LIBDIR@)
  30. endif()
  31. find_program(aFunlang_EXECUTABLE NAMES aFun aFun-ct aFun-cx aFun-xx HINTS ${aFunlang_RUNTIME_DIRS} DOC "aFun executable" NO_DEFAULT_PATH)
  32. find_program(aFunlang_ct_EXECUTABLE NAMES aFun-ct HINTS ${aFunlang_RUNTIME_DIRS} DOC "aFun-ct executable" NO_DEFAULT_PATH)
  33. find_program(aFunlang_cx_EXECUTABLE NAMES aFun-cx HINTS ${aFunlang_RUNTIME_DIRS} DOC "aFun-cx executable" NO_DEFAULT_PATH)
  34. find_program(aFunlang_xx_EXECUTABLE NAMES aFun-xx HINTS ${aFunlang_RUNTIME_DIRS} DOC "aFun-xx executable" NO_DEFAULT_PATH)
  35. if (aFunlang_EXECUTABLE)
  36. list(APPEND components_list aFun)
  37. endif()
  38. if (aFunlang_ct_EXECUTABLE)
  39. list(APPEND components_list aFun-ct)
  40. endif()
  41. if (aFunlang_cx_EXECUTABLE)
  42. list(APPEND components_list aFun-cx)
  43. endif()
  44. if (aFunlang_xx_EXECUTABLE)
  45. list(APPEND components_list aFun-xx)
  46. endif()
  47. # 用该函数取代find_package 避免变量污染
  48. function(find_package_safe)
  49. set(multiValueArgs PACKAGE VARS)
  50. cmake_parse_arguments(fp "" "" "${multiValueArgs}" ${ARGN})
  51. set(_find_package_arg ${fp_PACKAGE})
  52. set(_vars ${fp_VARS})
  53. find_package(${_find_package_arg})
  54. foreach(_var IN LISTS _vars)
  55. set(${_var} ${${_var}} PARENT_SCOPE)
  56. endforeach()
  57. endfunction()
  58. # 查找依赖
  59. if (WIN32 AND NOT CYGWIN)
  60. set_and_check(aFunlang_dlfcn_ROOT @PACKAGE_dlfcn_INSTALL_DIR@)
  61. find_package_safe(PACKAGE dlfcn-win32 QUIET HINTS @PACKAGE_dlfcn_CMAKEDIR@) # 指定路径
  62. if (NOT TARGET dlfcn-win32::dl)
  63. message(FATAL_ERROR "Target dlfcn-win32::dl not found.") # find_package的报错出自此处, 不需要REQUIRED
  64. endif()
  65. endif()
  66. set(PCRE2_USE_STATIC_LIBS TRUE)
  67. set_and_check(aFunlang_pcre2_ROOT @PACKAGE_pcre2_INSTALL_DIR@)
  68. find_package_safe(PACKAGE PCRE2 QUIET COMPONENTS 8BIT HINTS @PACKAGE_pcre2_CMAKEDIR@) # 不能用REQUIRED, 是PCRE2的bug
  69. unset(PCRE2_USE_STATIC_LIBS)
  70. if (NOT TARGET PCRE2::8BIT)
  71. message(FATAL_ERROR "Target PCRE2::8BIT not found.")
  72. endif()
  73. set_and_check(aFunlang_fflags_ROOT @PACKAGE_fflags_INSTALL_DIR@)
  74. set(FFlags_ROOT ${aFunlang_fflags_ROOT})
  75. set(_CMAKE_MODULE_PATH_bak ${CMAKE_MODULE_PATH})
  76. list(APPEND CMAKE_MODULE_PATH @PACKAGE_fflags_CMAKEDIR@)
  77. find_package_safe(PACKAGE FFlags QUIET)
  78. if (NOT TARGET FFlags::fflags)
  79. message(FATAL_ERROR "Target FFlags::fflags not found.")
  80. endif()
  81. set(CMAKE_MODULE_PATH ${_CMAKE_MODULE_PATH_bak})
  82. unset(_CMAKE_MODULE_PATH_bak)
  83. check_required_components(${components_list})