/[pcre]/code/trunk/configure.ac
ViewVC logotype

Diff of /code/trunk/configure.ac

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 89 by nigel, Sat Feb 24 21:41:27 2007 UTC revision 685 by ph10, Tue Sep 6 15:02:07 2011 UTC
# Line 1  Line 1 
1  dnl Process this file with autoconf to produce a configure script.  dnl Process this file with autoconf to produce a configure script.
2    
3  dnl This configure.in file has been hacked around quite a lot as a result of  dnl NOTE FOR MAINTAINERS: Do not use minor version numbers 08 or 09 because
4  dnl patches that various people have sent to me (PH). Sometimes the information  dnl the leading zeros may cause them to be treated as invalid octal constants
5  dnl I get is contradictory. I've tried to put in comments that explain things,  dnl if a PCRE user writes code that uses PCRE_MINOR as a number. There is now
6  dnl but in some cases the information is second-hand and I have no way of  dnl a check further down that throws an error if 08 or 09 are used.
7  dnl verifying it. I am not an autoconf or libtool expert!  
8    dnl The PCRE_PRERELEASE feature is for identifying release candidates. It might
9    dnl be defined as -RC2, for example. For real releases, it should be empty.
10    
11    m4_define(pcre_major, [8])
12    m4_define(pcre_minor, [20])
13    m4_define(pcre_prerelease, [-RC1])
14    m4_define(pcre_date, [2011-08-18])
15    
16    # Libtool shared library interface versions (current:revision:age)
17    m4_define(libpcre_version, [0:1:0])
18    m4_define(libpcreposix_version, [0:0:0])
19    m4_define(libpcrecpp_version, [0:0:0])
20    
21  dnl This is required at the start; the name is the name of a file  AC_PREREQ(2.57)
22  dnl it should be seeing, to verify it is in the same directory.  AC_INIT(PCRE, pcre_major.pcre_minor[]pcre_prerelease, , pcre)
23    AC_CONFIG_SRCDIR([pcre.h.in])
24    AM_INIT_AUTOMAKE([dist-bzip2 dist-zip])
25    AC_CONFIG_HEADERS(config.h)
26    
27    # This was added at the suggestion of libtoolize (03-Jan-10)
28    AC_CONFIG_MACRO_DIR([m4])
29    
30    # The default CFLAGS and CXXFLAGS in Autoconf are "-g -O2" for gcc and just
31    # "-g" for any other compiler. There doesn't seem to be a standard way of
32    # getting rid of the -g (which I don't think is needed for a production
33    # library). This fudge seems to achieve the necessary. First, we remember the
34    # externally set values of CFLAGS and CXXFLAGS. Then call the AC_PROG_CC and
35    # AC_PROG_CXX macros to find the compilers - if CFLAGS and CXXFLAGS are not
36    # set, they will be set to Autoconf's defaults. Afterwards, if the original
37    # values were not set, remove the -g from the Autoconf defaults.
38    # (PH 02-May-07)
39    
40  AC_INIT(dftables.c)  remember_set_CFLAGS="$CFLAGS"
41  AC_CONFIG_SRCDIR([pcre.h])  remember_set_CXXFLAGS="$CXXFLAGS"
42    
43  dnl A safety precaution  AC_PROG_CC
44    AC_PROG_CXX
45    
46  AC_PREREQ(2.57)  if test "x$remember_set_CFLAGS" = "x"
47    then
48      if test "$CFLAGS" = "-g -O2"
49      then
50        CFLAGS="-O2"
51      elif test "$CFLAGS" = "-g"
52      then
53        CFLAGS=""
54      fi
55    fi
56    
57  dnl Arrange to build config.h from config.h.in.  if test "x$remember_set_CXXFLAGS" = "x"
58  dnl Manual says this macro should come right after AC_INIT.  then
59  AC_CONFIG_HEADER(config.h)    if test "$CXXFLAGS" = "-g -O2"
60      then
61        CXXFLAGS="-O2"
62      elif test "$CXXFLAGS" = "-g"
63      then
64        CXXFLAGS=""
65      fi
66    fi
67    
68  dnl Default values for miscellaneous macros  # AC_PROG_CXX will return "g++" even if no c++ compiler is installed.
69    # Check for that case, and just disable c++ code if g++ doesn't run.
70    AC_LANG_PUSH(C++)
71    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],, CXX=""; CXXCP=""; CXXFLAGS="")
72    AC_LANG_POP
73    
74  POSIX_MALLOC_THRESHOLD=-DPOSIX_MALLOC_THRESHOLD=10  # Check for a 64-bit integer type
75    AC_TYPE_INT64_T
76    
77  dnl Provide versioning information for libtool shared libraries that  AC_PROG_INSTALL
78  dnl are built by default on Unix systems.  AC_LIBTOOL_WIN32_DLL
79    LT_INIT
80    AC_PROG_LN_S
81    
82  PCRE_LIB_VERSION=0:1:0  PCRE_MAJOR="pcre_major"
83  PCRE_POSIXLIB_VERSION=0:0:0  PCRE_MINOR="pcre_minor"
84  PCRE_CPPLIB_VERSION=0:0:0  PCRE_PRERELEASE="pcre_prerelease"
85    PCRE_DATE="pcre_date"
86    
87  dnl Find the PCRE version from the pcre.h file. The PCRE_VERSION variable is  if test "$PCRE_MINOR" = "08" -o "$PCRE_MINOR" = "09"
88  dnl substituted in pcre-config.in.  then
89      echo "***"
90      echo "*** Minor version number $PCRE_MINOR must not be used. ***"
91      echo "*** Use only 01 to 07 or 10 onwards, to avoid octal issues. ***"
92      echo "***"
93      exit 1
94    fi
95    
96  PCRE_MAJOR=`grep '#define PCRE_MAJOR' ${srcdir}/pcre.h | cut -c 29-`  AC_SUBST(PCRE_MAJOR)
97  PCRE_MINOR=`grep '#define PCRE_MINOR' ${srcdir}/pcre.h | cut -c 29-`  AC_SUBST(PCRE_MINOR)
98  PCRE_PRERELEASE=`grep '#define PCRE_PRERELEASE' ${srcdir}/pcre.h | cut -c 29-`  AC_SUBST(PCRE_PRERELEASE)
99  PCRE_VERSION=${PCRE_MAJOR}.${PCRE_MINOR}${PCRE_PRERELEASE}  AC_SUBST(PCRE_DATE)
100    
101  dnl Handle --disable-cpp  # Set a more sensible default value for $(htmldir).
102    if test "x$htmldir" = 'x${docdir}'
103    then
104      htmldir='${docdir}/html'
105    fi
106    
107    # Handle --disable-cpp. The substitution of enable_cpp is needed for use in
108    # pcre-config.
109  AC_ARG_ENABLE(cpp,  AC_ARG_ENABLE(cpp,
110  [  --disable-cpp           disable C++ support],                AS_HELP_STRING([--disable-cpp],
111  want_cpp="$enableval", want_cpp=yes)                               [disable C++ support]),
112                  , enable_cpp=yes)
113    AC_SUBST(enable_cpp)
114    
115    # Handle --enable-jit (disabled by default)
116    AC_ARG_ENABLE(jit,
117                  AS_HELP_STRING([--enable-jit],
118                                 [enable Just-In-Time compiling support]),
119                  , enable_jit=no)
120    
121    # Handle --disable-pcregrep-jit (enabled by default)
122    AC_ARG_ENABLE(pcregrep-jit,
123                  AS_HELP_STRING([--disable-pcregrep-jit],
124                                 [disable JIT support in pcregrep]),
125                  , enable_pcregrep_jit=yes)
126    
127    # Handle --enable-rebuild-chartables
128    AC_ARG_ENABLE(rebuild-chartables,
129                  AS_HELP_STRING([--enable-rebuild-chartables],
130                                 [rebuild character tables in current locale]),
131                  , enable_rebuild_chartables=no)
132    
133  dnl Checks for programs.  # Handle --enable-utf8 (disabled by default)
134    AC_ARG_ENABLE(utf8,
135                  AS_HELP_STRING([--enable-utf8],
136                                 [enable UTF-8 support (incompatible with --enable-ebcdic)]),
137                  , enable_utf8=unset)
138    
139  AC_PROG_CC  # Handle --enable-unicode-properties
140    AC_ARG_ENABLE(unicode-properties,
141                  AS_HELP_STRING([--enable-unicode-properties],
142                                 [enable Unicode properties support (implies --enable-utf8)]),
143                  , enable_unicode_properties=no)
144    
145    # Handle --enable-newline=NL
146    dnl AC_ARG_ENABLE(newline,
147    dnl               AS_HELP_STRING([--enable-newline=NL],
148    dnl                              [use NL as newline (lf, cr, crlf, anycrlf, any; default=lf)]),
149    dnl               , enable_newline=lf)
150    
151  dnl Test for C++ for the C++ wrapper libpcrecpp. It seems, however, that  # Separate newline options
152  dnl AC_PROC_CXX will set $CXX to "g++" when no C++ compiler is installed, even  ac_pcre_newline=lf
153  dnl though that is completely bogus. (This may happen only on certain systems  AC_ARG_ENABLE(newline-is-cr,
154  dnl with certain versions of autoconf, of course.) An attempt to include this                AS_HELP_STRING([--enable-newline-is-cr],
155  dnl test inside a check for want_cpp was criticized by a libtool expert, who                               [use CR as newline character]),
156  dnl tells me that it isn't allowed.                ac_pcre_newline=cr)
157    AC_ARG_ENABLE(newline-is-lf,
158                  AS_HELP_STRING([--enable-newline-is-lf],
159                                 [use LF as newline character (default)]),
160                  ac_pcre_newline=lf)
161    AC_ARG_ENABLE(newline-is-crlf,
162                  AS_HELP_STRING([--enable-newline-is-crlf],
163                                 [use CRLF as newline sequence]),
164                  ac_pcre_newline=crlf)
165    AC_ARG_ENABLE(newline-is-anycrlf,
166                  AS_HELP_STRING([--enable-newline-is-anycrlf],
167                                 [use CR, LF, or CRLF as newline sequence]),
168                  ac_pcre_newline=anycrlf)
169    AC_ARG_ENABLE(newline-is-any,
170                  AS_HELP_STRING([--enable-newline-is-any],
171                                 [use any valid Unicode newline sequence]),
172                  ac_pcre_newline=any)
173    enable_newline="$ac_pcre_newline"
174    
175    # Handle --enable-bsr-anycrlf
176    AC_ARG_ENABLE(bsr-anycrlf,
177                  AS_HELP_STRING([--enable-bsr-anycrlf],
178                                 [\R matches only CR, LF, CRLF by default]),
179                  , enable_bsr_anycrlf=no)
180    
181  AC_PROG_CXX  # Handle --enable-ebcdic
182    AC_ARG_ENABLE(ebcdic,
183                  AS_HELP_STRING([--enable-ebcdic],
184                                 [assume EBCDIC coding rather than ASCII; incompatible with --enable-utf8; use only in (uncommon) EBCDIC environments; it implies --enable-rebuild-chartables]),
185                  , enable_ebcdic=no)
186    
187  dnl The icc compiler has the same options as gcc, so let the rest of the  # Handle --disable-stack-for-recursion
188  dnl configure script think it has gcc when setting up dnl options etc.  AC_ARG_ENABLE(stack-for-recursion,
189  dnl This is a nasty hack which no longer seems necessary with the update                AS_HELP_STRING([--disable-stack-for-recursion],
190  dnl to the latest libtool files, so I have commented it out.                               [don't use stack recursion when matching]),
191  dnl                , enable_stack_for_recursion=yes)
192  dnl if test "$CC" = "icc" ; then GCC=yes ; fi  
193    # Handle --enable-pcregrep-libz
194    AC_ARG_ENABLE(pcregrep-libz,
195                  AS_HELP_STRING([--enable-pcregrep-libz],
196                                 [link pcregrep with libz to handle .gz files]),
197                  , enable_pcregrep_libz=no)
198    
199    # Handle --enable-pcregrep-libbz2
200    AC_ARG_ENABLE(pcregrep-libbz2,
201                  AS_HELP_STRING([--enable-pcregrep-libbz2],
202                                 [link pcregrep with libbz2 to handle .bz2 files]),
203                  , enable_pcregrep_libbz2=no)
204    
205    # Handle --with-pcregrep-bufsize=N
206    AC_ARG_WITH(pcregrep-bufsize,
207                  AS_HELP_STRING([--with-pcregrep-bufsize=N],
208                                 [pcregrep buffer size (default=20480)]),
209                  , with_pcregrep_bufsize=20480)
210    
211    # Handle --enable-pcretest-libreadline
212    AC_ARG_ENABLE(pcretest-libreadline,
213                  AS_HELP_STRING([--enable-pcretest-libreadline],
214                                 [link pcretest with libreadline]),
215                  , enable_pcretest_libreadline=no)
216    
217  AC_PROG_INSTALL  # Handle --with-posix-malloc-threshold=NBYTES
218  AC_LIBTOOL_WIN32_DLL  AC_ARG_WITH(posix-malloc-threshold,
219  AC_PROG_LIBTOOL              AS_HELP_STRING([--with-posix-malloc-threshold=NBYTES],
220                               [threshold for POSIX malloc usage (default=10)]),
221                , with_posix_malloc_threshold=10)
222    
223  dnl We need to find a compiler for compiling a program to run on the local host  # Handle --with-link-size=N
224  dnl while building. It needs to be different from CC when cross-compiling.  AC_ARG_WITH(link-size,
225  dnl There is a macro called AC_PROG_CC_FOR_BUILD in the GNU archive for              AS_HELP_STRING([--with-link-size=N],
226  dnl figuring this out automatically. Unfortunately, it does not work with the                             [internal link size (2, 3, or 4 allowed; default=2)]),
227  dnl latest versions of autoconf. So for the moment, we just default to the              , with_link_size=2)
 dnl same values as the "main" compiler. People who are cross-compiling will  
 dnl just have to adjust the Makefile by hand or set these values when they  
 dnl run "configure".  
   
 CC_FOR_BUILD=${CC_FOR_BUILD:-'$(CC)'}  
 CXX_FOR_BUILD=${CXX_FOR_BUILD:-'$(CXX)'}  
 CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD:-'$(CFLAGS)'}  
 CPPFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD:-'$(CPPFLAGS)'}  
 CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD:-'$(CXXFLAGS)'}  
 BUILD_EXEEXT=${BUILD_EXEEXT:-'$(EXEEXT)'}  
 BUILD_OBJEXT=${BUILD_OBJEXT:-'$(OBJEXT)'}  
