xref: /aosp_15_r20/external/pcre/cmake/pcre2-config.cmake.in (revision 22dc650d8ae982c6770746019a6f94af92b0f024)
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
26set(PCRE2_NON_STANDARD_LIB_PREFIX @NON_STANDARD_LIB_PREFIX@)
27set(PCRE2_NON_STANDARD_LIB_SUFFIX @NON_STANDARD_LIB_SUFFIX@)
28set(PCRE2_8BIT_NAME pcre2-8)
29set(PCRE2_16BIT_NAME pcre2-16)
30set(PCRE2_32BIT_NAME pcre2-32)
31set(PCRE2_POSIX_NAME pcre2-posix)
32find_path(PCRE2_INCLUDE_DIR NAMES pcre2.h DOC "PCRE2 include directory")
33if (PCRE2_USE_STATIC_LIBS)
34  if (MSVC)
35    set(PCRE2_8BIT_NAME pcre2-8-static)
36    set(PCRE2_16BIT_NAME pcre2-16-static)
37    set(PCRE2_32BIT_NAME pcre2-32-static)
38    set(PCRE2_POSIX_NAME pcre2-posix-static)
39  endif ()
40
41  set(PCRE2_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX})
42  set(PCRE2_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
43else ()
44  set(PCRE2_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX})
45  if (MINGW AND PCRE2_NON_STANDARD_LIB_PREFIX)
46    set(PCRE2_PREFIX "")
47  endif ()
48
49  set(PCRE2_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
50  if (MINGW AND PCRE2_NON_STANDARD_LIB_SUFFIX)
51    set(PCRE2_SUFFIX "-0.dll")
52  elseif(MSVC)
53    set(PCRE2_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
54  endif ()
55endif ()
56find_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")
57find_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")
58find_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")
59find_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")
60unset(PCRE2_NON_STANDARD_LIB_PREFIX)
61unset(PCRE2_NON_STANDARD_LIB_SUFFIX)
62unset(PCRE2_8BIT_NAME)
63unset(PCRE2_16BIT_NAME)
64unset(PCRE2_32BIT_NAME)
65unset(PCRE2_POSIX_NAME)
66
67# Set version
68if (PCRE2_INCLUDE_DIR)
69  set(PCRE2_VERSION "@PCRE2_MAJOR@.@[email protected]")
70endif ()
71
72# Which components have been found.
73if (PCRE2_8BIT_LIBRARY)
74  set(PCRE2_8BIT_FOUND TRUE)
75endif ()
76if (PCRE2_16BIT_LIBRARY)
77  set(PCRE2_16BIT_FOUND TRUE)
78endif ()
79if (PCRE2_32BIT_LIBRARY)
80  set(PCRE2_32BIT_FOUND TRUE)
81endif ()
82if (PCRE2_POSIX_LIBRARY)
83  set(PCRE2_POSIX_FOUND TRUE)
84endif ()
85
86# Check if at least one component has been specified.
87list(LENGTH PCRE2_FIND_COMPONENTS PCRE2_NCOMPONENTS)
88if (PCRE2_NCOMPONENTS LESS 1)
89  message(FATAL_ERROR "No components have been specified. This is not allowed. Please, specify at least one component.")
90endif ()
91unset(PCRE2_NCOMPONENTS)
92
93# When POSIX component has been specified make sure that also 8BIT component is specified.
94set(PCRE2_8BIT_COMPONENT FALSE)
95set(PCRE2_POSIX_COMPONENT FALSE)
96foreach(component ${PCRE2_FIND_COMPONENTS})
97  if (component STREQUAL "8BIT")
98    set(PCRE2_8BIT_COMPONENT TRUE)
99  elseif (component STREQUAL "POSIX")
100    set(PCRE2_POSIX_COMPONENT TRUE)
101  endif ()
102endforeach()
103
104if (PCRE2_POSIX_COMPONENT AND NOT PCRE2_8BIT_COMPONENT)
105  message(FATAL_ERROR "The component POSIX is specified while the 8BIT one is not. This is not allowed. Please, also specify the 8BIT component.")
106endif()
107unset(PCRE2_8BIT_COMPONENT)
108unset(PCRE2_POSIX_COMPONENT)
109
110include(FindPackageHandleStandardArgs)
111set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG "${CMAKE_CURRENT_LIST_FILE}")
112find_package_handle_standard_args(PCRE2
113  FOUND_VAR PCRE2_FOUND
114  REQUIRED_VARS PCRE2_INCLUDE_DIR
115  HANDLE_COMPONENTS
116  VERSION_VAR PCRE2_VERSION
117  CONFIG_MODE
118)
119
120set(PCRE2_LIBRARIES)
121if (PCRE2_FOUND)
122  foreach(component ${PCRE2_FIND_COMPONENTS})
123    if (PCRE2_USE_STATIC_LIBS)
124      add_library(PCRE2::${component} STATIC IMPORTED)
125      target_compile_definitions(PCRE2::${component} INTERFACE PCRE2_STATIC)
126    else ()
127      add_library(PCRE2::${component} SHARED IMPORTED)
128    endif ()
129    set_target_properties(PCRE2::${component} PROPERTIES
130      IMPORTED_LOCATION "${PCRE2_${component}_LIBRARY}"
131      IMPORTED_IMPLIB "${PCRE2_${component}_LIBRARY}"
132      INTERFACE_INCLUDE_DIRECTORIES "${PCRE2_INCLUDE_DIR}"
133    )
134    if (component STREQUAL "POSIX")
135      set_target_properties(PCRE2::${component} PROPERTIES
136        INTERFACE_LINK_LIBRARIES "PCRE2::8BIT"
137        LINK_LIBRARIES "PCRE2::8BIT"
138      )
139    endif ()
140
141    set(PCRE2_LIBRARIES ${PCRE2_LIBRARIES} ${PCRE2_${component}_LIBRARY})
142    mark_as_advanced(PCRE2_${component}_LIBRARY)
143  endforeach()
144endif ()
145
146mark_as_advanced(
147  PCRE2_INCLUDE_DIR
148)
149