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