228    
229  dnl Checks for header files.  # Handle --with-match-limit=N
230    AC_ARG_WITH(match-limit,
231                AS_HELP_STRING([--with-match-limit=N],
232                               [default limit on internal looping (default=10000000)]),
233                , with_match_limit=10000000)
234    
235    # Handle --with-match-limit_recursion=N
236    #
237    # Note: In config.h, the default is to define MATCH_LIMIT_RECURSION
238    # symbolically as MATCH_LIMIT, which in turn is defined to be some numeric
239    # value (e.g. 10000000). MATCH_LIMIT_RECURSION can otherwise be set to some
240    # different numeric value (or even the same numeric value as MATCH_LIMIT,
241    # though no longer defined in terms of the latter).
242    #
243    AC_ARG_WITH(match-limit-recursion,
244                AS_HELP_STRING([--with-match-limit-recursion=N],
245                               [default limit on internal recursion (default=MATCH_LIMIT)]),
246                , with_match_limit_recursion=MATCH_LIMIT)
247    
248    # Make sure that if enable_unicode_properties was set, that UTF-8 support
249    # is enabled.
250    #
251    if test "x$enable_unicode_properties" = "xyes"
252    then
253      if test "x$enable_utf8" = "xno"
254      then
255        AC_MSG_ERROR([support for Unicode properties requires UTF-8 support])
256      fi
257      enable_utf8=yes
258    fi
259    
260  AC_HEADER_STDC  if test "x$enable_utf8" = "xunset"
261  AC_CHECK_HEADERS(limits.h)  then
262      enable_utf8=no
263    fi
264    
265    # Make sure that if enable_ebcdic is set, rebuild_chartables is also enabled.
266    # Also check that UTF-8 support is not requested, because PCRE cannot handle
267    # EBCDIC and UTF-8 in the same build. To do so it would need to use different
268    # character constants depending on the mode.
269    #
270    if test "x$enable_ebcdic" = "xyes"
271    then
272      enable_rebuild_chartables=yes
273      if test "x$enable_utf8" = "xyes"
274      then
275        AC_MSG_ERROR([support for EBCDIC and UTF-8 cannot be enabled at the same time])
276      fi
277    fi
278    
279    # Convert the newline identifier into the appropriate integer value.
280    case "$enable_newline" in
281      lf)      ac_pcre_newline_value=10   ;;
282      cr)      ac_pcre_newline_value=13   ;;
283      crlf)    ac_pcre_newline_value=3338 ;;
284      anycrlf) ac_pcre_newline_value=-2   ;;
285      any)     ac_pcre_newline_value=-1   ;;
286      *)
287      AC_MSG_ERROR([invalid argument \"$enable_newline\" to --enable-newline option])
288      ;;
289    esac
290    
291    # Check argument to --with-link-size
292    case "$with_link_size" in
293      2|3|4) ;;
294      *)
295      AC_MSG_ERROR([invalid argument \"$with_link_size\" to --with-link-size option])
296      ;;
297    esac
298    
299  dnl The files below are C++ header files. One person told me (PH) that  AH_TOP([
300  dnl AC_LANG_CPLUSPLUS unsets CXX if it was explicitly set to something which  /* On Unix-like systems config.h.in is converted by "configure" into config.h.
301  dnl doesn't work. However, this doesn't always seem to be the case.  Some other environments also support the use of "configure". PCRE is written in
302    Standard C, but there are a few non-standard things it can cope with, allowing
303    it to run on SunOS4 and other "close to standard" systems.
304    
305    If you are going to build PCRE "by hand" on a system without "configure" you
306    should copy the distributed config.h.generic to config.h, and then set up the
307    macro definitions the way you need them. You must then add -DHAVE_CONFIG_H to
308    all of your compile commands, so that config.h is included at the start of
309    every source.
310    
311    Alternatively, you can avoid editing by using -D on the compiler command line
312    to set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H.
313    
314    PCRE uses memmove() if HAVE_MEMMOVE is set to 1; otherwise it uses bcopy() if
315    HAVE_BCOPY is set to 1. If your system has neither bcopy() nor memmove(), set
316    them both to 0; an emulation function will be used. */])
317    
318  if test "x$want_cpp" = "xyes" -a -n "$CXX"  # Checks for header files.
319    AC_HEADER_STDC
320    AC_CHECK_HEADERS(limits.h sys/types.h sys/stat.h dirent.h windows.h)
321    
322    # The files below are C++ header files.
323    pcre_have_type_traits="0"
324    pcre_have_bits_type_traits="0"
325    if test "x$enable_cpp" = "xyes" -a -n "$CXX"
326  then  then
327  AC_LANG_SAVE  AC_LANG_PUSH(C++)
 AC_LANG_CPLUSPLUS  
328    
329  dnl We could be more clever here, given we're doing AC_SUBST with this  # Older versions of pcre defined pcrecpp::no_arg, but in new versions
330  dnl (eg set a var to be the name of the include file we want).  But we're not  # it's called pcrecpp::RE::no_arg.  For backwards ABI compatibility,
331  dnl so it's easy to change back to 'regular' autoconf vars if we needed to.  # we want to make one an alias for the other.  Different systems do
332    # this in different ways.  Some systems, for instance, can do it via
333    # a linker flag: -alias (for os x 10.5) or -i (for os x <=10.4).
334    OLD_LDFLAGS="$LDFLAGS"
335    for flag in "-alias,__ZN7pcrecpp2RE6no_argE,__ZN7pcrecpp6no_argE" \
336                "-i__ZN7pcrecpp6no_argE:__ZN7pcrecpp2RE6no_argE"; do
337      AC_MSG_CHECKING([for alias support in the linker])
338      LDFLAGS="$OLD_LDFLAGS -Wl,$flag"
339      # We try to run the linker with this new ld flag.  If the link fails,
340      # we give up and remove the new flag from LDFLAGS.
341      AC_LINK_IFELSE([AC_LANG_PROGRAM([namespace pcrecpp {
342                                        class RE { static int no_arg; };
343                                        int RE::no_arg;
344                                      }],
345                                     [])],
346                     [AC_MSG_RESULT([yes]);
347                      EXTRA_LIBPCRECPP_LDFLAGS="$EXTRA_LIBPCRECPP_LDFLAGS -Wl,$flag";
348                      break;],
349                     AC_MSG_RESULT([no]))
350    done
351    LDFLAGS="$OLD_LDFLAGS"
352    
353    # We could be more clever here, given we're doing AC_SUBST with this
354    # (eg set a var to be the name of the include file we want). But we're not
355    # so it's easy to change back to 'regular' autoconf vars if we needed to.
356  AC_CHECK_HEADERS(string, [pcre_have_cpp_headers="1"],  AC_CHECK_HEADERS(string, [pcre_have_cpp_headers="1"],
357                           [pcre_have_cpp_headers="0"])                           [pcre_have_cpp_headers="0"])
358  AC_CHECK_HEADERS(bits/type_traits.h, [pcre_have_bits_type_traits="1"],  AC_CHECK_HEADERS(bits/type_traits.h, [pcre_have_bits_type_traits="1"],
359                                       [pcre_have_bits_type_traits="0"])                                       [pcre_have_bits_type_traits="0"])
360  AC_CHECK_HEADERS(type_traits.h, [pcre_have_type_traits="1"],  AC_CHECK_HEADERS(type_traits.h, [pcre_have_type_traits="1"],
361                                  [pcre_have_type_traits="0"])                                  [pcre_have_type_traits="0"])
 dnl Using AC_SUBST eliminates the need to include config.h in a public .h file  
 AC_SUBST(pcre_have_bits_type_traits)  
 AC_SUBST(pcre_have_type_traits)  
 AC_LANG_RESTORE  
 fi  
362    
363  dnl From the above, we now have enough info to know if C++ is fully installed  # (This isn't c++-specific, but is only used in pcrecpp.cc, so try this
364  if test "x$want_cpp" = "xyes" -a -n "$CXX" -a "$pcre_have_cpp_headers" = 1; then  # in a c++ context.  This matters becuase strtoimax is C99 and may not
365    MAYBE_CPP_TARGETS='$(CPP_TARGETS)'  # be supported by the C++ compiler.)
366    HAVE_CPP=  # Figure out how to create a longlong from a string: strtoll and
367    # equiv.  It's not enough to call AC_CHECK_FUNCS: hpux has a
368    # strtoll, for instance, but it only takes 2 args instead of 3!
369    # We have to call AH_TEMPLATE since AC_DEFINE_UNQUOTED below is complex.
370    AH_TEMPLATE(HAVE_STRTOQ, [Define to 1 if you have `strtoq'.])
371    AH_TEMPLATE(HAVE_STRTOLL, [Define to 1 if you have `strtoll'.])
372    AH_TEMPLATE(HAVE__STRTOI64, [Define to 1 if you have `_strtoi64'.])
373    AH_TEMPLATE(HAVE_STRTOIMAX, [Define to 1 if you have `strtoimax'.])
374    have_strto_fn=0
375    for fn in strtoq strtoll _strtoi64 strtoimax; do
376      AC_MSG_CHECKING([for $fn])
377      if test "$fn" = strtoimax; then
378        include=stdint.h
379      else
380        include=stdlib.h
381      fi
382      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <$include>],
383                                        [char* e; return $fn("100", &e, 10)])],
384                        [AC_MSG_RESULT(yes)
385                         AC_DEFINE_UNQUOTED(HAVE_`echo $fn | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`, 1,
386                                            [Define to 1 if you have `$fn'.])
387                         have_strto_fn=1
388                         break],
389                        [AC_MSG_RESULT(no)])
390    done
391    
392    if test "$have_strto_fn" = 1; then
393      AC_CHECK_TYPES([long long],
394                     [pcre_have_long_long="1"],
395                     [pcre_have_long_long="0"])
396      AC_CHECK_TYPES([unsigned long long],
397                     [pcre_have_ulong_long="1"],
398                     [pcre_have_ulong_long="0"])
399  else  else
400    MAYBE_CPP_TARGETS=    pcre_have_long_long="0"
401    HAVE_CPP="#"    pcre_have_ulong_long="0"
402    fi
403    AC_SUBST(pcre_have_long_long)
404    AC_SUBST(pcre_have_ulong_long)
405    
406    AC_LANG_POP
407  fi  fi
408  AC_SUBST(MAYBE_CPP_TARGETS)  # Using AC_SUBST eliminates the need to include config.h in a public .h file
409  AC_SUBST(HAVE_CPP)  AC_SUBST(pcre_have_type_traits)
410    AC_SUBST(pcre_have_bits_type_traits)
411    
412  dnl Checks for typedefs, structures, and compiler characteristics.  # Conditional compilation
413    AM_CONDITIONAL(WITH_PCRE_CPP, test "x$enable_cpp" = "xyes")
414    AM_CONDITIONAL(WITH_REBUILD_CHARTABLES, test "x$enable_rebuild_chartables" = "xyes")
415    AM_CONDITIONAL(WITH_JIT, test "x$enable_jit" = "xyes")
416    
417    # Checks for typedefs, structures, and compiler characteristics.
418    
419  AC_C_CONST  AC_C_CONST
420  AC_TYPE_SIZE_T  AC_TYPE_SIZE_T
421    
422  AC_CHECK_TYPES([long long], [pcre_have_long_long="1"], [pcre_have_long_long="0"])  # Checks for library functions.
 AC_CHECK_TYPES([unsigned long long], [pcre_have_ulong_long="1"], [pcre_have_ulong_long="0"])  
 AC_SUBST(pcre_have_long_long)  
 AC_SUBST(pcre_have_ulong_long)  
423    
424  dnl Checks for library functions.  AC_CHECK_FUNCS(bcopy memmove strerror)
425    
426  AC_CHECK_FUNCS(bcopy memmove strerror strtoq strtoll)  # Check for the availability of libz (aka zlib)
427    
428  dnl Handle --enable-utf8  AC_CHECK_HEADERS([zlib.h], [HAVE_ZLIB_H=1])
429    AC_CHECK_LIB([z], [gzopen], [HAVE_LIBZ=1])
430    
431  AC_ARG_ENABLE(utf8,  # Check for the availability of libbz2. Originally we just used AC_CHECK_LIB,
432  [  --enable-utf8           enable UTF8 support],  # as for libz. However, this had the following problem, diagnosed and fixed by
433  if test "$enableval" = "yes"; then  # a user:
434    UTF8=-DSUPPORT_UTF8  #
435  fi  #   - libbz2 uses the Pascal calling convention (WINAPI) for the functions
436  )  #     under Win32.
437    #   - The standard autoconf AC_CHECK_LIB fails to include "bzlib.h",
438    #     therefore missing the function definition.
439    #   - The compiler thus generates a "C" signature for the test function.
440    #   - The linker fails to find the "C" function.
441    #   - PCRE fails to configure if asked to do so against libbz2.
442    #
443    # Solution:
444    #
445    #   - Replace the AC_CHECK_LIB test with a custom test.
446    
447    AC_CHECK_HEADERS([bzlib.h], [HAVE_BZLIB_H=1])
448    # Original test
449    # AC_CHECK_LIB([bz2], [BZ2_bzopen], [HAVE_LIBBZ2=1])
450    #
451    # Custom test follows
452    
453    AC_MSG_CHECKING([for libbz2])
454    OLD_LIBS="$LIBS"
455    LIBS="$LIBS -lbz2"
456    AC_LINK_IFELSE([AC_LANG_PROGRAM([[
457    #ifdef HAVE_BZLIB_H
458    #include <bzlib.h>
459    #endif]],
460    [[return (int)BZ2_bzopen("conftest", "rb");]])],
461    [AC_MSG_RESULT([yes]);HAVE_LIBBZ2=1; break;],
462    AC_MSG_RESULT([no]))
463    LIBS="$OLD_LIBS"
464    
465    # Check for the availabiity of libreadline
466    
467    AC_CHECK_HEADERS([readline/readline.h], [HAVE_READLINE_H=1])
468    AC_CHECK_HEADERS([readline/history.h], [HAVE_HISTORY_H=1])
469    AC_CHECK_LIB([readline], [readline], [HAVE_LIB_READLINE=1])
470    
471  dnl Handle --enable-unicode-properties  # This facilitates -ansi builds under Linux
472    dnl AC_DEFINE([_GNU_SOURCE], [], [Enable GNU extensions in glibc])
473    
474  AC_ARG_ENABLE(unicode-properties,  PCRE_STATIC_CFLAG=""
475  [  --enable-unicode-properties  enable Unicode properties support],  if test "x$enable_shared" = "xno" ; then
476  if test "$enableval" = "yes"; then    AC_DEFINE([PCRE_STATIC], [1], [
477    UCP=-DSUPPORT_UCP      Define if linking statically (TODO: make nice with Libtool)])
478      PCRE_STATIC_CFLAG="-DPCRE_STATIC"
479  fi  fi
480  )  AC_SUBST(PCRE_STATIC_CFLAG)
481    
482  dnl Handle --enable-newline-is-cr  # Here is where pcre specific defines are handled
483    
484  AC_ARG_ENABLE(newline-is-cr,  if test "$enable_jit" = "yes"; then
485  [  --enable-newline-is-cr  use CR as the newline character],    AC_DEFINE([SUPPORT_JIT], [], [
486  if test "$enableval" = "yes"; then      Define to enable support for Just-In-Time compiling.])
487    NEWLINE=-DNEWLINE=13  else
488      enable_pcregrep_jit="no"
489  fi  fi
 )  
   
 dnl Handle --enable-newline-is-lf  
490    
491  AC_ARG_ENABLE(newline-is-lf,  if test "$enable_pcregrep_jit" = "yes"; then
492  [  --enable-newline-is-lf  use LF as the newline character],    AC_DEFINE([SUPPORT_PCREGREP_JIT], [], [
493  if test "$enableval" = "yes"; then      Define to enable JIT support in pcregrep.])
   NEWLINE=-DNEWLINE=10  
494  fi  fi
 )  
495    
496  dnl Handle --enable-ebcdic  if test "$enable_utf8" = "yes"; then
497      AC_DEFINE([SUPPORT_UTF8], [], [
498        Define to enable support for the UTF-8 Unicode encoding. This will
499        work even in an EBCDIC environment, but it is incompatible with
500        the EBCDIC macro. That is, PCRE can support *either* EBCDIC code
501        *or* ASCII/UTF-8, but not both at once.])
502    fi
503    
504  AC_ARG_ENABLE(ebcdic,  if test "$enable_unicode_properties" = "yes"; then
505  [  --enable-ebcdic         assume EBCDIC coding rather than ASCII],    AC_DEFINE([SUPPORT_UCP], [], [
506  if test "$enableval" == "yes"; then      Define to enable support for Unicode properties.])
   EBCDIC=-DEBCDIC=1  
507  fi  fi
 )  
508    
509  dnl Handle --disable-stack-for-recursion  if test "$enable_stack_for_recursion" = "no"; then
510      AC_DEFINE([NO_RECURSE], [], [
511        PCRE uses recursive function calls to handle backtracking while
512        matching. This can sometimes be a problem on systems that have
513        stacks of limited size. Define NO_RECURSE to get a version that
514        doesn't use recursion in the match() function; instead it creates
515        its own stack by steam using pcre_recurse_malloc() to obtain memory
516        from the heap. For more detail, see the comments and other stuff
517        just above the match() function. On systems that support it,
518        "configure" can be used to set this in the Makefile
519        (use --disable-stack-for-recursion).])
520    fi
521    
522  AC_ARG_ENABLE(stack-for-recursion,  if test "$enable_pcregrep_libz" = "yes"; then
523  [  --disable-stack-for-recursion  disable use of stack recursion when matching],    AC_DEFINE([SUPPORT_LIBZ], [], [
524  if test "$enableval" = "no"; then      Define to allow pcregrep to be linked with libz, so that it is
525    NO_RECURSE=-DNO_RECURSE      able to handle .gz files.])
526  fi  fi
 )  
527    
528  dnl There doesn't seem to be a straightforward way of having parameters  if test "$enable_pcregrep_libbz2" = "yes"; then
529  dnl that set values, other than fudging the --with thing. So that's what    AC_DEFINE([SUPPORT_LIBBZ2], [], [
530  dnl I've done.      Define to allow pcregrep to be linked with libbz2, so that it is
531        able to handle .bz2 files.])
532    fi
533    
534  dnl Handle --with-posix-malloc-threshold=n  if test $with_pcregrep_bufsize -lt 8192 ; then
535      with_pcregrep_bufsize="8192"
536    fi
537    
538  AC_ARG_WITH(posix-malloc-threshold,  AC_DEFINE_UNQUOTED([PCREGREP_BUFSIZE], [$with_pcregrep_bufsize], [
539  [  --with-posix-malloc-threshold=10  threshold for POSIX malloc usage],    The value of PCREGREP_BUFSIZE determines the size of buffer used by
540    POSIX_MALLOC_THRESHOLD=-DPOSIX_MALLOC_THRESHOLD=$withval    pcregrep to hold parts of the file it is searching. On systems that
541  )    support it, "configure" can be used to override the default, which is
542      8192. This is also the minimum value. The actual amount of memory used by
543      pcregrep is three times this number, because it allows for the buffering of
544      "before" and "after" lines.])
545    
546    if test "$enable_pcretest_libreadline" = "yes"; then
547      AC_DEFINE([SUPPORT_LIBREADLINE], [], [
548        Define to allow pcretest to be linked with libreadline.])
549    fi
550    
551  dnl Handle --with-link-size=n  AC_DEFINE_UNQUOTED([NEWLINE], [$ac_pcre_newline_value], [
552      The value of NEWLINE determines the newline character sequence. On
553      systems that support it, "configure" can be used to override the
554      default, which is 10. The possible values are 10 (LF), 13 (CR),
555      3338 (CRLF), -1 (ANY), or -2 (ANYCRLF).])
556    
557    if test "$enable_bsr_anycrlf" = "yes"; then
558      AC_DEFINE([BSR_ANYCRLF], [], [
559        By default, the \R escape sequence matches any Unicode line ending
560        character or sequence of characters. If BSR_ANYCRLF is defined, this is
561        changed so that backslash-R matches only CR, LF, or CRLF. The build-
562        time default can be overridden by the user of PCRE at runtime. On
563        systems that support it, "configure" can be used to override the
564        default.])
565    fi
566    
567  AC_ARG_WITH(link-size,  AC_DEFINE_UNQUOTED([LINK_SIZE], [$with_link_size], [
568  [  --with-link-size=2    internal link size (2, 3, or 4 allowed)],    The value of LINK_SIZE determines the number of bytes used to store
569    LINK_SIZE=-DLINK_SIZE=$withval    links as offsets within the compiled regex. The default is 2, which
570  )    allows for compiled patterns up to 64K long. This covers the vast
571      majority of cases. However, PCRE can also be compiled to use 3 or 4
572      bytes instead. This allows for longer patterns in extreme cases. On
573      systems that support it, "configure" can be used to override this default.])
574    
575    AC_DEFINE_UNQUOTED([POSIX_MALLOC_THRESHOLD], [$with_posix_malloc_threshold], [
576      When calling PCRE via the POSIX interface, additional working storage
577      is required for holding the pointers to capturing substrings because
578      PCRE requires three integers per substring, whereas the POSIX
579      interface provides only two. If the number of expected substrings is
580      small, the wrapper function uses space on the stack, because this is
581      faster than using malloc() for each call. The threshold above which
582      the stack is no longer used is defined by POSIX_MALLOC_THRESHOLD. On
583      systems that support it, "configure" can be used to override this
584      default.])
585    
586    AC_DEFINE_UNQUOTED([MATCH_LIMIT], [$with_match_limit], [
587      The value of MATCH_LIMIT determines the default number of times the
588      internal match() function can be called during a single execution of
589      pcre_exec(). There is a runtime interface for setting a different
590      limit. The limit exists in order to catch runaway regular
591      expressions that take for ever to determine that they do not match.
592      The default is set very large so that it does not accidentally catch
593      legitimate cases. On systems that support it, "configure" can be
594      used to override this default default.])
595    
596    AC_DEFINE_UNQUOTED([MATCH_LIMIT_RECURSION], [$with_match_limit_recursion], [
597      The above limit applies to all calls of match(), whether or not they
598      increase the recursion depth. In some environments it is desirable
599      to limit the depth of recursive calls of match() more strictly, in
600      order to restrict the maximum amount of stack (or heap, if
601      NO_RECURSE is defined) that is used. The value of
602      MATCH_LIMIT_RECURSION applies only to recursive calls of match(). To
603      have any useful effect, it must be less than the value of
604      MATCH_LIMIT. The default is to use the same value as MATCH_LIMIT.
605      There is a runtime method for setting a different limit. On systems
606      that support it, "configure" can be used to override the default.])
607    
608    AC_DEFINE([MAX_NAME_SIZE], [32], [
609      This limit is parameterized just in case anybody ever wants to
610      change it. Care must be taken if it is increased, because it guards
611      against integer overflow caused by enormously large patterns.])
612    
613    AC_DEFINE([MAX_NAME_COUNT], [10000], [
614      This limit is parameterized just in case anybody ever wants to
615      change it. Care must be taken if it is increased, because it guards
616      against integer overflow caused by enormously large patterns.])
617    
618    AH_VERBATIM([PCRE_EXP_DEFN], [
619    /* If you are compiling for a system other than a Unix-like system or
620       Win32, and it needs some magic to be inserted before the definition
621       of a function that is exported by the library, define this macro to
622       contain the relevant magic. If you do not define this macro, it
623       defaults to "extern" for a C compiler and "extern C" for a C++
624       compiler on non-Win32 systems. This macro apears at the start of
625       every exported function that is part of the external API. It does
626       not appear on functions that are "external" in the C sense, but
627       which are internal to the library. */
628    #undef PCRE_EXP_DEFN])
629    
630    if test "$enable_ebcdic" = "yes"; then
631      AC_DEFINE_UNQUOTED([EBCDIC], [], [
632        If you are compiling for a system that uses EBCDIC instead of ASCII
633        character codes, define this macro as 1. On systems that can use
634        "configure", this can be done via --enable-ebcdic. PCRE will then
635        assume that all input strings are in EBCDIC. If you do not define
636        this macro, PCRE will assume input strings are ASCII or UTF-8 Unicode.
637        It is not possible to build a version of PCRE that supports both
638        EBCDIC and UTF-8.])
639    fi
640    
641  dnl Handle --with-match-limit=n  # Platform specific issues
642    NO_UNDEFINED=
643    EXPORT_ALL_SYMBOLS=
644    case $host_os in
645      cygwin* | mingw* )
646        if test X"$enable_shared" = Xyes; then
647          NO_UNDEFINED="-no-undefined"
648          EXPORT_ALL_SYMBOLS="-Wl,--export-all-symbols"
649        fi
650        ;;
651    esac
652    
653  AC_ARG_WITH(match-limit,  # The extra LDFLAGS for each particular library
654  [  --with-match-limit=10000000  default limit on internal looping],  # (Note: The libpcre*_version bits are m4 variables, assigned above)
   MATCH_LIMIT=-DMATCH_LIMIT=$withval  
 )  
655    
656  dnl Handle --with-match-limit_recursion=n  EXTRA_LIBPCRE_LDFLAGS="$EXTRA_LIBPCRE_LDFLAGS \
657                           $NO_UNDEFINED -version-info libpcre_version"
658    
659  AC_ARG_WITH(match-limit-recursion,  EXTRA_LIBPCREPOSIX_LDFLAGS="$EXTRA_LIBPCREPOSIX_LDFLAGS \
660  [  --with-match-limit-recursion=10000000  default limit on internal recursion],                              $NO_UNDEFINED -version-info libpcreposix_version"
   MATCH_LIMIT_RECURSION=-DMATCH_LIMIT_RECURSION=$withval  
 )  
661    
662  dnl Unicode character property support implies UTF-8 support  EXTRA_LIBPCRECPP_LDFLAGS="$EXTRA_LIBPCRECPP_LDFLAGS \
663                              $NO_UNDEFINED -version-info libpcrecpp_version \
664                              $EXPORT_ALL_SYMBOLS"
665    
666    AC_SUBST(EXTRA_LIBPCRE_LDFLAGS)
667    AC_SUBST(EXTRA_LIBPCREPOSIX_LDFLAGS)
668    AC_SUBST(EXTRA_LIBPCRECPP_LDFLAGS)
669    
670    # When we run 'make distcheck', use these arguments.
671    DISTCHECK_CONFIGURE_FLAGS="--enable-jit --enable-cpp --enable-unicode-properties"
672    AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
673    
674    # Check that, if --enable-pcregrep-libz or --enable-pcregrep-libbz2 is
675    # specified, the relevant library is available.
676    
677    if test "$enable_pcregrep_libz" = "yes"; then
678      if test "$HAVE_ZLIB_H" != "1"; then
679        echo "** Cannot --enable-pcregrep-libz because zlib.h was not found"
680        exit 1
681      fi
682      if test "$HAVE_LIBZ" != "1"; then
683        echo "** Cannot --enable-pcregrep-libz because libz was not found"
684        exit 1
685      fi
686      LIBZ="-lz"
687    fi
688    AC_SUBST(LIBZ)
689    
690  if test "$UCP" != "" ; then  if test "$enable_pcregrep_libbz2" = "yes"; then
691    UTF8=-DSUPPORT_UTF8    if test "$HAVE_BZLIB_H" != "1"; then
692        echo "** Cannot --enable-pcregrep-libbz2 because bzlib.h was not found"
693        exit 1
694      fi
695      if test "$HAVE_LIBBZ2" != "1"; then
696        echo "** Cannot --enable-pcregrep-libbz2 because libbz2 was not found"
697        exit 1
698      fi
699      LIBBZ2="-lbz2"
700  fi  fi
701    AC_SUBST(LIBBZ2)
702    
703  dnl "Export" these variables  # Similarly for --enable-pcretest-readline
704    
705  AC_SUBST(BUILD_EXEEXT)  if test "$enable_pcretest_libreadline" = "yes"; then
706  AC_SUBST(BUILD_OBJEXT)    if test "$HAVE_READLINE_H" != "1"; then
707  AC_SUBST(CC_FOR_BUILD)      echo "** Cannot --enable-pcretest-readline because readline/readline.h was not found."
708  AC_SUBST(CXX_FOR_BUILD)      exit 1
709  AC_SUBST(CFLAGS_FOR_BUILD)    fi
710  AC_SUBST(CXXFLAGS_FOR_BUILD)    if test "$HAVE_HISTORY_H" != "1"; then
711  AC_SUBST(CXXLDFLAGS)      echo "** Cannot --enable-pcretest-readline because readline/history.h was not found."
712  AC_SUBST(EBCDIC)      exit 1
713  AC_SUBST(HAVE_MEMMOVE)    fi
714  AC_SUBST(HAVE_STRERROR)    LIBREADLINE="-lreadline"
715  AC_SUBST(LINK_SIZE)  fi
716  AC_SUBST(MATCH_LIMIT)  AC_SUBST(LIBREADLINE)
 AC_SUBST(MATCH_LIMIT_RECURSION)  
 AC_SUBST(NEWLINE)  
 AC_SUBST(NO_RECURSE)  
 AC_SUBST(PCRE_LIB_VERSION)  
 AC_SUBST(PCRE_POSIXLIB_VERSION)  
 AC_SUBST(PCRE_CPPLIB_VERSION)  
 AC_SUBST(PCRE_VERSION)  
 AC_SUBST(POSIX_MALLOC_THRESHOLD)  
 AC_SUBST(UCP)  
 AC_SUBST(UTF8)  
717    
718  dnl Stuff to make MinGW work better. Special treatment is no longer  # Produce these files, in addition to config.h.
719  dnl needed for Cygwin.  AC_CONFIG_FILES(
720            Makefile
721            libpcre.pc
722            libpcreposix.pc
723            libpcrecpp.pc
724            pcre-config
725            pcre.h
726            pcre_stringpiece.h
727            pcrecpparg.h
728    )
729    
730  case $host_os in  # Make the generated script files executable.
731  mingw* )  AC_CONFIG_COMMANDS([script-chmod], [chmod a+x pcre-config])
     POSIX_OBJ=pcreposix.o  
     POSIX_LOBJ=pcreposix.lo  
     POSIX_LIB=  
     ON_WINDOWS=  
     NOT_ON_WINDOWS="#"  
     WIN_PREFIX=  
     ;;  
 * )  
     ON_WINDOWS="#"  
     NOT_ON_WINDOWS=  
     POSIX_OBJ=  
     POSIX_LOBJ=  
     POSIX_LIB=libpcreposix.la  
     WIN_PREFIX=  
     ;;  
 esac  
 AC_SUBST(WIN_PREFIX)  
 AC_SUBST(ON_WINDOWS)  
 AC_SUBST(NOT_ON_WINDOWS)  
 AC_SUBST(POSIX_OBJ)  
 AC_SUBST(POSIX_LOBJ)  
 AC_SUBST(POSIX_LIB)  
732    
733  if test "x$enable_shared" = "xno" ; then  # Make sure that pcre_chartables.c is removed in case the method for
734      AC_DEFINE([PCRE_STATIC],[1],[to link statically])  # creating it was changed by reconfiguration.
735  fi  AC_CONFIG_COMMANDS([delete-old-chartables], [rm -f pcre_chartables.c])
736    
737    AC_OUTPUT
738    
739    # Print out a nice little message after configure is run displaying your
740    # chosen options.
741    
742    cat <<EOF
743    
744    $PACKAGE-$VERSION configuration summary:
745    
746        Install prefix .................. : ${prefix}
747        C preprocessor .................. : ${CPP}
748        C compiler ...................... : ${CC}
749        C++ preprocessor ................ : ${CXXCPP}
750        C++ compiler .................... : ${CXX}
751        Linker .......................... : ${LD}
752        C preprocessor flags ............ : ${CPPFLAGS}
753        C compiler flags ................ : ${CFLAGS}
754        C++ compiler flags .............. : ${CXXFLAGS}
755        Linker flags .................... : ${LDFLAGS}
756        Extra libraries ................. : ${LIBS}
757    
758        Build C++ library ............... : ${enable_cpp}
759        Enable JIT compiling support .... : ${enable_jit}
760        Enable UTF-8 support ............ : ${enable_utf8}
761        Unicode properties .............. : ${enable_unicode_properties}
762        Newline char/sequence ........... : ${enable_newline}
763        \R matches only ANYCRLF ......... : ${enable_bsr_anycrlf}
764        EBCDIC coding ................... : ${enable_ebcdic}
765        Rebuild char tables ............. : ${enable_rebuild_chartables}
766        Use stack recursion ............. : ${enable_stack_for_recursion}
767        POSIX mem threshold ............. : ${with_posix_malloc_threshold}
768        Internal link size .............. : ${with_link_size}
769        Match limit ..................... : ${with_match_limit}
770        Match limit recursion ........... : ${with_match_limit_recursion}
771        Build shared libs ............... : ${enable_shared}
772        Build static libs ............... : ${enable_static}
773        Use JIT in pcregrep ............. : ${enable_pcregrep_jit}
774        Buffer size for pcregrep ........ : ${with_pcregrep_bufsize}
775        Link pcregrep with libz ......... : ${enable_pcregrep_libz}
776        Link pcregrep with libbz2 ....... : ${enable_pcregrep_libbz2}
777        Link pcretest with libreadline .. : ${enable_pcretest_libreadline}
778    
779    EOF
780    
781  dnl This must be last; it determines what files are written as well as config.h  dnl end configure.ac
 AC_OUTPUT(Makefile pcre-config:pcre-config.in libpcre.pc:libpcre.pc.in pcrecpparg.h:pcrecpparg.h.in pcre_stringpiece.h:pcre_stringpiece.h.in RunGrepTest:RunGrepTest.in RunTest:RunTest.in,[chmod a+x RunTest RunGrepTest pcre-config])  

Legend:
Removed from v.89  
changed lines
  Added in v.685

  ViewVC Help
Powered by ViewVC 1.1.5