blob: 4737687b21d253af506eaf99b05467f850983933 [file] [log] [blame]
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001# CMakeLists.txt
2#
3#
4# This file enables PCRE2 to be built with the CMake configuration and build
5# tool. Download CMake in source or binary form from http://www.cmake.org/
6# Converted to support PCRE2 from the original PCRE file, August 2014.
7#
8# Original listfile by Christian Ehrlicher <Ch.Ehrlicher@gmx.de>
9# Refined and expanded by Daniel Richard G. <skunk@iSKUNK.ORG>
10# 2007-09-14 mod by Sheri so 7.4 supported configuration options can be entered
11# 2007-09-19 Adjusted by PH to retain previous default settings
12# 2007-12-26 (a) On UNIX, use names libpcre instead of just pcre
13# (b) Ensure pcretest and pcregrep link with the local library,
14# not a previously-installed one.
15# (c) Add PCRE_SUPPORT_LIBREADLINE, PCRE_SUPPORT_LIBZ, and
16# PCRE_SUPPORT_LIBBZ2.
17# 2008-01-20 Brought up to date to include several new features by Christian
18# Ehrlicher.
19# 2008-01-22 Sheri added options for backward compatibility of library names
20# when building with minGW:
21# if "ON", NON_STANDARD_LIB_PREFIX causes shared libraries to
22# be built without "lib" as prefix. (The libraries will be named
23# pcre.dll, pcreposix.dll and pcrecpp.dll).
24# if "ON", NON_STANDARD_LIB_SUFFIX causes shared libraries to
25# be built with suffix of "-0.dll". (The libraries will be named
26# libpcre-0.dll, libpcreposix-0.dll and libpcrecpp-0.dll - same names
27# built by default with Configure and Make.
28# 2008-01-23 PH removed the automatic build of pcredemo.
29# 2008-04-22 PH modified READLINE support so it finds NCURSES when needed.
30# 2008-07-03 PH updated for revised UCP property support (change of files)
31# 2009-03-23 PH applied Steven Van Ingelgem's patch to change the name
32# CMAKE_BINARY_DIR to PROJECT_BINARY_DIR so that it works when PCRE
33# is included within another project.
34# 2009-03-23 PH applied a modified version of Steven Van Ingelgem's patches to
35# add options to stop the building of pcregrep and the tests, and
36# to disable the final configuration report.
37# 2009-04-11 PH applied Christian Ehrlicher's patch to show compiler flags that
38# are set by specifying a release type.
39# 2010-01-02 PH added test for stdint.h
40# 2010-03-02 PH added test for inttypes.h
41# 2011-08-01 PH added PCREGREP_BUFSIZE
42# 2011-08-22 PH added PCRE_SUPPORT_JIT
43# 2011-09-06 PH modified WIN32 ADD_TEST line as suggested by Sergey Cherepanov
44# 2011-09-06 PH added PCRE_SUPPORT_PCREGREP_JIT
45# 2011-10-04 Sheri added support for including coff data in windows shared libraries
46# compiled with MINGW if pcre.rc and/or pcreposix.rc are placed in
47# the source dir by the user prior to building
48# 2011-10-04 Sheri changed various add_test's to use exes' location built instead
49# of DEBUG location only (likely only matters in MSVC)
50# 2011-10-04 Sheri added scripts to provide needed variables to RunTest and
51# RunGrepTest (used for UNIX and Msys)
52# 2011-10-04 Sheri added scripts to provide needed variables and to execute
53# RunTest.bat in Win32 (for effortless testing with "make test")
54# 2011-10-04 Sheri Increased minimum required cmake version
55# 2012-01-06 PH removed pcre_info.c and added pcre_string_utils.c
56# 2012-01-10 Zoltan Herczeg added libpcre16 support
57# 2012-01-13 Stephen Kelly added out of source build support
58# 2012-01-17 PH applied Stephen Kelly's patch to parse the version data out
59# of the configure.ac file
60# 2012-02-26 PH added support for libedit
61# 2012-09-06 PH added support for PCRE_EBCDIC_NL25
62# 2012-09-08 ChPe added PCRE32 support
63# 2012-10-23 PH added support for VALGRIND and GCOV
64# 2012-12-08 PH added patch from Daniel Richard G to quash some MSVC warnings
65# 2013-07-01 PH realized that the "support" for GCOV was a total nonsense and
66# so it has been removed.
67# 2013-10-08 PH got rid of the "source" command, which is a bash-ism (use ".")
68# 2013-11-05 PH added support for PARENS_NEST_LIMIT
69# 2014-08-29 PH converted the file for PCRE2 (which has no C++).
70# 2015-04-24 PH added support for PCRE2_DEBUG
71# 2015-07-16 PH updated for new pcre2_find_bracket source module
72# 2015-08-24 PH correct C_FLAGS setting (patch from Roy Ivy III)
73# 2015-10=16 PH added support for never-backslash-C
Janis Danisevskis8b979b22016-08-15 16:09:16 +010074# 2016-03-01 PH applied Chris Wilson's patch for MSVC static
75# 2016-06-24 PH applied Chris Wilson's second patch, putting the first under
76# a new option instead of being unconditional.
Elliott Hughes9bc971b2018-07-27 13:23:14 -070077# 2016-10-05 PH fixed a typo (PCRE should be PCRE2) in above patch
78# fix by David Gaussmann
79# 2016-10-07 PH added PCREGREP_MAX_BUFSIZE
80# 2017-03-11 PH turned HEAP_MATCH_RECURSE into a NO-OP for 10.30
81# 2017-04-08 PH added HEAP_LIMIT
82# 2017-06-15 ZH added SUPPORT_JIT_SEALLOC support
Elliott Hughes0c26e192019-08-07 12:24:46 -070083# 2018-06-19 PH added checks for stdint.h and inttypes.h (later removed)
Elliott Hughes653c2102019-01-09 15:41:36 -080084# 2018-06-27 PH added Daniel's patch to increase the stack for MSVC
Elliott Hughes0c26e192019-08-07 12:24:46 -070085# 2018-11-14 PH removed unnecessary checks for stdint.h and inttypes.h
86# 2018-11-16 PH added PCRE2GREP_SUPPORT_CALLOUT_FORK support and tidied
87# 2019-02-16 PH hacked to avoid CMP0026 policy issue (see comments below)
Janis Danisevskis53e448c2016-03-31 13:35:25 +010088
89PROJECT(PCRE2 C)
90
Elliott Hughes0c26e192019-08-07 12:24:46 -070091# Increased minimum to 2.8.0 to support newer add_test features.
Janis Danisevskis53e448c2016-03-31 13:35:25 +010092CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0)
Elliott Hughes0c26e192019-08-07 12:24:46 -070093
94# Set policy CMP0026 to avoid warnings for the use of LOCATION in
95# GET_TARGET_PROPERTY. This should no longer be required.
96# CMAKE_POLICY(SET CMP0026 OLD)
Janis Danisevskis53e448c2016-03-31 13:35:25 +010097
98SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) # for FindReadline.cmake
99
100SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${PROJECT_SOURCE_DIR}/src")
101
102# external packages
103FIND_PACKAGE( BZip2 )
104FIND_PACKAGE( ZLIB )
105FIND_PACKAGE( Readline )
106FIND_PACKAGE( Editline )
107
108# Configuration checks
109
110INCLUDE(CheckIncludeFile)
111INCLUDE(CheckFunctionExists)
112INCLUDE(CheckTypeSize)
113
114CHECK_INCLUDE_FILE(dirent.h HAVE_DIRENT_H)
115CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
116CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
117CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
118CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
119CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
120CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H)
121
122CHECK_FUNCTION_EXISTS(bcopy HAVE_BCOPY)
123CHECK_FUNCTION_EXISTS(memmove HAVE_MEMMOVE)
124CHECK_FUNCTION_EXISTS(strerror HAVE_STRERROR)
125
126# User-configurable options
127#
128# Note: CMakeSetup displays these in alphabetical order, regardless of
129# the order we use here.
130
131SET(BUILD_SHARED_LIBS OFF CACHE BOOL
132 "Build shared libraries instead of static ones.")
133
134OPTION(PCRE2_BUILD_PCRE2_8 "Build 8 bit PCRE2 library" ON)
135
136OPTION(PCRE2_BUILD_PCRE2_16 "Build 16 bit PCRE2 library" OFF)
137
138OPTION(PCRE2_BUILD_PCRE2_32 "Build 32 bit PCRE2 library" OFF)
139
140OPTION(PCRE2_DEBUG "Include debugging code" OFF)
141
Elliott Hughes0c26e192019-08-07 12:24:46 -0700142OPTION(PCRE2_DISABLE_PERCENT_ZT "Disable the use of %zu and %td (rarely needed)" OFF)
143
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100144SET(PCRE2_EBCDIC OFF CACHE BOOL
145 "Use EBCDIC coding instead of ASCII. (This is rarely used outside of mainframe systems.)")
146
147SET(PCRE2_EBCDIC_NL25 OFF CACHE BOOL
148 "Use 0x25 as EBCDIC NL character instead of 0x15; implies EBCDIC.")
149
150SET(PCRE2_LINK_SIZE "2" CACHE STRING
151 "Internal link size (2, 3 or 4 allowed). See LINK_SIZE in config.h.in for details.")
152
153SET(PCRE2_PARENS_NEST_LIMIT "250" CACHE STRING
154 "Default nested parentheses limit. See PARENS_NEST_LIMIT in config.h.in for details.")
155
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700156SET(PCRE2_HEAP_LIMIT "20000000" CACHE STRING
Elliott Hughes653c2102019-01-09 15:41:36 -0800157 "Default limit on heap memory (kibibytes). See HEAP_LIMIT in config.h.in for details.")
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700158
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100159SET(PCRE2_MATCH_LIMIT "10000000" CACHE STRING
160 "Default limit on internal looping. See MATCH_LIMIT in config.h.in for details.")
161
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700162SET(PCRE2_MATCH_LIMIT_DEPTH "MATCH_LIMIT" CACHE STRING
163 "Default limit on internal depth of search. See MATCH_LIMIT_DEPTH in config.h.in for details.")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100164
165SET(PCRE2GREP_BUFSIZE "20480" CACHE STRING
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700166 "Buffer starting size parameter for pcre2grep. See PCRE2GREP_BUFSIZE in config.h.in for details.")
167
168SET(PCRE2GREP_MAX_BUFSIZE "1048576" CACHE STRING
169 "Buffer maximum size parameter for pcre2grep. See PCRE2GREP_MAX_BUFSIZE in config.h.in for details.")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100170
171SET(PCRE2_NEWLINE "LF" CACHE STRING
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700172 "What to recognize as a newline (one of CR, LF, CRLF, ANY, ANYCRLF, NUL).")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100173
174SET(PCRE2_HEAP_MATCH_RECURSE OFF CACHE BOOL
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700175 "Obsolete option: do not use")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100176
177SET(PCRE2_SUPPORT_JIT OFF CACHE BOOL
178 "Enable support for Just-in-time compiling.")
179
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700180SET(PCRE2_SUPPORT_JIT_SEALLOC OFF CACHE BOOL
181 "Enable SELinux compatible execmem allocator in JIT.")
182
Elliott Hughes0c26e192019-08-07 12:24:46 -0700183SET(PCRE2GREP_SUPPORT_JIT ON CACHE BOOL
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100184 "Enable use of Just-in-time compiling in pcre2grep.")
185
Elliott Hughes0c26e192019-08-07 12:24:46 -0700186SET(PCRE2GREP_SUPPORT_CALLOUT ON CACHE BOOL
Janis Danisevskis8b979b22016-08-15 16:09:16 +0100187 "Enable callout string support in pcre2grep.")
188
Elliott Hughes0c26e192019-08-07 12:24:46 -0700189SET(PCRE2GREP_SUPPORT_CALLOUT_FORK ON CACHE BOOL
190 "Enable callout string fork support in pcre2grep.")
191
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100192SET(PCRE2_SUPPORT_UNICODE ON CACHE BOOL
193 "Enable support for Unicode and UTF-8/UTF-16/UTF-32 encoding.")
194
195SET(PCRE2_SUPPORT_BSR_ANYCRLF OFF CACHE BOOL
196 "ON=Backslash-R matches only LF CR and CRLF, OFF=Backslash-R matches all Unicode Linebreaks")
197
198SET(PCRE2_NEVER_BACKSLASH_C OFF CACHE BOOL
199 "If ON, backslash-C (upper case C) is locked out.")
200
201SET(PCRE2_SUPPORT_VALGRIND OFF CACHE BOOL
202 "Enable Valgrind support.")
203
204OPTION(PCRE2_SHOW_REPORT "Show the final configuration report" ON)
205OPTION(PCRE2_BUILD_PCRE2GREP "Build pcre2grep" ON)
206OPTION(PCRE2_BUILD_TESTS "Build the tests" ON)
207
208IF (MINGW)
209 OPTION(NON_STANDARD_LIB_PREFIX
210 "ON=Shared libraries built in mingw will be named pcre2.dll, etc., instead of libpcre2.dll, etc."
211 OFF)
212
213 OPTION(NON_STANDARD_LIB_SUFFIX
214 "ON=Shared libraries built in mingw will be named libpcre2-0.dll, etc., instead of libpcre2.dll, etc."
215 OFF)
216ENDIF(MINGW)
217
218IF(MSVC)
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700219 OPTION(PCRE2_STATIC_RUNTIME
Janis Danisevskis8b979b22016-08-15 16:09:16 +0100220 "ON=Compile against the static runtime (/MT)."
221 OFF)
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100222 OPTION(INSTALL_MSVC_PDB
223 "ON=Install .pdb files built by MSVC, if generated"
224 OFF)
225ENDIF(MSVC)
226
227# bzip2 lib
228IF(BZIP2_FOUND)
229 OPTION (PCRE2_SUPPORT_LIBBZ2 "Enable support for linking pcre2grep with libbz2." ON)
230ENDIF(BZIP2_FOUND)
231IF(PCRE2_SUPPORT_LIBBZ2)
232 INCLUDE_DIRECTORIES(${BZIP2_INCLUDE_DIR})
233ENDIF(PCRE2_SUPPORT_LIBBZ2)
234
235# zlib
236IF(ZLIB_FOUND)
237 OPTION (PCRE2_SUPPORT_LIBZ "Enable support for linking pcre2grep with libz." ON)
238ENDIF(ZLIB_FOUND)
239IF(PCRE2_SUPPORT_LIBZ)
240 INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
241ENDIF(PCRE2_SUPPORT_LIBZ)
242
243# editline lib
244IF(EDITLINE_FOUND)
245 OPTION (PCRE2_SUPPORT_LIBEDIT "Enable support for linking pcre2test with libedit." OFF)
246ENDIF(EDITLINE_FOUND)
247IF(PCRE2_SUPPORT_LIBEDIT)
248 INCLUDE_DIRECTORIES(${EDITLINE_INCLUDE_DIR})
249ENDIF(PCRE2_SUPPORT_LIBEDIT)
250
251# readline lib
252IF(READLINE_FOUND)
253 OPTION (PCRE2_SUPPORT_LIBREADLINE "Enable support for linking pcre2test with libreadline." ON)
254ENDIF(READLINE_FOUND)
255IF(PCRE2_SUPPORT_LIBREADLINE)
256 INCLUDE_DIRECTORIES(${READLINE_INCLUDE_DIR})
257ENDIF(PCRE2_SUPPORT_LIBREADLINE)
258
259# Prepare build configuration
260
261IF(NOT BUILD_SHARED_LIBS)
262 SET(PCRE2_STATIC 1)
263ENDIF(NOT BUILD_SHARED_LIBS)
264
265IF(NOT PCRE2_BUILD_PCRE2_8 AND NOT PCRE2_BUILD_PCRE2_16 AND NOT PCRE2_BUILD_PCRE2_32)
266 MESSAGE(FATAL_ERROR "At least one of PCRE2_BUILD_PCRE2_8, PCRE2_BUILD_PCRE2_16 or PCRE2_BUILD_PCRE2_32 must be enabled")
267ENDIF(NOT PCRE2_BUILD_PCRE2_8 AND NOT PCRE2_BUILD_PCRE2_16 AND NOT PCRE2_BUILD_PCRE2_32)
268
269IF(PCRE2_BUILD_PCRE2_8)
270 SET(SUPPORT_PCRE2_8 1)
271ENDIF(PCRE2_BUILD_PCRE2_8)
272
273IF(PCRE2_BUILD_PCRE2_16)
274 SET(SUPPORT_PCRE2_16 1)
275ENDIF(PCRE2_BUILD_PCRE2_16)
276
277IF(PCRE2_BUILD_PCRE2_32)
278 SET(SUPPORT_PCRE2_32 1)
279ENDIF(PCRE2_BUILD_PCRE2_32)
280
281IF(PCRE2_BUILD_PCRE2GREP AND NOT PCRE2_BUILD_PCRE2_8)
282 MESSAGE(STATUS "** PCRE2_BUILD_PCRE2_8 must be enabled for the pcre2grep program")
283 SET(PCRE2_BUILD_PCRE2GREP OFF)
284ENDIF(PCRE2_BUILD_PCRE2GREP AND NOT PCRE2_BUILD_PCRE2_8)
285
286IF(PCRE2_SUPPORT_LIBREADLINE AND PCRE2_SUPPORT_LIBEDIT)
287 MESSAGE(FATAL_ERROR "Only one of libreadline or libeditline can be specified")
288ENDIF(PCRE2_SUPPORT_LIBREADLINE AND PCRE2_SUPPORT_LIBEDIT)
289
290IF(PCRE2_SUPPORT_BSR_ANYCRLF)
291 SET(BSR_ANYCRLF 1)
292ENDIF(PCRE2_SUPPORT_BSR_ANYCRLF)
293
294IF(PCRE2_NEVER_BACKSLASH_C)
295 SET(NEVER_BACKSLASH_C 1)
296ENDIF(PCRE2_NEVER_BACKSLASH_C)
297
298IF(PCRE2_SUPPORT_UNICODE)
299 SET(SUPPORT_UNICODE 1)
300ENDIF(PCRE2_SUPPORT_UNICODE)
301
302IF(PCRE2_SUPPORT_JIT)
303 SET(SUPPORT_JIT 1)
304ENDIF(PCRE2_SUPPORT_JIT)
305
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700306IF(PCRE2_SUPPORT_JIT_SEALLOC)
307 SET(SLJIT_PROT_EXECUTABLE_ALLOCATOR 1)
308ENDIF(PCRE2_SUPPORT_JIT_SEALLOC)
309
Elliott Hughes0c26e192019-08-07 12:24:46 -0700310IF(PCRE2GREP_SUPPORT_JIT)
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100311 SET(SUPPORT_PCRE2GREP_JIT 1)
Elliott Hughes0c26e192019-08-07 12:24:46 -0700312ENDIF(PCRE2GREP_SUPPORT_JIT)
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100313
Elliott Hughes0c26e192019-08-07 12:24:46 -0700314IF(PCRE2GREP_SUPPORT_CALLOUT)
Janis Danisevskis8b979b22016-08-15 16:09:16 +0100315 SET(SUPPORT_PCRE2GREP_CALLOUT 1)
Elliott Hughes0c26e192019-08-07 12:24:46 -0700316 IF(PCRE2GREP_SUPPORT_CALLOUT_FORK)
317 SET(SUPPORT_PCRE2GREP_CALLOUT_FORK 1)
318 ENDIF(PCRE2GREP_SUPPORT_CALLOUT_FORK)
319ENDIF(PCRE2GREP_SUPPORT_CALLOUT)
Janis Danisevskis8b979b22016-08-15 16:09:16 +0100320
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100321IF(PCRE2_SUPPORT_VALGRIND)
322 SET(SUPPORT_VALGRIND 1)
323ENDIF(PCRE2_SUPPORT_VALGRIND)
324
Elliott Hughes0c26e192019-08-07 12:24:46 -0700325IF(PCRE2_DISABLE_PERCENT_ZT)
326 SET(DISABLE_PERCENT_ZT 1)
327ENDIF(PCRE2_DISABLE_PERCENT_ZT)
328
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100329# This next one used to reference ${READLINE_LIBRARY})
330# but I was advised to add the NCURSES test as well, along with
331# some modifications to cmake/FindReadline.cmake which should
332# make it possible to override the default if necessary. PH
333
334IF(PCRE2_SUPPORT_LIBREADLINE)
335 SET(SUPPORT_LIBREADLINE 1)
336 SET(PCRE2TEST_LIBS ${READLINE_LIBRARY} ${NCURSES_LIBRARY})
337ENDIF(PCRE2_SUPPORT_LIBREADLINE)
338
339# libedit is a plug-compatible alternative to libreadline
340
341IF(PCRE2_SUPPORT_LIBEDIT)
342 SET(SUPPORT_LIBEDIT 1)
343 SET(PCRE2TEST_LIBS ${EDITLINE_LIBRARY} ${NCURSES_LIBRARY})
344ENDIF(PCRE2_SUPPORT_LIBEDIT)
345
346IF(PCRE2_SUPPORT_LIBZ)
347 SET(SUPPORT_LIBZ 1)
348 SET(PCRE2GREP_LIBS ${PCRE2GREP_LIBS} ${ZLIB_LIBRARIES})
349ENDIF(PCRE2_SUPPORT_LIBZ)
350
351IF(PCRE2_SUPPORT_LIBBZ2)
352 SET(SUPPORT_LIBBZ2 1)
353 SET(PCRE2GREP_LIBS ${PCRE2GREP_LIBS} ${BZIP2_LIBRARIES})
354ENDIF(PCRE2_SUPPORT_LIBBZ2)
355
356SET(NEWLINE_DEFAULT "")
357
358IF(PCRE2_NEWLINE STREQUAL "CR")
359 SET(NEWLINE_DEFAULT "1")
360ENDIF(PCRE2_NEWLINE STREQUAL "CR")
361IF(PCRE2_NEWLINE STREQUAL "LF")
362 SET(NEWLINE_DEFAULT "2")
363ENDIF(PCRE2_NEWLINE STREQUAL "LF")
364IF(PCRE2_NEWLINE STREQUAL "CRLF")
365 SET(NEWLINE_DEFAULT "3")
366ENDIF(PCRE2_NEWLINE STREQUAL "CRLF")
367IF(PCRE2_NEWLINE STREQUAL "ANY")
368 SET(NEWLINE_DEFAULT "4")
369ENDIF(PCRE2_NEWLINE STREQUAL "ANY")
370IF(PCRE2_NEWLINE STREQUAL "ANYCRLF")
371 SET(NEWLINE_DEFAULT "5")
372ENDIF(PCRE2_NEWLINE STREQUAL "ANYCRLF")
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700373IF(PCRE2_NEWLINE STREQUAL "NUL")
374 SET(NEWLINE_DEFAULT "6")
375ENDIF(PCRE2_NEWLINE STREQUAL "NUL")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100376
377IF(NEWLINE_DEFAULT STREQUAL "")
378 MESSAGE(FATAL_ERROR "The PCRE2_NEWLINE variable must be set to one of the following values: \"LF\", \"CR\", \"CRLF\", \"ANY\", \"ANYCRLF\".")
379ENDIF(NEWLINE_DEFAULT STREQUAL "")
380
381IF(PCRE2_EBCDIC)
382 SET(EBCDIC 1)
383ENDIF(PCRE2_EBCDIC)
384
385IF(PCRE2_EBCDIC_NL25)
386 SET(EBCDIC 1)
387 SET(EBCDIC_NL25 1)
388ENDIF(PCRE2_EBCDIC_NL25)
389
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100390# Output files
391
392CONFIGURE_FILE(config-cmake.h.in
393 ${PROJECT_BINARY_DIR}/config.h
394 @ONLY)
395
396# Parse version numbers and date out of configure.ac
397
398file(STRINGS ${PROJECT_SOURCE_DIR}/configure.ac
399 configure_lines
400 LIMIT_COUNT 50 # Read only the first 50 lines of the file
401)
402
403set(SEARCHED_VARIABLES "pcre2_major" "pcre2_minor" "pcre2_prerelease" "pcre2_date")
404foreach(configure_line ${configure_lines})
405 foreach(_substitution_variable ${SEARCHED_VARIABLES})
406 string(TOUPPER ${_substitution_variable} _substitution_variable_upper)
407 if (NOT ${_substitution_variable_upper})
408 string(REGEX MATCH "m4_define\\(${_substitution_variable}, \\[(.*)\\]" MACTHED_STRING ${configure_line})
409 if (CMAKE_MATCH_1)
410 set(${_substitution_variable_upper} ${CMAKE_MATCH_1})
411 endif()
412 endif()
413 endforeach()
414endforeach()
415
416CONFIGURE_FILE(src/pcre2.h.in
417 ${PROJECT_BINARY_DIR}/pcre2.h
418 @ONLY)
419
420# What about pcre2-config and libpcre2.pc?
421
422# Character table generation
423
424OPTION(PCRE2_REBUILD_CHARTABLES "Rebuild char tables" OFF)
425IF(PCRE2_REBUILD_CHARTABLES)
426 ADD_EXECUTABLE(dftables src/dftables.c)
427 ADD_CUSTOM_COMMAND(
428 COMMENT "Generating character tables (pcre2_chartables.c) for current locale"
429 DEPENDS dftables
430 COMMAND dftables
431 ARGS ${PROJECT_BINARY_DIR}/pcre2_chartables.c
432 OUTPUT ${PROJECT_BINARY_DIR}/pcre2_chartables.c
433 )
434ELSE(PCRE2_REBUILD_CHARTABLES)
435 CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/src/pcre2_chartables.c.dist
436 ${PROJECT_BINARY_DIR}/pcre2_chartables.c
437 COPYONLY)
438ENDIF(PCRE2_REBUILD_CHARTABLES)
439
440# Source code
441
442SET(PCRE2_HEADERS ${PROJECT_BINARY_DIR}/pcre2.h)
443
444SET(PCRE2_SOURCES
445 src/pcre2_auto_possess.c
446 ${PROJECT_BINARY_DIR}/pcre2_chartables.c
447 src/pcre2_compile.c
448 src/pcre2_config.c
449 src/pcre2_context.c
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700450 src/pcre2_convert.c
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100451 src/pcre2_dfa_match.c
452 src/pcre2_error.c
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700453 src/pcre2_extuni.c
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100454 src/pcre2_find_bracket.c
455 src/pcre2_jit_compile.c
456 src/pcre2_maketables.c
457 src/pcre2_match.c
458 src/pcre2_match_data.c
459 src/pcre2_newline.c
460 src/pcre2_ord2utf.c
461 src/pcre2_pattern_info.c
Elliott Hughes0c26e192019-08-07 12:24:46 -0700462 src/pcre2_script_run.c
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100463 src/pcre2_serialize.c
464 src/pcre2_string_utils.c
465 src/pcre2_study.c
466 src/pcre2_substitute.c
467 src/pcre2_substring.c
468 src/pcre2_tables.c
469 src/pcre2_ucd.c
470 src/pcre2_valid_utf.c
471 src/pcre2_xclass.c
472)
473
474SET(PCRE2POSIX_HEADERS src/pcre2posix.h)
475SET(PCRE2POSIX_SOURCES src/pcre2posix.c)
476
477IF(MINGW AND NOT PCRE2_STATIC)
478IF (EXISTS ${PROJECT_SOURCE_DIR}/pcre2.rc)
479ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/pcre2.o
480PRE-LINK
481COMMAND windres ARGS pcre2.rc pcre2.o
482WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
483COMMENT Using pcre2 coff info in mingw build)
484SET(PCRE2_SOURCES
485 ${PCRE2_SOURCES} ${PROJECT_SOURCE_DIR}/pcre2.o
486)
487ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/pcre2.rc)
488IF (EXISTS ${PROJECT_SOURCE_DIR}/pcre2posix.rc)
489ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/pcre2posix.o
490PRE-LINK
491COMMAND windres ARGS pcre2posix.rc pcre2posix.o
492WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
493COMMENT Using pcre2posix coff info in mingw build)
494SET(PCRE2POSIX_SOURCES
495 ${PCRE2POSIX_SOURCES} ${PROJECT_SOURCE_DIR}/pcre2posix.o
496)
497ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/pcre2posix.rc)
498ENDIF(MINGW AND NOT PCRE2_STATIC)
499
500IF(MSVC AND NOT PCRE2_STATIC)
501IF (EXISTS ${PROJECT_SOURCE_DIR}/pcre2.rc)
502SET(PCRE2_SOURCES
503 ${PCRE2_SOURCES} pcre2.rc)
504ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/pcre2.rc)
505IF (EXISTS ${PROJECT_SOURCE_DIR}/pcre2posix.rc)
506SET(PCRE2POSIX_SOURCES
507 ${PCRE2POSIX_SOURCES} pcre2posix.rc)
508ENDIF (EXISTS ${PROJECT_SOURCE_DIR}/pcre2posix.rc)
509ENDIF(MSVC AND NOT PCRE2_STATIC)
510
Janis Danisevskis8b979b22016-08-15 16:09:16 +0100511# Fix static compilation with MSVC: https://bugs.exim.org/show_bug.cgi?id=1681
512# This code was taken from the CMake wiki, not from WebM.
513
514IF(MSVC AND PCRE2_STATIC_RUNTIME)
515 MESSAGE(STATUS "** MSVC and PCRE2_STATIC_RUNTIME: modifying compiler flags to use static runtime library")
516 foreach(flag_var
517 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
518 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
519 string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
520 endforeach()
521ENDIF(MSVC AND PCRE2_STATIC_RUNTIME)
522
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100523# Build setup
524
525ADD_DEFINITIONS(-DHAVE_CONFIG_H)
526
527IF(MSVC)
528 ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS)
529ENDIF(MSVC)
530
531SET(CMAKE_INCLUDE_CURRENT_DIR 1)
532# needed to make sure to not link debug libs
533# against release libs and vice versa
534IF(WIN32)
535 SET(CMAKE_DEBUG_POSTFIX "d")
536ENDIF(WIN32)
537
538SET(targets)
539
540# 8-bit library
541
542IF(PCRE2_BUILD_PCRE2_8)
543ADD_LIBRARY(pcre2-8 ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
544SET_PROPERTY(TARGET pcre2-8
545 PROPERTY COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8)
546SET(targets ${targets} pcre2-8)
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700547ADD_LIBRARY(pcre2-posix ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES})
548SET_PROPERTY(TARGET pcre2-posix
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100549 PROPERTY COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8)
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700550SET(targets ${targets} pcre2-posix)
551TARGET_LINK_LIBRARIES(pcre2-posix pcre2-8)
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100552
553IF(MINGW AND NOT PCRE2_STATIC)
554 IF(NON_STANDARD_LIB_PREFIX)
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700555 SET_TARGET_PROPERTIES(pcre2-8 pcre2-posix PROPERTIES PREFIX "")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100556 ENDIF(NON_STANDARD_LIB_PREFIX)
557 IF(NON_STANDARD_LIB_SUFFIX)
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700558 SET_TARGET_PROPERTIES(pcre2-8 pcre2-posix PROPERTIES SUFFIX "-0.dll")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100559 ENDIF(NON_STANDARD_LIB_SUFFIX)
560ENDIF(MINGW AND NOT PCRE2_STATIC)
561ENDIF(PCRE2_BUILD_PCRE2_8)
562
563# 16-bit library
564
565IF(PCRE2_BUILD_PCRE2_16)
566ADD_LIBRARY(pcre2-16 ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
567SET_PROPERTY(TARGET pcre2-16
568 PROPERTY COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16)
569SET(targets ${targets} pcre2-16)
570
571IF(MINGW AND NOT PCRE2_STATIC)
572 IF(NON_STANDARD_LIB_PREFIX)
573 SET_TARGET_PROPERTIES(pcre2-16 PROPERTIES PREFIX "")
574 ENDIF(NON_STANDARD_LIB_PREFIX)
575 IF(NON_STANDARD_LIB_SUFFIX)
576 SET_TARGET_PROPERTIES(pcre2-16 PROPERTIES SUFFIX "-0.dll")
577 ENDIF(NON_STANDARD_LIB_SUFFIX)
578ENDIF(MINGW AND NOT PCRE2_STATIC)
579ENDIF(PCRE2_BUILD_PCRE2_16)
580
581# 32-bit library
582
583IF(PCRE2_BUILD_PCRE2_32)
584ADD_LIBRARY(pcre2-32 ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
585SET_PROPERTY(TARGET pcre2-32
586 PROPERTY COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32)
587SET(targets ${targets} pcre2-32)
588
589IF(MINGW AND NOT PCRE2_STATIC)
590 IF(NON_STANDARD_LIB_PREFIX)
591 SET_TARGET_PROPERTIES(pcre2-32 PROPERTIES PREFIX "")
592 ENDIF(NON_STANDARD_LIB_PREFIX)
593 IF(NON_STANDARD_LIB_SUFFIX)
594 SET_TARGET_PROPERTIES(pcre2-32 PROPERTIES SUFFIX "-0.dll")
595 ENDIF(NON_STANDARD_LIB_SUFFIX)
596ENDIF(MINGW AND NOT PCRE2_STATIC)
597ENDIF(PCRE2_BUILD_PCRE2_32)
598
599# Executables
600
601IF(PCRE2_BUILD_PCRE2GREP)
602 ADD_EXECUTABLE(pcre2grep src/pcre2grep.c)
603 SET_PROPERTY(TARGET pcre2grep
604 PROPERTY COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8)
605 SET(targets ${targets} pcre2grep)
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700606 TARGET_LINK_LIBRARIES(pcre2grep pcre2-posix ${PCRE2GREP_LIBS})
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100607ENDIF(PCRE2_BUILD_PCRE2GREP)
608
609# Testing
610
611IF(PCRE2_BUILD_TESTS)
612 ENABLE_TESTING()
613
614 SET(PCRE2TEST_SOURCES src/pcre2test.c)
615
Elliott Hughes653c2102019-01-09 15:41:36 -0800616 IF(MSVC)
617 # This is needed to avoid a stack overflow error in the standard tests. The
618 # flag should be indicated with a forward-slash instead of a hyphen, but
619 # then CMake treats it as a file path.
620 SET(PCRE2TEST_LINKER_FLAGS -STACK:2500000)
621 ENDIF(MSVC)
622
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100623 ADD_EXECUTABLE(pcre2test ${PCRE2TEST_SOURCES})
624 SET(targets ${targets} pcre2test)
625 IF(PCRE2_BUILD_PCRE2_8)
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700626 LIST(APPEND PCRE2TEST_LIBS pcre2-posix pcre2-8)
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100627 ENDIF(PCRE2_BUILD_PCRE2_8)
628 IF(PCRE2_BUILD_PCRE2_16)
629 LIST(APPEND PCRE2TEST_LIBS pcre2-16)
630 ENDIF(PCRE2_BUILD_PCRE2_16)
631 IF(PCRE2_BUILD_PCRE2_32)
632 LIST(APPEND PCRE2TEST_LIBS pcre2-32)
633 ENDIF(PCRE2_BUILD_PCRE2_32)
Elliott Hughes653c2102019-01-09 15:41:36 -0800634 TARGET_LINK_LIBRARIES(pcre2test ${PCRE2TEST_LIBS} ${PCRE2TEST_LINKER_FLAGS})
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100635
636 IF(PCRE2_SUPPORT_JIT)
637 ADD_EXECUTABLE(pcre2_jit_test src/pcre2_jit_test.c)
638 SET(targets ${targets} pcre2_jit_test)
639 SET(PCRE2_JIT_TEST_LIBS )
640 IF(PCRE2_BUILD_PCRE2_8)
641 LIST(APPEND PCRE2_JIT_TEST_LIBS pcre2-8)
642 ENDIF(PCRE2_BUILD_PCRE2_8)
643 IF(PCRE2_BUILD_PCRE2_16)
644 LIST(APPEND PCRE2_JIT_TEST_LIBS pcre2-16)
645 ENDIF(PCRE2_BUILD_PCRE2_16)
646 IF(PCRE2_BUILD_PCRE2_32)
647 LIST(APPEND PCRE2_JIT_TEST_LIBS pcre2-32)
648 ENDIF(PCRE2_BUILD_PCRE2_32)
649 TARGET_LINK_LIBRARIES(pcre2_jit_test ${PCRE2_JIT_TEST_LIBS})
650 ENDIF(PCRE2_SUPPORT_JIT)
651
Elliott Hughes0c26e192019-08-07 12:24:46 -0700652 # exes in Debug location tested by the RunTest and RunGrepTest shell scripts
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100653 # via "make test"
654
Elliott Hughes0c26e192019-08-07 12:24:46 -0700655 # The commented out code below provokes a warning about future removal
656 # of the facility, and requires policy CMP0026 to be set to "OLD". I have
657 # got fed-up with the warnings, but my plea for help on the mailing list
658 # produced no response. So, I've hacked. The new code below seems to work on
659 # Linux.
660
661# IF(PCRE2_BUILD_PCRE2GREP)
662# GET_TARGET_PROPERTY(PCRE2GREP_EXE pcre2grep DEBUG_LOCATION)
663# ENDIF(PCRE2_BUILD_PCRE2GREP)
664#
665# GET_TARGET_PROPERTY(PCRE2TEST_EXE pcre2test DEBUG_LOCATION)
666
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100667 IF(PCRE2_BUILD_PCRE2GREP)
Elliott Hughes0c26e192019-08-07 12:24:46 -0700668 SET(PCRE2GREP_EXE $<TARGET_FILE:pcre2grep>)
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100669 ENDIF(PCRE2_BUILD_PCRE2GREP)
670
Elliott Hughes0c26e192019-08-07 12:24:46 -0700671 SET(PCRE2TEST_EXE $<TARGET_FILE:pcre2test>)
672
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100673
674# =================================================
675 # Write out a CTest configuration file
676 #
677 FILE(WRITE ${PROJECT_BINARY_DIR}/CTestCustom.ctest
678 "# This is a generated file.
679MESSAGE(\"When testing is complete, review test output in the
680\\\"${PROJECT_BINARY_DIR}/Testing/Temporary\\\" folder.\")
681MESSAGE(\" \")
682")
683
684 FILE(WRITE ${PROJECT_BINARY_DIR}/pcre2_test.sh
685 "#! /bin/sh
686# This is a generated file.
687. ${PROJECT_SOURCE_DIR}/RunTest
688if test \"$?\" != \"0\"; then exit 1; fi
689# End
690")
691
692 IF(UNIX)
693 ADD_TEST(pcre2_test sh ${PROJECT_BINARY_DIR}/pcre2_test.sh)
694 ENDIF(UNIX)
695
696 IF(PCRE2_BUILD_PCRE2GREP)
697 FILE(WRITE ${PROJECT_BINARY_DIR}/pcre2_grep_test.sh
698 "#! /bin/sh
699# This is a generated file.
700. ${PROJECT_SOURCE_DIR}/RunGrepTest
701if test \"$?\" != \"0\"; then exit 1; fi
702# End
703")
704
705 IF(UNIX)
706 ADD_TEST(pcre2_grep_test sh ${PROJECT_BINARY_DIR}/pcre2_grep_test.sh)
707 ENDIF(UNIX)
708 ENDIF(PCRE2_BUILD_PCRE2GREP)
709
710 IF(WIN32)
711 # Provide environment for executing the bat file version of RunTest
712 FILE(TO_NATIVE_PATH ${PROJECT_SOURCE_DIR} winsrc)
713 FILE(TO_NATIVE_PATH ${PROJECT_BINARY_DIR} winbin)
714 FILE(TO_NATIVE_PATH ${PCRE2TEST_EXE} winexe)
715
716 FILE(WRITE ${PROJECT_BINARY_DIR}/pcre2_test.bat
717 "\@REM This is a generated file.
718\@echo off
719setlocal
720SET srcdir=\"${winsrc}\"
721SET pcre2test=\"${winexe}\"
722if not [%CMAKE_CONFIG_TYPE%]==[] SET pcre2test=\"${winbin}\\%CMAKE_CONFIG_TYPE%\\pcre2test.exe\"
723call %srcdir%\\RunTest.Bat
724if errorlevel 1 exit /b 1
725echo RunTest.bat tests successfully completed
726")
727
728 ADD_TEST(NAME pcre2_test_bat
729 COMMAND pcre2_test.bat)
730 SET_TESTS_PROPERTIES(pcre2_test_bat PROPERTIES
731 PASS_REGULAR_EXPRESSION "RunTest\\.bat tests successfully completed")
732
733 IF("$ENV{OSTYPE}" STREQUAL "msys")
734 # Both the sh and bat file versions of RunTest are run if make test is used
735 # in msys
736 ADD_TEST(pcre2_test_sh sh.exe ${PROJECT_BINARY_DIR}/pcre2_test.sh)
737 IF(PCRE2_BUILD_PCRE2GREP)
738 ADD_TEST(pcre2_grep_test sh.exe ${PROJECT_BINARY_DIR}/pcre2_grep_test.sh)
739 ENDIF(PCRE2_BUILD_PCRE2GREP)
740 ENDIF("$ENV{OSTYPE}" STREQUAL "msys")
741 ENDIF(WIN32)
742
743 # Changed to accommodate testing whichever location was just built
744
745 IF(PCRE2_SUPPORT_JIT)
746 ADD_TEST(pcre2_jit_test pcre2_jit_test)
747 ENDIF(PCRE2_SUPPORT_JIT)
748
749ENDIF(PCRE2_BUILD_TESTS)
750
751# Installation
752
753SET(CMAKE_INSTALL_ALWAYS 1)
754
755INSTALL(TARGETS ${targets}
756 RUNTIME DESTINATION bin
757 LIBRARY DESTINATION lib
758 ARCHIVE DESTINATION lib)
759
760INSTALL(FILES ${PCRE2_HEADERS} ${PCRE2POSIX_HEADERS} DESTINATION include)
761
762FILE(GLOB html ${PROJECT_SOURCE_DIR}/doc/html/*.html)
763FILE(GLOB man1 ${PROJECT_SOURCE_DIR}/doc/*.1)
764FILE(GLOB man3 ${PROJECT_SOURCE_DIR}/doc/*.3)
765
766FOREACH(man ${man3})
767 GET_FILENAME_COMPONENT(man_tmp ${man} NAME)
768 SET(man3_new ${man3} ${man})
769ENDFOREACH(man ${man3})
770SET(man3 ${man3_new})
771
772INSTALL(FILES ${man1} DESTINATION man/man1)
773INSTALL(FILES ${man3} DESTINATION man/man3)
774INSTALL(FILES ${html} DESTINATION share/doc/pcre2/html)
775
776IF(MSVC AND INSTALL_MSVC_PDB)
777 INSTALL(FILES ${PROJECT_BINARY_DIR}/pcre2.pdb
778 ${PROJECT_BINARY_DIR}/pcre2posix.pdb
779 DESTINATION bin
780 CONFIGURATIONS RelWithDebInfo)
781 INSTALL(FILES ${PROJECT_BINARY_DIR}/pcre2d.pdb
782 ${PROJECT_BINARY_DIR}/pcre2posixd.pdb
783 DESTINATION bin
784 CONFIGURATIONS Debug)
785ENDIF(MSVC AND INSTALL_MSVC_PDB)
786
787# Help, only for nice output
788IF(BUILD_SHARED_LIBS)
789 SET(BUILD_STATIC_LIBS OFF)
790ELSE(BUILD_SHARED_LIBS)
791 SET(BUILD_STATIC_LIBS ON)
792ENDIF(BUILD_SHARED_LIBS)
793
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700794IF(PCRE2_HEAP_MATCH_RECURSE)
795 MESSAGE(WARNING "HEAP_MATCH_RECURSE is obsolete and does nothing.")
796ENDIF(PCRE2_HEAP_MATCH_RECURSE)
797
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100798IF(PCRE2_SHOW_REPORT)
799 STRING(TOUPPER "${CMAKE_BUILD_TYPE}" buildtype)
800 IF (CMAKE_C_FLAGS)
801 SET(cfsp " ")
802 ENDIF(CMAKE_C_FLAGS)
803 MESSAGE(STATUS "")
804 MESSAGE(STATUS "")
805 MESSAGE(STATUS "PCRE2 configuration summary:")
806 MESSAGE(STATUS "")
807 MESSAGE(STATUS " Install prefix .................. : ${CMAKE_INSTALL_PREFIX}")
808 MESSAGE(STATUS " C compiler ...................... : ${CMAKE_C_COMPILER}")
809 MESSAGE(STATUS " C compiler flags ................ : ${CMAKE_C_FLAGS}${cfsp}${CMAKE_C_FLAGS_${buildtype}}")
810 MESSAGE(STATUS "")
811 MESSAGE(STATUS " Build 8 bit PCRE2 library ....... : ${PCRE2_BUILD_PCRE2_8}")
812 MESSAGE(STATUS " Build 16 bit PCRE2 library ...... : ${PCRE2_BUILD_PCRE2_16}")
813 MESSAGE(STATUS " Build 32 bit PCRE2 library ...... : ${PCRE2_BUILD_PCRE2_32}")
814 MESSAGE(STATUS " Enable JIT compiling support .... : ${PCRE2_SUPPORT_JIT}")
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700815 MESSAGE(STATUS " Use SELinux allocator in JIT .... : ${PCRE2_SUPPORT_JIT_SEALLOC}")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100816 MESSAGE(STATUS " Enable Unicode support .......... : ${PCRE2_SUPPORT_UNICODE}")
817 MESSAGE(STATUS " Newline char/sequence ........... : ${PCRE2_NEWLINE}")
818 MESSAGE(STATUS " \\R matches only ANYCRLF ......... : ${PCRE2_SUPPORT_BSR_ANYCRLF}")
819 MESSAGE(STATUS " \\C is disabled .................. : ${PCRE2_NEVER_BACKSLASH_C}")
820 MESSAGE(STATUS " EBCDIC coding ................... : ${PCRE2_EBCDIC}")
821 MESSAGE(STATUS " EBCDIC coding with NL=0x25 ...... : ${PCRE2_EBCDIC_NL25}")
822 MESSAGE(STATUS " Rebuild char tables ............. : ${PCRE2_REBUILD_CHARTABLES}")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100823 MESSAGE(STATUS " Internal link size .............. : ${PCRE2_LINK_SIZE}")
824 MESSAGE(STATUS " Parentheses nest limit .......... : ${PCRE2_PARENS_NEST_LIMIT}")
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700825 MESSAGE(STATUS " Heap limit ...................... : ${PCRE2_HEAP_LIMIT}")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100826 MESSAGE(STATUS " Match limit ..................... : ${PCRE2_MATCH_LIMIT}")
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700827 MESSAGE(STATUS " Match depth limit ............... : ${PCRE2_MATCH_LIMIT_DEPTH}")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100828 MESSAGE(STATUS " Build shared libs ............... : ${BUILD_SHARED_LIBS}")
829 MESSAGE(STATUS " Build static libs ............... : ${BUILD_STATIC_LIBS}")
830 MESSAGE(STATUS " Build pcre2grep ................. : ${PCRE2_BUILD_PCRE2GREP}")
Elliott Hughes0c26e192019-08-07 12:24:46 -0700831 MESSAGE(STATUS " Enable JIT in pcre2grep ......... : ${PCRE2GREP_SUPPORT_JIT}")
832 MESSAGE(STATUS " Enable callouts in pcre2grep .... : ${PCRE2GREP_SUPPORT_CALLOUT}")
833 MESSAGE(STATUS " Enable callout fork in pcre2grep. : ${PCRE2GREP_SUPPORT_CALLOUT_FORK}")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100834 MESSAGE(STATUS " Buffer size for pcre2grep ....... : ${PCRE2GREP_BUFSIZE}")
Elliott Hughes0c26e192019-08-07 12:24:46 -0700835 MESSAGE(STATUS " Build tests (implies pcre2test .. : ${PCRE2_BUILD_TESTS}")
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100836 MESSAGE(STATUS " and pcre2grep)")
837 IF(ZLIB_FOUND)
838 MESSAGE(STATUS " Link pcre2grep with libz ........ : ${PCRE2_SUPPORT_LIBZ}")
839 ELSE(ZLIB_FOUND)
840 MESSAGE(STATUS " Link pcre2grep with libz ........ : Library not found" )
841 ENDIF(ZLIB_FOUND)
842 IF(BZIP2_FOUND)
843 MESSAGE(STATUS " Link pcre2grep with libbz2 ...... : ${PCRE2_SUPPORT_LIBBZ2}")
844 ELSE(BZIP2_FOUND)
845 MESSAGE(STATUS " Link pcre2grep with libbz2 ...... : Library not found" )
846 ENDIF(BZIP2_FOUND)
847 IF(EDITLINE_FOUND)
848 MESSAGE(STATUS " Link pcre2test with libeditline . : ${PCRE2_SUPPORT_LIBEDIT}")
849 ELSE(EDITLINE_FOUND)
850 MESSAGE(STATUS " Link pcre2test with libeditline . : Library not found" )
851 ENDIF(EDITLINE_FOUND)
852 IF(READLINE_FOUND)
853 MESSAGE(STATUS " Link pcre2test with libreadline . : ${PCRE2_SUPPORT_LIBREADLINE}")
854 ELSE(READLINE_FOUND)
855 MESSAGE(STATUS " Link pcre2test with libreadline . : Library not found" )
856 ENDIF(READLINE_FOUND)
857 MESSAGE(STATUS " Support Valgrind .................: ${PCRE2_SUPPORT_VALGRIND}")
Elliott Hughes0c26e192019-08-07 12:24:46 -0700858 IF(PCRE2_DISABLE_PERCENT_ZT)
859 MESSAGE(STATUS " Use %zu and %td ..................: OFF" )
860 ELSE(PCRE2_DISABLE_PERCENT_ZT)
861 MESSAGE(STATUS " Use %zu and %td ..................: AUTO" )
862 ENDIF(PCRE2_DISABLE_PERCENT_ZT)
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100863
864 IF(MINGW AND NOT PCRE2_STATIC)
865 MESSAGE(STATUS " Non-standard dll names (prefix) . : ${NON_STANDARD_LIB_PREFIX}")
866 MESSAGE(STATUS " Non-standard dll names (suffix) . : ${NON_STANDARD_LIB_SUFFIX}")
867 ENDIF(MINGW AND NOT PCRE2_STATIC)
868
869 IF(MSVC)
870 MESSAGE(STATUS " Install MSVC .pdb files ..........: ${INSTALL_MSVC_PDB}")
871 ENDIF(MSVC)
872
873 MESSAGE(STATUS "")
874ENDIF(PCRE2_SHOW_REPORT)
875
876# end CMakeLists.txt