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