pcre2-config.cmake.in 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. # pcre2-config.cmake
  2. # ----------------
  3. #
  4. # Finds the PCRE2 library, specify the starting search path in PCRE2_ROOT.
  5. #
  6. # Static vs. shared
  7. # -----------------
  8. # To make use of the static library instead of the shared one, one needs
  9. # to set the variable PCRE2_USE_STATIC_LIBS to ON before calling find_package.
  10. # Example:
  11. # set(PCRE2_USE_STATIC_LIBS ON)
  12. # find_package(PCRE2 CONFIG COMPONENTS 8BIT)
  13. #
  14. # This will define the following variables:
  15. #
  16. # PCRE2_FOUND - True if the system has the PCRE2 library.
  17. # PCRE2_VERSION - The version of the PCRE2 library which was found.
  18. #
  19. # and the following imported targets:
  20. #
  21. # PCRE2::8BIT - The 8 bit PCRE2 library.
  22. # PCRE2::16BIT - The 16 bit PCRE2 library.
  23. # PCRE2::32BIT - The 32 bit PCRE2 library.
  24. # PCRE2::POSIX - The POSIX PCRE2 library.
  25. set(PCRE2_NON_STANDARD_LIB_PREFIX @NON_STANDARD_LIB_PREFIX@)
  26. set(PCRE2_NON_STANDARD_LIB_SUFFIX @NON_STANDARD_LIB_SUFFIX@)
  27. set(PCRE2_8BIT_NAME pcre2-8)
  28. set(PCRE2_16BIT_NAME pcre2-16)
  29. set(PCRE2_32BIT_NAME pcre2-32)
  30. set(PCRE2_POSIX_NAME pcre2-posix)
  31. find_path(PCRE2_INCLUDE_DIR NAMES pcre2.h DOC "PCRE2 include directory")
  32. if (PCRE2_USE_STATIC_LIBS)
  33. if (MSVC)
  34. set(PCRE2_8BIT_NAME pcre2-8-static)
  35. set(PCRE2_16BIT_NAME pcre2-16-static)
  36. set(PCRE2_32BIT_NAME pcre2-32-static)
  37. set(PCRE2_POSIX_NAME pcre2-posix-static)
  38. endif ()
  39. set(PCRE2_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX})
  40. set(PCRE2_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
  41. else ()
  42. set(PCRE2_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX})
  43. if (MINGW AND PCRE2_NON_STANDARD_LIB_PREFIX)
  44. set(PCRE2_PREFIX "")
  45. endif ()
  46. set(PCRE2_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
  47. if (MINGW AND PCRE2_NON_STANDARD_LIB_SUFFIX)
  48. set(PCRE2_SUFFIX "-0.dll")
  49. endif ()
  50. endif ()
  51. find_library(PCRE2_8BIT_LIBRARY NAMES ${PCRE2_PREFIX}${PCRE2_8BIT_NAME}${PCRE2_SUFFIX} ${PCRE2_PREFIX}${PCRE2_8BIT_NAME}d${PCRE2_SUFFIX} DOC "8 bit PCRE2 library")
  52. find_library(PCRE2_16BIT_LIBRARY NAMES ${PCRE2_PREFIX}${PCRE2_16BIT_NAME}${PCRE2_SUFFIX} ${PCRE2_PREFIX}${PCRE2_16BIT_NAME}d${PCRE2_SUFFIX} DOC "16 bit PCRE2 library")
  53. find_library(PCRE2_32BIT_LIBRARY NAMES ${PCRE2_PREFIX}${PCRE2_32BIT_NAME}${PCRE2_SUFFIX} ${PCRE2_PREFIX}${PCRE2_32BIT_NAME}d${PCRE2_SUFFIX} DOC "32 bit PCRE2 library")
  54. find_library(PCRE2_POSIX_LIBRARY NAMES ${PCRE2_PREFIX}${PCRE2_POSIX_NAME}${PCRE2_SUFFIX} ${PCRE2_PREFIX}${PCRE2_POSIX_NAME}d${PCRE2_SUFFIX} DOC "8 bit POSIX PCRE2 library")
  55. unset(PCRE2_NON_STANDARD_LIB_PREFIX)
  56. unset(PCRE2_NON_STANDARD_LIB_SUFFIX)
  57. unset(PCRE2_8BIT_NAME)
  58. unset(PCRE2_16BIT_NAME)
  59. unset(PCRE2_32BIT_NAME)
  60. unset(PCRE2_POSIX_NAME)
  61. # Set version
  62. if (PCRE2_INCLUDE_DIR)
  63. set(PCRE2_VERSION "@PCRE2_MAJOR@.@[email protected]")
  64. endif ()
  65. # Which components have been found.
  66. if (PCRE2_8BIT_LIBRARY)
  67. set(PCRE2_8BIT_FOUND TRUE)
  68. endif ()
  69. if (PCRE2_16BIT_LIBRARY)
  70. set(PCRE2_16BIT_FOUND TRUE)
  71. endif ()
  72. if (PCRE2_32BIT_LIBRARY)
  73. set(PCRE2_32BIT_FOUND TRUE)
  74. endif ()
  75. if (PCRE2_POSIX_LIBRARY)
  76. set(PCRE2_POSIX_FOUND TRUE)
  77. endif ()
  78. # Check if at least one component has been specified.
  79. list(LENGTH PCRE2_FIND_COMPONENTS PCRE2_NCOMPONENTS)
  80. if (PCRE2_NCOMPONENTS LESS 1)
  81. message(FATAL_ERROR "No components have been specified. This is not allowed. Please, specify at least one component.")
  82. endif ()
  83. unset(PCRE2_NCOMPONENTS)
  84. # When POSIX component has been specified make sure that also 8BIT component is specified.
  85. set(PCRE2_8BIT_COMPONENT FALSE)
  86. set(PCRE2_POSIX_COMPONENT FALSE)
  87. foreach(component ${PCRE2_FIND_COMPONENTS})
  88. if (component STREQUAL "8BIT")
  89. set(PCRE2_8BIT_COMPONENT TRUE)
  90. elseif (component STREQUAL "POSIX")
  91. set(PCRE2_POSIX_COMPONENT TRUE)
  92. endif ()
  93. endforeach()
  94. if (PCRE2_POSIX_COMPONENT AND NOT PCRE2_8BIT_COMPONENT)
  95. message(FATAL_ERROR "The component POSIX is specified while the 8BIT one is not. This is not allowed. Please, also specify the 8BIT component.")
  96. endif()
  97. unset(PCRE2_8BIT_COMPONENT)
  98. unset(PCRE2_POSIX_COMPONENT)
  99. include(FindPackageHandleStandardArgs)
  100. set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG "${CMAKE_CURRENT_LIST_FILE}")
  101. find_package_handle_standard_args(PCRE2
  102. FOUND_VAR PCRE2_FOUND
  103. REQUIRED_VARS PCRE2_INCLUDE_DIR
  104. HANDLE_COMPONENTS
  105. VERSION_VAR PCRE2_VERSION
  106. CONFIG_MODE
  107. )
  108. set(PCRE2_LIBRARIES)
  109. if (PCRE2_FOUND)
  110. foreach(component ${PCRE2_FIND_COMPONENTS})
  111. if (PCRE2_USE_STATIC_LIBS)
  112. add_library(PCRE2::${component} STATIC IMPORTED)
  113. target_compile_definitions(PCRE2::${component} INTERFACE PCRE2_STATIC)
  114. else ()
  115. add_library(PCRE2::${component} SHARED IMPORTED)
  116. endif ()
  117. set_target_properties(PCRE2::${component} PROPERTIES
  118. IMPORTED_LOCATION "${PCRE2_${component}_LIBRARY}"
  119. IMPORTED_IMPLIB "${PCRE2_${component}_LIBRARY}"
  120. INTERFACE_INCLUDE_DIRECTORIES "${PCRE2_INCLUDE_DIR}"
  121. )
  122. if (component STREQUAL "POSIX")
  123. set_target_properties(PCRE2::${component} PROPERTIES
  124. INTERFACE_LINK_LIBRARIES "PCRE2::8BIT"
  125. LINK_LIBRARIES "PCRE2::8BIT"
  126. )
  127. endif ()
  128. set(PCRE2_LIBRARIES ${PCRE2_LIBRARIES} ${PCRE2_${component}_LIBRARY})
  129. mark_as_advanced(PCRE2_${component}_LIBRARY)
  130. endforeach()
  131. endif ()
  132. mark_as_advanced(
  133. PCRE2_INCLUDE_DIR
  134. )