deps.cmake 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. include_guard(GLOBAL)
  2. set(PRINT_DEPS_INFO ON CACHE BOOL "Print deps info.") # 默认设定为 ON
  3. set(_print ${PRINT_DEPS_INFO})
  4. set(deps_install_dir ${INSTALL_RESOURCEDIR}/deps) # 依赖的安装位置
  5. set(dlfcn_cmake "share/dlfcn-win32") # dlfcn cmake 安装位置 (相对路径)
  6. set(pcre2_cmake "cmake")
  7. set(fflags_cmake "cmake") # FindFFlags.cmake 不是 fflags 的一部分, 但是会被安装到 cmake 目录下
  8. set(dlfcn-win32_MUST_BUILD TRUE CACHE BOOL "Must build dlfcn-win32")
  9. set(PCRE2_MUST_BUILD TRUE CACHE BOOL "Must build pcre2")
  10. set(FFlags_MUST_BUILD TRUE CACHE BOOL "Must build FFlags")
  11. if (WIN32 AND NOT CYGWIN)
  12. if (_print)
  13. message(STATUS "Build dlfcn-win32...")
  14. endif()
  15. cfep_find_dir(dlfcn-win32
  16. REQUIRED
  17. SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/dlfcn
  18. CMAKE_DIR ${dlfcn_cmake}
  19. EXTERNAL
  20. BUILD_CMAKE_CACHE_ARGS
  21. -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
  22. BUILD_DIR "dlfcn")
  23. set(dlfcn_lib dlfcn-win32::dl)
  24. get_target_property(_dlfcn_include dlfcn-win32::dl INTERFACE_INCLUDE_DIRECTORIES) # INTERFACE_INCLUDE_DIRECTORIES
  25. find_path(dlfcn_h_file NAMES dlfcn.h HINTS ${_dlfcn_include} DOC "The directory of dlfcn.h" REQUIRED NO_DEFAULT_PATH)
  26. wi_copy_import(TARGETS dlfcn-win32::dl)
  27. wi_build_import(TARGETS dlfcn-win32::dl)
  28. wi_install_import(TARGETS dlfcn-win32::dl)
  29. install(DIRECTORY "${dlfcn_h_file}/" DESTINATION ${INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h") # 把目录下的内容安装到include
  30. cfep_install(dlfcn-win32 PREFIX ${deps_install_dir})
  31. else()
  32. set(DLFCN_ROOT "" CACHE STRING "The directory of dl.")
  33. set(dlfcn_root ${DLFCN_ROOT})
  34. if (dlfcn_root)
  35. find_library(dlfcn_path dl REQUIRED HINTS ${dlfcn_root})
  36. else()
  37. find_library(dlfcn_path dl REQUIRED HINTS ${dlfcn_root})
  38. endif()
  39. unset(dlfcn_root)
  40. set(dlfcn_lib ${dlfcn_path})
  41. endif()
  42. if (_print)
  43. message(STATUS "Build pcre2...")
  44. endif()
  45. set(PCRE2_USE_STATIC_LIBS TRUE)
  46. cfep_find_dir(PCRE2
  47. REQUIRED
  48. SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/pcre2
  49. CMAKE_DIR "cmake"
  50. PACKAGE
  51. COMPONENTS 8BIT
  52. EXTERNAL
  53. BUILD_CMAKE_CACHE_ARGS
  54. -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
  55. BUILD_DIR "pcre2")
  56. unset(PCRE2_USE_STATIC_LIBS)
  57. set(pcre2_lib PCRE2::8BIT)
  58. cfep_install(PCRE2 PREFIX ${deps_install_dir})
  59. if (_print)
  60. message(STATUS "Build fflags...")
  61. endif()
  62. cfep_find_dir(FFlags
  63. REQUIRED
  64. MODULE # 使用FindFFlags.cmake文件
  65. SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/fflags
  66. CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/cmake" # FindFFlags.cmake 文件位置
  67. EXTERNAL
  68. BUILD_CMAKE_ARGS
  69. -DBUILD_SHARED_LIBS=OFF
  70. -DFFLAGS_BUILD_TEST=OFF
  71. BUILD_CMAKE_CACHE_ARGS
  72. -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
  73. BUILD_DIR "fflags")
  74. set(fflags_lib FFlags::fflags)
  75. install(DIRECTORY "${fflags_INCLUDE_DIRS}/" DESTINATION ${INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h") # 安装fflags.h
  76. install(FILES ${CMAKE_CURRENT_LIST_DIR}/cmake/FindFFlags.cmake DESTINATION ${deps_install_dir}/cmake) # 安装find程序
  77. cfep_install(FFlags PREFIX ${deps_install_dir})