xref: /aosp_15_r20/external/pcre/CMakeLists.txt (revision 22dc650d8ae982c6770746019a6f94af92b0f024)
1*22dc650dSSadaf Ebrahimi# CMakeLists.txt
2*22dc650dSSadaf Ebrahimi#
3*22dc650dSSadaf Ebrahimi# This file enables PCRE2 to be built with the CMake configuration and build
4*22dc650dSSadaf Ebrahimi# tool. Download CMake in source or binary form from http://www.cmake.org/
5*22dc650dSSadaf Ebrahimi# Converted to support PCRE2 from the original PCRE file, August 2014.
6*22dc650dSSadaf Ebrahimi#
7*22dc650dSSadaf Ebrahimi# Original listfile by Christian Ehrlicher <[email protected]>
8*22dc650dSSadaf Ebrahimi# Refined and expanded by Daniel Richard G. <[email protected]>
9*22dc650dSSadaf Ebrahimi# 2007-09-14 mod by Sheri so 7.4 supported configuration options can be entered
10*22dc650dSSadaf Ebrahimi# 2007-09-19 Adjusted by PH to retain previous default settings
11*22dc650dSSadaf Ebrahimi# 2007-12-26 (a) On UNIX, use names libpcre instead of just pcre
12*22dc650dSSadaf Ebrahimi#            (b) Ensure pcretest and pcregrep link with the local library,
13*22dc650dSSadaf Ebrahimi#                not a previously-installed one.
14*22dc650dSSadaf Ebrahimi#            (c) Add PCRE_SUPPORT_LIBREADLINE, PCRE_SUPPORT_LIBZ, and
15*22dc650dSSadaf Ebrahimi#                PCRE_SUPPORT_LIBBZ2.
16*22dc650dSSadaf Ebrahimi# 2008-01-20 Brought up to date to include several new features by Christian
17*22dc650dSSadaf Ebrahimi#            Ehrlicher.
18*22dc650dSSadaf Ebrahimi# 2008-01-22 Sheri added options for backward compatibility of library names
19*22dc650dSSadaf Ebrahimi#            when building with minGW:
20*22dc650dSSadaf Ebrahimi#            if "ON", NON_STANDARD_LIB_PREFIX causes shared libraries to
21*22dc650dSSadaf Ebrahimi#            be built without "lib" as prefix. (The libraries will be named
22*22dc650dSSadaf Ebrahimi#            pcre.dll, pcreposix.dll and pcrecpp.dll).
23*22dc650dSSadaf Ebrahimi#            if "ON", NON_STANDARD_LIB_SUFFIX causes shared libraries to
24*22dc650dSSadaf Ebrahimi#            be built with suffix of "-0.dll". (The libraries will be named
25*22dc650dSSadaf Ebrahimi#            libpcre-0.dll, libpcreposix-0.dll and libpcrecpp-0.dll - same names
26*22dc650dSSadaf Ebrahimi#            built by default with Configure and Make.
27*22dc650dSSadaf Ebrahimi# 2008-01-23 PH removed the automatic build of pcredemo.
28*22dc650dSSadaf Ebrahimi# 2008-04-22 PH modified READLINE support so it finds NCURSES when needed.
29*22dc650dSSadaf Ebrahimi# 2008-07-03 PH updated for revised UCP property support (change of files)
30*22dc650dSSadaf Ebrahimi# 2009-03-23 PH applied Steven Van Ingelgem's patch to change the name
31*22dc650dSSadaf Ebrahimi#            CMAKE_BINARY_DIR to PROJECT_BINARY_DIR so that it works when PCRE
32*22dc650dSSadaf Ebrahimi#            is included within another project.
33*22dc650dSSadaf Ebrahimi# 2009-03-23 PH applied a modified version of Steven Van Ingelgem's patches to
34*22dc650dSSadaf Ebrahimi#            add options to stop the building of pcregrep and the tests, and
35*22dc650dSSadaf Ebrahimi#            to disable the final configuration report.
36*22dc650dSSadaf Ebrahimi# 2009-04-11 PH applied Christian Ehrlicher's patch to show compiler flags that
37*22dc650dSSadaf Ebrahimi#            are set by specifying a release type.
38*22dc650dSSadaf Ebrahimi# 2010-01-02 PH added test for stdint.h
39*22dc650dSSadaf Ebrahimi# 2010-03-02 PH added test for inttypes.h
40*22dc650dSSadaf Ebrahimi# 2011-08-01 PH added PCREGREP_BUFSIZE
41*22dc650dSSadaf Ebrahimi# 2011-08-22 PH added PCRE_SUPPORT_JIT
42*22dc650dSSadaf Ebrahimi# 2011-09-06 PH modified WIN32 ADD_TEST line as suggested by Sergey Cherepanov
43*22dc650dSSadaf Ebrahimi# 2011-09-06 PH added PCRE_SUPPORT_PCREGREP_JIT
44*22dc650dSSadaf Ebrahimi# 2011-10-04 Sheri added support for including coff data in windows shared libraries
45*22dc650dSSadaf Ebrahimi#            compiled with MINGW if pcre.rc and/or pcreposix.rc are placed in
46*22dc650dSSadaf Ebrahimi#            the source dir by the user prior to building
47*22dc650dSSadaf Ebrahimi# 2011-10-04 Sheri changed various add_test's to use exes' location built instead
48*22dc650dSSadaf Ebrahimi#            of DEBUG location only (likely only matters in MSVC)
49*22dc650dSSadaf Ebrahimi# 2011-10-04 Sheri added scripts to provide needed variables to RunTest and
50*22dc650dSSadaf Ebrahimi#            RunGrepTest (used for UNIX and Msys)
51*22dc650dSSadaf Ebrahimi# 2011-10-04 Sheri added scripts to provide needed variables and to execute
52*22dc650dSSadaf Ebrahimi#            RunTest.bat in Win32 (for effortless testing with "make test")
53*22dc650dSSadaf Ebrahimi# 2011-10-04 Sheri Increased minimum required cmake version
54*22dc650dSSadaf Ebrahimi# 2012-01-06 PH removed pcre_info.c and added pcre_string_utils.c
55*22dc650dSSadaf Ebrahimi# 2012-01-10 Zoltan Herczeg added libpcre16 support
56*22dc650dSSadaf Ebrahimi# 2012-01-13 Stephen Kelly added out of source build support
57*22dc650dSSadaf Ebrahimi# 2012-01-17 PH applied Stephen Kelly's patch to parse the version data out
58*22dc650dSSadaf Ebrahimi#            of the configure.ac file
59*22dc650dSSadaf Ebrahimi# 2012-02-26 PH added support for libedit
60*22dc650dSSadaf Ebrahimi# 2012-09-06 PH added support for PCRE_EBCDIC_NL25
61*22dc650dSSadaf Ebrahimi# 2012-09-08 ChPe added PCRE32 support
62*22dc650dSSadaf Ebrahimi# 2012-10-23 PH added support for VALGRIND and GCOV
63*22dc650dSSadaf Ebrahimi# 2012-12-08 PH added patch from Daniel Richard G to quash some MSVC warnings
64*22dc650dSSadaf Ebrahimi# 2013-07-01 PH realized that the "support" for GCOV was a total nonsense and
65*22dc650dSSadaf Ebrahimi#            so it has been removed.
66*22dc650dSSadaf Ebrahimi# 2013-10-08 PH got rid of the "source" command, which is a bash-ism (use ".")
67*22dc650dSSadaf Ebrahimi# 2013-11-05 PH added support for PARENS_NEST_LIMIT
68*22dc650dSSadaf Ebrahimi# 2014-08-29 PH converted the file for PCRE2 (which has no C++).
69*22dc650dSSadaf Ebrahimi# 2015-04-24 PH added support for PCRE2_DEBUG
70*22dc650dSSadaf Ebrahimi# 2015-07-16 PH updated for new pcre2_find_bracket source module
71*22dc650dSSadaf Ebrahimi# 2015-08-24 PH correct C_FLAGS setting (patch from Roy Ivy III)
72*22dc650dSSadaf Ebrahimi# 2015-10=16 PH added support for never-backslash-C
73*22dc650dSSadaf Ebrahimi# 2016-03-01 PH applied Chris Wilson's patch for MSVC static
74*22dc650dSSadaf Ebrahimi# 2016-06-24 PH applied Chris Wilson's second patch, putting the first under
75*22dc650dSSadaf Ebrahimi#            a new option instead of being unconditional.
76*22dc650dSSadaf Ebrahimi# 2016-10-05 PH fixed a typo (PCRE should be PCRE2) in above patch
77*22dc650dSSadaf Ebrahimi#            fix by David Gaussmann
78*22dc650dSSadaf Ebrahimi# 2016-10-07 PH added PCREGREP_MAX_BUFSIZE
79*22dc650dSSadaf Ebrahimi# 2017-03-11 PH turned HEAP_MATCH_RECURSE into a NO-OP for 10.30
80*22dc650dSSadaf Ebrahimi# 2017-04-08 PH added HEAP_LIMIT
81*22dc650dSSadaf Ebrahimi# 2017-06-15 ZH added SUPPORT_JIT_SEALLOC support
82*22dc650dSSadaf Ebrahimi# 2018-06-19 PH added checks for stdint.h and inttypes.h (later removed)
83*22dc650dSSadaf Ebrahimi# 2018-06-27 PH added Daniel's patch to increase the stack for MSVC
84*22dc650dSSadaf Ebrahimi# 2018-11-14 PH removed unnecessary checks for stdint.h and inttypes.h
85*22dc650dSSadaf Ebrahimi# 2018-11-16 PH added PCRE2GREP_SUPPORT_CALLOUT_FORK support and tidied
86*22dc650dSSadaf Ebrahimi# 2019-02-16 PH hacked to avoid CMP0026 policy issue (see comments below)
87*22dc650dSSadaf Ebrahimi# 2020-03-16 PH renamed dftables as pcre2_dftables (as elsewhere)
88*22dc650dSSadaf Ebrahimi# 2020-03-24 PH changed CMAKE_MODULE_PATH definition to add, not replace
89*22dc650dSSadaf Ebrahimi# 2020-04-08 Carlo added function check for secure_getenv, fixed strerror
90*22dc650dSSadaf Ebrahimi# 2020-04-16 enh added check for __attribute__((uninitialized))
91*22dc650dSSadaf Ebrahimi# 2020-04-25 PH applied patches from Uwe Korn to support pkg-config and
92*22dc650dSSadaf Ebrahimi#            library versioning.
93*22dc650dSSadaf Ebrahimi# 2020-04-25 Carlo added function check for mkostemp used in ProtExecAllocator
94*22dc650dSSadaf Ebrahimi# 2020-04-28 PH added function check for memfd_create based on Carlo's patch
95*22dc650dSSadaf Ebrahimi# 2020-05-25 PH added a check for Intel CET
96*22dc650dSSadaf Ebrahimi# 2020-12-03 PH altered the definition of pcre2test as suggested by Daniel
97*22dc650dSSadaf Ebrahimi# 2021-06-29 JWSB added the option to build static library with PIC.
98*22dc650dSSadaf Ebrahimi# 2021-07-05 JWSB modified such both the static and shared library can be
99*22dc650dSSadaf Ebrahimi#            build in one go.
100*22dc650dSSadaf Ebrahimi# 2021-08-28 PH increased minimum version
101*22dc650dSSadaf Ebrahimi# 2021-08-28 PH added test for realpath()
102*22dc650dSSadaf Ebrahimi# 2022-12-10 PH added support for pcre2posix_test
103*22dc650dSSadaf Ebrahimi# 2023-01-15 Carlo added C99 as the minimum required
104*22dc650dSSadaf Ebrahimi# 2023-08-06 PH added support for setting variable length lookbehind maximum
105*22dc650dSSadaf Ebrahimi
106*22dc650dSSadaf Ebrahimi# Increased minimum to 3.5 to workaround deprecated backward compatibility
107*22dc650dSSadaf Ebrahimi# since 3.27.
108*22dc650dSSadaf Ebrahimicmake_minimum_required(VERSION 3.5 FATAL_ERROR)
109*22dc650dSSadaf Ebrahimiproject(PCRE2 C)
110*22dc650dSSadaf Ebrahimiset(CMAKE_C_STANDARD 99)
111*22dc650dSSadaf Ebrahimiset(CMAKE_C_STANDARD_REQUIRED TRUE)
112*22dc650dSSadaf Ebrahimi
113*22dc650dSSadaf Ebrahimiset(CMAKE_C_VISIBILITY_PRESET hidden)
114*22dc650dSSadaf Ebrahimicmake_policy(SET CMP0063 NEW)
115*22dc650dSSadaf Ebrahimi
116*22dc650dSSadaf Ebrahimi# Set policy CMP0026 to avoid warnings for the use of LOCATION in
117*22dc650dSSadaf Ebrahimi# GET_TARGET_PROPERTY. This should no longer be required.
118*22dc650dSSadaf Ebrahimi# CMAKE_POLICY(SET CMP0026 OLD)
119*22dc650dSSadaf Ebrahimi
120*22dc650dSSadaf Ebrahimi# With a recent cmake, you can provide a rootdir to look for non
121*22dc650dSSadaf Ebrahimi# standard installed library dependencies, but to do so, the policy
122*22dc650dSSadaf Ebrahimi# needs to be set to new (by uncommenting the following)
123*22dc650dSSadaf Ebrahimi# CMAKE_POLICY(SET CMP0074 NEW)
124*22dc650dSSadaf Ebrahimi
125*22dc650dSSadaf Ebrahimi# For FindReadline.cmake. This was changed to allow setting CMAKE_MODULE_PATH
126*22dc650dSSadaf Ebrahimi# on the command line.
127*22dc650dSSadaf Ebrahimi# SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
128*22dc650dSSadaf Ebrahimi
129*22dc650dSSadaf EbrahimiLIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
130*22dc650dSSadaf Ebrahimi
131*22dc650dSSadaf EbrahimiINCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src)
132*22dc650dSSadaf Ebrahimi
133*22dc650dSSadaf Ebrahimi# external packages
134*22dc650dSSadaf EbrahimiFIND_PACKAGE( BZip2 )
135*22dc650dSSadaf EbrahimiFIND_PACKAGE( ZLIB )
136*22dc650dSSadaf EbrahimiFIND_PACKAGE( Readline )
137*22dc650dSSadaf EbrahimiFIND_PACKAGE( Editline )
138*22dc650dSSadaf Ebrahimi
139*22dc650dSSadaf Ebrahimi# Configuration checks
140*22dc650dSSadaf Ebrahimi
141*22dc650dSSadaf EbrahimiINCLUDE(CheckCSourceCompiles)
142*22dc650dSSadaf EbrahimiINCLUDE(CheckFunctionExists)
143*22dc650dSSadaf EbrahimiINCLUDE(CheckSymbolExists)
144*22dc650dSSadaf EbrahimiINCLUDE(CheckIncludeFile)
145*22dc650dSSadaf EbrahimiINCLUDE(CheckTypeSize)
146*22dc650dSSadaf EbrahimiINCLUDE(GNUInstallDirs) # for CMAKE_INSTALL_LIBDIR
147*22dc650dSSadaf Ebrahimi
148*22dc650dSSadaf EbrahimiCHECK_INCLUDE_FILE(dirent.h     HAVE_DIRENT_H)
149*22dc650dSSadaf EbrahimiCHECK_INCLUDE_FILE(sys/stat.h   HAVE_SYS_STAT_H)
150*22dc650dSSadaf EbrahimiCHECK_INCLUDE_FILE(sys/types.h  HAVE_SYS_TYPES_H)
151*22dc650dSSadaf EbrahimiCHECK_INCLUDE_FILE(unistd.h     HAVE_UNISTD_H)
152*22dc650dSSadaf EbrahimiCHECK_INCLUDE_FILE(windows.h    HAVE_WINDOWS_H)
153*22dc650dSSadaf Ebrahimi
154*22dc650dSSadaf EbrahimiCHECK_SYMBOL_EXISTS(bcopy         "strings.h"  HAVE_BCOPY)
155*22dc650dSSadaf EbrahimiCHECK_SYMBOL_EXISTS(memfd_create  "sys/mman.h" HAVE_MEMFD_CREATE)
156*22dc650dSSadaf EbrahimiCHECK_SYMBOL_EXISTS(memmove       "string.h"   HAVE_MEMMOVE)
157*22dc650dSSadaf EbrahimiCHECK_SYMBOL_EXISTS(secure_getenv "stdlib.h"   HAVE_SECURE_GETENV)
158*22dc650dSSadaf EbrahimiCHECK_SYMBOL_EXISTS(strerror      "string.h"   HAVE_STRERROR)
159*22dc650dSSadaf Ebrahimi
160*22dc650dSSadaf EbrahimiCHECK_C_SOURCE_COMPILES(
161*22dc650dSSadaf Ebrahimi  "#include <stdlib.h>
162*22dc650dSSadaf Ebrahimi   #include <limits.h>
163*22dc650dSSadaf Ebrahimi   int main(int c, char *v[]) { char buf[PATH_MAX]; realpath(v[c], buf); return 0; }"
164*22dc650dSSadaf Ebrahimi  HAVE_REALPATH
165*22dc650dSSadaf Ebrahimi)
166*22dc650dSSadaf Ebrahimi
167*22dc650dSSadaf Ebrahimiset(ORIG_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
168*22dc650dSSadaf Ebrahimiset(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror")
169*22dc650dSSadaf Ebrahimi
170*22dc650dSSadaf EbrahimiCHECK_C_SOURCE_COMPILES(
171*22dc650dSSadaf Ebrahimi  "#include <stddef.h>
172*22dc650dSSadaf Ebrahimi   int main(void) { int a,b; size_t m; __builtin_mul_overflow(a,b,&m); return 0; }"
173*22dc650dSSadaf Ebrahimi  HAVE_BUILTIN_MUL_OVERFLOW
174*22dc650dSSadaf Ebrahimi)
175*22dc650dSSadaf Ebrahimi
176*22dc650dSSadaf EbrahimiCHECK_C_SOURCE_COMPILES(
177*22dc650dSSadaf Ebrahimi  "int main(void) { char buf[128] __attribute__((uninitialized)); (void)buf; return 0; }"
178*22dc650dSSadaf Ebrahimi  HAVE_ATTRIBUTE_UNINITIALIZED
179*22dc650dSSadaf Ebrahimi)
180*22dc650dSSadaf Ebrahimi
181*22dc650dSSadaf EbrahimiCHECK_C_SOURCE_COMPILES([=[
182*22dc650dSSadaf Ebrahimi  extern __attribute__ ((visibility ("default"))) int f(void);
183*22dc650dSSadaf Ebrahimi  int main(void) { return f(); }
184*22dc650dSSadaf Ebrahimi  int f(void) { return 42; }
185*22dc650dSSadaf Ebrahimi  ]=] HAVE_VISIBILITY
186*22dc650dSSadaf Ebrahimi)
187*22dc650dSSadaf Ebrahimi
188*22dc650dSSadaf Ebrahimiif (HAVE_VISIBILITY)
189*22dc650dSSadaf Ebrahimi  set(PCRE2_EXPORT [=[__attribute__ ((visibility ("default")))]=])
190*22dc650dSSadaf Ebrahimielse()
191*22dc650dSSadaf Ebrahimi  set(PCRE2_EXPORT)
192*22dc650dSSadaf Ebrahimiendif()
193*22dc650dSSadaf Ebrahimi
194*22dc650dSSadaf Ebrahimiset(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
195*22dc650dSSadaf Ebrahimi
196*22dc650dSSadaf Ebrahimi# Check whether Intel CET is enabled, and if so, adjust compiler flags. This
197*22dc650dSSadaf Ebrahimi# code was written by PH, trying to imitate the logic from the autotools
198*22dc650dSSadaf Ebrahimi# configuration.
199*22dc650dSSadaf Ebrahimi
200*22dc650dSSadaf EbrahimiCHECK_C_SOURCE_COMPILES(
201*22dc650dSSadaf Ebrahimi  "#ifndef __CET__
202*22dc650dSSadaf Ebrahimi   #error CET is not enabled
203*22dc650dSSadaf Ebrahimi   #endif
204*22dc650dSSadaf Ebrahimi   int main() { return 0; }"
205*22dc650dSSadaf Ebrahimi  INTEL_CET_ENABLED
206*22dc650dSSadaf Ebrahimi)
207*22dc650dSSadaf Ebrahimi
208*22dc650dSSadaf EbrahimiIF (INTEL_CET_ENABLED)
209*22dc650dSSadaf Ebrahimi  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mshstk")
210*22dc650dSSadaf EbrahimiENDIF(INTEL_CET_ENABLED)
211*22dc650dSSadaf Ebrahimi
212*22dc650dSSadaf Ebrahimi# User-configurable options
213*22dc650dSSadaf Ebrahimi#
214*22dc650dSSadaf Ebrahimi# Note: CMakeSetup displays these in alphabetical order, regardless of
215*22dc650dSSadaf Ebrahimi# the order we use here.
216*22dc650dSSadaf Ebrahimi
217*22dc650dSSadaf EbrahimiSET(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libraries.")
218*22dc650dSSadaf Ebrahimi
219*22dc650dSSadaf EbrahimiOPTION(BUILD_STATIC_LIBS "Build static libraries." ON)
220*22dc650dSSadaf Ebrahimi
221*22dc650dSSadaf EbrahimiOPTION(PCRE2_BUILD_PCRE2_8 "Build 8 bit PCRE2 library" ON)
222*22dc650dSSadaf Ebrahimi
223*22dc650dSSadaf EbrahimiOPTION(PCRE2_BUILD_PCRE2_16 "Build 16 bit PCRE2 library" OFF)
224*22dc650dSSadaf Ebrahimi
225*22dc650dSSadaf EbrahimiOPTION(PCRE2_BUILD_PCRE2_32 "Build 32 bit PCRE2 library" OFF)
226*22dc650dSSadaf Ebrahimi
227*22dc650dSSadaf EbrahimiOPTION(PCRE2_STATIC_PIC "Build the static library with the option position independent code enabled." OFF)
228*22dc650dSSadaf Ebrahimi
229*22dc650dSSadaf EbrahimiOPTION(PCRE2_DEBUG "Include debugging code" OFF)
230*22dc650dSSadaf Ebrahimi
231*22dc650dSSadaf EbrahimiOPTION(PCRE2_DISABLE_PERCENT_ZT "Disable the use of %zu and %td (rarely needed)" OFF)
232*22dc650dSSadaf Ebrahimi
233*22dc650dSSadaf EbrahimiSET(PCRE2_EBCDIC OFF CACHE BOOL
234*22dc650dSSadaf Ebrahimi    "Use EBCDIC coding instead of ASCII. (This is rarely used outside of mainframe systems.)")
235*22dc650dSSadaf Ebrahimi
236*22dc650dSSadaf EbrahimiSET(PCRE2_EBCDIC_NL25 OFF CACHE BOOL
237*22dc650dSSadaf Ebrahimi    "Use 0x25 as EBCDIC NL character instead of 0x15; implies EBCDIC.")
238*22dc650dSSadaf Ebrahimi
239*22dc650dSSadaf EbrahimiSET(PCRE2_LINK_SIZE "2" CACHE STRING
240*22dc650dSSadaf Ebrahimi    "Internal link size (2, 3 or 4 allowed). See LINK_SIZE in config.h.in for details.")
241*22dc650dSSadaf Ebrahimi
242*22dc650dSSadaf EbrahimiSET(PCRE2_PARENS_NEST_LIMIT "250" CACHE STRING
243*22dc650dSSadaf Ebrahimi    "Default nested parentheses limit. See PARENS_NEST_LIMIT in config.h.in for details.")
244*22dc650dSSadaf Ebrahimi
245*22dc650dSSadaf EbrahimiSET(PCRE2_HEAP_LIMIT "20000000" CACHE STRING
246*22dc650dSSadaf Ebrahimi    "Default limit on heap memory (kibibytes). See HEAP_LIMIT in config.h.in for details.")
247*22dc650dSSadaf Ebrahimi
248*22dc650dSSadaf EbrahimiSET(PCRE2_MAX_VARLOOKBEHIND "255" CACHE STRING
249*22dc650dSSadaf Ebrahimi    "Default limit on variable lookbehinds.")
250*22dc650dSSadaf Ebrahimi
251*22dc650dSSadaf EbrahimiSET(PCRE2_MATCH_LIMIT "10000000" CACHE STRING
252*22dc650dSSadaf Ebrahimi    "Default limit on internal looping. See MATCH_LIMIT in config.h.in for details.")
253*22dc650dSSadaf Ebrahimi
254*22dc650dSSadaf EbrahimiSET(PCRE2_MATCH_LIMIT_DEPTH "MATCH_LIMIT" CACHE STRING
255*22dc650dSSadaf Ebrahimi    "Default limit on internal depth of search. See MATCH_LIMIT_DEPTH in config.h.in for details.")
256*22dc650dSSadaf Ebrahimi
257*22dc650dSSadaf EbrahimiSET(PCRE2GREP_BUFSIZE "20480" CACHE STRING
258*22dc650dSSadaf Ebrahimi    "Buffer starting size parameter for pcre2grep. See PCRE2GREP_BUFSIZE in config.h.in for details.")
259*22dc650dSSadaf Ebrahimi
260*22dc650dSSadaf EbrahimiSET(PCRE2GREP_MAX_BUFSIZE "1048576" CACHE STRING
261*22dc650dSSadaf Ebrahimi    "Buffer maximum size parameter for pcre2grep. See PCRE2GREP_MAX_BUFSIZE in config.h.in for details.")
262*22dc650dSSadaf Ebrahimi
263*22dc650dSSadaf EbrahimiSET(PCRE2_NEWLINE "LF" CACHE STRING
264*22dc650dSSadaf Ebrahimi    "What to recognize as a newline (one of CR, LF, CRLF, ANY, ANYCRLF, NUL).")
265*22dc650dSSadaf Ebrahimi
266*22dc650dSSadaf EbrahimiSET(PCRE2_HEAP_MATCH_RECURSE OFF CACHE BOOL
267*22dc650dSSadaf Ebrahimi    "Obsolete option: do not use")
268*22dc650dSSadaf Ebrahimi
269*22dc650dSSadaf EbrahimiSET(PCRE2_SUPPORT_JIT OFF CACHE BOOL
270*22dc650dSSadaf Ebrahimi    "Enable support for Just-in-time compiling.")
271*22dc650dSSadaf Ebrahimi
272*22dc650dSSadaf EbrahimiIF(${CMAKE_SYSTEM_NAME} MATCHES Linux|NetBSD)
273*22dc650dSSadaf Ebrahimi    SET(PCRE2_SUPPORT_JIT_SEALLOC OFF CACHE BOOL
274*22dc650dSSadaf Ebrahimi        "Enable SELinux compatible execmem allocator in JIT (experimental).")
275*22dc650dSSadaf EbrahimiELSE(${CMAKE_SYSTEM_NAME} MATCHES Linux|NetBSD)
276*22dc650dSSadaf Ebrahimi    SET(PCRE2_SUPPORT_JIT_SEALLOC IGNORE)
277*22dc650dSSadaf EbrahimiENDIF(${CMAKE_SYSTEM_NAME} MATCHES Linux|NetBSD)
278*22dc650dSSadaf Ebrahimi
279*22dc650dSSadaf EbrahimiSET(PCRE2GREP_SUPPORT_JIT ON CACHE BOOL
280*22dc650dSSadaf Ebrahimi    "Enable use of Just-in-time compiling in pcre2grep.")
281*22dc650dSSadaf Ebrahimi
282*22dc650dSSadaf EbrahimiSET(PCRE2GREP_SUPPORT_CALLOUT ON CACHE BOOL
283*22dc650dSSadaf Ebrahimi    "Enable callout string support in pcre2grep.")
284*22dc650dSSadaf Ebrahimi
285*22dc650dSSadaf EbrahimiSET(PCRE2GREP_SUPPORT_CALLOUT_FORK ON CACHE BOOL
286*22dc650dSSadaf Ebrahimi    "Enable callout string fork support in pcre2grep.")
287*22dc650dSSadaf Ebrahimi
288*22dc650dSSadaf EbrahimiSET(PCRE2_SUPPORT_UNICODE ON CACHE BOOL
289*22dc650dSSadaf Ebrahimi    "Enable support for Unicode and UTF-8/UTF-16/UTF-32 encoding.")
290*22dc650dSSadaf Ebrahimi
291*22dc650dSSadaf EbrahimiSET(PCRE2_SUPPORT_BSR_ANYCRLF OFF CACHE BOOL
292*22dc650dSSadaf Ebrahimi    "ON=Backslash-R matches only LF CR and CRLF, OFF=Backslash-R matches all Unicode Linebreaks")
293*22dc650dSSadaf Ebrahimi
294*22dc650dSSadaf EbrahimiSET(PCRE2_NEVER_BACKSLASH_C OFF CACHE BOOL
295*22dc650dSSadaf Ebrahimi    "If ON, backslash-C (upper case C) is locked out.")
296*22dc650dSSadaf Ebrahimi
297*22dc650dSSadaf EbrahimiSET(PCRE2_SUPPORT_VALGRIND OFF CACHE BOOL
298*22dc650dSSadaf Ebrahimi    "Enable Valgrind support.")
299*22dc650dSSadaf Ebrahimi
300*22dc650dSSadaf EbrahimiOPTION(PCRE2_SHOW_REPORT     "Show the final configuration report" ON)
301*22dc650dSSadaf EbrahimiOPTION(PCRE2_BUILD_PCRE2GREP "Build pcre2grep" ON)
302*22dc650dSSadaf EbrahimiOPTION(PCRE2_BUILD_TESTS     "Build the tests" ON)
303*22dc650dSSadaf Ebrahimi
304*22dc650dSSadaf EbrahimiIF (MINGW)
305*22dc650dSSadaf Ebrahimi  OPTION(NON_STANDARD_LIB_PREFIX
306*22dc650dSSadaf Ebrahimi         "ON=Shared libraries built in mingw will be named pcre2.dll, etc., instead of libpcre2.dll, etc."
307*22dc650dSSadaf Ebrahimi         OFF)
308*22dc650dSSadaf Ebrahimi
309*22dc650dSSadaf Ebrahimi  OPTION(NON_STANDARD_LIB_SUFFIX
310*22dc650dSSadaf Ebrahimi         "ON=Shared libraries built in mingw will be named libpcre2-0.dll, etc., instead of libpcre2.dll, etc."
311*22dc650dSSadaf Ebrahimi         OFF)
312*22dc650dSSadaf EbrahimiENDIF(MINGW)
313*22dc650dSSadaf Ebrahimi
314*22dc650dSSadaf EbrahimiIF(MSVC)
315*22dc650dSSadaf Ebrahimi  OPTION(PCRE2_STATIC_RUNTIME
316*22dc650dSSadaf Ebrahimi	"ON=Compile against the static runtime (/MT)."
317*22dc650dSSadaf Ebrahimi	OFF)
318*22dc650dSSadaf Ebrahimi  OPTION(INSTALL_MSVC_PDB
319*22dc650dSSadaf Ebrahimi         "ON=Install .pdb files built by MSVC, if generated"
320*22dc650dSSadaf Ebrahimi         OFF)
321*22dc650dSSadaf EbrahimiENDIF(MSVC)
322*22dc650dSSadaf Ebrahimi
323*22dc650dSSadaf Ebrahimi# bzip2 lib
324*22dc650dSSadaf EbrahimiIF(BZIP2_FOUND)
325*22dc650dSSadaf Ebrahimi  OPTION (PCRE2_SUPPORT_LIBBZ2 "Enable support for linking pcre2grep with libbz2." ON)
326*22dc650dSSadaf EbrahimiENDIF(BZIP2_FOUND)
327*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_LIBBZ2)
328*22dc650dSSadaf Ebrahimi  INCLUDE_DIRECTORIES(${BZIP2_INCLUDE_DIR})
329*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_LIBBZ2)
330*22dc650dSSadaf Ebrahimi
331*22dc650dSSadaf Ebrahimi# zlib
332*22dc650dSSadaf EbrahimiIF(ZLIB_FOUND)
333*22dc650dSSadaf Ebrahimi  OPTION (PCRE2_SUPPORT_LIBZ "Enable support for linking pcre2grep with libz." ON)
334*22dc650dSSadaf EbrahimiENDIF(ZLIB_FOUND)
335*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_LIBZ)
336*22dc650dSSadaf Ebrahimi  INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
337*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_LIBZ)
338*22dc650dSSadaf Ebrahimi
339*22dc650dSSadaf Ebrahimi# editline lib
340*22dc650dSSadaf EbrahimiIF(EDITLINE_FOUND)
341*22dc650dSSadaf Ebrahimi  OPTION (PCRE2_SUPPORT_LIBEDIT  "Enable support for linking pcre2test with libedit." OFF)
342*22dc650dSSadaf EbrahimiENDIF(EDITLINE_FOUND)
343*22dc650dSSadaf EbrahimiIF(EDITLINE_FOUND)
344*22dc650dSSadaf Ebrahimi  IF(PCRE2_SUPPORT_LIBEDIT)
345*22dc650dSSadaf Ebrahimi    INCLUDE_DIRECTORIES(${EDITLINE_INCLUDE_DIR})
346*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_SUPPORT_LIBEDIT)
347*22dc650dSSadaf EbrahimiELSE(EDITLINE_FOUND)
348*22dc650dSSadaf Ebrahimi  IF(PCRE2_SUPPORT_LIBEDIT)
349*22dc650dSSadaf Ebrahimi    MESSAGE(FATAL_ERROR
350*22dc650dSSadaf Ebrahimi      " libedit not found, set EDITLINE_INCLUDE_DIR to a compatible header\n"
351*22dc650dSSadaf Ebrahimi      " or set Editline_ROOT to a full libedit installed tree, as needed\n"
352*22dc650dSSadaf Ebrahimi      " Might need to enable policy CMP0074 in CMakeLists.txt"
353*22dc650dSSadaf Ebrahimi    )
354*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_SUPPORT_LIBEDIT)
355*22dc650dSSadaf EbrahimiENDIF(EDITLINE_FOUND)
356*22dc650dSSadaf Ebrahimi
357*22dc650dSSadaf Ebrahimi# readline lib
358*22dc650dSSadaf EbrahimiIF(READLINE_FOUND)
359*22dc650dSSadaf Ebrahimi  OPTION (PCRE2_SUPPORT_LIBREADLINE  "Enable support for linking pcre2test with libreadline." ON)
360*22dc650dSSadaf EbrahimiENDIF(READLINE_FOUND)
361*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_LIBREADLINE)
362*22dc650dSSadaf Ebrahimi  INCLUDE_DIRECTORIES(${READLINE_INCLUDE_DIR})
363*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_LIBREADLINE)
364*22dc650dSSadaf Ebrahimi
365*22dc650dSSadaf Ebrahimi# Prepare build configuration
366*22dc650dSSadaf Ebrahimi
367*22dc650dSSadaf EbrahimiIF(NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS)
368*22dc650dSSadaf Ebrahimi        MESSAGE(FATAL_ERROR "At least one of BUILD_SHARED_LIBS or BUILD_STATIC_LIBS must be enabled.")
369*22dc650dSSadaf EbrahimiENDIF(NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS)
370*22dc650dSSadaf Ebrahimi
371*22dc650dSSadaf EbrahimiIF(NOT PCRE2_BUILD_PCRE2_8 AND NOT PCRE2_BUILD_PCRE2_16 AND NOT PCRE2_BUILD_PCRE2_32)
372*22dc650dSSadaf Ebrahimi        MESSAGE(FATAL_ERROR "At least one of PCRE2_BUILD_PCRE2_8, PCRE2_BUILD_PCRE2_16 or PCRE2_BUILD_PCRE2_32 must be enabled")
373*22dc650dSSadaf EbrahimiENDIF(NOT PCRE2_BUILD_PCRE2_8 AND NOT PCRE2_BUILD_PCRE2_16 AND NOT PCRE2_BUILD_PCRE2_32)
374*22dc650dSSadaf Ebrahimi
375*22dc650dSSadaf EbrahimiIF(PCRE2_BUILD_PCRE2_8)
376*22dc650dSSadaf Ebrahimi        SET(SUPPORT_PCRE2_8 1)
377*22dc650dSSadaf EbrahimiENDIF(PCRE2_BUILD_PCRE2_8)
378*22dc650dSSadaf Ebrahimi
379*22dc650dSSadaf EbrahimiIF(PCRE2_BUILD_PCRE2_16)
380*22dc650dSSadaf Ebrahimi        SET(SUPPORT_PCRE2_16 1)
381*22dc650dSSadaf EbrahimiENDIF(PCRE2_BUILD_PCRE2_16)
382*22dc650dSSadaf Ebrahimi
383*22dc650dSSadaf EbrahimiIF(PCRE2_BUILD_PCRE2_32)
384*22dc650dSSadaf Ebrahimi        SET(SUPPORT_PCRE2_32 1)
385*22dc650dSSadaf EbrahimiENDIF(PCRE2_BUILD_PCRE2_32)
386*22dc650dSSadaf Ebrahimi
387*22dc650dSSadaf EbrahimiIF(PCRE2_BUILD_PCRE2GREP AND NOT PCRE2_BUILD_PCRE2_8)
388*22dc650dSSadaf Ebrahimi        MESSAGE(STATUS "** PCRE2_BUILD_PCRE2_8 must be enabled for the pcre2grep program")
389*22dc650dSSadaf Ebrahimi        SET(PCRE2_BUILD_PCRE2GREP OFF)
390*22dc650dSSadaf EbrahimiENDIF(PCRE2_BUILD_PCRE2GREP AND NOT PCRE2_BUILD_PCRE2_8)
391*22dc650dSSadaf Ebrahimi
392*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_LIBREADLINE AND PCRE2_SUPPORT_LIBEDIT)
393*22dc650dSSadaf Ebrahimi        IF(READLINE_FOUND)
394*22dc650dSSadaf Ebrahimi                MESSAGE(FATAL_ERROR
395*22dc650dSSadaf Ebrahimi                  " Only one of the readline compatible libraries can be enabled.\n"
396*22dc650dSSadaf Ebrahimi                  " Disable libreadline with -DPCRE2_SUPPORT_LIBREADLINE=OFF"
397*22dc650dSSadaf Ebrahimi                )
398*22dc650dSSadaf Ebrahimi        ENDIF(READLINE_FOUND)
399*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_LIBREADLINE AND PCRE2_SUPPORT_LIBEDIT)
400*22dc650dSSadaf Ebrahimi
401*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_BSR_ANYCRLF)
402*22dc650dSSadaf Ebrahimi        SET(BSR_ANYCRLF 1)
403*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_BSR_ANYCRLF)
404*22dc650dSSadaf Ebrahimi
405*22dc650dSSadaf EbrahimiIF(PCRE2_NEVER_BACKSLASH_C)
406*22dc650dSSadaf Ebrahimi        SET(NEVER_BACKSLASH_C 1)
407*22dc650dSSadaf EbrahimiENDIF(PCRE2_NEVER_BACKSLASH_C)
408*22dc650dSSadaf Ebrahimi
409*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_UNICODE)
410*22dc650dSSadaf Ebrahimi        SET(SUPPORT_UNICODE 1)
411*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_UNICODE)
412*22dc650dSSadaf Ebrahimi
413*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_JIT)
414*22dc650dSSadaf Ebrahimi	SET(SUPPORT_JIT 1)
415*22dc650dSSadaf Ebrahimi	IF(UNIX)
416*22dc650dSSadaf Ebrahimi		FIND_PACKAGE(Threads REQUIRED)
417*22dc650dSSadaf Ebrahimi		IF(CMAKE_USE_PTHREADS_INIT)
418*22dc650dSSadaf Ebrahimi			SET(REQUIRE_PTHREAD 1)
419*22dc650dSSadaf Ebrahimi		ENDIF(CMAKE_USE_PTHREADS_INIT)
420*22dc650dSSadaf Ebrahimi	ENDIF(UNIX)
421*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_JIT)
422*22dc650dSSadaf Ebrahimi
423*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_JIT_SEALLOC)
424*22dc650dSSadaf Ebrahimi        SET(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
425*22dc650dSSadaf Ebrahimi	CHECK_SYMBOL_EXISTS(mkostemp stdlib.h REQUIRED)
426*22dc650dSSadaf Ebrahimi        UNSET(CMAKE_REQUIRED_DEFINITIONS)
427*22dc650dSSadaf Ebrahimi        IF(${REQUIRED})
428*22dc650dSSadaf Ebrahimi                IF(${CMAKE_SYSTEM_NAME} MATCHES Linux|NetBSD)
429*22dc650dSSadaf Ebrahimi                        ADD_DEFINITIONS(-D_GNU_SOURCE)
430*22dc650dSSadaf Ebrahimi                        SET(SLJIT_PROT_EXECUTABLE_ALLOCATOR 1)
431*22dc650dSSadaf Ebrahimi                ELSE(${CMAKE_SYSTEM_NAME} MATCHES Linux|NetBSD)
432*22dc650dSSadaf Ebrahimi                        MESSAGE(FATAL_ERROR "Your configuration is not supported")
433*22dc650dSSadaf Ebrahimi                ENDIF(${CMAKE_SYSTEM_NAME} MATCHES Linux|NetBSD)
434*22dc650dSSadaf Ebrahimi        ELSE(${REQUIRED})
435*22dc650dSSadaf Ebrahimi                SET(PCRE2_SUPPORT_JIT_SEALLOC OFF)
436*22dc650dSSadaf Ebrahimi        ENDIF(${REQUIRED})
437*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_JIT_SEALLOC)
438*22dc650dSSadaf Ebrahimi
439*22dc650dSSadaf EbrahimiIF(PCRE2GREP_SUPPORT_JIT)
440*22dc650dSSadaf Ebrahimi        SET(SUPPORT_PCRE2GREP_JIT 1)
441*22dc650dSSadaf EbrahimiENDIF(PCRE2GREP_SUPPORT_JIT)
442*22dc650dSSadaf Ebrahimi
443*22dc650dSSadaf EbrahimiIF(PCRE2GREP_SUPPORT_CALLOUT)
444*22dc650dSSadaf Ebrahimi        SET(SUPPORT_PCRE2GREP_CALLOUT 1)
445*22dc650dSSadaf Ebrahimi        IF(PCRE2GREP_SUPPORT_CALLOUT_FORK)
446*22dc650dSSadaf Ebrahimi                SET(SUPPORT_PCRE2GREP_CALLOUT_FORK 1)
447*22dc650dSSadaf Ebrahimi        ENDIF(PCRE2GREP_SUPPORT_CALLOUT_FORK)
448*22dc650dSSadaf EbrahimiENDIF(PCRE2GREP_SUPPORT_CALLOUT)
449*22dc650dSSadaf Ebrahimi
450*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_VALGRIND)
451*22dc650dSSadaf Ebrahimi        SET(SUPPORT_VALGRIND 1)
452*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_VALGRIND)
453*22dc650dSSadaf Ebrahimi
454*22dc650dSSadaf EbrahimiIF(PCRE2_DISABLE_PERCENT_ZT)
455*22dc650dSSadaf Ebrahimi        SET(DISABLE_PERCENT_ZT 1)
456*22dc650dSSadaf EbrahimiENDIF(PCRE2_DISABLE_PERCENT_ZT)
457*22dc650dSSadaf Ebrahimi
458*22dc650dSSadaf Ebrahimi# This next one used to reference ${READLINE_LIBRARY})
459*22dc650dSSadaf Ebrahimi# but I was advised to add the NCURSES test as well, along with
460*22dc650dSSadaf Ebrahimi# some modifications to cmake/FindReadline.cmake which should
461*22dc650dSSadaf Ebrahimi# make it possible to override the default if necessary. PH
462*22dc650dSSadaf Ebrahimi
463*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_LIBREADLINE)
464*22dc650dSSadaf Ebrahimi        SET(SUPPORT_LIBREADLINE 1)
465*22dc650dSSadaf Ebrahimi        SET(PCRE2TEST_LIBS ${READLINE_LIBRARY} ${NCURSES_LIBRARY})
466*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_LIBREADLINE)
467*22dc650dSSadaf Ebrahimi
468*22dc650dSSadaf Ebrahimi# libedit is a plug-compatible alternative to libreadline
469*22dc650dSSadaf Ebrahimi
470*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_LIBEDIT)
471*22dc650dSSadaf Ebrahimi        SET(SUPPORT_LIBEDIT 1)
472*22dc650dSSadaf Ebrahimi        SET(PCRE2TEST_LIBS ${EDITLINE_LIBRARY} ${NCURSES_LIBRARY})
473*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_LIBEDIT)
474*22dc650dSSadaf Ebrahimi
475*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_LIBZ)
476*22dc650dSSadaf Ebrahimi        SET(SUPPORT_LIBZ 1)
477*22dc650dSSadaf Ebrahimi        SET(PCRE2GREP_LIBS ${PCRE2GREP_LIBS} ${ZLIB_LIBRARIES})
478*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_LIBZ)
479*22dc650dSSadaf Ebrahimi
480*22dc650dSSadaf EbrahimiIF(PCRE2_SUPPORT_LIBBZ2)
481*22dc650dSSadaf Ebrahimi        SET(SUPPORT_LIBBZ2 1)
482*22dc650dSSadaf Ebrahimi        SET(PCRE2GREP_LIBS ${PCRE2GREP_LIBS} ${BZIP2_LIBRARIES})
483*22dc650dSSadaf EbrahimiENDIF(PCRE2_SUPPORT_LIBBZ2)
484*22dc650dSSadaf Ebrahimi
485*22dc650dSSadaf EbrahimiSET(NEWLINE_DEFAULT "")
486*22dc650dSSadaf Ebrahimi
487*22dc650dSSadaf EbrahimiIF(PCRE2_NEWLINE STREQUAL "CR")
488*22dc650dSSadaf Ebrahimi        SET(NEWLINE_DEFAULT "1")
489*22dc650dSSadaf EbrahimiENDIF(PCRE2_NEWLINE STREQUAL "CR")
490*22dc650dSSadaf EbrahimiIF(PCRE2_NEWLINE STREQUAL "LF")
491*22dc650dSSadaf Ebrahimi        SET(NEWLINE_DEFAULT "2")
492*22dc650dSSadaf EbrahimiENDIF(PCRE2_NEWLINE STREQUAL "LF")
493*22dc650dSSadaf EbrahimiIF(PCRE2_NEWLINE STREQUAL "CRLF")
494*22dc650dSSadaf Ebrahimi        SET(NEWLINE_DEFAULT "3")
495*22dc650dSSadaf EbrahimiENDIF(PCRE2_NEWLINE STREQUAL "CRLF")
496*22dc650dSSadaf EbrahimiIF(PCRE2_NEWLINE STREQUAL "ANY")
497*22dc650dSSadaf Ebrahimi        SET(NEWLINE_DEFAULT "4")
498*22dc650dSSadaf EbrahimiENDIF(PCRE2_NEWLINE STREQUAL "ANY")
499*22dc650dSSadaf EbrahimiIF(PCRE2_NEWLINE STREQUAL "ANYCRLF")
500*22dc650dSSadaf Ebrahimi        SET(NEWLINE_DEFAULT "5")
501*22dc650dSSadaf EbrahimiENDIF(PCRE2_NEWLINE STREQUAL "ANYCRLF")
502*22dc650dSSadaf EbrahimiIF(PCRE2_NEWLINE STREQUAL "NUL")
503*22dc650dSSadaf Ebrahimi        SET(NEWLINE_DEFAULT "6")
504*22dc650dSSadaf EbrahimiENDIF(PCRE2_NEWLINE STREQUAL "NUL")
505*22dc650dSSadaf Ebrahimi
506*22dc650dSSadaf EbrahimiIF(NEWLINE_DEFAULT STREQUAL "")
507*22dc650dSSadaf Ebrahimi        MESSAGE(FATAL_ERROR "The PCRE2_NEWLINE variable must be set to one of the following values: \"LF\", \"CR\", \"CRLF\", \"ANY\", \"ANYCRLF\".")
508*22dc650dSSadaf EbrahimiENDIF(NEWLINE_DEFAULT STREQUAL "")
509*22dc650dSSadaf Ebrahimi
510*22dc650dSSadaf EbrahimiIF(PCRE2_EBCDIC)
511*22dc650dSSadaf Ebrahimi        SET(EBCDIC 1)
512*22dc650dSSadaf EbrahimiENDIF(PCRE2_EBCDIC)
513*22dc650dSSadaf Ebrahimi
514*22dc650dSSadaf EbrahimiIF(PCRE2_EBCDIC_NL25)
515*22dc650dSSadaf Ebrahimi        SET(EBCDIC 1)
516*22dc650dSSadaf Ebrahimi        SET(EBCDIC_NL25 1)
517*22dc650dSSadaf EbrahimiENDIF(PCRE2_EBCDIC_NL25)
518*22dc650dSSadaf Ebrahimi
519*22dc650dSSadaf Ebrahimi# Output files
520*22dc650dSSadaf Ebrahimi
521*22dc650dSSadaf EbrahimiCONFIGURE_FILE(config-cmake.h.in
522*22dc650dSSadaf Ebrahimi               ${PROJECT_BINARY_DIR}/config.h
523*22dc650dSSadaf Ebrahimi               @ONLY)
524*22dc650dSSadaf Ebrahimi
525*22dc650dSSadaf Ebrahimi# Parse version numbers and date out of configure.ac
526*22dc650dSSadaf Ebrahimi
527*22dc650dSSadaf Ebrahimifile(STRINGS ${PROJECT_SOURCE_DIR}/configure.ac
528*22dc650dSSadaf Ebrahimi  configure_lines
529*22dc650dSSadaf Ebrahimi  LIMIT_COUNT 50 # Read only the first 50 lines of the file
530*22dc650dSSadaf Ebrahimi)
531*22dc650dSSadaf Ebrahimi
532*22dc650dSSadaf Ebrahimiset(SEARCHED_VARIABLES "pcre2_major" "pcre2_minor" "pcre2_prerelease" "pcre2_date"
533*22dc650dSSadaf Ebrahimi  "libpcre2_posix_version" "libpcre2_8_version" "libpcre2_16_version" "libpcre2_32_version")
534*22dc650dSSadaf Ebrahimiforeach(configure_line ${configure_lines})
535*22dc650dSSadaf Ebrahimi    foreach(_substitution_variable ${SEARCHED_VARIABLES})
536*22dc650dSSadaf Ebrahimi        string(TOUPPER ${_substitution_variable} _substitution_variable_upper)
537*22dc650dSSadaf Ebrahimi        if (NOT ${_substitution_variable_upper})
538*22dc650dSSadaf Ebrahimi            string(REGEX MATCH "m4_define\\(${_substitution_variable}, *\\[(.*)\\]" MATCHED_STRING ${configure_line})
539*22dc650dSSadaf Ebrahimi            if (CMAKE_MATCH_1)
540*22dc650dSSadaf Ebrahimi                set(${_substitution_variable_upper} ${CMAKE_MATCH_1})
541*22dc650dSSadaf Ebrahimi            endif()
542*22dc650dSSadaf Ebrahimi        endif()
543*22dc650dSSadaf Ebrahimi    endforeach()
544*22dc650dSSadaf Ebrahimiendforeach()
545*22dc650dSSadaf Ebrahimi
546*22dc650dSSadaf Ebrahimimacro(PARSE_LIB_VERSION VARIABLE_PREFIX)
547*22dc650dSSadaf Ebrahimi  string(REPLACE ":" ";" ${VARIABLE_PREFIX}_VERSION_LIST ${${VARIABLE_PREFIX}_VERSION})
548*22dc650dSSadaf Ebrahimi  list(GET ${VARIABLE_PREFIX}_VERSION_LIST 0 ${VARIABLE_PREFIX}_VERSION_CURRENT)
549*22dc650dSSadaf Ebrahimi  list(GET ${VARIABLE_PREFIX}_VERSION_LIST 1 ${VARIABLE_PREFIX}_VERSION_REVISION)
550*22dc650dSSadaf Ebrahimi  list(GET ${VARIABLE_PREFIX}_VERSION_LIST 2 ${VARIABLE_PREFIX}_VERSION_AGE)
551*22dc650dSSadaf Ebrahimi
552*22dc650dSSadaf Ebrahimi  math(EXPR ${VARIABLE_PREFIX}_SOVERSION "${${VARIABLE_PREFIX}_VERSION_CURRENT} - ${${VARIABLE_PREFIX}_VERSION_AGE}")
553*22dc650dSSadaf Ebrahimi  math(EXPR ${VARIABLE_PREFIX}_MACHO_COMPATIBILITY_VERSION "${${VARIABLE_PREFIX}_VERSION_CURRENT} + 1")
554*22dc650dSSadaf Ebrahimi  math(EXPR ${VARIABLE_PREFIX}_MACHO_CURRENT_VERSION "${${VARIABLE_PREFIX}_VERSION_CURRENT} + 1")
555*22dc650dSSadaf Ebrahimi  set(${VARIABLE_PREFIX}_MACHO_CURRENT_VERSION "${${VARIABLE_PREFIX}_MACHO_CURRENT_VERSION}.${${VARIABLE_PREFIX}_VERSION_REVISION}}")
556*22dc650dSSadaf Ebrahimi  set(${VARIABLE_PREFIX}_VERSION "${${VARIABLE_PREFIX}_SOVERSION}.${${VARIABLE_PREFIX}_VERSION_AGE}.${${VARIABLE_PREFIX}_VERSION_REVISION}")
557*22dc650dSSadaf Ebrahimiendmacro()
558*22dc650dSSadaf Ebrahimi
559*22dc650dSSadaf EbrahimiPARSE_LIB_VERSION(LIBPCRE2_POSIX)
560*22dc650dSSadaf EbrahimiPARSE_LIB_VERSION(LIBPCRE2_8)
561*22dc650dSSadaf EbrahimiPARSE_LIB_VERSION(LIBPCRE2_16)
562*22dc650dSSadaf EbrahimiPARSE_LIB_VERSION(LIBPCRE2_32)
563*22dc650dSSadaf Ebrahimi
564*22dc650dSSadaf EbrahimiCONFIGURE_FILE(src/pcre2.h.in
565*22dc650dSSadaf Ebrahimi               ${PROJECT_BINARY_DIR}/pcre2.h
566*22dc650dSSadaf Ebrahimi               @ONLY)
567*22dc650dSSadaf Ebrahimi
568*22dc650dSSadaf Ebrahimi# Make sure to not link debug libs
569*22dc650dSSadaf Ebrahimi# against release libs and vice versa
570*22dc650dSSadaf EbrahimiIF(WIN32)
571*22dc650dSSadaf Ebrahimi  SET(CMAKE_DEBUG_POSTFIX "d")
572*22dc650dSSadaf EbrahimiENDIF(WIN32)
573*22dc650dSSadaf Ebrahimi
574*22dc650dSSadaf Ebrahimi# Character table generation
575*22dc650dSSadaf Ebrahimi
576*22dc650dSSadaf EbrahimiOPTION(PCRE2_REBUILD_CHARTABLES "Rebuild char tables" OFF)
577*22dc650dSSadaf EbrahimiIF(PCRE2_REBUILD_CHARTABLES)
578*22dc650dSSadaf Ebrahimi  ADD_EXECUTABLE(pcre2_dftables src/pcre2_dftables.c)
579*22dc650dSSadaf Ebrahimi  ADD_CUSTOM_COMMAND(
580*22dc650dSSadaf Ebrahimi    COMMENT "Generating character tables (pcre2_chartables.c) for current locale"
581*22dc650dSSadaf Ebrahimi    DEPENDS pcre2_dftables
582*22dc650dSSadaf Ebrahimi    COMMAND pcre2_dftables
583*22dc650dSSadaf Ebrahimi    ARGS        ${PROJECT_BINARY_DIR}/pcre2_chartables.c
584*22dc650dSSadaf Ebrahimi    OUTPUT      ${PROJECT_BINARY_DIR}/pcre2_chartables.c
585*22dc650dSSadaf Ebrahimi  )
586*22dc650dSSadaf EbrahimiELSE(PCRE2_REBUILD_CHARTABLES)
587*22dc650dSSadaf Ebrahimi  CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/src/pcre2_chartables.c.dist
588*22dc650dSSadaf Ebrahimi                    ${PROJECT_BINARY_DIR}/pcre2_chartables.c
589*22dc650dSSadaf Ebrahimi                    COPYONLY)
590*22dc650dSSadaf EbrahimiENDIF(PCRE2_REBUILD_CHARTABLES)
591*22dc650dSSadaf Ebrahimi
592*22dc650dSSadaf Ebrahimi# Source code
593*22dc650dSSadaf Ebrahimi
594*22dc650dSSadaf EbrahimiSET(PCRE2_HEADERS ${PROJECT_BINARY_DIR}/pcre2.h)
595*22dc650dSSadaf Ebrahimi
596*22dc650dSSadaf EbrahimiSET(PCRE2_SOURCES
597*22dc650dSSadaf Ebrahimi  src/pcre2_auto_possess.c
598*22dc650dSSadaf Ebrahimi  ${PROJECT_BINARY_DIR}/pcre2_chartables.c
599*22dc650dSSadaf Ebrahimi  src/pcre2_chkdint.c
600*22dc650dSSadaf Ebrahimi  src/pcre2_compile.c
601*22dc650dSSadaf Ebrahimi  src/pcre2_config.c
602*22dc650dSSadaf Ebrahimi  src/pcre2_context.c
603*22dc650dSSadaf Ebrahimi  src/pcre2_convert.c
604*22dc650dSSadaf Ebrahimi  src/pcre2_dfa_match.c
605*22dc650dSSadaf Ebrahimi  src/pcre2_error.c
606*22dc650dSSadaf Ebrahimi  src/pcre2_extuni.c
607*22dc650dSSadaf Ebrahimi  src/pcre2_find_bracket.c
608*22dc650dSSadaf Ebrahimi  src/pcre2_jit_compile.c
609*22dc650dSSadaf Ebrahimi  src/pcre2_maketables.c
610*22dc650dSSadaf Ebrahimi  src/pcre2_match.c
611*22dc650dSSadaf Ebrahimi  src/pcre2_match_data.c
612*22dc650dSSadaf Ebrahimi  src/pcre2_newline.c
613*22dc650dSSadaf Ebrahimi  src/pcre2_ord2utf.c
614*22dc650dSSadaf Ebrahimi  src/pcre2_pattern_info.c
615*22dc650dSSadaf Ebrahimi  src/pcre2_script_run.c
616*22dc650dSSadaf Ebrahimi  src/pcre2_serialize.c
617*22dc650dSSadaf Ebrahimi  src/pcre2_string_utils.c
618*22dc650dSSadaf Ebrahimi  src/pcre2_study.c
619*22dc650dSSadaf Ebrahimi  src/pcre2_substitute.c
620*22dc650dSSadaf Ebrahimi  src/pcre2_substring.c
621*22dc650dSSadaf Ebrahimi  src/pcre2_tables.c
622*22dc650dSSadaf Ebrahimi  src/pcre2_ucd.c
623*22dc650dSSadaf Ebrahimi  src/pcre2_valid_utf.c
624*22dc650dSSadaf Ebrahimi  src/pcre2_xclass.c
625*22dc650dSSadaf Ebrahimi)
626*22dc650dSSadaf Ebrahimi
627*22dc650dSSadaf EbrahimiSET(PCRE2POSIX_HEADERS src/pcre2posix.h)
628*22dc650dSSadaf EbrahimiSET(PCRE2POSIX_SOURCES src/pcre2posix.c)
629*22dc650dSSadaf Ebrahimi
630*22dc650dSSadaf EbrahimiIF(MINGW AND BUILD_SHARED_LIBS)
631*22dc650dSSadaf Ebrahimi  IF (EXISTS ${PROJECT_SOURCE_DIR}/pcre2.rc)
632*22dc650dSSadaf Ebrahimi    ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/pcre2.o
633*22dc650dSSadaf Ebrahimi      PRE-LINK
634*22dc650dSSadaf Ebrahimi      COMMAND windres ARGS pcre2.rc pcre2.o
635*22dc650dSSadaf Ebrahimi      WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
636*22dc650dSSadaf Ebrahimi      COMMENT Using pcre2 coff info in mingw build)
637*22dc650dSSadaf Ebrahimi    SET(PCRE2_SOURCES ${PCRE2_SOURCES} ${PROJECT_SOURCE_DIR}/pcre2.o)
638*22dc650dSSadaf Ebrahimi  ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/pcre2.rc)
639*22dc650dSSadaf Ebrahimi
640*22dc650dSSadaf Ebrahimi  IF (EXISTS ${PROJECT_SOURCE_DIR}/pcre2posix.rc)
641*22dc650dSSadaf Ebrahimi    ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/pcre2posix.o
642*22dc650dSSadaf Ebrahimi      PRE-LINK
643*22dc650dSSadaf Ebrahimi      COMMAND windres ARGS pcre2posix.rc pcre2posix.o
644*22dc650dSSadaf Ebrahimi      WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
645*22dc650dSSadaf Ebrahimi      COMMENT Using pcre2posix coff info in mingw build)
646*22dc650dSSadaf Ebrahimi    SET(PCRE2POSIX_SOURCES ${PCRE2POSIX_SOURCES} ${PROJECT_SOURCE_DIR}/pcre2posix.o)
647*22dc650dSSadaf Ebrahimi  ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/pcre2posix.rc)
648*22dc650dSSadaf EbrahimiENDIF(MINGW AND BUILD_SHARED_LIBS)
649*22dc650dSSadaf Ebrahimi
650*22dc650dSSadaf EbrahimiIF(MSVC AND BUILD_SHARED_LIBS)
651*22dc650dSSadaf Ebrahimi  SET(dll_pdb_files ${PROJECT_BINARY_DIR}/pcre2-posix.pdb ${dll_pdb_files})
652*22dc650dSSadaf Ebrahimi  SET(dll_pdb_debug_files ${PROJECT_BINARY_DIR}/pcre2-posixd.pdb ${dll_pdb_debug_files})
653*22dc650dSSadaf Ebrahimi  IF (EXISTS ${PROJECT_SOURCE_DIR}/pcre2.rc)
654*22dc650dSSadaf Ebrahimi    SET(PCRE2_SOURCES ${PCRE2_SOURCES} pcre2.rc)
655*22dc650dSSadaf Ebrahimi  ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/pcre2.rc)
656*22dc650dSSadaf Ebrahimi
657*22dc650dSSadaf Ebrahimi  IF (EXISTS ${PROJECT_SOURCE_DIR}/pcre2posix.rc)
658*22dc650dSSadaf Ebrahimi    SET(PCRE2POSIX_SOURCES ${PCRE2POSIX_SOURCES} pcre2posix.rc)
659*22dc650dSSadaf Ebrahimi  ENDIF (EXISTS ${PROJECT_SOURCE_DIR}/pcre2posix.rc)
660*22dc650dSSadaf EbrahimiENDIF(MSVC AND BUILD_SHARED_LIBS)
661*22dc650dSSadaf Ebrahimi
662*22dc650dSSadaf Ebrahimi# Fix static compilation with MSVC: https://bugs.exim.org/show_bug.cgi?id=1681
663*22dc650dSSadaf Ebrahimi# This code was taken from the CMake wiki, not from WebM.
664*22dc650dSSadaf Ebrahimi
665*22dc650dSSadaf EbrahimiIF(MSVC AND PCRE2_STATIC_RUNTIME)
666*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "** MSVC and PCRE2_STATIC_RUNTIME: modifying compiler flags to use static runtime library")
667*22dc650dSSadaf Ebrahimi  foreach(flag_var
668*22dc650dSSadaf Ebrahimi          CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
669*22dc650dSSadaf Ebrahimi          CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
670*22dc650dSSadaf Ebrahimi    string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
671*22dc650dSSadaf Ebrahimi  endforeach()
672*22dc650dSSadaf EbrahimiENDIF(MSVC AND PCRE2_STATIC_RUNTIME)
673*22dc650dSSadaf Ebrahimi
674*22dc650dSSadaf Ebrahimi# Build setup
675*22dc650dSSadaf Ebrahimi
676*22dc650dSSadaf EbrahimiADD_DEFINITIONS(-DHAVE_CONFIG_H)
677*22dc650dSSadaf Ebrahimi
678*22dc650dSSadaf EbrahimiIF(MSVC)
679*22dc650dSSadaf Ebrahimi  ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS)
680*22dc650dSSadaf EbrahimiENDIF(MSVC)
681*22dc650dSSadaf Ebrahimi
682*22dc650dSSadaf EbrahimiSET(CMAKE_INCLUDE_CURRENT_DIR 1)
683*22dc650dSSadaf Ebrahimi
684*22dc650dSSadaf Ebrahimiset(targets)
685*22dc650dSSadaf Ebrahimi
686*22dc650dSSadaf Ebrahimi# 8-bit library
687*22dc650dSSadaf Ebrahimi
688*22dc650dSSadaf EbrahimiIF(PCRE2_BUILD_PCRE2_8)
689*22dc650dSSadaf Ebrahimi  IF(BUILD_STATIC_LIBS)
690*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-8-static STATIC ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
691*22dc650dSSadaf Ebrahimi    SET_TARGET_PROPERTIES(pcre2-8-static PROPERTIES
692*22dc650dSSadaf Ebrahimi      COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
693*22dc650dSSadaf Ebrahimi      MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_8_MACHO_COMPATIBILITY_VERSION}"
694*22dc650dSSadaf Ebrahimi      MACHO_CURRENT_VERSION "${LIBPCRE2_8_MACHO_CURRENT_VERSION}"
695*22dc650dSSadaf Ebrahimi      VERSION ${LIBPCRE2_8_VERSION}
696*22dc650dSSadaf Ebrahimi      SOVERSION ${LIBPCRE2_8_SOVERSION})
697*22dc650dSSadaf Ebrahimi    TARGET_COMPILE_DEFINITIONS(pcre2-8-static PUBLIC PCRE2_STATIC)
698*22dc650dSSadaf Ebrahimi    TARGET_INCLUDE_DIRECTORIES(pcre2-8-static PUBLIC ${PROJECT_BINARY_DIR})
699*22dc650dSSadaf Ebrahimi    IF(REQUIRE_PTHREAD)
700*22dc650dSSadaf Ebrahimi        TARGET_LINK_LIBRARIES(pcre2-8-static Threads::Threads)
701*22dc650dSSadaf Ebrahimi    ENDIF(REQUIRE_PTHREAD)
702*22dc650dSSadaf Ebrahimi    SET(targets ${targets} pcre2-8-static)
703*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-posix-static STATIC ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES})
704*22dc650dSSadaf Ebrahimi    SET_TARGET_PROPERTIES(pcre2-posix-static PROPERTIES
705*22dc650dSSadaf Ebrahimi      COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
706*22dc650dSSadaf Ebrahimi      MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_POSIX_MACHO_COMPATIBILITY_VERSION}"
707*22dc650dSSadaf Ebrahimi      MACHO_CURRENT_VERSION "${LIBPCRE2_POSIX_MACHO_CURRENT_VERSION}"
708*22dc650dSSadaf Ebrahimi      VERSION ${LIBPCRE2_POSIX_VERSION}
709*22dc650dSSadaf Ebrahimi      SOVERSION ${LIBPCRE2_POSIX_SOVERSION})
710*22dc650dSSadaf Ebrahimi    TARGET_LINK_LIBRARIES(pcre2-posix-static pcre2-8-static)
711*22dc650dSSadaf Ebrahimi    TARGET_INCLUDE_DIRECTORIES(pcre2-posix-static PUBLIC ${PROJECT_SOURCE_DIR}/src)
712*22dc650dSSadaf Ebrahimi    set(targets ${targets} pcre2-posix-static)
713*22dc650dSSadaf Ebrahimi
714*22dc650dSSadaf Ebrahimi    IF(MSVC)
715*22dc650dSSadaf Ebrahimi      SET_TARGET_PROPERTIES(pcre2-8-static PROPERTIES OUTPUT_NAME pcre2-8-static)
716*22dc650dSSadaf Ebrahimi      SET_TARGET_PROPERTIES(pcre2-posix-static PROPERTIES OUTPUT_NAME pcre2-posix-static)
717*22dc650dSSadaf Ebrahimi    ELSE(MSVC)
718*22dc650dSSadaf Ebrahimi      SET_TARGET_PROPERTIES(pcre2-8-static PROPERTIES OUTPUT_NAME pcre2-8)
719*22dc650dSSadaf Ebrahimi      SET_TARGET_PROPERTIES(pcre2-posix-static PROPERTIES OUTPUT_NAME pcre2-posix)
720*22dc650dSSadaf Ebrahimi    ENDIF(MSVC)
721*22dc650dSSadaf Ebrahimi    IF(PCRE2_STATIC_PIC)
722*22dc650dSSadaf Ebrahimi      SET_TARGET_PROPERTIES(pcre2-8-static pcre2-posix-static PROPERTIES POSITION_INDEPENDENT_CODE 1)
723*22dc650dSSadaf Ebrahimi    ENDIF(PCRE2_STATIC_PIC)
724*22dc650dSSadaf Ebrahimi  ENDIF(BUILD_STATIC_LIBS)
725*22dc650dSSadaf Ebrahimi
726*22dc650dSSadaf Ebrahimi  IF(BUILD_SHARED_LIBS)
727*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-8-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
728*22dc650dSSadaf Ebrahimi    TARGET_INCLUDE_DIRECTORIES(pcre2-8-shared PUBLIC ${PROJECT_BINARY_DIR})
729*22dc650dSSadaf Ebrahimi    SET_TARGET_PROPERTIES(pcre2-8-shared PROPERTIES
730*22dc650dSSadaf Ebrahimi      COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
731*22dc650dSSadaf Ebrahimi      MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_8_MACHO_COMPATIBILITY_VERSION}"
732*22dc650dSSadaf Ebrahimi      MACHO_CURRENT_VERSION "${LIBPCRE2_8_MACHO_CURRENT_VERSION}"
733*22dc650dSSadaf Ebrahimi      VERSION ${LIBPCRE2_8_VERSION}
734*22dc650dSSadaf Ebrahimi      SOVERSION ${LIBPCRE2_8_SOVERSION}
735*22dc650dSSadaf Ebrahimi      OUTPUT_NAME pcre2-8)
736*22dc650dSSadaf Ebrahimi    IF(REQUIRE_PTHREAD)
737*22dc650dSSadaf Ebrahimi        TARGET_LINK_LIBRARIES(pcre2-8-shared Threads::Threads)
738*22dc650dSSadaf Ebrahimi    ENDIF(REQUIRE_PTHREAD)
739*22dc650dSSadaf Ebrahimi    set(targets ${targets} pcre2-8-shared)
740*22dc650dSSadaf Ebrahimi
741*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-posix-shared SHARED ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES})
742*22dc650dSSadaf Ebrahimi    TARGET_INCLUDE_DIRECTORIES(pcre2-posix-shared PUBLIC ${PROJECT_SOURCE_DIR}/src)
743*22dc650dSSadaf Ebrahimi    SET_TARGET_PROPERTIES(pcre2-posix-shared PROPERTIES
744*22dc650dSSadaf Ebrahimi      COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
745*22dc650dSSadaf Ebrahimi      MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_POSIX_MACHO_COMPATIBILITY_VERSION}"
746*22dc650dSSadaf Ebrahimi      MACHO_CURRENT_VERSION "${LIBPCRE2_POSIX_MACHO_CURRENT_VERSION}"
747*22dc650dSSadaf Ebrahimi      VERSION ${LIBPCRE2_POSIX_VERSION}
748*22dc650dSSadaf Ebrahimi      SOVERSION ${LIBPCRE2_POSIX_SOVERSION}
749*22dc650dSSadaf Ebrahimi      OUTPUT_NAME pcre2-posix)
750*22dc650dSSadaf Ebrahimi    set(PCRE2POSIX_CFLAG "-DPCRE2POSIX_SHARED")
751*22dc650dSSadaf Ebrahimi    TARGET_COMPILE_DEFINITIONS(pcre2-posix-shared PUBLIC ${PCRE2POSIX_CFLAG})
752*22dc650dSSadaf Ebrahimi    TARGET_LINK_LIBRARIES(pcre2-posix-shared pcre2-8-shared)
753*22dc650dSSadaf Ebrahimi    SET(targets ${targets} pcre2-posix-shared)
754*22dc650dSSadaf Ebrahimi    SET(dll_pdb_files ${PROJECT_BINARY_DIR}/pcre2-8.pdb ${dll_pdb_files})
755*22dc650dSSadaf Ebrahimi    SET(dll_pdb_debug_files ${PROJECT_BINARY_DIR}/pcre2-8d.pdb ${dll_pdb_debug_files})
756*22dc650dSSadaf Ebrahimi
757*22dc650dSSadaf Ebrahimi    IF(MINGW)
758*22dc650dSSadaf Ebrahimi      IF(NON_STANDARD_LIB_PREFIX)
759*22dc650dSSadaf Ebrahimi        SET_TARGET_PROPERTIES(pcre2-8-shared pcre2-posix-shared PROPERTIES PREFIX "")
760*22dc650dSSadaf Ebrahimi      ENDIF(NON_STANDARD_LIB_PREFIX)
761*22dc650dSSadaf Ebrahimi      IF(NON_STANDARD_LIB_SUFFIX)
762*22dc650dSSadaf Ebrahimi        SET_TARGET_PROPERTIES(pcre2-8-shared pcre2-posix-shared PROPERTIES SUFFIX "-0.dll")
763*22dc650dSSadaf Ebrahimi      ENDIF(NON_STANDARD_LIB_SUFFIX)
764*22dc650dSSadaf Ebrahimi    ENDIF(MINGW)
765*22dc650dSSadaf Ebrahimi  ENDIF(BUILD_SHARED_LIBS)
766*22dc650dSSadaf Ebrahimi
767*22dc650dSSadaf Ebrahimi  IF(BUILD_STATIC_LIBS)
768*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-8 ALIAS pcre2-8-static)
769*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-posix ALIAS pcre2-posix-static)
770*22dc650dSSadaf Ebrahimi  ELSE(BUILD_STATIC_LIBS)
771*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-8 ALIAS pcre2-8-shared)
772*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-posix ALIAS pcre2-posix-shared)
773*22dc650dSSadaf Ebrahimi  ENDIF(BUILD_STATIC_LIBS)
774*22dc650dSSadaf EbrahimiENDIF(PCRE2_BUILD_PCRE2_8)
775*22dc650dSSadaf Ebrahimi
776*22dc650dSSadaf Ebrahimi# 16-bit library
777*22dc650dSSadaf Ebrahimi
778*22dc650dSSadaf EbrahimiIF(PCRE2_BUILD_PCRE2_16)
779*22dc650dSSadaf Ebrahimi  IF(BUILD_STATIC_LIBS)
780*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-16-static STATIC ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
781*22dc650dSSadaf Ebrahimi    TARGET_INCLUDE_DIRECTORIES(pcre2-16-static PUBLIC ${PROJECT_BINARY_DIR})
782*22dc650dSSadaf Ebrahimi    SET_TARGET_PROPERTIES(pcre2-16-static PROPERTIES UNITY_BUILD OFF
783*22dc650dSSadaf Ebrahimi      COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16
784*22dc650dSSadaf Ebrahimi      MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}"
785*22dc650dSSadaf Ebrahimi      MACHO_CURRENT_VERSION "${LIBPCRE2_32_MACHO_CURRENT_VERSION}"
786*22dc650dSSadaf Ebrahimi      VERSION ${LIBPCRE2_16_VERSION}
787*22dc650dSSadaf Ebrahimi      SOVERSION ${LIBPCRE2_16_SOVERSION})
788*22dc650dSSadaf Ebrahimi    TARGET_COMPILE_DEFINITIONS(pcre2-16-static PUBLIC PCRE2_STATIC)
789*22dc650dSSadaf Ebrahimi    IF(REQUIRE_PTHREAD)
790*22dc650dSSadaf Ebrahimi      TARGET_LINK_LIBRARIES(pcre2-16-static Threads::Threads)
791*22dc650dSSadaf Ebrahimi    ENDIF(REQUIRE_PTHREAD)
792*22dc650dSSadaf Ebrahimi    set(targets ${targets} pcre2-16-static)
793*22dc650dSSadaf Ebrahimi
794*22dc650dSSadaf Ebrahimi    IF(MSVC)
795*22dc650dSSadaf Ebrahimi      SET_TARGET_PROPERTIES(pcre2-16-static PROPERTIES OUTPUT_NAME pcre2-16-static)
796*22dc650dSSadaf Ebrahimi    ELSE(MSVC)
797*22dc650dSSadaf Ebrahimi      SET_TARGET_PROPERTIES(pcre2-16-static PROPERTIES OUTPUT_NAME pcre2-16)
798*22dc650dSSadaf Ebrahimi    ENDIF(MSVC)
799*22dc650dSSadaf Ebrahimi    IF(PCRE2_STATIC_PIC)
800*22dc650dSSadaf Ebrahimi      SET_TARGET_PROPERTIES(pcre2-16-static PROPERTIES POSITION_INDEPENDENT_CODE 1)
801*22dc650dSSadaf Ebrahimi    ENDIF(PCRE2_STATIC_PIC)
802*22dc650dSSadaf Ebrahimi  ENDIF(BUILD_STATIC_LIBS)
803*22dc650dSSadaf Ebrahimi
804*22dc650dSSadaf Ebrahimi  IF(BUILD_SHARED_LIBS)
805*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-16-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
806*22dc650dSSadaf Ebrahimi    TARGET_INCLUDE_DIRECTORIES(pcre2-16-shared PUBLIC ${PROJECT_BINARY_DIR})
807*22dc650dSSadaf Ebrahimi    SET_TARGET_PROPERTIES(pcre2-16-shared PROPERTIES UNITY_BUILD OFF
808*22dc650dSSadaf Ebrahimi      COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16
809*22dc650dSSadaf Ebrahimi      MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}"
810*22dc650dSSadaf Ebrahimi      MACHO_CURRENT_VERSION "${LIBPCRE2_32_MACHO_CURRENT_VERSION}"
811*22dc650dSSadaf Ebrahimi      VERSION ${LIBPCRE2_16_VERSION}
812*22dc650dSSadaf Ebrahimi      SOVERSION ${LIBPCRE2_16_SOVERSION}
813*22dc650dSSadaf Ebrahimi      OUTPUT_NAME pcre2-16)
814*22dc650dSSadaf Ebrahimi    IF(REQUIRE_PTHREAD)
815*22dc650dSSadaf Ebrahimi      TARGET_LINK_LIBRARIES(pcre2-16-shared Threads::Threads)
816*22dc650dSSadaf Ebrahimi    ENDIF(REQUIRE_PTHREAD)
817*22dc650dSSadaf Ebrahimi    set(targets ${targets} pcre2-16-shared)
818*22dc650dSSadaf Ebrahimi    SET(dll_pdb_files ${PROJECT_BINARY_DIR}/pcre2-16.pdb ${dll_pdb_files})
819*22dc650dSSadaf Ebrahimi    SET(dll_pdb_debug_files ${PROJECT_BINARY_DIR}/pcre2-16d.pdb ${dll_pdb_debug_files})
820*22dc650dSSadaf Ebrahimi
821*22dc650dSSadaf Ebrahimi    IF(MINGW)
822*22dc650dSSadaf Ebrahimi      IF(NON_STANDARD_LIB_PREFIX)
823*22dc650dSSadaf Ebrahimi        SET_TARGET_PROPERTIES(pcre2-16-shared PROPERTIES PREFIX "")
824*22dc650dSSadaf Ebrahimi      ENDIF(NON_STANDARD_LIB_PREFIX)
825*22dc650dSSadaf Ebrahimi      IF(NON_STANDARD_LIB_SUFFIX)
826*22dc650dSSadaf Ebrahimi        SET_TARGET_PROPERTIES(pcre2-16-shared PROPERTIES SUFFIX "-0.dll")
827*22dc650dSSadaf Ebrahimi      ENDIF(NON_STANDARD_LIB_SUFFIX)
828*22dc650dSSadaf Ebrahimi    ENDIF(MINGW)
829*22dc650dSSadaf Ebrahimi  ENDIF(BUILD_SHARED_LIBS)
830*22dc650dSSadaf Ebrahimi
831*22dc650dSSadaf Ebrahimi  IF(BUILD_STATIC_LIBS)
832*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-16 ALIAS pcre2-16-static)
833*22dc650dSSadaf Ebrahimi  ELSE(BUILD_STATIC_LIBS)
834*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-16 ALIAS pcre2-16-shared)
835*22dc650dSSadaf Ebrahimi  ENDIF(BUILD_STATIC_LIBS)
836*22dc650dSSadaf EbrahimiENDIF(PCRE2_BUILD_PCRE2_16)
837*22dc650dSSadaf Ebrahimi
838*22dc650dSSadaf Ebrahimi# 32-bit library
839*22dc650dSSadaf Ebrahimi
840*22dc650dSSadaf EbrahimiIF(PCRE2_BUILD_PCRE2_32)
841*22dc650dSSadaf Ebrahimi  IF(BUILD_STATIC_LIBS)
842*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-32-static STATIC ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
843*22dc650dSSadaf Ebrahimi    TARGET_INCLUDE_DIRECTORIES(pcre2-32-static PUBLIC ${PROJECT_BINARY_DIR})
844*22dc650dSSadaf Ebrahimi    SET_TARGET_PROPERTIES(pcre2-32-static PROPERTIES UNITY_BUILD OFF
845*22dc650dSSadaf Ebrahimi      COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32
846*22dc650dSSadaf Ebrahimi      MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}"
847*22dc650dSSadaf Ebrahimi      MACHO_CURRENT_VERSION "${LIBPCRE2_32_MACHO_CURRENT_VERSION}"
848*22dc650dSSadaf Ebrahimi      VERSION ${LIBPCRE2_32_VERSION}
849*22dc650dSSadaf Ebrahimi      SOVERSION ${LIBPCRE2_32_SOVERSION})
850*22dc650dSSadaf Ebrahimi    TARGET_COMPILE_DEFINITIONS(pcre2-32-static PUBLIC PCRE2_STATIC)
851*22dc650dSSadaf Ebrahimi    IF(REQUIRE_PTHREAD)
852*22dc650dSSadaf Ebrahimi      TARGET_LINK_LIBRARIES(pcre2-32-static Threads::Threads)
853*22dc650dSSadaf Ebrahimi    ENDIF(REQUIRE_PTHREAD)
854*22dc650dSSadaf Ebrahimi    set(targets ${targets} pcre2-32-static)
855*22dc650dSSadaf Ebrahimi
856*22dc650dSSadaf Ebrahimi    IF(MSVC)
857*22dc650dSSadaf Ebrahimi      SET_TARGET_PROPERTIES(pcre2-32-static PROPERTIES OUTPUT_NAME pcre2-32-static)
858*22dc650dSSadaf Ebrahimi    ELSE(MSVC)
859*22dc650dSSadaf Ebrahimi      SET_TARGET_PROPERTIES(pcre2-32-static PROPERTIES OUTPUT_NAME pcre2-32)
860*22dc650dSSadaf Ebrahimi    ENDIF(MSVC)
861*22dc650dSSadaf Ebrahimi    IF(PCRE2_STATIC_PIC)
862*22dc650dSSadaf Ebrahimi      SET_TARGET_PROPERTIES(pcre2-32-static PROPERTIES POSITION_INDEPENDENT_CODE 1)
863*22dc650dSSadaf Ebrahimi    ENDIF(PCRE2_STATIC_PIC)
864*22dc650dSSadaf Ebrahimi  ENDIF(BUILD_STATIC_LIBS)
865*22dc650dSSadaf Ebrahimi
866*22dc650dSSadaf Ebrahimi  IF(BUILD_SHARED_LIBS)
867*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-32-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
868*22dc650dSSadaf Ebrahimi    TARGET_INCLUDE_DIRECTORIES(pcre2-32-shared PUBLIC ${PROJECT_BINARY_DIR})
869*22dc650dSSadaf Ebrahimi    SET_TARGET_PROPERTIES(pcre2-32-shared PROPERTIES UNITY_BUILD OFF
870*22dc650dSSadaf Ebrahimi      COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32
871*22dc650dSSadaf Ebrahimi      MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}"
872*22dc650dSSadaf Ebrahimi      MACHO_CURRENT_VERSION "${LIBPCRE2_32_MACHO_CURRENT_VERSION}"
873*22dc650dSSadaf Ebrahimi      VERSION ${LIBPCRE2_32_VERSION}
874*22dc650dSSadaf Ebrahimi      SOVERSION ${LIBPCRE2_32_SOVERSION}
875*22dc650dSSadaf Ebrahimi      OUTPUT_NAME pcre2-32)
876*22dc650dSSadaf Ebrahimi    IF(REQUIRE_PTHREAD)
877*22dc650dSSadaf Ebrahimi      TARGET_LINK_LIBRARIES(pcre2-32-shared Threads::Threads)
878*22dc650dSSadaf Ebrahimi    ENDIF(REQUIRE_PTHREAD)
879*22dc650dSSadaf Ebrahimi    set(targets ${targets} pcre2-32-shared)
880*22dc650dSSadaf Ebrahimi    SET(dll_pdb_files ${PROJECT_BINARY_DIR}/pcre2-32.pdb ${dll_pdb_files})
881*22dc650dSSadaf Ebrahimi    SET(dll_pdb_debug_files ${PROJECT_BINARY_DIR}/pcre2-32d.pdb ${dll_pdb_debug_files})
882*22dc650dSSadaf Ebrahimi
883*22dc650dSSadaf Ebrahimi    IF(MINGW)
884*22dc650dSSadaf Ebrahimi      IF(NON_STANDARD_LIB_PREFIX)
885*22dc650dSSadaf Ebrahimi        SET_TARGET_PROPERTIES(pcre2-32-shared PROPERTIES PREFIX "")
886*22dc650dSSadaf Ebrahimi      ENDIF(NON_STANDARD_LIB_PREFIX)
887*22dc650dSSadaf Ebrahimi      IF(NON_STANDARD_LIB_SUFFIX)
888*22dc650dSSadaf Ebrahimi        SET_TARGET_PROPERTIES(pcre2-32-shared PROPERTIES SUFFIX "-0.dll")
889*22dc650dSSadaf Ebrahimi      ENDIF(NON_STANDARD_LIB_SUFFIX)
890*22dc650dSSadaf Ebrahimi    ENDIF(MINGW)
891*22dc650dSSadaf Ebrahimi  ENDIF(BUILD_SHARED_LIBS)
892*22dc650dSSadaf Ebrahimi
893*22dc650dSSadaf Ebrahimi  IF(BUILD_STATIC_LIBS)
894*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-32 ALIAS pcre2-32-static)
895*22dc650dSSadaf Ebrahimi  ELSE(BUILD_STATIC_LIBS)
896*22dc650dSSadaf Ebrahimi    ADD_LIBRARY(pcre2-32 ALIAS pcre2-32-shared)
897*22dc650dSSadaf Ebrahimi  ENDIF(BUILD_STATIC_LIBS)
898*22dc650dSSadaf EbrahimiENDIF(PCRE2_BUILD_PCRE2_32)
899*22dc650dSSadaf Ebrahimi
900*22dc650dSSadaf Ebrahimi# Generate pkg-config files
901*22dc650dSSadaf Ebrahimi
902*22dc650dSSadaf Ebrahimiset(PACKAGE_VERSION "${PCRE2_MAJOR}.${PCRE2_MINOR}")
903*22dc650dSSadaf Ebrahimiset(prefix ${CMAKE_INSTALL_PREFIX})
904*22dc650dSSadaf Ebrahimi
905*22dc650dSSadaf Ebrahimiset(exec_prefix "\${prefix}")
906*22dc650dSSadaf Ebrahimiset(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
907*22dc650dSSadaf Ebrahimiset(includedir "\${prefix}/include")
908*22dc650dSSadaf Ebrahimiif(WIN32 AND (CMAKE_BUILD_TYPE MATCHES Debug))
909*22dc650dSSadaf Ebrahimi  set(LIB_POSTFIX ${CMAKE_DEBUG_POSTFIX})
910*22dc650dSSadaf Ebrahimiendif()
911*22dc650dSSadaf Ebrahimi
912*22dc650dSSadaf Ebrahimiif(PCRE2_BUILD_PCRE2_8)
913*22dc650dSSadaf Ebrahimi  configure_file(libpcre2-posix.pc.in libpcre2-posix.pc @ONLY)
914*22dc650dSSadaf Ebrahimi  list(APPEND pkg_config_files "${CMAKE_CURRENT_BINARY_DIR}/libpcre2-posix.pc")
915*22dc650dSSadaf Ebrahimi  configure_file(libpcre2-8.pc.in libpcre2-8.pc @ONLY)
916*22dc650dSSadaf Ebrahimi  list(APPEND pkg_config_files "${CMAKE_CURRENT_BINARY_DIR}/libpcre2-8.pc")
917*22dc650dSSadaf Ebrahimi  set(enable_pcre2_8 "yes")
918*22dc650dSSadaf Ebrahimielse()
919*22dc650dSSadaf Ebrahimi  set(enable_pcre2_8 "no")
920*22dc650dSSadaf Ebrahimiendif()
921*22dc650dSSadaf Ebrahimi
922*22dc650dSSadaf Ebrahimiif(PCRE2_BUILD_PCRE2_16)
923*22dc650dSSadaf Ebrahimi  configure_file(libpcre2-16.pc.in libpcre2-16.pc @ONLY)
924*22dc650dSSadaf Ebrahimi  list(APPEND pkg_config_files "${CMAKE_CURRENT_BINARY_DIR}/libpcre2-16.pc")
925*22dc650dSSadaf Ebrahimi  set(enable_pcre2_16 "yes")
926*22dc650dSSadaf Ebrahimielse()
927*22dc650dSSadaf Ebrahimi  set(enable_pcre2_16 "no")
928*22dc650dSSadaf Ebrahimiendif()
929*22dc650dSSadaf Ebrahimi
930*22dc650dSSadaf Ebrahimiif(PCRE2_BUILD_PCRE2_32)
931*22dc650dSSadaf Ebrahimi  configure_file(libpcre2-32.pc.in libpcre2-32.pc @ONLY)
932*22dc650dSSadaf Ebrahimi  list(APPEND pkg_config_files "${CMAKE_CURRENT_BINARY_DIR}/libpcre2-32.pc")
933*22dc650dSSadaf Ebrahimi  set(enable_pcre2_32 "yes")
934*22dc650dSSadaf Ebrahimielse()
935*22dc650dSSadaf Ebrahimi  set(enable_pcre2_32 "no")
936*22dc650dSSadaf Ebrahimiendif()
937*22dc650dSSadaf Ebrahimi
938*22dc650dSSadaf Ebrahimiconfigure_file(pcre2-config.in pcre2-config @ONLY NEWLINE_STYLE LF)
939*22dc650dSSadaf Ebrahimi
940*22dc650dSSadaf Ebrahimi# Executables
941*22dc650dSSadaf Ebrahimi
942*22dc650dSSadaf EbrahimiIF(PCRE2_BUILD_PCRE2GREP)
943*22dc650dSSadaf Ebrahimi  ADD_EXECUTABLE(pcre2grep src/pcre2grep.c)
944*22dc650dSSadaf Ebrahimi  SET_PROPERTY(TARGET pcre2grep
945*22dc650dSSadaf Ebrahimi    PROPERTY COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8)
946*22dc650dSSadaf Ebrahimi  set(targets ${targets} pcre2grep)
947*22dc650dSSadaf Ebrahimi  TARGET_LINK_LIBRARIES(pcre2grep pcre2-posix ${PCRE2GREP_LIBS})
948*22dc650dSSadaf EbrahimiENDIF(PCRE2_BUILD_PCRE2GREP)
949*22dc650dSSadaf Ebrahimi
950*22dc650dSSadaf Ebrahimi# Testing
951*22dc650dSSadaf Ebrahimi
952*22dc650dSSadaf EbrahimiIF(PCRE2_BUILD_TESTS)
953*22dc650dSSadaf Ebrahimi  ENABLE_TESTING()
954*22dc650dSSadaf Ebrahimi
955*22dc650dSSadaf Ebrahimi  SET(PCRE2TEST_SOURCES src/pcre2test.c)
956*22dc650dSSadaf Ebrahimi
957*22dc650dSSadaf Ebrahimi  IF(MSVC)
958*22dc650dSSadaf Ebrahimi    # This is needed to avoid a stack overflow error in the standard tests. The
959*22dc650dSSadaf Ebrahimi    # flag should be indicated with a forward-slash instead of a hyphen, but
960*22dc650dSSadaf Ebrahimi    # then CMake treats it as a file path.
961*22dc650dSSadaf Ebrahimi    SET(PCRE2TEST_LINKER_FLAGS -STACK:2500000)
962*22dc650dSSadaf Ebrahimi  ENDIF(MSVC)
963*22dc650dSSadaf Ebrahimi
964*22dc650dSSadaf Ebrahimi  ADD_EXECUTABLE(pcre2test ${PCRE2TEST_SOURCES})
965*22dc650dSSadaf Ebrahimi  set(targets ${targets} pcre2test)
966*22dc650dSSadaf Ebrahimi  IF(PCRE2_BUILD_PCRE2_8)
967*22dc650dSSadaf Ebrahimi    LIST(APPEND PCRE2TEST_LIBS pcre2-posix pcre2-8)
968*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_BUILD_PCRE2_8)
969*22dc650dSSadaf Ebrahimi  IF(PCRE2_BUILD_PCRE2_16)
970*22dc650dSSadaf Ebrahimi    LIST(APPEND PCRE2TEST_LIBS pcre2-16)
971*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_BUILD_PCRE2_16)
972*22dc650dSSadaf Ebrahimi  IF(PCRE2_BUILD_PCRE2_32)
973*22dc650dSSadaf Ebrahimi    LIST(APPEND PCRE2TEST_LIBS pcre2-32)
974*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_BUILD_PCRE2_32)
975*22dc650dSSadaf Ebrahimi  TARGET_LINK_LIBRARIES(pcre2test ${PCRE2TEST_LIBS} ${PCRE2TEST_LINKER_FLAGS})
976*22dc650dSSadaf Ebrahimi
977*22dc650dSSadaf Ebrahimi  IF(PCRE2_BUILD_PCRE2_8)
978*22dc650dSSadaf Ebrahimi    ADD_EXECUTABLE(pcre2posix_test src/pcre2posix_test.c)
979*22dc650dSSadaf Ebrahimi    TARGET_LINK_LIBRARIES(pcre2posix_test pcre2-posix pcre2-8)
980*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_BUILD_PCRE2_8)
981*22dc650dSSadaf Ebrahimi
982*22dc650dSSadaf Ebrahimi  IF(PCRE2_SUPPORT_JIT)
983*22dc650dSSadaf Ebrahimi    ADD_EXECUTABLE(pcre2_jit_test src/pcre2_jit_test.c)
984*22dc650dSSadaf Ebrahimi    SET(PCRE2_JIT_TEST_LIBS)
985*22dc650dSSadaf Ebrahimi    IF(PCRE2_BUILD_PCRE2_8)
986*22dc650dSSadaf Ebrahimi      LIST(APPEND PCRE2_JIT_TEST_LIBS pcre2-8)
987*22dc650dSSadaf Ebrahimi    ENDIF(PCRE2_BUILD_PCRE2_8)
988*22dc650dSSadaf Ebrahimi    IF(PCRE2_BUILD_PCRE2_16)
989*22dc650dSSadaf Ebrahimi      LIST(APPEND PCRE2_JIT_TEST_LIBS pcre2-16)
990*22dc650dSSadaf Ebrahimi    ENDIF(PCRE2_BUILD_PCRE2_16)
991*22dc650dSSadaf Ebrahimi    IF(PCRE2_BUILD_PCRE2_32)
992*22dc650dSSadaf Ebrahimi      LIST(APPEND PCRE2_JIT_TEST_LIBS pcre2-32)
993*22dc650dSSadaf Ebrahimi    ENDIF(PCRE2_BUILD_PCRE2_32)
994*22dc650dSSadaf Ebrahimi    TARGET_LINK_LIBRARIES(pcre2_jit_test ${PCRE2_JIT_TEST_LIBS})
995*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_SUPPORT_JIT)
996*22dc650dSSadaf Ebrahimi
997*22dc650dSSadaf Ebrahimi  # exes in Debug location tested by the RunTest and RunGrepTest shell scripts
998*22dc650dSSadaf Ebrahimi  # via "make test"
999*22dc650dSSadaf Ebrahimi
1000*22dc650dSSadaf Ebrahimi  # The commented out code below provokes a warning about future removal
1001*22dc650dSSadaf Ebrahimi  # of the facility, and requires policy CMP0026 to be set to "OLD". I have
1002*22dc650dSSadaf Ebrahimi  # got fed-up with the warnings, but my plea for help on the mailing list
1003*22dc650dSSadaf Ebrahimi  # produced no response. So, I've hacked. The new code below seems to work on
1004*22dc650dSSadaf Ebrahimi  # Linux.
1005*22dc650dSSadaf Ebrahimi
1006*22dc650dSSadaf Ebrahimi#  IF(PCRE2_BUILD_PCRE2GREP)
1007*22dc650dSSadaf Ebrahimi#    GET_TARGET_PROPERTY(PCRE2GREP_EXE pcre2grep DEBUG_LOCATION)
1008*22dc650dSSadaf Ebrahimi#  ENDIF(PCRE2_BUILD_PCRE2GREP)
1009*22dc650dSSadaf Ebrahimi#
1010*22dc650dSSadaf Ebrahimi#  GET_TARGET_PROPERTY(PCRE2TEST_EXE pcre2test DEBUG_LOCATION)
1011*22dc650dSSadaf Ebrahimi
1012*22dc650dSSadaf Ebrahimi  IF(PCRE2_BUILD_PCRE2GREP)
1013*22dc650dSSadaf Ebrahimi    SET(PCRE2GREP_EXE $<TARGET_FILE:pcre2grep>)
1014*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_BUILD_PCRE2GREP)
1015*22dc650dSSadaf Ebrahimi
1016*22dc650dSSadaf Ebrahimi  SET(PCRE2TEST_EXE $<TARGET_FILE:pcre2test>)
1017*22dc650dSSadaf Ebrahimi
1018*22dc650dSSadaf Ebrahimi
1019*22dc650dSSadaf Ebrahimi# =================================================
1020*22dc650dSSadaf Ebrahimi  # Write out a CTest configuration file
1021*22dc650dSSadaf Ebrahimi  #
1022*22dc650dSSadaf Ebrahimi  FILE(WRITE ${PROJECT_BINARY_DIR}/CTestCustom.ctest
1023*22dc650dSSadaf Ebrahimi  "# This is a generated file.
1024*22dc650dSSadaf EbrahimiMESSAGE(\"When testing is complete, review test output in the
1025*22dc650dSSadaf Ebrahimi\\\"${PROJECT_BINARY_DIR}/Testing/Temporary\\\" folder.\")
1026*22dc650dSSadaf EbrahimiMESSAGE(\" \")
1027*22dc650dSSadaf Ebrahimi")
1028*22dc650dSSadaf Ebrahimi
1029*22dc650dSSadaf Ebrahimi  FILE(WRITE ${PROJECT_BINARY_DIR}/pcre2_test.sh
1030*22dc650dSSadaf Ebrahimi  "#! /bin/sh
1031*22dc650dSSadaf Ebrahimi# This is a generated file.
1032*22dc650dSSadaf Ebrahimisrcdir=${PROJECT_SOURCE_DIR}
1033*22dc650dSSadaf Ebrahimi. ${PROJECT_SOURCE_DIR}/RunTest
1034*22dc650dSSadaf Ebrahimiif test \"$?\" != \"0\"; then exit 1; fi
1035*22dc650dSSadaf Ebrahimi# End
1036*22dc650dSSadaf Ebrahimi")
1037*22dc650dSSadaf Ebrahimi
1038*22dc650dSSadaf Ebrahimi  IF(UNIX)
1039*22dc650dSSadaf Ebrahimi    ADD_TEST(pcre2_test sh ${PROJECT_BINARY_DIR}/pcre2_test.sh)
1040*22dc650dSSadaf Ebrahimi  ENDIF(UNIX)
1041*22dc650dSSadaf Ebrahimi
1042*22dc650dSSadaf Ebrahimi  IF(PCRE2_BUILD_PCRE2GREP)
1043*22dc650dSSadaf Ebrahimi    FILE(WRITE ${PROJECT_BINARY_DIR}/pcre2_grep_test.sh
1044*22dc650dSSadaf Ebrahimi    "#! /bin/sh
1045*22dc650dSSadaf Ebrahimi# This is a generated file.
1046*22dc650dSSadaf Ebrahimisrcdir=${PROJECT_SOURCE_DIR}
1047*22dc650dSSadaf Ebrahimi. ${PROJECT_SOURCE_DIR}/RunGrepTest
1048*22dc650dSSadaf Ebrahimiif test \"$?\" != \"0\"; then exit 1; fi
1049*22dc650dSSadaf Ebrahimi# End
1050*22dc650dSSadaf Ebrahimi")
1051*22dc650dSSadaf Ebrahimi
1052*22dc650dSSadaf Ebrahimi    IF(UNIX)
1053*22dc650dSSadaf Ebrahimi      ADD_TEST(pcre2_grep_test sh ${PROJECT_BINARY_DIR}/pcre2_grep_test.sh)
1054*22dc650dSSadaf Ebrahimi    ENDIF(UNIX)
1055*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_BUILD_PCRE2GREP)
1056*22dc650dSSadaf Ebrahimi
1057*22dc650dSSadaf Ebrahimi  IF(WIN32)
1058*22dc650dSSadaf Ebrahimi    # Provide environment for executing the bat file version of RunTest
1059*22dc650dSSadaf Ebrahimi    FILE(TO_NATIVE_PATH ${PROJECT_SOURCE_DIR} winsrc)
1060*22dc650dSSadaf Ebrahimi    FILE(TO_NATIVE_PATH ${PROJECT_BINARY_DIR} winbin)
1061*22dc650dSSadaf Ebrahimi    FILE(TO_NATIVE_PATH ${PCRE2TEST_EXE} winexe)
1062*22dc650dSSadaf Ebrahimi
1063*22dc650dSSadaf Ebrahimi    FILE(WRITE ${PROJECT_BINARY_DIR}/pcre2_test.bat
1064*22dc650dSSadaf Ebrahimi    "\@REM This is a generated file.
1065*22dc650dSSadaf Ebrahimi\@echo off
1066*22dc650dSSadaf Ebrahimisetlocal
1067*22dc650dSSadaf EbrahimiSET srcdir=\"${winsrc}\"
1068*22dc650dSSadaf Ebrahimi# The next line was replaced by the following one after a user comment.
1069*22dc650dSSadaf Ebrahimi# SET pcre2test=\"${winexe}\"
1070*22dc650dSSadaf EbrahimiSET pcre2test=\"${winbin}\\pcre2test.exe\"
1071*22dc650dSSadaf Ebrahimiif not [%CMAKE_CONFIG_TYPE%]==[] SET pcre2test=\"${winbin}\\%CMAKE_CONFIG_TYPE%\\pcre2test.exe\"
1072*22dc650dSSadaf Ebrahimicall %srcdir%\\RunTest.Bat
1073*22dc650dSSadaf Ebrahimiif errorlevel 1 exit /b 1
1074*22dc650dSSadaf Ebrahimiecho RunTest.bat tests successfully completed
1075*22dc650dSSadaf Ebrahimi")
1076*22dc650dSSadaf Ebrahimi
1077*22dc650dSSadaf Ebrahimi  ADD_TEST(NAME pcre2_test_bat
1078*22dc650dSSadaf Ebrahimi  COMMAND pcre2_test.bat)
1079*22dc650dSSadaf Ebrahimi  SET_TESTS_PROPERTIES(pcre2_test_bat PROPERTIES
1080*22dc650dSSadaf Ebrahimi  PASS_REGULAR_EXPRESSION "RunTest\\.bat tests successfully completed")
1081*22dc650dSSadaf Ebrahimi
1082*22dc650dSSadaf Ebrahimi    IF("$ENV{OSTYPE}" STREQUAL "msys")
1083*22dc650dSSadaf Ebrahimi      # Both the sh and bat file versions of RunTest are run if make test is used
1084*22dc650dSSadaf Ebrahimi      # in msys
1085*22dc650dSSadaf Ebrahimi      ADD_TEST(pcre2_test_sh    sh.exe ${PROJECT_BINARY_DIR}/pcre2_test.sh)
1086*22dc650dSSadaf Ebrahimi      IF(PCRE2_BUILD_PCRE2GREP)
1087*22dc650dSSadaf Ebrahimi        ADD_TEST(pcre2_grep_test  sh.exe ${PROJECT_BINARY_DIR}/pcre2_grep_test.sh)
1088*22dc650dSSadaf Ebrahimi      ENDIF(PCRE2_BUILD_PCRE2GREP)
1089*22dc650dSSadaf Ebrahimi    ENDIF("$ENV{OSTYPE}" STREQUAL "msys")
1090*22dc650dSSadaf Ebrahimi  ENDIF(WIN32)
1091*22dc650dSSadaf Ebrahimi
1092*22dc650dSSadaf Ebrahimi  # Changed to accommodate testing whichever location was just built
1093*22dc650dSSadaf Ebrahimi
1094*22dc650dSSadaf Ebrahimi  IF(PCRE2_SUPPORT_JIT)
1095*22dc650dSSadaf Ebrahimi    ADD_TEST(pcre2_jit_test pcre2_jit_test)
1096*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_SUPPORT_JIT)
1097*22dc650dSSadaf Ebrahimi
1098*22dc650dSSadaf Ebrahimi  IF(PCRE2_BUILD_PCRE2_8)
1099*22dc650dSSadaf Ebrahimi    ADD_TEST(pcre2posix_test pcre2posix_test)
1100*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_BUILD_PCRE2_8)
1101*22dc650dSSadaf Ebrahimi
1102*22dc650dSSadaf EbrahimiENDIF(PCRE2_BUILD_TESTS)
1103*22dc650dSSadaf Ebrahimi
1104*22dc650dSSadaf Ebrahimi# Installation
1105*22dc650dSSadaf Ebrahimi
1106*22dc650dSSadaf EbrahimiSET(CMAKE_INSTALL_ALWAYS 1)
1107*22dc650dSSadaf Ebrahimi
1108*22dc650dSSadaf EbrahimiINSTALL(TARGETS ${targets}
1109*22dc650dSSadaf Ebrahimi        RUNTIME DESTINATION bin
1110*22dc650dSSadaf Ebrahimi        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
1111*22dc650dSSadaf Ebrahimi        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
1112*22dc650dSSadaf EbrahimiINSTALL(FILES ${pkg_config_files} DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
1113*22dc650dSSadaf EbrahimiINSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/pcre2-config"
1114*22dc650dSSadaf Ebrahimi  DESTINATION bin
1115*22dc650dSSadaf Ebrahimi  # Set 0755 permissions
1116*22dc650dSSadaf Ebrahimi  PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
1117*22dc650dSSadaf Ebrahimi
1118*22dc650dSSadaf EbrahimiINSTALL(FILES ${PCRE2_HEADERS} ${PCRE2POSIX_HEADERS} DESTINATION include)
1119*22dc650dSSadaf Ebrahimi
1120*22dc650dSSadaf Ebrahimi# CMake config files.
1121*22dc650dSSadaf Ebrahimiset(PCRE2_CONFIG_IN  ${CMAKE_CURRENT_SOURCE_DIR}/cmake/pcre2-config.cmake.in)
1122*22dc650dSSadaf Ebrahimiset(PCRE2_CONFIG_OUT ${CMAKE_CURRENT_BINARY_DIR}/cmake/pcre2-config.cmake)
1123*22dc650dSSadaf Ebrahimiconfigure_file(${PCRE2_CONFIG_IN} ${PCRE2_CONFIG_OUT} @ONLY)
1124*22dc650dSSadaf Ebrahimiset(PCRE2_CONFIG_VERSION_IN  ${CMAKE_CURRENT_SOURCE_DIR}/cmake/pcre2-config-version.cmake.in)
1125*22dc650dSSadaf Ebrahimiset(PCRE2_CONFIG_VERSION_OUT ${CMAKE_CURRENT_BINARY_DIR}/cmake/pcre2-config-version.cmake)
1126*22dc650dSSadaf Ebrahimiconfigure_file(${PCRE2_CONFIG_VERSION_IN} ${PCRE2_CONFIG_VERSION_OUT} @ONLY)
1127*22dc650dSSadaf Ebrahimiinstall(FILES ${PCRE2_CONFIG_OUT} ${PCRE2_CONFIG_VERSION_OUT} DESTINATION cmake)
1128*22dc650dSSadaf Ebrahimi
1129*22dc650dSSadaf EbrahimiFILE(GLOB html ${PROJECT_SOURCE_DIR}/doc/html/*.html)
1130*22dc650dSSadaf EbrahimiFILE(GLOB man1 ${PROJECT_SOURCE_DIR}/doc/*.1)
1131*22dc650dSSadaf EbrahimiFILE(GLOB man3 ${PROJECT_SOURCE_DIR}/doc/*.3)
1132*22dc650dSSadaf Ebrahimi
1133*22dc650dSSadaf EbrahimiINSTALL(FILES ${man1} DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
1134*22dc650dSSadaf EbrahimiINSTALL(FILES ${man3} DESTINATION ${CMAKE_INSTALL_MANDIR}/man3)
1135*22dc650dSSadaf EbrahimiINSTALL(FILES ${html} DESTINATION share/doc/pcre2/html)
1136*22dc650dSSadaf Ebrahimi
1137*22dc650dSSadaf EbrahimiIF(MSVC AND INSTALL_MSVC_PDB)
1138*22dc650dSSadaf Ebrahimi INSTALL(FILES ${dll_pdb_files} DESTINATION bin CONFIGURATIONS RelWithDebInfo)
1139*22dc650dSSadaf Ebrahimi INSTALL(FILES ${dll_pdb_debug_files} DESTINATION bin CONFIGURATIONS Debug)
1140*22dc650dSSadaf EbrahimiENDIF(MSVC AND INSTALL_MSVC_PDB)
1141*22dc650dSSadaf Ebrahimi
1142*22dc650dSSadaf Ebrahimi# Help, only for nice output
1143*22dc650dSSadaf EbrahimiIF(BUILD_STATIC_LIBS)
1144*22dc650dSSadaf Ebrahimi  SET(BUILD_STATIC_LIBS ON)
1145*22dc650dSSadaf EbrahimiELSE(BUILD_STATIC_LIBS)
1146*22dc650dSSadaf Ebrahimi  SET(BUILD_STATIC_LIBS OFF)
1147*22dc650dSSadaf EbrahimiENDIF(BUILD_STATIC_LIBS)
1148*22dc650dSSadaf Ebrahimi
1149*22dc650dSSadaf EbrahimiIF(PCRE2_HEAP_MATCH_RECURSE)
1150*22dc650dSSadaf Ebrahimi  MESSAGE(WARNING "HEAP_MATCH_RECURSE is obsolete and does nothing.")
1151*22dc650dSSadaf EbrahimiENDIF(PCRE2_HEAP_MATCH_RECURSE)
1152*22dc650dSSadaf Ebrahimi
1153*22dc650dSSadaf EbrahimiIF(PCRE2_SHOW_REPORT)
1154*22dc650dSSadaf Ebrahimi  STRING(TOUPPER "${CMAKE_BUILD_TYPE}" buildtype)
1155*22dc650dSSadaf Ebrahimi  IF (CMAKE_C_FLAGS)
1156*22dc650dSSadaf Ebrahimi    SET(cfsp " ")
1157*22dc650dSSadaf Ebrahimi  ENDIF(CMAKE_C_FLAGS)
1158*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "")
1159*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "")
1160*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "PCRE2-${PCRE2_MAJOR}.${PCRE2_MINOR} configuration summary:")
1161*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "")
1162*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Install prefix .................. : ${CMAKE_INSTALL_PREFIX}")
1163*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  C compiler ...................... : ${CMAKE_C_COMPILER}")
1164*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  C compiler flags ................ : ${CMAKE_C_FLAGS}${cfsp}${CMAKE_C_FLAGS_${buildtype}}")
1165*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "")
1166*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Build 8 bit PCRE2 library ....... : ${PCRE2_BUILD_PCRE2_8}")
1167*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Build 16 bit PCRE2 library ...... : ${PCRE2_BUILD_PCRE2_16}")
1168*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Build 32 bit PCRE2 library ...... : ${PCRE2_BUILD_PCRE2_32}")
1169*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Enable JIT compiling support .... : ${PCRE2_SUPPORT_JIT}")
1170*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Use SELinux allocator in JIT .... : ${PCRE2_SUPPORT_JIT_SEALLOC}")
1171*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Enable Unicode support .......... : ${PCRE2_SUPPORT_UNICODE}")
1172*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Newline char/sequence ........... : ${PCRE2_NEWLINE}")
1173*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  \\R matches only ANYCRLF ......... : ${PCRE2_SUPPORT_BSR_ANYCRLF}")
1174*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  \\C is disabled .................. : ${PCRE2_NEVER_BACKSLASH_C}")
1175*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  EBCDIC coding ................... : ${PCRE2_EBCDIC}")
1176*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  EBCDIC coding with NL=0x25 ...... : ${PCRE2_EBCDIC_NL25}")
1177*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Rebuild char tables ............. : ${PCRE2_REBUILD_CHARTABLES}")
1178*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Internal link size .............. : ${PCRE2_LINK_SIZE}")
1179*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Maximum variable lookbehind ..... : ${PCRE2_MAX_VARLOOKBEHIND}")
1180*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Parentheses nest limit .......... : ${PCRE2_PARENS_NEST_LIMIT}")
1181*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Heap limit ...................... : ${PCRE2_HEAP_LIMIT}")
1182*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Match limit ..................... : ${PCRE2_MATCH_LIMIT}")
1183*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Match depth limit ............... : ${PCRE2_MATCH_LIMIT_DEPTH}")
1184*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Build shared libs ............... : ${BUILD_SHARED_LIBS}")
1185*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Build static libs ............... : ${BUILD_STATIC_LIBS}")
1186*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "     with PIC enabled ............. : ${PCRE2_STATIC_PIC}")
1187*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Build pcre2grep ................. : ${PCRE2_BUILD_PCRE2GREP}")
1188*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Enable JIT in pcre2grep ......... : ${PCRE2GREP_SUPPORT_JIT}")
1189*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Enable callouts in pcre2grep .... : ${PCRE2GREP_SUPPORT_CALLOUT}")
1190*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Enable callout fork in pcre2grep. : ${PCRE2GREP_SUPPORT_CALLOUT_FORK}")
1191*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Buffer size for pcre2grep ....... : ${PCRE2GREP_BUFSIZE}")
1192*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Build tests (implies pcre2test .. : ${PCRE2_BUILD_TESTS}")
1193*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "               and pcre2grep)")
1194*22dc650dSSadaf Ebrahimi  IF(ZLIB_FOUND)
1195*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Link pcre2grep with libz ........ : ${PCRE2_SUPPORT_LIBZ}")
1196*22dc650dSSadaf Ebrahimi  ELSE(ZLIB_FOUND)
1197*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Link pcre2grep with libz ........ : Library not found" )
1198*22dc650dSSadaf Ebrahimi  ENDIF(ZLIB_FOUND)
1199*22dc650dSSadaf Ebrahimi  IF(BZIP2_FOUND)
1200*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Link pcre2grep with libbz2 ...... : ${PCRE2_SUPPORT_LIBBZ2}")
1201*22dc650dSSadaf Ebrahimi  ELSE(BZIP2_FOUND)
1202*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Link pcre2grep with libbz2 ...... : Library not found" )
1203*22dc650dSSadaf Ebrahimi  ENDIF(BZIP2_FOUND)
1204*22dc650dSSadaf Ebrahimi  IF(EDITLINE_FOUND)
1205*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Link pcre2test with libeditline . : ${PCRE2_SUPPORT_LIBEDIT}")
1206*22dc650dSSadaf Ebrahimi  ELSE(EDITLINE_FOUND)
1207*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Link pcre2test with libeditline . : Library not found" )
1208*22dc650dSSadaf Ebrahimi  ENDIF(EDITLINE_FOUND)
1209*22dc650dSSadaf Ebrahimi  IF(READLINE_FOUND)
1210*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Link pcre2test with libreadline . : ${PCRE2_SUPPORT_LIBREADLINE}")
1211*22dc650dSSadaf Ebrahimi  ELSE(READLINE_FOUND)
1212*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Link pcre2test with libreadline . : Library not found" )
1213*22dc650dSSadaf Ebrahimi  ENDIF(READLINE_FOUND)
1214*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "  Support Valgrind .................: ${PCRE2_SUPPORT_VALGRIND}")
1215*22dc650dSSadaf Ebrahimi  IF(PCRE2_DISABLE_PERCENT_ZT)
1216*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Use %zu and %td ..................: OFF" )
1217*22dc650dSSadaf Ebrahimi  ELSE(PCRE2_DISABLE_PERCENT_ZT)
1218*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Use %zu and %td ..................: AUTO" )
1219*22dc650dSSadaf Ebrahimi  ENDIF(PCRE2_DISABLE_PERCENT_ZT)
1220*22dc650dSSadaf Ebrahimi
1221*22dc650dSSadaf Ebrahimi  IF(MINGW AND BUILD_SHARED_LIBS)
1222*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Non-standard dll names (prefix) . : ${NON_STANDARD_LIB_PREFIX}")
1223*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Non-standard dll names (suffix) . : ${NON_STANDARD_LIB_SUFFIX}")
1224*22dc650dSSadaf Ebrahimi  ENDIF(MINGW AND BUILD_SHARED_LIBS)
1225*22dc650dSSadaf Ebrahimi
1226*22dc650dSSadaf Ebrahimi  IF(MSVC)
1227*22dc650dSSadaf Ebrahimi    MESSAGE(STATUS "  Install MSVC .pdb files ..........: ${INSTALL_MSVC_PDB}")
1228*22dc650dSSadaf Ebrahimi  ENDIF(MSVC)
1229*22dc650dSSadaf Ebrahimi
1230*22dc650dSSadaf Ebrahimi  MESSAGE(STATUS "")
1231*22dc650dSSadaf EbrahimiENDIF(PCRE2_SHOW_REPORT)
1232*22dc650dSSadaf Ebrahimi
1233*22dc650dSSadaf Ebrahimi# end CMakeLists.txt
1234