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 PCRE user writes code that uses PCRE_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 PCRE_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(pcre_major, [8])
12m4_define(pcre_minor, [31])
13m4_define(pcre_prerelease, [])
14m4_define(pcre_date, [2012-07-06])
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(libpcre_version, [1:1:0])
21m4_define(libpcre16_version, [0:1:0])
22m4_define(libpcreposix_version, [0:1:0])
23m4_define(libpcrecpp_version, [0:0:0])
24
25AC_PREREQ(2.57)
26AC_INIT(PCRE, pcre_major.pcre_minor[]pcre_prerelease, , pcre)
27AC_CONFIG_SRCDIR([pcre.h.in])
28AM_INIT_AUTOMAKE([dist-bzip2 dist-zip])
29m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
30AC_CONFIG_HEADERS(config.h)
31
32# This was added at the suggestion of libtoolize (03-Jan-10)
33AC_CONFIG_MACRO_DIR([m4])
34
35# The default CFLAGS and CXXFLAGS in Autoconf are "-g -O2" for gcc and just
36# "-g" for any other compiler. There doesn't seem to be a standard way of
37# getting rid of the -g (which I don't think is needed for a production
38# library). This fudge seems to achieve the necessary. First, we remember the
39# externally set values of CFLAGS and CXXFLAGS. Then call the AC_PROG_CC and
40# AC_PROG_CXX macros to find the compilers - if CFLAGS and CXXFLAGS are not
41# set, they will be set to Autoconf's defaults. Afterwards, if the original
42# values were not set, remove the -g from the Autoconf defaults.
43# (PH 02-May-07)
44
45remember_set_CFLAGS="$CFLAGS"
46remember_set_CXXFLAGS="$CXXFLAGS"
47
48AC_PROG_CC
49AC_PROG_CXX
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
62if test "x$remember_set_CXXFLAGS" = "x"
63then
64  if test "$CXXFLAGS" = "-g -O2"
65  then
66    CXXFLAGS="-O2"
67  elif test "$CXXFLAGS" = "-g"
68  then
69    CXXFLAGS=""
70  fi
71fi
72
73# AC_PROG_CXX will return "g++" even if no c++ compiler is installed.
74# Check for that case, and just disable c++ code if g++ doesn't run.
75AC_LANG_PUSH(C++)
76AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],, CXX=""; CXXCP=""; CXXFLAGS="")
77AC_LANG_POP
78
79# Check for a 64-bit integer type
80AC_TYPE_INT64_T
81
82AC_PROG_INSTALL
83AC_LIBTOOL_WIN32_DLL
84LT_INIT
85AC_PROG_LN_S
86
87PCRE_MAJOR="pcre_major"
88PCRE_MINOR="pcre_minor"
89PCRE_PRERELEASE="pcre_prerelease"
90PCRE_DATE="pcre_date"
91
92if test "$PCRE_MINOR" = "08" -o "$PCRE_MINOR" = "09"
93then
94  echo "***"
95  echo "*** Minor version number $PCRE_MINOR must not be used. ***"
96  echo "*** Use only 01 to 07 or 10 onwards, to avoid octal issues. ***"
97  echo "***"
98  exit 1
99fi
100
101AC_SUBST(PCRE_MAJOR)
102AC_SUBST(PCRE_MINOR)
103AC_SUBST(PCRE_PRERELEASE)
104AC_SUBST(PCRE_DATE)
105
106# Set a more sensible default value for $(htmldir).
107if test "x$htmldir" = 'x${docdir}'
108then
109  htmldir='${docdir}/html'
110fi
111
112# Handle --disable-pcre8 (enabled by default)
113AC_ARG_ENABLE(pcre8,
114              AS_HELP_STRING([--disable-pcre8],
115                             [disable 8 bit character support]),
116              , enable_pcre8=unset)
117AC_SUBST(enable_pcre8)
118
119# Handle --enable-pcre16 (disabled by default)
120AC_ARG_ENABLE(pcre16,
121              AS_HELP_STRING([--enable-pcre16],
122                             [enable 16 bit character support]),
123              , enable_pcre16=unset)
124AC_SUBST(enable_pcre16)
125
126# Handle --disable-cpp. The substitution of enable_cpp is needed for use in
127# pcre-config.
128AC_ARG_ENABLE(cpp,
129              AS_HELP_STRING([--disable-cpp],
130                             [disable C++ support]),
131              , enable_cpp=unset)
132AC_SUBST(enable_cpp)
133
134# Handle --enable-jit (disabled by default)
135AC_ARG_ENABLE(jit,
136              AS_HELP_STRING([--enable-jit],
137                             [enable Just-In-Time compiling support]),
138              , enable_jit=no)
139
140# Handle --disable-pcregrep-jit (enabled by default)
141AC_ARG_ENABLE(pcregrep-jit,
142              AS_HELP_STRING([--disable-pcregrep-jit],
143                             [disable JIT support in pcregrep]),
144              , enable_pcregrep_jit=yes)
145
146# Handle --enable-rebuild-chartables
147AC_ARG_ENABLE(rebuild-chartables,
148              AS_HELP_STRING([--enable-rebuild-chartables],
149                             [rebuild character tables in current locale]),
150              , enable_rebuild_chartables=no)
151
152# Handle --enable-utf8 (disabled by default)
153AC_ARG_ENABLE(utf8,
154              AS_HELP_STRING([--enable-utf8],
155                             [another name for --enable-utf. Kept only for compatibility reasons]),
156              , enable_utf8=unset)
157
158# Handle --enable-utf (disabled by default)
159AC_ARG_ENABLE(utf,
160              AS_HELP_STRING([--enable-utf],
161                             [enable UTF-8/16 support (incompatible with --enable-ebcdic)]),
162              , enable_utf=unset)
163
164# Handle --enable-unicode-properties
165AC_ARG_ENABLE(unicode-properties,
166              AS_HELP_STRING([--enable-unicode-properties],
167                             [enable Unicode properties support (implies --enable-utf)]),
168              , enable_unicode_properties=no)
169
170# Handle --enable-newline=NL
171dnl AC_ARG_ENABLE(newline,
172dnl               AS_HELP_STRING([--enable-newline=NL],
173dnl                              [use NL as newline (lf, cr, crlf, anycrlf, any; default=lf)]),
174dnl               , enable_newline=lf)
175
176# Separate newline options
177ac_pcre_newline=lf
178AC_ARG_ENABLE(newline-is-cr,
179              AS_HELP_STRING([--enable-newline-is-cr],
180                             [use CR as newline character]),
181              ac_pcre_newline=cr)
182AC_ARG_ENABLE(newline-is-lf,
183              AS_HELP_STRING([--enable-newline-is-lf],
184                             [use LF as newline character (default)]),
185              ac_pcre_newline=lf)
186AC_ARG_ENABLE(newline-is-crlf,
187              AS_HELP_STRING([--enable-newline-is-crlf],
188                             [use CRLF as newline sequence]),
189              ac_pcre_newline=crlf)
190AC_ARG_ENABLE(newline-is-anycrlf,
191              AS_HELP_STRING([--enable-newline-is-anycrlf],
192                             [use CR, LF, or CRLF as newline sequence]),
193              ac_pcre_newline=anycrlf)
194AC_ARG_ENABLE(newline-is-any,
195              AS_HELP_STRING([--enable-newline-is-any],
196                             [use any valid Unicode newline sequence]),
197              ac_pcre_newline=any)
198enable_newline="$ac_pcre_newline"
199
200# Handle --enable-bsr-anycrlf
201AC_ARG_ENABLE(bsr-anycrlf,
202              AS_HELP_STRING([--enable-bsr-anycrlf],
203                             [\R matches only CR, LF, CRLF by default]),
204              , enable_bsr_anycrlf=no)
205
206# Handle --enable-ebcdic
207AC_ARG_ENABLE(ebcdic,
208              AS_HELP_STRING([--enable-ebcdic],
209                             [assume EBCDIC coding rather than ASCII; incompatible with --enable-utf; use only in (uncommon) EBCDIC environments; it implies --enable-rebuild-chartables]),
210              , enable_ebcdic=no)
211
212# Handle --disable-stack-for-recursion
213AC_ARG_ENABLE(stack-for-recursion,
214              AS_HELP_STRING([--disable-stack-for-recursion],
215                             [don't use stack recursion when matching]),
216              , enable_stack_for_recursion=yes)
217
218# Handle --enable-pcregrep-libz
219AC_ARG_ENABLE(pcregrep-libz,
220              AS_HELP_STRING([--enable-pcregrep-libz],
221                             [link pcregrep with libz to handle .gz files]),
222              , enable_pcregrep_libz=no)
223
224# Handle --enable-pcregrep-libbz2
225AC_ARG_ENABLE(pcregrep-libbz2,
226              AS_HELP_STRING([--enable-pcregrep-libbz2],
227                             [link pcregrep with libbz2 to handle .bz2 files]),
228              , enable_pcregrep_libbz2=no)
229
230# Handle --with-pcregrep-bufsize=N
231AC_ARG_WITH(pcregrep-bufsize,
232              AS_HELP_STRING([--with-pcregrep-bufsize=N],
233                             [pcregrep buffer size (default=20480)]),
234              , with_pcregrep_bufsize=20480)
235
236# Handle --enable-pcretest-libedit
237AC_ARG_ENABLE(pcretest-libedit,
238              AS_HELP_STRING([--enable-pcretest-libedit],
239                             [link pcretest with libedit]),
240              , enable_pcretest_libedit=no)
241
242# Handle --enable-pcretest-libreadline
243AC_ARG_ENABLE(pcretest-libreadline,
244              AS_HELP_STRING([--enable-pcretest-libreadline],
245                             [link pcretest with libreadline]),
246              , enable_pcretest_libreadline=no)
247
248# Handle --with-posix-malloc-threshold=NBYTES
249AC_ARG_WITH(posix-malloc-threshold,
250            AS_HELP_STRING([--with-posix-malloc-threshold=NBYTES],
251                           [threshold for POSIX malloc usage (default=10)]),
252            , with_posix_malloc_threshold=10)
253
254# Handle --with-link-size=N
255AC_ARG_WITH(link-size,
256            AS_HELP_STRING([--with-link-size=N],
257                           [internal link size (2, 3, or 4 allowed; default=2)]),
258            , with_link_size=2)
259
260# Handle --with-match-limit=N
261AC_ARG_WITH(match-limit,
262            AS_HELP_STRING([--with-match-limit=N],
263                           [default limit on internal looping (default=10000000)]),
264            , with_match_limit=10000000)
265
266# Handle --with-match-limit_recursion=N
267#
268# Note: In config.h, the default is to define MATCH_LIMIT_RECURSION
269# symbolically as MATCH_LIMIT, which in turn is defined to be some numeric
270# value (e.g. 10000000). MATCH_LIMIT_RECURSION can otherwise be set to some
271# different numeric value (or even the same numeric value as MATCH_LIMIT,
272# though no longer defined in terms of the latter).
273#
274AC_ARG_WITH(match-limit-recursion,
275            AS_HELP_STRING([--with-match-limit-recursion=N],
276                           [default limit on internal recursion (default=MATCH_LIMIT)]),
277            , with_match_limit_recursion=MATCH_LIMIT)
278
279# Copy enable_utf8 value to enable_utf for compatibility reasons
280if test "x$enable_utf8" != "xunset"
281then
282  if test "x$enable_utf" != "xunset"
283  then
284    AC_MSG_ERROR([--enable/disable-utf8 is kept only for compatibility reasons and its value is copied to --enable/disable-utf. Newer code must use --enable/disable-utf alone.])
285  fi
286  enable_utf=$enable_utf8
287fi
288
289# Set the default value for pcre8
290if test "x$enable_pcre8" = "xunset"
291then
292  enable_pcre8=yes
293fi
294
295# Set the default value for pcre16
296if test "x$enable_pcre16" = "xunset"
297then
298  enable_pcre16=no
299fi
300
301# Make sure enable_pcre8 or enable_pcre16 was set
302if test "x$enable_pcre8$enable_pcre16" = "xnono"
303then
304  AC_MSG_ERROR([Either 8 or 16 bit (or both) pcre library must be enabled])
305fi
306
307# Make sure that if enable_unicode_properties was set, that UTF support is enabled.
308if test "x$enable_unicode_properties" = "xyes"
309then
310  if test "x$enable_utf" = "xno"
311  then
312    AC_MSG_ERROR([support for Unicode properties requires UTF-8/16 support])
313  fi
314  enable_utf=yes
315fi
316
317# enable_utf is disabled by default.
318if test "x$enable_utf" = "xunset"
319then
320  enable_utf=no
321fi
322
323# enable_cpp copies the value of enable_pcre8 by default
324if test "x$enable_cpp" = "xunset"
325then
326  enable_cpp=$enable_pcre8
327fi
328
329# Make sure that if enable_cpp was set, that enable_pcre8 support is enabled
330if test "x$enable_cpp" = "xyes"
331then
332  if test "x$enable_pcre8" = "xno"
333  then
334    AC_MSG_ERROR([C++ library requires pcre library with 8 bit characters])
335  fi
336fi
337
338# Make sure that if enable_ebcdic is set, rebuild_chartables is also enabled.
339# Also check that UTF support is not requested, because PCRE cannot handle
340# EBCDIC and UTF in the same build. To do so it would need to use different
341# character constants depending on the mode.
342#
343if test "x$enable_ebcdic" = "xyes"
344then
345  enable_rebuild_chartables=yes
346  if test "x$enable_utf" = "xyes"
347  then
348    AC_MSG_ERROR([support for EBCDIC and UTF-8/16 cannot be enabled at the same time])
349  fi
350fi
351
352# Convert the newline identifier into the appropriate integer value.
353case "$enable_newline" in
354  lf)      ac_pcre_newline_value=10   ;;
355  cr)      ac_pcre_newline_value=13   ;;
356  crlf)    ac_pcre_newline_value=3338 ;;
357  anycrlf) ac_pcre_newline_value=-2   ;;
358  any)     ac_pcre_newline_value=-1   ;;
359  *)
360  AC_MSG_ERROR([invalid argument \"$enable_newline\" to --enable-newline option])
361  ;;
362esac
363
364# Check argument to --with-link-size
365case "$with_link_size" in
366  2|3|4) ;;
367  *)
368  AC_MSG_ERROR([invalid argument \"$with_link_size\" to --with-link-size option])
369  ;;
370esac
371
372AH_TOP([
373/* On Unix-like systems config.h.in is converted by "configure" into config.h.
374Some other environments also support the use of "configure". PCRE is written in
375Standard C, but there are a few non-standard things it can cope with, allowing
376it to run on SunOS4 and other "close to standard" systems.
377
378If you are going to build PCRE "by hand" on a system without "configure" you
379should copy the distributed config.h.generic to config.h, and then set up the
380macro definitions the way you need them. You must then add -DHAVE_CONFIG_H to
381all of your compile commands, so that config.h is included at the start of
382every source.
383
384Alternatively, you can avoid editing by using -D on the compiler command line
385to set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H.
386
387PCRE uses memmove() if HAVE_MEMMOVE is set to 1; otherwise it uses bcopy() if
388HAVE_BCOPY is set to 1. If your system has neither bcopy() nor memmove(), set
389them both to 0; an emulation function will be used. */])
390
391# Checks for header files.
392AC_HEADER_STDC
393AC_CHECK_HEADERS(limits.h sys/types.h sys/stat.h dirent.h windows.h)
394
395# The files below are C++ header files.
396pcre_have_type_traits="0"
397pcre_have_bits_type_traits="0"
398if test "x$enable_cpp" = "xyes" -a -n "$CXX"
399then
400AC_LANG_PUSH(C++)
401
402# Older versions of pcre defined pcrecpp::no_arg, but in new versions
403# it's called pcrecpp::RE::no_arg.  For backwards ABI compatibility,
404# we want to make one an alias for the other.  Different systems do
405# this in different ways.  Some systems, for instance, can do it via
406# a linker flag: -alias (for os x 10.5) or -i (for os x <=10.4).
407OLD_LDFLAGS="$LDFLAGS"
408for flag in "-alias,__ZN7pcrecpp2RE6no_argE,__ZN7pcrecpp6no_argE" \
409            "-i__ZN7pcrecpp6no_argE:__ZN7pcrecpp2RE6no_argE"; do
410  AC_MSG_CHECKING([for alias support in the linker])
411  LDFLAGS="$OLD_LDFLAGS -Wl,$flag"
412  # We try to run the linker with this new ld flag.  If the link fails,
413  # we give up and remove the new flag from LDFLAGS.
414  AC_LINK_IFELSE([AC_LANG_PROGRAM([namespace pcrecpp {
415                                    class RE { static int no_arg; };
416                                    int RE::no_arg;
417                                  }],
418                                 [])],
419                 [AC_MSG_RESULT([yes]);
420                  EXTRA_LIBPCRECPP_LDFLAGS="$EXTRA_LIBPCRECPP_LDFLAGS -Wl,$flag";
421                  break;],
422                 AC_MSG_RESULT([no]))
423done
424LDFLAGS="$OLD_LDFLAGS"
425
426# We could be more clever here, given we're doing AC_SUBST with this
427# (eg set a var to be the name of the include file we want). But we're not
428# so it's easy to change back to 'regular' autoconf vars if we needed to.
429AC_CHECK_HEADERS(string, [pcre_have_cpp_headers="1"],
430                         [pcre_have_cpp_headers="0"])
431AC_CHECK_HEADERS(bits/type_traits.h, [pcre_have_bits_type_traits="1"],
432                                     [pcre_have_bits_type_traits="0"])
433AC_CHECK_HEADERS(type_traits.h, [pcre_have_type_traits="1"],
434                                [pcre_have_type_traits="0"])
435
436# (This isn't c++-specific, but is only used in pcrecpp.cc, so try this
437# in a c++ context.  This matters becuase strtoimax is C99 and may not
438# be supported by the C++ compiler.)
439# Figure out how to create a longlong from a string: strtoll and
440# equiv.  It's not enough to call AC_CHECK_FUNCS: hpux has a
441# strtoll, for instance, but it only takes 2 args instead of 3!
442# We have to call AH_TEMPLATE since AC_DEFINE_UNQUOTED below is complex.
443AH_TEMPLATE(HAVE_STRTOQ, [Define to 1 if you have `strtoq'.])
444AH_TEMPLATE(HAVE_STRTOLL, [Define to 1 if you have `strtoll'.])
445AH_TEMPLATE(HAVE__STRTOI64, [Define to 1 if you have `_strtoi64'.])
446AH_TEMPLATE(HAVE_STRTOIMAX, [Define to 1 if you have `strtoimax'.])
447have_strto_fn=0
448for fn in strtoq strtoll _strtoi64 strtoimax; do
449  AC_MSG_CHECKING([for $fn])
450  if test "$fn" = strtoimax; then
451    include=stdint.h
452  else
453    include=stdlib.h
454  fi
455  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <$include>],
456                                    [char* e; return $fn("100", &e, 10)])],
457                    [AC_MSG_RESULT(yes)
458                     AC_DEFINE_UNQUOTED(HAVE_`echo $fn | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`, 1,
459                                        [Define to 1 if you have `$fn'.])
460                     have_strto_fn=1
461                     break],
462                    [AC_MSG_RESULT(no)])
463done
464
465if test "$have_strto_fn" = 1; then
466  AC_CHECK_TYPES([long long],
467                 [pcre_have_long_long="1"],
468                 [pcre_have_long_long="0"])
469  AC_CHECK_TYPES([unsigned long long],
470                 [pcre_have_ulong_long="1"],
471                 [pcre_have_ulong_long="0"])
472else
473  pcre_have_long_long="0"
474  pcre_have_ulong_long="0"
475fi
476AC_SUBST(pcre_have_long_long)
477AC_SUBST(pcre_have_ulong_long)
478
479AC_LANG_POP
480fi
481# Using AC_SUBST eliminates the need to include config.h in a public .h file
482AC_SUBST(pcre_have_type_traits)
483AC_SUBST(pcre_have_bits_type_traits)
484
485# Conditional compilation
486AM_CONDITIONAL(WITH_PCRE8, test "x$enable_pcre8" = "xyes")
487AM_CONDITIONAL(WITH_PCRE16, test "x$enable_pcre16" = "xyes")
488AM_CONDITIONAL(WITH_PCRE_CPP, test "x$enable_cpp" = "xyes")
489AM_CONDITIONAL(WITH_REBUILD_CHARTABLES, test "x$enable_rebuild_chartables" = "xyes")
490AM_CONDITIONAL(WITH_JIT, test "x$enable_jit" = "xyes")
491AM_CONDITIONAL(WITH_UTF, test "x$enable_utf" = "xyes")
492
493# Checks for typedefs, structures, and compiler characteristics.
494
495AC_C_CONST
496AC_TYPE_SIZE_T
497
498# Checks for library functions.
499
500AC_CHECK_FUNCS(bcopy memmove strerror)
501
502# Check for the availability of libz (aka zlib)
503
504AC_CHECK_HEADERS([zlib.h], [HAVE_ZLIB_H=1])
505AC_CHECK_LIB([z], [gzopen], [HAVE_LIBZ=1])
506
507# Check for the availability of libbz2. Originally we just used AC_CHECK_LIB,
508# as for libz. However, this had the following problem, diagnosed and fixed by
509# a user:
510#
511#   - libbz2 uses the Pascal calling convention (WINAPI) for the functions
512#     under Win32.
513#   - The standard autoconf AC_CHECK_LIB fails to include "bzlib.h",
514#     therefore missing the function definition.
515#   - The compiler thus generates a "C" signature for the test function.
516#   - The linker fails to find the "C" function.
517#   - PCRE fails to configure if asked to do so against libbz2.
518#
519# Solution:
520#
521#   - Replace the AC_CHECK_LIB test with a custom test.
522
523AC_CHECK_HEADERS([bzlib.h], [HAVE_BZLIB_H=1])
524# Original test
525# AC_CHECK_LIB([bz2], [BZ2_bzopen], [HAVE_LIBBZ2=1])
526#
527# Custom test follows
528
529AC_MSG_CHECKING([for libbz2])
530OLD_LIBS="$LIBS"
531LIBS="$LIBS -lbz2"
532AC_LINK_IFELSE([AC_LANG_PROGRAM([[
533#ifdef HAVE_BZLIB_H
534#include <bzlib.h>
535#endif]],
536[[return (int)BZ2_bzopen("conftest", "rb");]])],
537[AC_MSG_RESULT([yes]);HAVE_LIBBZ2=1; break;],
538AC_MSG_RESULT([no]))
539LIBS="$OLD_LIBS"
540
541# Check for the availabiity of libreadline
542
543if test "$enable_pcretest_libreadline" = "yes"; then
544 AC_CHECK_HEADERS([readline/readline.h], [HAVE_READLINE_H=1])
545 AC_CHECK_HEADERS([readline/history.h], [HAVE_HISTORY_H=1])
546 AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-lreadline"],
547   [unset ac_cv_lib_readline_readline;
548    AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-ltinfo"],
549     [unset ac_cv_lib_readline_readline;
550      AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-lcurses"],
551       [unset ac_cv_lib_readline_readline;
552        AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-lncurses"],
553         [unset ac_cv_lib_readline_readline;
554	  AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-lncursesw"],
555           [unset ac_cv_lib_readline_readline;
556	    AC_CHECK_LIB([readline], [readline], [LIBREADLINE="-ltermcap"],
557             [LIBREADLINE=""],
558             [-ltermcap])],
559           [-lncursesw])],
560         [-lncurses])],
561       [-lcurses])],
562     [-ltinfo])])
563 AC_SUBST(LIBREADLINE)
564 if test -n "$LIBREADLINE"; then
565   if test "$LIBREADLINE" != "-lreadline"; then
566     echo "-lreadline needs $LIBREADLINE"
567     LIBREADLINE="-lreadline $LIBREADLINE"
568   fi
569 fi
570fi
571
572
573# Check for the availability of libedit. Different distributions put its
574# headers in different places. Try to cover the most common ones.
575
576if test "$enable_pcretest_libedit" = "yes"; then
577  AC_CHECK_HEADERS([editline/readline.h], [HAVE_EDITLINE_READLINE_H=1],
578    [AC_CHECK_HEADERS([edit/readline/readline.h], [HAVE_READLINE_READLINE_H=1],
579      [AC_CHECK_HEADERS([readline/readline.h], [HAVE_READLINE_READLINE_H=1])])])
580  AC_CHECK_LIB([edit], [readline], [LIBEDIT="-ledit"])
581fi
582
583# This facilitates -ansi builds under Linux
584dnl AC_DEFINE([_GNU_SOURCE], [], [Enable GNU extensions in glibc])
585
586PCRE_STATIC_CFLAG=""
587if test "x$enable_shared" = "xno" ; then
588  AC_DEFINE([PCRE_STATIC], [1], [
589    Define if linking statically (TODO: make nice with Libtool)])
590  PCRE_STATIC_CFLAG="-DPCRE_STATIC"
591fi
592AC_SUBST(PCRE_STATIC_CFLAG)
593
594# Here is where pcre specific defines are handled
595
596if test "$enable_pcre8" = "yes"; then
597  AC_DEFINE([SUPPORT_PCRE8], [], [
598    Define to enable the 8 bit PCRE library.])
599fi
600
601if test "$enable_pcre16" = "yes"; then
602  AC_DEFINE([SUPPORT_PCRE16], [], [
603    Define to enable the 16 bit PCRE library.])
604fi
605
606if test "$enable_jit" = "yes"; then
607  AC_DEFINE([SUPPORT_JIT], [], [
608    Define to enable support for Just-In-Time compiling.])
609else
610  enable_pcregrep_jit="no"
611fi
612
613if test "$enable_pcregrep_jit" = "yes"; then
614  AC_DEFINE([SUPPORT_PCREGREP_JIT], [], [
615    Define to enable JIT support in pcregrep.])
616fi
617
618if test "$enable_utf" = "yes"; then
619  AC_DEFINE([SUPPORT_UTF], [], [
620    Define to enable support for the UTF-8/16 Unicode encoding. This
621    will work even in an EBCDIC environment, but it is incompatible
622    with the EBCDIC macro. That is, PCRE can support *either* EBCDIC
623    code *or* ASCII/UTF-8/16, but not both at once.])
624fi
625
626if test "$enable_unicode_properties" = "yes"; then
627  AC_DEFINE([SUPPORT_UCP], [], [
628    Define to enable support for Unicode properties.])
629fi
630
631if test "$enable_stack_for_recursion" = "no"; then
632  AC_DEFINE([NO_RECURSE], [], [
633    PCRE uses recursive function calls to handle backtracking while
634    matching. This can sometimes be a problem on systems that have
635    stacks of limited size. Define NO_RECURSE to get a version that
636    doesn't use recursion in the match() function; instead it creates
637    its own stack by steam using pcre_recurse_malloc() to obtain memory
638    from the heap. For more detail, see the comments and other stuff
639    just above the match() function. On systems that support it,
640    "configure" can be used to set this in the Makefile
641    (use --disable-stack-for-recursion).])
642fi
643
644if test "$enable_pcregrep_libz" = "yes"; then
645  AC_DEFINE([SUPPORT_LIBZ], [], [
646    Define to allow pcregrep to be linked with libz, so that it is
647    able to handle .gz files.])
648fi
649
650if test "$enable_pcregrep_libbz2" = "yes"; then
651  AC_DEFINE([SUPPORT_LIBBZ2], [], [
652    Define to allow pcregrep to be linked with libbz2, so that it is
653    able to handle .bz2 files.])
654fi
655
656if test $with_pcregrep_bufsize -lt 8192 ; then
657  with_pcregrep_bufsize="8192"
658fi
659
660AC_DEFINE_UNQUOTED([PCREGREP_BUFSIZE], [$with_pcregrep_bufsize], [
661  The value of PCREGREP_BUFSIZE determines the size of buffer used by
662  pcregrep to hold parts of the file it is searching. On systems that
663  support it, "configure" can be used to override the default, which is
664  8192. This is also the minimum value. The actual amount of memory used by
665  pcregrep is three times this number, because it allows for the buffering of
666  "before" and "after" lines.])
667
668if test "$enable_pcretest_libedit" = "yes"; then
669  AC_DEFINE([SUPPORT_LIBEDIT], [], [
670    Define to allow pcretest to be linked with libedit.])
671  LIBREADLINE="$LIBEDIT"
672elif test "$enable_pcretest_libreadline" = "yes"; then
673  AC_DEFINE([SUPPORT_LIBREADLINE], [], [
674    Define to allow pcretest to be linked with libreadline.])
675fi
676
677AC_DEFINE_UNQUOTED([NEWLINE], [$ac_pcre_newline_value], [
678  The value of NEWLINE determines the newline character sequence. On
679  systems that support it, "configure" can be used to override the
680  default, which is 10. The possible values are 10 (LF), 13 (CR),
681  3338 (CRLF), -1 (ANY), or -2 (ANYCRLF).])
682
683if test "$enable_bsr_anycrlf" = "yes"; then
684  AC_DEFINE([BSR_ANYCRLF], [], [
685    By default, the \R escape sequence matches any Unicode line ending
686    character or sequence of characters. If BSR_ANYCRLF is defined, this is
687    changed so that backslash-R matches only CR, LF, or CRLF. The build-
688    time default can be overridden by the user of PCRE at runtime. On
689    systems that support it, "configure" can be used to override the
690    default.])
691fi
692
693AC_DEFINE_UNQUOTED([LINK_SIZE], [$with_link_size], [
694  The value of LINK_SIZE determines the number of bytes used to store
695  links as offsets within the compiled regex. The default is 2, which
696  allows for compiled patterns up to 64K long. This covers the vast
697  majority of cases. However, PCRE can also be compiled to use 3 or 4
698  bytes instead. This allows for longer patterns in extreme cases. On
699  systems that support it, "configure" can be used to override this default.])
700
701AC_DEFINE_UNQUOTED([POSIX_MALLOC_THRESHOLD], [$with_posix_malloc_threshold], [
702  When calling PCRE via the POSIX interface, additional working storage
703  is required for holding the pointers to capturing substrings because
704  PCRE requires three integers per substring, whereas the POSIX
705  interface provides only two. If the number of expected substrings is
706  small, the wrapper function uses space on the stack, because this is
707  faster than using malloc() for each call. The threshold above which
708  the stack is no longer used is defined by POSIX_MALLOC_THRESHOLD. On
709  systems that support it, "configure" can be used to override this
710  default.])
711
712AC_DEFINE_UNQUOTED([MATCH_LIMIT], [$with_match_limit], [
713  The value of MATCH_LIMIT determines the default number of times the
714  internal match() function can be called during a single execution of
715  pcre_exec(). There is a runtime interface for setting a different
716  limit. The limit exists in order to catch runaway regular
717  expressions that take for ever to determine that they do not match.
718  The default is set very large so that it does not accidentally catch
719  legitimate cases. On systems that support it, "configure" can be
720  used to override this default default.])
721
722AC_DEFINE_UNQUOTED([MATCH_LIMIT_RECURSION], [$with_match_limit_recursion], [
723  The above limit applies to all calls of match(), whether or not they
724  increase the recursion depth. In some environments it is desirable
725  to limit the depth of recursive calls of match() more strictly, in
726  order to restrict the maximum amount of stack (or heap, if
727  NO_RECURSE is defined) that is used. The value of
728  MATCH_LIMIT_RECURSION applies only to recursive calls of match(). To
729  have any useful effect, it must be less than the value of
730  MATCH_LIMIT. The default is to use the same value as MATCH_LIMIT.
731  There is a runtime method for setting a different limit. On systems
732  that support it, "configure" can be used to override the default.])
733
734AC_DEFINE([MAX_NAME_SIZE], [32], [
735  This limit is parameterized just in case anybody ever wants to
736  change it. Care must be taken if it is increased, because it guards
737  against integer overflow caused by enormously large patterns.])
738
739AC_DEFINE([MAX_NAME_COUNT], [10000], [
740  This limit is parameterized just in case anybody ever wants to
741  change it. Care must be taken if it is increased, because it guards
742  against integer overflow caused by enormously large patterns.])
743
744AH_VERBATIM([PCRE_EXP_DEFN], [
745/* If you are compiling for a system other than a Unix-like system or
746   Win32, and it needs some magic to be inserted before the definition
747   of a function that is exported by the library, define this macro to
748   contain the relevant magic. If you do not define this macro, it
749   defaults to "extern" for a C compiler and "extern C" for a C++
750   compiler on non-Win32 systems. This macro apears at the start of
751   every exported function that is part of the external API. It does
752   not appear on functions that are "external" in the C sense, but
753   which are internal to the library. */
754#undef PCRE_EXP_DEFN])
755
756if test "$enable_ebcdic" = "yes"; then
757  AC_DEFINE_UNQUOTED([EBCDIC], [], [
758    If you are compiling for a system that uses EBCDIC instead of ASCII
759    character codes, define this macro as 1. On systems that can use
760    "configure", this can be done via --enable-ebcdic. PCRE will then
761    assume that all input strings are in EBCDIC. If you do not define
762    this macro, PCRE will assume input strings are ASCII or UTF-8/16
763    Unicode. It is not possible to build a version of PCRE that
764    supports both EBCDIC and UTF-8/16.])
765fi
766
767# Platform specific issues
768NO_UNDEFINED=
769EXPORT_ALL_SYMBOLS=
770case $host_os in
771  cygwin* | mingw* )
772    if test X"$enable_shared" = Xyes; then
773      NO_UNDEFINED="-no-undefined"
774      EXPORT_ALL_SYMBOLS="-Wl,--export-all-symbols"
775    fi
776    ;;
777esac
778
779# The extra LDFLAGS for each particular library
780# (Note: The libpcre*_version bits are m4 variables, assigned above)
781
782EXTRA_LIBPCRE_LDFLAGS="$EXTRA_LIBPCRE_LDFLAGS \
783                       $NO_UNDEFINED -version-info libpcre_version"
784
785EXTRA_LIBPCRE16_LDFLAGS="$EXTRA_LIBPCRE16_LDFLAGS \
786                       $NO_UNDEFINED -version-info libpcre16_version"
787
788EXTRA_LIBPCREPOSIX_LDFLAGS="$EXTRA_LIBPCREPOSIX_LDFLAGS \
789                            $NO_UNDEFINED -version-info libpcreposix_version"
790
791EXTRA_LIBPCRECPP_LDFLAGS="$EXTRA_LIBPCRECPP_LDFLAGS \
792                          $NO_UNDEFINED -version-info libpcrecpp_version \
793                          $EXPORT_ALL_SYMBOLS"
794
795AC_SUBST(EXTRA_LIBPCRE_LDFLAGS)
796AC_SUBST(EXTRA_LIBPCRE16_LDFLAGS)
797AC_SUBST(EXTRA_LIBPCREPOSIX_LDFLAGS)
798AC_SUBST(EXTRA_LIBPCRECPP_LDFLAGS)
799
800# When we run 'make distcheck', use these arguments. Turning off compiler
801# optimization makes it run faster.
802DISTCHECK_CONFIGURE_FLAGS="CFLAGS='' CXXFLAGS='' --enable-pcre16 --enable-jit --enable-cpp --enable-unicode-properties"
803AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
804
805# Check that, if --enable-pcregrep-libz or --enable-pcregrep-libbz2 is
806# specified, the relevant library is available.
807
808if test "$enable_pcregrep_libz" = "yes"; then
809  if test "$HAVE_ZLIB_H" != "1"; then
810    echo "** Cannot --enable-pcregrep-libz because zlib.h was not found"
811    exit 1
812  fi
813  if test "$HAVE_LIBZ" != "1"; then
814    echo "** Cannot --enable-pcregrep-libz because libz was not found"
815    exit 1
816  fi
817  LIBZ="-lz"
818fi
819AC_SUBST(LIBZ)
820
821if test "$enable_pcregrep_libbz2" = "yes"; then
822  if test "$HAVE_BZLIB_H" != "1"; then
823    echo "** Cannot --enable-pcregrep-libbz2 because bzlib.h was not found"
824    exit 1
825  fi
826  if test "$HAVE_LIBBZ2" != "1"; then
827    echo "** Cannot --enable-pcregrep-libbz2 because libbz2 was not found"
828    exit 1
829  fi
830  LIBBZ2="-lbz2"
831fi
832AC_SUBST(LIBBZ2)
833
834# Similarly for --enable-pcretest-readline
835
836if test "$enable_pcretest_libedit" = "yes"; then
837  if test "$enable_pcretest_libreadline" = "yes"; then
838    echo "** Cannot use both --enable-pcretest-libedit and --enable-pcretest-readline"
839    exit 1
840  fi
841  if test "$HAVE_EDITLINE_READLINE_H" != "1" -a \
842          "$HAVE_READLINE_READLINE_H" != "1"; then
843    echo "** Cannot --enable-pcretest-libedit because neither editline/readline.h"
844    echo "** nor readline/readline.h was found."
845    exit 1
846  fi
847  if test -z "$LIBEDIT"; then
848    echo "** Cannot --enable-pcretest-libedit because libedit library was not found."
849    exit 1
850  fi
851fi
852
853if test "$enable_pcretest_libreadline" = "yes"; then
854  if test "$HAVE_READLINE_H" != "1"; then
855    echo "** Cannot --enable-pcretest-readline because readline/readline.h was not found."
856    exit 1
857  fi
858  if test "$HAVE_HISTORY_H" != "1"; then
859    echo "** Cannot --enable-pcretest-readline because readline/history.h was not found."
860    exit 1
861  fi
862  if test -z "$LIBREADLINE"; then
863    echo "** Cannot --enable-pcretest-readline because readline library was not found."
864    exit 1
865  fi
866fi
867
868# Produce these files, in addition to config.h.
869AC_CONFIG_FILES(
870	Makefile
871	libpcre.pc
872	libpcre16.pc
873	libpcreposix.pc
874	libpcrecpp.pc
875	pcre-config
876	pcre.h
877	pcre_stringpiece.h
878	pcrecpparg.h
879)
880
881# Make the generated script files executable.
882AC_CONFIG_COMMANDS([script-chmod], [chmod a+x pcre-config])
883
884# Make sure that pcre_chartables.c is removed in case the method for
885# creating it was changed by reconfiguration.
886AC_CONFIG_COMMANDS([delete-old-chartables], [rm -f pcre_chartables.c])
887
888AC_OUTPUT
889
890# Print out a nice little message after configure is run displaying your
891# chosen options.
892
893cat <<EOF
894
895$PACKAGE-$VERSION configuration summary:
896
897    Install prefix .................. : ${prefix}
898    C preprocessor .................. : ${CPP}
899    C compiler ...................... : ${CC}
900    C++ preprocessor ................ : ${CXXCPP}
901    C++ compiler .................... : ${CXX}
902    Linker .......................... : ${LD}
903    C preprocessor flags ............ : ${CPPFLAGS}
904    C compiler flags ................ : ${CFLAGS}
905    C++ compiler flags .............. : ${CXXFLAGS}
906    Linker flags .................... : ${LDFLAGS}
907    Extra libraries ................. : ${LIBS}
908
909    Build 8 bit pcre library ........ : ${enable_pcre8}
910    Build 16 bit pcre library ....... : ${enable_pcre16}
911    Build C++ library ............... : ${enable_cpp}
912    Enable JIT compiling support .... : ${enable_jit}
913    Enable UTF-8/16 support ......... : ${enable_utf}
914    Unicode properties .............. : ${enable_unicode_properties}
915    Newline char/sequence ........... : ${enable_newline}
916    \R matches only ANYCRLF ......... : ${enable_bsr_anycrlf}
917    EBCDIC coding ................... : ${enable_ebcdic}
918    Rebuild char tables ............. : ${enable_rebuild_chartables}
919    Use stack recursion ............. : ${enable_stack_for_recursion}
920    POSIX mem threshold ............. : ${with_posix_malloc_threshold}
921    Internal link size .............. : ${with_link_size}
922    Match limit ..................... : ${with_match_limit}
923    Match limit recursion ........... : ${with_match_limit_recursion}
924    Build shared libs ............... : ${enable_shared}
925    Build static libs ............... : ${enable_static}
926    Use JIT in pcregrep ............. : ${enable_pcregrep_jit}
927    Buffer size for pcregrep ........ : ${with_pcregrep_bufsize}
928    Link pcregrep with libz ......... : ${enable_pcregrep_libz}
929    Link pcregrep with libbz2 ....... : ${enable_pcregrep_libbz2}
930    Link pcretest with libedit ...... : ${enable_pcretest_libedit}
931    Link pcretest with libreadline .. : ${enable_pcretest_libreadline}
932
933EOF
934
935dnl end configure.ac
936