Merge pull request #23092 from webosbrew/feature/webOS
[xbmc.git] / cmake / modules / FindPCRE.cmake
blobb2707ab0c21e35f5d9ec67b80dd5f7fcca76395b
1 #.rst:
2 # FindPCRE
3 # --------
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
18 if(NOT PCRE::PCRE)
19   if(ENABLE_INTERNAL_PCRE)
20     include(cmake/scripts/common/ModuleHelpers.cmake)
22     set(MODULE_LC pcre)
24     SETUP_BUILD_VARS()
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")
43       endif()
45       generate_patchcommand("${patches}")
47       set(CMAKE_ARGS -DPCRE_NEWLINE=ANYCRLF
48                      -DPCRE_NO_RECURSE=ON
49                      -DPCRE_MATCH_LIMIT_RECURSION=1500
50                      -DPCRE_SUPPORT_JIT=ON
51                      -DPCRE_SUPPORT_PCREGREP_JIT=ON
52                      -DPCRE_SUPPORT_UTF=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)
64       endif()
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
69         set(_libprefix "lib")
70       endif()
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})
76       BUILD_DEP_TARGET()
78     else()
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)
87     endif()
88   else()
90     if(PKG_CONFIG_FOUND)
91       pkg_check_modules(PC_PCRE libpcrecpp QUIET)
92     endif()
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})
106   endif()
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)
117   if(PCRE_FOUND)
118     set(PCRE_LIBRARIES ${PCRECPP_LIBRARY} ${PCRE_LIBRARY})
119     set(PCRE_INCLUDE_DIRS ${PCRE_INCLUDE_DIR})
120     if(WIN32)
121       set(PCRE_DEFINITIONS -DPCRE_STATIC=1)
122     endif()
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}")
130       endif()
131       if(PCRE_LIBRARY_DEBUG)
132         set_target_properties(PCRE::PCRE PROPERTIES
133                                          IMPORTED_CONFIGURATIONS DEBUG
134                                          IMPORTED_LOCATION "${PCRE_LIBRARY_DEBUG}")
135       endif()
136       set_target_properties(PCRE::PCRE PROPERTIES
137                                        INTERFACE_INCLUDE_DIRECTORIES "${PCRE_INCLUDE_DIR}")
138       if(WIN32)
139         set_target_properties(PCRE::PCRE PROPERTIES
140                                          INTERFACE_COMPILE_DEFINITIONS PCRE_STATIC=1)
141       endif()
143     endif()
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}")
150       endif()
151       if(PCRE_LIBRARY_DEBUG)
152         set_target_properties(PCRE::PCRECPP PROPERTIES
153                                             IMPORTED_CONFIGURATIONS DEBUG
154                                             IMPORTED_LOCATION "${PCRECPP_LIBRARY_DEBUG}")
155       endif()
156       set_target_properties(PCRE::PCRECPP PROPERTIES
157                                           INTERFACE_LINK_LIBRARIES PCRE::PCRE)
158     endif()
159     if(TARGET pcre)
160       add_dependencies(PCRE::PCRE pcre)
161     endif()
162     set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP PCRE::PCRE)
163   else()
164     if(PCRE_FIND_REQUIRED)
165       message(FATAL_ERROR "PCRE not found. Possibly use -DENABLE_INTERNAL_PCRE=ON to build PCRE")
166     endif()
167   endif()
169   mark_as_advanced(PCRE_INCLUDE_DIR PCRECPP_LIBRARY PCRE_LIBRARY)
170 endif()