You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.7 KiB

  1. INCLUDE (CheckCSourceRuns)
  2. INCLUDE (ExternalProject)
  3. SET(WITH_PCRE "auto" CACHE STRING
  4. "Which pcre to use (possible values are 'bundled', 'system', or 'auto')")
  5. MACRO(BUNDLE_PCRE2)
  6. SET(dir "${CMAKE_BINARY_DIR}/extra/pcre2")
  7. SET(PCRE_INCLUDES ${dir}/src/pcre2-build ${dir}/src/pcre2/src)
  8. SET(byproducts)
  9. FOREACH(lib pcre2-posix pcre2-8)
  10. ADD_LIBRARY(${lib} STATIC IMPORTED GLOBAL)
  11. ADD_DEPENDENCIES(${lib} pcre2)
  12. SET(file ${dir}/src/pcre2-build/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX})
  13. IF(WIN32)
  14. # Debug libary name.
  15. # Same condition as in pcre2 CMakeLists.txt that adds "d"
  16. SET(file_d ${dir}/src/pcre2-build/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}d${CMAKE_STATIC_LIBRARY_SUFFIX})
  17. SET_TARGET_PROPERTIES(${lib} PROPERTIES IMPORTED_LOCATION_DEBUG ${file_d})
  18. ELSE()
  19. SET(file_d)
  20. ENDIF()
  21. SET(byproducts ${byproducts} BUILD_BYPRODUCTS ${file} ${file_d})
  22. SET_TARGET_PROPERTIES(${lib} PROPERTIES IMPORTED_LOCATION ${file})
  23. ENDFOREACH()
  24. FOREACH(v "" "_DEBUG" "_RELWITHDEBINFO" "_RELEASE" "_MINZISEREL")
  25. STRING(REPLACE "/WX" "" pcre2_flags${v} "${CMAKE_C_FLAGS${v}}")
  26. IF(MSVC)
  27. # Suppress a warning
  28. STRING(APPEND pcre2_flags${v} " /wd4244 " )
  29. ENDIF()
  30. ENDFOREACH()
  31. ExternalProject_Add(
  32. pcre2
  33. PREFIX "${dir}"
  34. URL "https://ftp.pcre.org/pub/pcre/pcre2-10.34.zip"
  35. URL_MD5 fdb10dba7f3be43730966bebdd3755ef
  36. INSTALL_COMMAND ""
  37. CMAKE_ARGS
  38. "-DPCRE2_BUILD_TESTS=OFF"
  39. "-DPCRE2_BUILD_PCRE2GREP=OFF"
  40. "-DBUILD_SHARED_LIBS=OFF"
  41. "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
  42. "-DCMAKE_C_FLAGS=${pcre2_flags} ${PIC_FLAG}"
  43. "-DCMAKE_C_FLAGS_DEBUG=${pcre2_flags_DEBUG}"
  44. "-DCMAKE_C_FLAGS_RELWITHDEBINFO=${pcre2_flags_RELWITHDEBINFO}"
  45. "-DCMAKE_C_FLAGS_RELEASE=${pcre2_flags_RELEASE}"
  46. "-DCMAKE_C_FLAGS_MINSIZEREL=${pcre2_flags_MINSIZEREL}"
  47. "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
  48. ${byproducts}
  49. )
  50. SET_TARGET_PROPERTIES(pcre2 PROPERTIES EXCLUDE_FROM_ALL TRUE)
  51. ENDMACRO()
  52. MACRO (CHECK_PCRE)
  53. IF(WITH_PCRE STREQUAL "system" OR WITH_PCRE STREQUAL "auto")
  54. CHECK_LIBRARY_EXISTS(pcre2-8 pcre2_match_8 "" HAVE_PCRE2)
  55. ENDIF()
  56. IF(NOT HAVE_PCRE2 OR WITH_PCRE STREQUAL "bundled")
  57. IF (WITH_PCRE STREQUAL "system")
  58. MESSAGE(FATAL_ERROR "system pcre2-8 library is not found or unusable")
  59. ENDIF()
  60. BUNDLE_PCRE2()
  61. ELSE()
  62. CHECK_LIBRARY_EXISTS(pcre2-posix PCRE2regcomp "" NEEDS_PCRE2_DEBIAN_HACK)
  63. IF(NEEDS_PCRE2_DEBIAN_HACK)
  64. SET(PCRE2_DEBIAN_HACK "-Dregcomp=PCRE2regcomp -Dregexec=PCRE2regexec -Dregerror=PCRE2regerror -Dregfree=PCRE2regfree")
  65. ENDIF()
  66. ENDIF()
  67. ENDMACRO()