• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1dnl Process this file with autoconf to produce a configure script.
2
3dnl NOTE FOR MAINTAINERS: Do not use minor version numbers 08 or 09 because
4dnl the leading zeros may cause them to be treated as invalid octal constants
5dnl if a PCRE2 user writes code that uses PCRE2_MINOR as a number. There is now
6dnl a check further down that throws an error if 08 or 09 are used.
7
8dnl The PCRE2_PRERELEASE feature is for identifying release candidates. It might
9dnl be defined as -RC2, for example. For real releases, it should be empty.
10
11m4_define(pcre2_major, [10])
12m4_define(pcre2_minor, [22])
13m4_define(pcre2_prerelease, [])
14m4_define(pcre2_date, [2016-07-29])
15
16# NOTE: The CMakeLists.txt file searches for the above variables in the first
17# 50 lines of this file. Please update that if the variables above are moved.
18
19# Libtool shared library interface versions (current:revision:age)
20m4_define(libpcre2_8_version,     [4:0:4])
21m4_define(libpcre2_16_version,    [4:0:4])
22m4_define(libpcre2_32_version,    [4:0:4])
23m4_define(libpcre2_posix_version, [1:0:0])
24
25AC_PREREQ(2.57)
26AC_INIT(PCRE2, pcre2_major.pcre2_minor[]pcre2_prerelease, , pcre2)
27AC_CONFIG_SRCDIR([src/pcre2.h.in])
28AM_INIT_AUTOMAKE([dist-bzip2 dist-zip])
29m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
30AC_CONFIG_HEADERS(src/config.h)
31
32# This is a new thing required to stop a warning from automake 1.12
33m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
34
35# This was added at the suggestion of libtoolize (03-Jan-10)
36AC_CONFIG_MACRO_DIR([m4])
37
38# The default CFLAGS in Autoconf are "-g -O2" for gcc and just "-g" for any
39# other compiler. There doesn't seem to be a standard way of getting rid of the
40# -g (which I don't think is needed for a production library). This fudge seems
41# to achieve the necessary. First, we remember the externally set values of
42# CFLAGS. Then call the AC_PROG_CC macro to find the compiler - if CFLAGS is
43# not set, it will be set to Autoconf's defaults. Afterwards, if the original
44# values were not set, remove the -g from the Autoconf defaults.
45
46remember_set_CFLAGS="$CFLAGS"
47
48AC_PROG_CC
49AM_PROG_CC_C_O
50
51if test "x$remember_set_CFLAGS" = "x"
52then
53  if test "$CFLAGS" = "-g -O2"
54  then
55    CFLAGS="-O2"
56  elif test "$CFLAGS" = "-g"
57  then
58    CFLAGS=""
59  fi
60fi
61
62# Check for a 64-bit integer type
63AC_TYPE_INT64_T
64
65AC_PROG_INSTALL
66AC_LIBTOOL_WIN32_DLL
67LT_INIT
68AC_PROG_LN_S
69
70# Check for GCC visibility feature
71
72PCRE2_VISIBILITY
73
74# Versioning
75
76PCRE2_MAJOR="pcre2_major"
77PCRE2_MINOR="pcre2_minor"
78PCRE2_PRERELEASE="pcre2_prerelease"
79PCRE2_DATE="pcre2_date"
80
81if test "$PCRE2_MINOR" = "08" -o "$PCRE2_MINOR" = "09"
82then
83  echo "***"
84  echo "*** Minor version number $PCRE2_MINOR must not be used. ***"
85  echo "*** Use only 00 to 07 or 10 onwards, to avoid octal issues. ***"
86  echo "***"
87  exit 1
88fi
89
90AC_SUBST(PCRE2_MAJOR)
91AC_SUBST(PCRE2_MINOR)
92AC_SUBST(PCRE2_PRERELEASE)
93AC_SUBST(PCRE2_DATE)
94
95# Set a more sensible default value for $(htmldir).
96if test "x$htmldir" = 'x${docdir}'
97then
98  htmldir='${docdir}/html'
99fi
100
101# Force an error for PCRE1 size options
102AC_ARG_ENABLE(pcre8,,,enable_pcre8=no)
103AC_ARG_ENABLE(pcre16,,,enable_pcre16=no)
104AC_ARG_ENABLE(pcre32,,,enable_pcre32=no)
105
106if test "$enable_pcre8$enable_pcre16$enable_pcre32" != "nonono"
107then
108  echo "** ERROR: Use --[[en|dis]]able-pcre2-[[8|16|32]], not --[[en|dis]]able-pcre[[8|16|32]]"
109  exit 1
110fi
111
112# Handle --disable-pcre2-8 (enabled by default)
113AC_ARG_ENABLE(pcre2-8,
114              AS_HELP_STRING([--disable-pcre2-8],
115                             [disable 8 bit character support]),
116              , enable_pcre2_8=unset)
117AC_SUBST(enable_pcre2_8)
118
119# Handle --enable-pcre2-16 (disabled by default)
120AC_ARG_ENABLE(pcre2-16,
121              AS_HELP_STRING([--enable-pcre2-16],
122                             [enable 16 bit character support]),
123              , enable_pcre2_16=unset)
124AC_SUBST(enable_pcre2_16)
125
126# Handle --enable-pcre2-32 (disabled by default)
127AC_ARG_ENABLE(pcre2-32,
128              AS_HELP_STRING([--enable-pcre2-32],
129                             [enable 32 bit character support]),
130              , enable_pcre2_32=unset)
131AC_SUBST(enable_pcre2_32)
132
133# Handle --dnable-debug (disabled by default)
134AC_ARG_ENABLE(debug,
135              AS_HELP_STRING([--enable-debug],
136                             [enable debugging code]),
137              , enable_debug=no)
138
139# Handle --enable-jit (disabled by default)
140AC_ARG_ENABLE(jit,
141              AS_HELP_STRING([--enable-jit],
142                             [enable Just-In-Time compiling support]),
143              , enable_jit=no)
144
145# Handle --disable-pcre2grep-jit (enabled by default)
146AC_ARG_ENABLE(pcre2grep-jit,
147              AS_HELP_STRING([--disable-pcre2grep-jit],
148                             [disable JIT support in pcre2grep]),
149              , enable_pcre2grep_jit=yes)
150
151# Handle --disable-pcre2grep-callout (enabled by default) but not supported
152# for Windows.
153if test "$HAVE_WINDOWS_H" != "1"; then
154  AC_ARG_ENABLE(pcre2grep-callout,
155                AS_HELP_STRING([--disable-pcre2grep-callout],
156                               [disable callout script support in pcre2grep]),
157                , enable_pcre2grep_callout=yes)
158else
159  enable_pcre2grep_callout=no
160fi
161
162# Handle --enable-rebuild-chartables
163AC_ARG_ENABLE(rebuild-chartables,
164              AS_HELP_STRING([--enable-rebuild-chartables],
165                             [rebuild character tables in current locale]),
166              , enable_rebuild_chartables=no)
167
168# Handle --disable-unicode (enabled by default)
169AC_ARG_ENABLE(unicode,
170              AS_HELP_STRING([--disable-unicode],
171                             [disable Unicode support]),
172              , enable_unicode=unset)
173
174# Handle newline options
175ac_pcre2_newline=lf
176AC_ARG_ENABLE(newline-is-cr,
177              AS_HELP_STRING([--enable-newline-is-cr],
178                             [use CR as newline character]),
179              ac_pcre2_newline=cr)
180AC_ARG_ENABLE(newline-is-lf,
181              AS_HELP_STRING([--enable-newline-is-lf],
182                             [use LF as newline character (default)]),
183              ac_pcre2_newline=lf)
184AC_ARG_ENABLE(newline-is-crlf,
185              AS_HELP_STRING([--enable-newline-is-crlf],
186                             [use CRLF as newline sequence]),
187              ac_pcre2_newline=crlf)
188AC_ARG_ENABLE(newline-is-anycrlf,
189              AS_HELP_STRING([--enable-newline-is-anycrlf],
190                             [use CR, LF, or CRLF as newline sequence]),
191              ac_pcre2_newline=anycrlf)
192AC_ARG_ENABLE(newline-is-any,
193              AS_HELP_STRING([--enable-newline-is-any],
194                             [use any valid Unicode newline sequence]),
195              ac_pcre2_newline=any)
196enable_newline="$ac_pcre2_newline"
197
198# Handle --enable-bsr-anycrlf
199AC_ARG_ENABLE(bsr-anycrlf,
200              AS_HELP_STRING([--enable-bsr-anycrlf],
201                             [\R matches only CR, LF, CRLF by default]),
202              , enable_bsr_anycrlf=no)
203
204# Handle --enable-never-backslash-C
205AC_ARG_ENABLE(never-backslash-C,
206              AS_HELP_STRING([--enable-never-backslash-C],
207                             [use of \C causes an error]),
208              , enable_never_backslash_C=no)
209
210# Handle --enable-ebcdic
211AC_ARG_ENABLE(ebcdic,
212              AS_HELP_STRING([--enable-ebcdic],
213                             [assume EBCDIC coding rather than ASCII; incompatible with --enable-utf; use only in (uncommon) EBCDIC environments; it implies --enable-rebuild-chartables]),
214              , enable_ebcdic=no)
215
216# Handle --enable-ebcdic-nl25
217AC_ARG_ENABLE(ebcdic-nl25,
218              AS_HELP_STRING([--enable-ebcdic-nl25],
219                             [set EBCDIC code for NL to 0x25 instead of 0x15; it implies --enable-ebcdic]),
220              , enable_ebcdic_nl25=no)
221
222# Handle --disable-stack-for-recursion
223AC_ARG_ENABLE(stack-for-recursion,
224              AS_HELP_STRING([--disable-stack-for-recursion],
225                             [don't use stack recursion when matching]),
226              , enable_stack_for_recursion=yes)
227
228# Handle --enable-pcre2grep-libz
229AC_ARG_ENABLE(pcre2grep-libz,
230              AS_HELP_STRING([--enable-pcre2grep-libz],
231                             [link pcre2grep with libz to handle .gz files]),
232              , enable_pcre2grep_libz=no)
233
234# Handle --enable-pcre2grep-libbz2
235AC_ARG_ENABLE(pcre2grep-libbz2,
236              AS_HELP_STRING([--enable-pcre2grep-libbz2],
237                             [link pcre2grep with libbz2 to handle .bz2 files]),
238              , enable_pcre2grep_libbz2=no)
239
240# Handle --with-pcre2grep-bufsize=N
241AC_ARG_WITH(pcre2grep-bufsize,
242              AS_HELP_STRING([--with-pcre2grep-bufsize=N],
243                             [pcre2grep buffer size (default=20480, minimum=8192)]),
244              , with_pcre2grep_bufsize=20480)
245
246# Handle --enable-pcre2test-libedit
247AC_ARG_ENABLE(pcre2test-libedit,
248              AS_HELP_STRING([--enable-pcre2test-libedit],
249                             [link pcre2test with libedit]),
250              , enable_pcre2test_libedit=no)
251
252# Handle --enable-pcre2test-libreadline
253AC_ARG_ENABLE(pcre2test-libreadline,
254              AS_HELP_STRING([--enable-pcre2test-libreadline],
255                             [link pcre2test with libreadline]),
256              , enable_pcre2test_libreadline=no)
257
258# Handle --with-link-size=N
259AC_ARG_WITH(link-size,
260            AS_HELP_STRING([--with-link-size=N],
261                           [internal link size (2, 3, or 4 allowed; default=2)]),
262            , with_link_size=2)
263
264# Handle --with-parens-nest-limit=N
265AC_ARG_WITH(parens-nest-limit,
266            AS_HELP_STRING([--with-parens-nest-limit=N],
267                           [nested parentheses limit (default=250)]),
268            , with_parens_nest_limit=250)
269
270# Handle --with-match-limit=N
271AC_ARG_WITH(match-limit,
272            AS_HELP_STRING([--with-match-limit=N],
273                           [default limit on internal looping (default=10000000)]),
274            , with_match_limit=10000000)
275
276# Handle --with-match-limit_recursion=N
277#
278# Note: In config.h, the default is to define MATCH_LIMIT_RECURSION
279# symbolically as MATCH_LIMIT, which in turn is defined to be some numeric
280# value (e.g. 10000000). MATCH_LIMIT_RECURSION can otherwise be set to some
281# different numeric value (or even the same numeric value as MATCH_LIMIT,
282# though no longer defined in terms of the latter).
283#
284AC_ARG_WITH(match-limit-recursion,
285            AS_HELP_STRING([--with-match-limit-recursion=N],
286                           [default limit on internal recursion (default=MATCH_LIMIT)]),
287            , with_match_limit_recursion=MATCH_LIMIT)
288
289# Handle --enable-valgrind
290AC_ARG_ENABLE(valgrind,
291              AS_HELP_STRING([--enable-valgrind],
292                             [valgrind support]),
293              , enable_valgrind=no)
294
295# Enable code coverage reports using gcov
296AC_ARG_ENABLE(coverage,
297              AS_HELP_STRING([--enable-coverage],
298                             [enable code coverage reports using gcov]),
299              , enable_coverage=no)
300
301# Set the default value for pcre2-8
302if test "x$enable_pcre2_8" = "xunset"
303then
304  enable_pcre2_8=yes
305fi
306
307# Set the default value for pcre2-16
308if test "x$enable_pcre2_16" = "xunset"
309then
310  enable_pcre2_16=no
311fi
312
313# Set the default value for pcre2-32
314if test "x$enable_pcre2_32" = "xunset"
315then
316  enable_pcre2_32=no
317fi
318
319# Make sure at least one library is selected
320if test "x$enable_pcre2_8$enable_pcre2_16$enable_pcre2_32" = "xnonono"
321then
322  AC_MSG_ERROR([At least one of the 8, 16 or 32 bit libraries must be enabled])
323fi
324
325# Unicode is enabled by default.
326if test "x$enable_unicode" = "xunset"
327then
328  enable_unicode=yes
329fi
330
331# Convert the newline identifier into the appropriate integer value. These must
332# agree with the PCRE2_NEWLINE_xxx values in pcre2.h.
333
334case "$enable_newline" in
335  cr)      ac_pcre2_newline_value=1 ;;
336  lf)      ac_pcre2_newline_value=2 ;;
337  crlf)    ac_pcre2_newline_value=3 ;;
338  any)     ac_pcre2_newline_value=4 ;;
339  anycrlf) ac_pcre2_newline_value=5 ;;
340  *)
341  AC_MSG_ERROR([invalid argument \"$enable_newline\" to --enable-newline option])
342  ;;
343esac
344
345# --enable-ebcdic-nl25 implies --enable-ebcdic
346if test "x$enable_ebcdic_nl25" = "xyes"; then
347  enable_ebcdic=yes
348fi
349
350# Make sure that if enable_ebcdic is set, rebuild_chartables is also enabled.
351# Also check that UTF support is not requested, because PCRE2 cannot handle
352# EBCDIC and UTF in the same build. To do so it would need to use different
353# character constants depending on the mode. Also, EBCDIC cannot be used with
354# 16-bit and 32-bit libraries.
355#
356if test "x$enable_ebcdic" = "xyes"; then
357  enable_rebuild_chartables=yes
358  if test "x$enable_unicode" = "xyes"; then
359    AC_MSG_ERROR([support for EBCDIC and Unicode cannot be enabled at the same time])
360  fi
361  if test "x$enable_pcre2_16" = "xyes" -o "x$enable_pcre2_32" = "xyes"; then
362    AC_MSG_ERROR([EBCDIC support is available only for the 8-bit library])
363  fi
364fi
365
366# Check argument to --with-link-size
367case "$with_link_size" in
368  2|3|4) ;;
369  *)
370  AC_MSG_ERROR([invalid argument \"$with_link_size\" to --with-link-size option])
371  ;;
372esac
373
374AH_TOP([
375/* PCRE2 is written in Standard C, but there are a few non-standard things it
376can cope with, allowing it to run on SunOS4 and other "close to standard"
377systems.
378
379In environments that support the GNU autotools, config.h.in is converted into
380config.h by the "configure" script. In environments that use CMake,
381config-cmake.in is converted into config.h. If you are going to build PCRE2 "by
382hand" without using "configure" or CMake, you should copy the distributed
383config.h.generic to config.h, and edit the macro definitions to be the way you
384need them. You must then add -DHAVE_CONFIG_H to all of your compile commands,
385so that config.h is included at the start of every source.
386
387Alternatively, you can avoid editing by using -D on the compiler command line
388to set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H,
389but if you do, default values will be taken from config.h for non-boolean
390macros that are not defined on the command line.
391
392Boolean macros such as HAVE_STDLIB_H and SUPPORT_PCRE2_8 should either be defined
393(conventionally to 1) for TRUE, and not defined at all for FALSE. All such
394macros are listed as a commented #undef in config.h.generic. Macros such as
395MATCH_LIMIT, whose actual value is relevant, have defaults defined, but are
396surrounded by #ifndef/#endif lines so that the value can be overridden by -D.
397
398PCRE2 uses memmove() if HAVE_MEMMOVE is defined; otherwise it uses bcopy() if
399HAVE_BCOPY is defined. If your system has neither bcopy() nor memmove(), make
400sure both macros are undefined; an emulation function will then be used. */])
401
402# Checks for header files.
403AC_HEADER_STDC
404AC_CHECK_HEADERS(limits.h sys/types.h sys/stat.h dirent.h)
405AC_CHECK_HEADERS([windows.h], [HAVE_WINDOWS_H=1])
406AC_CHECK_HEADERS([sys/wait.h], [HAVE_SYS_WAIT_H=1])
407
408# Conditional compilation
409AM_CONDITIONAL(WITH_PCRE2_8, test "x$enable_pcre2_8" = "xyes")
410AM_CONDITIONAL(WITH_PCRE2_16, test "x$enable_pcre2_16" = "xyes")
411AM_CONDITIONAL(WITH_PCRE2_32, test "x$enable_pcre2_32" = "xyes")
412AM_CONDITIONAL(WITH_DEBUG, test "x$enable_debug" = "xyes")
413AM_CONDITIONAL(WITH_REBUILD_CHARTABLES, test "x$enable_rebuild_chartables" = "xyes")
414AM_CONDITIONAL(WITH_JIT, test "x$enable_jit" = "xyes")
415AM_CONDITIONAL(WITH_UNICODE, test "x$enable_unicode" = "xyes")
416AM_CONDITIONAL(WITH_VALGRIND, test "x$enable_valgrind" = "xyes")
417
418# Checks for typedefs, structures, and compiler characteristics.
419
420AC_C_CONST
421AC_TYPE_SIZE_T
422
423# Checks for library functions.
424
425AC_CHECK_FUNCS(bcopy memmove strerror)
426
427# Check for the availability of libz (aka zlib)
428
429AC_CHECK_HEADERS([zlib.h], [HAVE_ZLIB_H=1])
430AC_CHECK_LIB([z], [gzopen], [HAVE_LIBZ=1])
431
432# Check for the availability of libbz2. Originally we just used AC_CHECK_LIB,
433# as for libz. However, this had the following problem, diagnosed and fixed by
434# a user:
435#
436#   - libbz2 uses the Pascal calling convention (WINAPI) for the functions
437#     under Win32.
438#   - The standard autoconf AC_CHECK_LIB fails to include "bzlib.h",
439#     therefore missing the function definition.
440#   - The compiler thus generates a "C" signature for the test function.
441#   - The linker fails to find the "C" function.
442#   - PCRE2 fails to configure if asked to do so against libbz2.
443#
444# Solution:
445#
446#   - Replace the AC_CHECK_LIB test with a custom test.
447
448AC_CHECK_HEADERS([bzlib.h], [HAVE_BZLIB_H=1])
449# Original test
450# AC_CHECK_LIB([bz2], [BZ2_bzopen], [HAVE_LIBBZ2=1])
451#
452# Custom test follows
453
454AC_MSG_CHECKING([for libbz2])
455OLD_LIBS="$LIBS"
456LIBS="$LIBS -lbz2"
457AC_LINK_IFELSE([AC_LANG_PROGRAM([[
458#ifdef HAVE_BZLIB_H
459#include <bzlib.h>
460#endif]],
461[[return (int)BZ2_bzopen("conftest", "rb");]])],
462[AC_MSG_RESULT([yes]);HAVE_LIBBZ2=1; break;],
463AC_MSG_RESULT([no]))
464LIBS="$OLD_LIBS"
465
466# Check for the availabiity of libreadline
467
468if test "$enable_pcre2test_libreadline" = "yes"; then
469 AC_CHECK_HEADERS([readline/readline.h], [HAVE_READLINE_H=1])
470 AC_CHECK_HEADERS([readline/history.h], [HAVE_HISTORY_H=1])
471 AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-lreadline"],
472   [unset ac_cv_lib_readline_readline;
473    AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-ltinfo"],
474     [unset ac_cv_lib_readline_readline;
475      AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-lcurses"],
476       [unset ac_cv_lib_readline_readline;
477        AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-lncurses"],
478         [unset ac_cv_lib_readline_readline;
479	  AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-lncursesw"],
480           [unset ac_cv_lib_readline_readline;
481	    AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-ltermcap"],
482             [LIBREADLINE=""],
483             [-ltermcap])],
484           [-lncursesw])],
485         [-lncurses])],
486       [-lcurses])],
487     [-ltinfo])])
488 AC_SUBST(LIBREADLINE)
489 if test -n "$LIBREADLINE"; then
490   if test "$LIBREADLINE" != "-lreadline"; then
491     echo "-lreadline needs $LIBREADLINE"
492     LIBREADLINE="-lreadline $LIBREADLINE"
493   fi
494 fi
495fi
496
497
498# Check for the availability of libedit. Different distributions put its
499# headers in different places. Try to cover the most common ones.
500
501if test "$enable_pcre2test_libedit" = "yes"; then
502  AC_CHECK_HEADERS([editline/readline.h], [HAVE_EDITLINE_READLINE_H=1],
503    [AC_CHECK_HEADERS([edit/readline/readline.h], [HAVE_READLINE_READLINE_H=1],
504      [AC_CHECK_HEADERS([readline/readline.h], [HAVE_READLINE_READLINE_H=1])])])
505  AC_CHECK_LIB([edit], [readline], [LIBEDIT="-ledit"])
506fi
507
508# This facilitates -ansi builds under Linux
509dnl AC_DEFINE([_GNU_SOURCE], [], [Enable GNU extensions in glibc])
510
511PCRE2_STATIC_CFLAG=""
512if test "x$enable_shared" = "xno" ; then
513  AC_DEFINE([PCRE2_STATIC], [1], [
514    Define to any value if linking statically (TODO: make nice with Libtool)])
515  PCRE2_STATIC_CFLAG="-DPCRE2_STATIC"
516fi
517AC_SUBST(PCRE2_STATIC_CFLAG)
518
519# Here is where PCRE2-specific defines are handled
520
521if test "$enable_pcre2_8" = "yes"; then
522  AC_DEFINE([SUPPORT_PCRE2_8], [], [
523    Define to any value to enable the 8 bit PCRE2 library.])
524fi
525
526if test "$enable_pcre2_16" = "yes"; then
527  AC_DEFINE([SUPPORT_PCRE2_16], [], [
528    Define to any value to enable the 16 bit PCRE2 library.])
529fi
530
531if test "$enable_pcre2_32" = "yes"; then
532  AC_DEFINE([SUPPORT_PCRE2_32], [], [
533    Define to any value to enable the 32 bit PCRE2 library.])
534fi
535
536if test "$enable_debug" = "yes"; then
537  AC_DEFINE([PCRE2_DEBUG], [], [
538    Define to any value to include debugging code.])
539fi
540
541# Unless running under Windows, JIT support requires pthreads.
542
543if test "$enable_jit" = "yes"; then
544  if test "$HAVE_WINDOWS_H" != "1"; then
545    AX_PTHREAD([], [AC_MSG_ERROR([JIT support requires pthreads])])
546    CC="$PTHREAD_CC"
547    CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
548    LIBS="$PTHREAD_LIBS $LIBS"
549  fi
550  AC_DEFINE([SUPPORT_JIT], [], [
551    Define to any value to enable support for Just-In-Time compiling.])
552else
553  enable_pcre2grep_jit="no"
554fi
555
556if test "$enable_pcre2grep_jit" = "yes"; then
557  AC_DEFINE([SUPPORT_PCRE2GREP_JIT], [], [
558    Define to any value to enable JIT support in pcre2grep.])
559fi
560
561# Currently pcre2grep callout string is not supported under Windows.
562
563if test "$enable_pcre2grep_callout" = "yes"; then
564  if test "$HAVE_WINDOWS_H" != "1"; then
565    if test "$HAVE_SYS_WAIT_H" != "1"; then
566      AC_MSG_ERROR([Callout script support needs sys/wait.h.])
567    fi
568    AC_DEFINE([SUPPORT_PCRE2GREP_CALLOUT], [], [
569      Define to any value to enable callout script support in pcre2grep.])
570  else
571    AC_MSG_WARN([Callout script support is not available for Windows: disabled])
572    enable_pcre2grep_callout=no
573  fi
574fi
575
576if test "$enable_unicode" = "yes"; then
577  AC_DEFINE([SUPPORT_UNICODE], [], [
578    Define to any value to enable support for Unicode and UTF encoding.
579    This will work even in an EBCDIC environment, but it is incompatible
580    with the EBCDIC macro. That is, PCRE2 can support *either* EBCDIC
581    code *or* ASCII/Unicode, but not both at once.])
582fi
583
584if test "$enable_stack_for_recursion" = "no"; then
585  AC_DEFINE([HEAP_MATCH_RECURSE], [], [
586    PCRE2 uses recursive function calls to handle backtracking while
587    matching. This can sometimes be a problem on systems that have
588    stacks of limited size. Define HEAP_MATCH_RECURSE to any value to get a
589    version that doesn't use recursion in the match() function; instead
590    it creates its own stack by steam using memory from the heap. For more
591    detail, see the comments and other stuff just above the match() function.])
592fi
593
594if test "$enable_pcre2grep_libz" = "yes"; then
595  AC_DEFINE([SUPPORT_LIBZ], [], [
596    Define to any value to allow pcre2grep to be linked with libz, so that it is
597    able to handle .gz files.])
598fi
599
600if test "$enable_pcre2grep_libbz2" = "yes"; then
601  AC_DEFINE([SUPPORT_LIBBZ2], [], [
602    Define to any value to allow pcre2grep to be linked with libbz2, so that it
603    is able to handle .bz2 files.])
604fi
605
606if test $with_pcre2grep_bufsize -lt 8192 ; then
607  AC_MSG_WARN([$with_pcre2grep_bufsize is too small for --with-pcre2grep-bufsize; using 8192])
608  with_pcre2grep_bufsize="8192"
609else
610  if test $? -gt 1 ; then
611  AC_MSG_ERROR([Bad value for  --with-pcre2grep-bufsize])
612  fi
613fi
614
615AC_DEFINE_UNQUOTED([PCRE2GREP_BUFSIZE], [$with_pcre2grep_bufsize], [
616  The value of PCRE2GREP_BUFSIZE determines the size of buffer used by pcre2grep
617  to hold parts of the file it is searching. This is also the minimum value.
618  The actual amount of memory used by pcre2grep is three times this number,
619  because it allows for the buffering of "before" and "after" lines.])
620
621if test "$enable_pcre2test_libedit" = "yes"; then
622  AC_DEFINE([SUPPORT_LIBEDIT], [], [
623    Define to any value to allow pcre2test to be linked with libedit.])
624  LIBREADLINE="$LIBEDIT"
625elif test "$enable_pcre2test_libreadline" = "yes"; then
626  AC_DEFINE([SUPPORT_LIBREADLINE], [], [
627    Define to any value to allow pcre2test to be linked with libreadline.])
628fi
629
630AC_DEFINE_UNQUOTED([NEWLINE_DEFAULT], [$ac_pcre2_newline_value], [
631  The value of NEWLINE_DEFAULT determines the default newline character
632  sequence. PCRE2 client programs can override this by selecting other values
633  at run time. The valid values are 1 (CR), 2 (LF), 3 (CRLF), 4 (ANY),
634  and 5 (ANYCRLF).])
635
636if test "$enable_bsr_anycrlf" = "yes"; then
637  AC_DEFINE([BSR_ANYCRLF], [], [
638    By default, the \R escape sequence matches any Unicode line ending
639    character or sequence of characters. If BSR_ANYCRLF is defined (to any
640    value), this is changed so that backslash-R matches only CR, LF, or CRLF.
641    The build-time default can be overridden by the user of PCRE2 at runtime.])
642fi
643
644if test "$enable_never_backslash_C" = "yes"; then
645  AC_DEFINE([NEVER_BACKSLASH_C], [], [
646    Defining NEVER_BACKSLASH_C locks out the use of \C in all patterns.])
647fi
648
649AC_DEFINE_UNQUOTED([LINK_SIZE], [$with_link_size], [
650  The value of LINK_SIZE determines the number of bytes used to store
651  links as offsets within the compiled regex. The default is 2, which
652  allows for compiled patterns up to 64K long. This covers the vast
653  majority of cases. However, PCRE2 can also be compiled to use 3 or 4
654  bytes instead. This allows for longer patterns in extreme cases.])
655
656AC_DEFINE_UNQUOTED([PARENS_NEST_LIMIT], [$with_parens_nest_limit], [
657  The value of PARENS_NEST_LIMIT specifies the maximum depth of nested
658  parentheses (of any kind) in a pattern. This limits the amount of system
659  stack that is used while compiling a pattern.])
660
661AC_DEFINE_UNQUOTED([MATCH_LIMIT], [$with_match_limit], [
662  The value of MATCH_LIMIT determines the default number of times the
663  internal match() function can be called during a single execution of
664  pcre2_match(). There is a runtime interface for setting a different
665  limit. The limit exists in order to catch runaway regular
666  expressions that take for ever to determine that they do not match.
667  The default is set very large so that it does not accidentally catch
668  legitimate cases.])
669
670AC_DEFINE_UNQUOTED([MATCH_LIMIT_RECURSION], [$with_match_limit_recursion], [
671  The above limit applies to all calls of match(), whether or not they
672  increase the recursion depth. In some environments it is desirable
673  to limit the depth of recursive calls of match() more strictly, in
674  order to restrict the maximum amount of stack (or heap, if
675  HEAP_MATCH_RECURSE is defined) that is used. The value of
676  MATCH_LIMIT_RECURSION applies only to recursive calls of match(). To
677  have any useful effect, it must be less than the value of
678  MATCH_LIMIT. The default is to use the same value as MATCH_LIMIT.
679  There is a runtime method for setting a different limit.])
680
681AC_DEFINE([MAX_NAME_SIZE], [32], [
682  This limit is parameterized just in case anybody ever wants to
683  change it. Care must be taken if it is increased, because it guards
684  against integer overflow caused by enormously large patterns.])
685
686AC_DEFINE([MAX_NAME_COUNT], [10000], [
687  This limit is parameterized just in case anybody ever wants to
688  change it. Care must be taken if it is increased, because it guards
689  against integer overflow caused by enormously large patterns.])
690
691AH_VERBATIM([PCRE2_EXP_DEFN], [
692/* If you are compiling for a system other than a Unix-like system or
693   Win32, and it needs some magic to be inserted before the definition
694   of a function that is exported by the library, define this macro to
695   contain the relevant magic. If you do not define this macro, a suitable
696    __declspec value is used for Windows systems; in other environments
697   "extern" is used for a C compiler and "extern C" for a C++ compiler.
698   This macro apears at the start of every exported function that is part
699   of the external API. It does not appear on functions that are "external"
700   in the C sense, but which are internal to the library. */
701#undef PCRE2_EXP_DEFN])
702
703if test "$enable_ebcdic" = "yes"; then
704  AC_DEFINE_UNQUOTED([EBCDIC], [], [
705    If you are compiling for a system that uses EBCDIC instead of ASCII
706    character codes, define this macro to any value. When EBCDIC is set, PCRE2
707    assumes that all input strings are in EBCDIC. If you do not define this
708    macro, PCRE2 will assume input strings are ASCII or UTF-8/16/32 Unicode. It
709    is not possible to build a version of PCRE2 that supports both EBCDIC and
710    UTF-8/16/32.])
711fi
712
713if test "$enable_ebcdic_nl25" = "yes"; then
714  AC_DEFINE_UNQUOTED([EBCDIC_NL25], [], [
715    In an EBCDIC environment, define this macro to any value to arrange for
716    the NL character to be 0x25 instead of the default 0x15. NL plays the role
717    that LF does in an ASCII/Unicode environment.])
718fi
719
720if test "$enable_valgrind" = "yes"; then
721  AC_DEFINE_UNQUOTED([SUPPORT_VALGRIND], [], [
722     Define to any value for valgrind support to find invalid memory reads.])
723fi
724
725# Platform specific issues
726NO_UNDEFINED=
727EXPORT_ALL_SYMBOLS=
728case $host_os in
729  cygwin* | mingw* )
730    if test X"$enable_shared" = Xyes; then
731      NO_UNDEFINED="-no-undefined"
732      EXPORT_ALL_SYMBOLS="-Wl,--export-all-symbols"
733    fi
734    ;;
735esac
736
737# The extra LDFLAGS for each particular library. The libpcre2*_version values
738# are m4 variables, assigned above.
739
740EXTRA_LIBPCRE2_8_LDFLAGS="$EXTRA_LIBPCRE2_8_LDFLAGS \
741  $NO_UNDEFINED -version-info libpcre2_8_version"
742
743EXTRA_LIBPCRE2_16_LDFLAGS="$EXTRA_LIBPCRE2_16_LDFLAGS \
744  $NO_UNDEFINED -version-info libpcre2_16_version"
745
746EXTRA_LIBPCRE2_32_LDFLAGS="$EXTRA_LIBPCRE2_32_LDFLAGS \
747  $NO_UNDEFINED -version-info libpcre2_32_version"
748
749EXTRA_LIBPCRE2_POSIX_LDFLAGS="$EXTRA_LIBPCRE2_POSIX_LDFLAGS \
750  $NO_UNDEFINED -version-info libpcre2_posix_version"
751
752AC_SUBST(EXTRA_LIBPCRE2_8_LDFLAGS)
753AC_SUBST(EXTRA_LIBPCRE2_16_LDFLAGS)
754AC_SUBST(EXTRA_LIBPCRE2_32_LDFLAGS)
755AC_SUBST(EXTRA_LIBPCRE2_POSIX_LDFLAGS)
756
757# When we run 'make distcheck', use these arguments. Turning off compiler
758# optimization makes it run faster.
759DISTCHECK_CONFIGURE_FLAGS="CFLAGS='' CXXFLAGS='' --enable-pcre2-16 --enable-pcre2-32 --enable-jit --enable-utf"
760AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
761
762# Check that, if --enable-pcre2grep-libz or --enable-pcre2grep-libbz2 is
763# specified, the relevant library is available.
764
765if test "$enable_pcre2grep_libz" = "yes"; then
766  if test "$HAVE_ZLIB_H" != "1"; then
767    echo "** Cannot --enable-pcre2grep-libz because zlib.h was not found"
768    exit 1
769  fi
770  if test "$HAVE_LIBZ" != "1"; then
771    echo "** Cannot --enable-pcre2grep-libz because libz was not found"
772    exit 1
773  fi
774  LIBZ="-lz"
775fi
776AC_SUBST(LIBZ)
777
778if test "$enable_pcre2grep_libbz2" = "yes"; then
779  if test "$HAVE_BZLIB_H" != "1"; then
780    echo "** Cannot --enable-pcre2grep-libbz2 because bzlib.h was not found"
781    exit 1
782  fi
783  if test "$HAVE_LIBBZ2" != "1"; then
784    echo "** Cannot --enable-pcre2grep-libbz2 because libbz2 was not found"
785    exit 1
786  fi
787  LIBBZ2="-lbz2"
788fi
789AC_SUBST(LIBBZ2)
790
791# Similarly for --enable-pcre2test-readline
792
793if test "$enable_pcre2test_libedit" = "yes"; then
794  if test "$enable_pcre2test_libreadline" = "yes"; then
795    echo "** Cannot use both --enable-pcre2test-libedit and --enable-pcre2test-readline"
796    exit 1
797  fi
798  if test "$HAVE_EDITLINE_READLINE_H" != "1" -a \
799          "$HAVE_READLINE_READLINE_H" != "1"; then
800    echo "** Cannot --enable-pcre2test-libedit because neither editline/readline.h"
801    echo "** nor readline/readline.h was found."
802    exit 1
803  fi
804  if test -z "$LIBEDIT"; then
805    echo "** Cannot --enable-pcre2test-libedit because libedit library was not found."
806    exit 1
807  fi
808fi
809
810if test "$enable_pcre2test_libreadline" = "yes"; then
811  if test "$HAVE_READLINE_H" != "1"; then
812    echo "** Cannot --enable-pcre2test-readline because readline/readline.h was not found."
813    exit 1
814  fi
815  if test "$HAVE_HISTORY_H" != "1"; then
816    echo "** Cannot --enable-pcre2test-readline because readline/history.h was not found."
817    exit 1
818  fi
819  if test -z "$LIBREADLINE"; then
820    echo "** Cannot --enable-pcre2test-readline because readline library was not found."
821    exit 1
822  fi
823fi
824
825# Handle valgrind support
826
827if test "$enable_valgrind" = "yes"; then
828  m4_ifdef([PKG_CHECK_MODULES],
829           [PKG_CHECK_MODULES([VALGRIND],[valgrind])],
830           [AC_MSG_ERROR([pkg-config not supported])])
831fi
832
833# Handle code coverage reporting support
834if test "$enable_coverage" = "yes"; then
835  if test "x$GCC" != "xyes"; then
836    AC_MSG_ERROR([Code coverage reports can only be generated when using GCC])
837  fi
838
839  # ccache is incompatible with gcov
840  AC_PATH_PROG([SHTOOL],[shtool],[false])
841  case `$SHTOOL path $CC` in
842    *ccache*) cc_ccache=yes;;
843    *) cc_ccache=no;;
844  esac
845
846  if test "$cc_ccache" = "yes"; then
847    if test -z "$CCACHE_DISABLE" -o "$CCACHE_DISABLE" != "1"; then
848      AC_MSG_ERROR([must export CCACHE_DISABLE=1 to disable ccache for code coverage])
849    fi
850  fi
851
852  AC_ARG_VAR([LCOV],[the ltp lcov program])
853  AC_PATH_PROG([LCOV],[lcov],[false])
854  if test "x$LCOV" = "xfalse"; then
855    AC_MSG_ERROR([lcov not found])
856  fi
857
858  AC_ARG_VAR([GENHTML],[the ltp genhtml program])
859  AC_PATH_PROG([GENHTML],[genhtml],[false])
860  if test "x$GENHTML" = "xfalse"; then
861    AC_MSG_ERROR([genhtml not found])
862  fi
863
864  # Set flags needed for gcov
865  GCOV_CFLAGS="-O0 -ggdb3 -fprofile-arcs -ftest-coverage"
866  GCOV_CXXFLAGS="-O0 -ggdb3 -fprofile-arcs -ftest-coverage"
867  GCOV_LIBS="-lgcov"
868  AC_SUBST([GCOV_CFLAGS])
869  AC_SUBST([GCOV_CXXFLAGS])
870  AC_SUBST([GCOV_LIBS])
871fi # enable_coverage
872
873AM_CONDITIONAL([WITH_GCOV],[test "x$enable_coverage" = "xyes"])
874
875# Produce these files, in addition to config.h.
876AC_CONFIG_FILES(
877	Makefile
878	libpcre2-8.pc
879	libpcre2-16.pc
880	libpcre2-32.pc
881	libpcre2-posix.pc
882	pcre2-config
883	src/pcre2.h
884)
885
886# Make the generated script files executable.
887AC_CONFIG_COMMANDS([script-chmod], [chmod a+x pcre2-config])
888
889# Make sure that pcre2_chartables.c is removed in case the method for
890# creating it was changed by reconfiguration.
891AC_CONFIG_COMMANDS([delete-old-chartables], [rm -f pcre2_chartables.c])
892
893AC_OUTPUT
894
895# Print out a nice little message after configure is run displaying the
896# chosen options.
897
898ebcdic_nl_code=n/a
899if test "$enable_ebcdic_nl25" = "yes"; then
900  ebcdic_nl_code=0x25
901elif test "$enable_ebcdic" = "yes"; then
902  ebcdic_nl_code=0x15
903fi
904
905cat <<EOF
906
907$PACKAGE-$VERSION configuration summary:
908
909    Install prefix .................. : ${prefix}
910    C preprocessor .................. : ${CPP}
911    C compiler ...................... : ${CC}
912    Linker .......................... : ${LD}
913    C preprocessor flags ............ : ${CPPFLAGS}
914    C compiler flags ................ : ${CFLAGS} ${VISIBILITY_CFLAGS}
915    Linker flags .................... : ${LDFLAGS}
916    Extra libraries ................. : ${LIBS}
917
918    Build 8-bit pcre2 library ....... : ${enable_pcre2_8}
919    Build 16-bit pcre2 library ...... : ${enable_pcre2_16}
920    Build 32-bit pcre2 library ...... : ${enable_pcre2_32}
921    Include debugging code .......... : ${enable_debug}
922    Enable JIT compiling support .... : ${enable_jit}
923    Enable Unicode support .......... : ${enable_unicode}
924    Newline char/sequence ........... : ${enable_newline}
925    \R matches only ANYCRLF ......... : ${enable_bsr_anycrlf}
926    \C is disabled .................. : ${enable_never_backslash_C}
927    EBCDIC coding ................... : ${enable_ebcdic}
928    EBCDIC code for NL .............. : ${ebcdic_nl_code}
929    Rebuild char tables ............. : ${enable_rebuild_chartables}
930    Use stack recursion ............. : ${enable_stack_for_recursion}
931    Internal link size .............. : ${with_link_size}
932    Nested parentheses limit ........ : ${with_parens_nest_limit}
933    Match limit ..................... : ${with_match_limit}
934    Match limit recursion ........... : ${with_match_limit_recursion}
935    Build shared libs ............... : ${enable_shared}
936    Build static libs ............... : ${enable_static}
937    Use JIT in pcre2grep ............ : ${enable_pcre2grep_jit}
938    Enable callouts in pcre2grep .... : ${enable_pcre2grep_callout}
939    Buffer size for pcre2grep ....... : ${with_pcre2grep_bufsize}
940    Link pcre2grep with libz ........ : ${enable_pcre2grep_libz}
941    Link pcre2grep with libbz2 ...... : ${enable_pcre2grep_libbz2}
942    Link pcre2test with libedit ..... : ${enable_pcre2test_libedit}
943    Link pcre2test with libreadline . : ${enable_pcre2test_libreadline}
944    Valgrind support ................ : ${enable_valgrind}
945    Code coverage ................... : ${enable_coverage}
946
947EOF
948
949dnl end configure.ac
950