4 # Finds the PCRECPP library
6 # This will define the following variables::
8 # PCRE_FOUND - system has libpcrecpp
9 # PCRE_INCLUDE_DIRS - the libpcrecpp include directory
10 # PCRE_LIBRARIES - the libpcrecpp libraries
11 # PCRE_DEFINITIONS - the libpcrecpp definitions
13 # and the following imported targets::
15 # PCRE::PCRECPP - The PCRECPP library
16 # PCRE::PCRE - The PCRE library
19 if(ENABLE_INTERNAL_PCRE)
20 include(cmake/scripts/common/ModuleHelpers.cmake)
26 # Check for existing PCRE. If version >= PCRE-VERSION file version, dont build
27 find_package(PCRE CONFIG QUIET)
29 if(PCRE_VERSION VERSION_LESS ${${MODULE}_VER})
31 set(PCRE_VERSION ${${MODULE}_VER})
32 set(PCRE_DEBUG_POSTFIX d)
34 set(patches "${CORE_SOURCE_DIR}/tools/depends/target/${MODULE_LC}/001-all-cmakeconfig.patch"
35 "${CORE_SOURCE_DIR}/tools/depends/target/${MODULE_LC}/002-all-enable_docs_pc.patch"
36 "${CORE_SOURCE_DIR}/tools/depends/target/${MODULE_LC}/003-all-postfix.patch"
37 "${CORE_SOURCE_DIR}/tools/depends/target/${MODULE_LC}/004-win-pdb.patch"
38 "${CORE_SOURCE_DIR}/tools/depends/target/${MODULE_LC}/jit_aarch64.patch")
40 if(CORE_SYSTEM_NAME STREQUAL darwin_embedded)
41 list(APPEND patches "${CORE_SOURCE_DIR}/tools/depends/target/${MODULE_LC}/tvos-bitcode-fix.patch"
42 "${CORE_SOURCE_DIR}/tools/depends/target/${MODULE_LC}/ios-clear_cache.patch")
45 generate_patchcommand("${patches}")
47 set(CMAKE_ARGS -DPCRE_NEWLINE=ANYCRLF
49 -DPCRE_MATCH_LIMIT_RECURSION=1500
51 -DPCRE_SUPPORT_PCREGREP_JIT=ON
53 -DPCRE_SUPPORT_UNICODE_PROPERTIES=ON
54 -DPCRE_SUPPORT_LIBZ=OFF
55 -DPCRE_SUPPORT_LIBBZ2=OFF
56 -DPCRE_BUILD_PCREGREP=OFF
57 -DPCRE_BUILD_TESTS=OFF)
59 if(WIN32 OR WINDOWS_STORE)
60 list(APPEND CMAKE_ARGS -DINSTALL_MSVC_PDB=ON)
61 elseif(CORE_SYSTEM_NAME STREQUAL android)
62 # CMake CheckFunctionExists incorrectly detects strtoq for android
63 list(APPEND CMAKE_ARGS -DHAVE_STRTOQ=0)
66 # populate PCRECPP lib without a separate module
67 if(NOT CORE_SYSTEM_NAME MATCHES windows)
68 # Non windows platforms have a lib prefix for the lib artifact
71 # regex used to get platform extension (eg lib for windows, .a for unix)
72 string(REGEX REPLACE "^.*\\." "" _LIBEXT ${${MODULE}_BYPRODUCT})
73 set(PCRECPP_LIBRARY_DEBUG ${DEP_LOCATION}/lib/${_libprefix}pcrecpp${${MODULE}_DEBUG_POSTFIX}.${_LIBEXT})
74 set(PCRECPP_LIBRARY_RELEASE ${DEP_LOCATION}/lib/${_libprefix}pcrecpp.${_LIBEXT})
79 # Populate paths for find_package_handle_standard_args
80 find_path(PCRE_INCLUDE_DIR pcre.h)
82 find_library(PCRECPP_LIBRARY_RELEASE NAMES pcrecpp)
83 find_library(PCRECPP_LIBRARY_DEBUG NAMES pcrecppd)
85 find_library(PCRE_LIBRARY_RELEASE NAMES pcre)
86 find_library(PCRE_LIBRARY_DEBUG NAMES pcred)
91 pkg_check_modules(PC_PCRE libpcrecpp QUIET)
94 find_path(PCRE_INCLUDE_DIR pcrecpp.h
95 PATHS ${PC_PCRE_INCLUDEDIR})
96 find_library(PCRECPP_LIBRARY_RELEASE NAMES pcrecpp
97 PATHS ${PC_PCRE_LIBDIR})
98 find_library(PCRE_LIBRARY_RELEASE NAMES pcre
99 PATHS ${PC_PCRE_LIBDIR})
100 find_library(PCRECPP_LIBRARY_DEBUG NAMES pcrecppd
101 PATHS ${PC_PCRE_LIBDIR})
102 find_library(PCRE_LIBRARY_DEBUG NAMES pcred
103 PATHS ${PC_PCRE_LIBDIR})
104 set(PCRE_VERSION ${PC_PCRE_VERSION})
108 include(SelectLibraryConfigurations)
109 select_library_configurations(PCRECPP)
110 select_library_configurations(PCRE)
112 include(FindPackageHandleStandardArgs)
113 find_package_handle_standard_args(PCRE
114 REQUIRED_VARS PCRECPP_LIBRARY PCRE_LIBRARY PCRE_INCLUDE_DIR
115 VERSION_VAR PCRE_VERSION)
118 set(PCRE_LIBRARIES ${PCRECPP_LIBRARY} ${PCRE_LIBRARY})
119 set(PCRE_INCLUDE_DIRS ${PCRE_INCLUDE_DIR})
121 set(PCRE_DEFINITIONS -DPCRE_STATIC=1)
124 if(NOT TARGET PCRE::PCRE)
125 add_library(PCRE::PCRE UNKNOWN IMPORTED)
126 if(PCRE_LIBRARY_RELEASE)
127 set_target_properties(PCRE::PCRE PROPERTIES
128 IMPORTED_CONFIGURATIONS RELEASE
129 IMPORTED_LOCATION "${PCRE_LIBRARY_RELEASE}")
131 if(PCRE_LIBRARY_DEBUG)
132 set_target_properties(PCRE::PCRE PROPERTIES
133 IMPORTED_CONFIGURATIONS DEBUG
134 IMPORTED_LOCATION "${PCRE_LIBRARY_DEBUG}")
136 set_target_properties(PCRE::PCRE PROPERTIES
137 INTERFACE_INCLUDE_DIRECTORIES "${PCRE_INCLUDE_DIR}")
139 set_target_properties(PCRE::PCRE PROPERTIES
140 INTERFACE_COMPILE_DEFINITIONS PCRE_STATIC=1)
144 if(NOT TARGET PCRE::PCRECPP)
145 add_library(PCRE::PCRECPP UNKNOWN IMPORTED)
146 if(PCRE_LIBRARY_RELEASE)
147 set_target_properties(PCRE::PCRECPP PROPERTIES
148 IMPORTED_CONFIGURATIONS RELEASE
149 IMPORTED_LOCATION "${PCRECPP_LIBRARY_RELEASE}")
151 if(PCRE_LIBRARY_DEBUG)
152 set_target_properties(PCRE::PCRECPP PROPERTIES
153 IMPORTED_CONFIGURATIONS DEBUG
154 IMPORTED_LOCATION "${PCRECPP_LIBRARY_DEBUG}")
156 set_target_properties(PCRE::PCRECPP PROPERTIES
157 INTERFACE_LINK_LIBRARIES PCRE::PCRE)
160 add_dependencies(PCRE::PCRE pcre)
162 set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP PCRE::PCRE)
164 if(PCRE_FIND_REQUIRED)
165 message(FATAL_ERROR "PCRE not found. Possibly use -DENABLE_INTERNAL_PCRE=ON to build PCRE")
169 mark_as_advanced(PCRE_INCLUDE_DIR PCRECPP_LIBRARY PCRE_LIBRARY)