Sync common code between configure.ac files
[xapian.git] / xapian-bindings / configure.ac
blobcb266a84b262a0f156a95fe08263b3f71a2cd035
1 dnl Process this file with autoconf to produce a configure script.
3 dnl See xapian-core's HACKING document for details of the reasons for required
4 dnl versions.
5 AC_PREREQ([2.63])
7 m4_define([project_version], [1.4.19])
8 AC_INIT([xapian-bindings], project_version, [https://xapian.org/bugs])
10 dnl See xapian-core's HACKING document for details of the reasons for required
11 dnl versions.
12 AM_INIT_AUTOMAKE([1.12.2 parallel-tests -Wportability subdir-objects tar-ustar no-dist-gzip dist-xz])
13 AC_CONFIG_SRCDIR([xapian-headers.i])
15 AC_CONFIG_HEADERS([config.h])
17 AC_CONFIG_MACRO_DIR([m4])
19 dnl Mac OS X needs MACOSX_DEPLOYMENT_TARGET set to 10.3 (or higher) to
20 dnl successfully link the SWIG generated modules.  The link always fails on
21 dnl earlier versions of Mac OS X (10.1.4 and 10.2.8 tested), and these versions
22 dnl are long obsolete now, so we just ensure that MACOSX_DEPLOYMENT_TARGET is
23 dnl set to at least 10.3.
24 dnl
25 dnl NB we must do this *BEFORE* LT_INIT since that is what checks
26 dnl MACOSX_DEPLOYMENT_TARGET.
27 AC_CANONICAL_HOST
28 OVERRIDE_MACOSX_DEPLOYMENT_TARGET=
29 case $host in
30 *86*-darwin8*|*-darwin[[912]]*)
31   dnl On 10.5 or later, and 10.4 on x86, the deployment target defaults to the
32   dnl OS version, so we don't need to override on these.
33   ;;
34 *-darwin*)
35   case $MACOSX_DEPLOYMENT_TARGET in
36   "")
37     OVERRIDE_MACOSX_DEPLOYMENT_TARGET=10.3 ;;
38   10.[[012]])
39     AC_MSG_WARN([Overriding MACOSX_DEPLOYMENT_TARGET from $MACOSX_DEPLOYMENT_TARGET to 10.3])
40     OVERRIDE_MACOSX_DEPLOYMENT_TARGET=10.3 ;;
41   esac
42   ;;
43 esac
44 AM_CONDITIONAL(OVERRIDE_MACOSX_DEPLOYMENT_TARGET, test -n "$OVERRIDE_MACOSX_DEPLOYMENT_TARGET")
45 AC_SUBST(OVERRIDE_MACOSX_DEPLOYMENT_TARGET)
46 if test -n "$OVERRIDE_MACOSX_DEPLOYMENT_TARGET" ; then
47   MACOSX_DEPLOYMENT_TARGET=$OVERRIDE_MACOSX_DEPLOYMENT_TARGET
50 dnl Use libtool to manage our libraries, but don't build static libraries as
51 dnl the bindings only have a use for dynamic ones.
52 LT_PREREQ([2.2.6])
53 LT_INIT([disable-static])
55 dnl -no-undefined causes problems on Mac OS X with at least some
56 dnl MACOSX_DEPLOYMENT_TARGET settings, so only pass -no-undefined on
57 dnl platforms where it is required in order to link a shared library at
58 dnl all (Windows is the main one).
59 NO_UNDEFINED=
60 if test unsupported = "$allow_undefined_flag" ; then
61   NO_UNDEFINED=-no-undefined
63 AC_SUBST(NO_UNDEFINED)
65 dnl Checks for programs.
66 AC_PROG_CXX
68 # Checked: freebsd8.0 openbsd4.6 solaris2.9 solaris2.10
69 case $host_os in
70   linux* | k*bsd*-gnu | freebsd* | openbsd* | solaris*)
71     dnl Vanilla libtool sets this to "unknown" which it then handles as "yes".
72     link_all_deplibs_CXX=no
73     ;;
74 esac
76 case $host_os in
77   linux*)
78     dnl Extract search path from ldconfig which is more reliable than the way
79     dnl vanilla libtool extracts them from ld.so.conf.
80     d=`/sbin/ldconfig -N -X -v 2>&AS_MESSAGE_LOG_FD|$SED 's,^\(/.*\):\( (.*)\)\?$,\1,p;d'|tr '\n' ' '`
81     test -z "$d" || sys_lib_dlsearch_path_spec=$d
82     ;;
83 esac
85 dnl Run tests using the C++ compiler.
86 AC_LANG([C++])
88 dnl Probe for any options needed to enable C++11 support.
89 AX_CXX_COMPILE_STDCXX_11
91 dnl Check for xapian-core.
92 XO_LIB_XAPIAN([], [],
93     [xapian-config]regexp(project_version,
94                           [^\([0-9]*\.[0-9]*[13579]\)\..*$], [-\1]))
95 XO_REQUIRE([1.4.0])
97 NEED_JNILIB_EXT=no
98 NEED_INTREE_DYLD=no
99 INTREE_DYLD_PATH=
100 case $host_os in
101 darwin*)
102   NEED_JNILIB_EXT=yes
103   dnl If we're building against an uninstalled xapian-core, xapian-config
104   dnl --libs will give an error.
105   if $XAPIAN_CONFIG --libs >/dev/null 2>/dev/null ; then
106     :
107   else
108     NEED_INTREE_DYLD=yes
109     dnl $XAPIAN_LIBS may have some options first, so grab the last argument,
110     dnl which should be the .la file.
111     set x $XAPIAN_LIBS
112     as_fn_arith $# - 1
113     shift $as_val
114     INTREE_DYLD_PATH=$1
115     dnl Make sure the path is absolute.
116     case $INTREE_DYLD_PATH in
117       /*) ;;
118       *) INTREE_DYLD_PATH=`pwd`/$INTREE_DYLD_PATH ;;
119     esac
120     dnl Add .libs or equivalent.
121     INTREE_DYLD_PATH=`echo "$INTREE_DYLD_PATH"|sed 's,\(.*/\).*,\1,'`$lt_cv_objdir
122     AC_SUBST([INTREE_DYLD_PATH])
123   fi
124   ;;
125 esac
126 AM_CONDITIONAL(NEED_JNILIB_EXT, test yes = "$NEED_JNILIB_EXT")
127 AM_CONDITIONAL(NEED_INTREE_DYLD, test yes = "$NEED_INTREE_DYLD")
129 dnl We want XAPIAN_CXXFLAGS to be used for configure tests, so add it to
130 dnl CXXFLAGS for the duration of configure.
131 save_CXXFLAGS=$CXXFLAGS
132 CXXFLAGS="$CXXFLAGS $XAPIAN_CXXFLAGS"
134 dnl COMPAT_VERSION is the version of xapian-core that "matches" our version.
135 dnl We allow for bindings being version 0.8.5.1 while xapian-core is 0.8.5.
136 dnl COMPAT_VERSION also ignores any _git123 suffix which snapshots will have.
137 COMPAT_VERSION=[`echo "$PACKAGE_VERSION"|sed 's/^\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`]
138 AC_SUBST(COMPAT_VERSION)
140 dnl VERSION_NO_SNAPSHOT simply has any _git123 suffix removed.
141 VERSION_NO_SNAPSHOT=[`echo "$PACKAGE_VERSION"|sed 's/_.*$//'`]
142 AC_SUBST(VERSION_NO_SNAPSHOT)
144 dnl We only need to set docdir for compatibility with autoconf < 2.60 - this
145 dnl code can be removed once we move to requiring autoconf 2.60 or newer.
146 test -n "$docdir" || docdir='${datadir}/doc/${PACKAGE_TARNAME}'
147 AC_SUBST(docdir)
149 AC_ARG_ENABLE(visibility,
150   [AS_HELP_STRING([--disable-visibility], [disable use of GCC visibility])],
151   [case ${enableval} in
152     yes|no) ;;
153     *) AC_MSG_ERROR([bad value ${enableval} for --disable-visibility]) ;;
154   esac])
156 dnl Only probe for SWIG and enable SWIG rules in makefiles if
157 dnl configure --enable-maintainer-mode is used.
158 AM_MAINTAINER_MODE
160 AC_ARG_ENABLE(documentation,
161   [AS_HELP_STRING([--enable-documentation], [enable make rules to rebuild shipped documentation [default=maintainer-mode]])],
162   [case ${enableval} in
163     yes|no) ;;
164     *) AC_MSG_ERROR([bad value ${enableval} for --enable-documentation]) ;;
165   esac])
166 test -z "$enable_documentation" && enable_documentation=$USE_MAINTAINER_MODE
167 AM_CONDITIONAL(DOCUMENTATION_RULES, test x"$enable_documentation" = xyes)
168 AM_CONDITIONAL(MAINTAINER_NO_DOCS, test x"$USE_MAINTAINER_MODE$enable_documentation" = xyesno)
170 if test yes = "$enable_documentation" ; then
171   dnl Check for rst2html. (Needed to make HTML from reStructuredText format)
172   dnl Also look for rst2html.py, which archlinux reportedly installs it as.
173   AC_PATH_PROGS(RST2HTML, [rst2html rst2html.py], [])
174   AC_ARG_VAR([RST2HTML], [reST to HTML convertor])
175   test -z "$RST2HTML" && AC_MSG_ERROR([rst2html is required to build documentation (try package python-docutils)])
178 if test x$USE_MAINTAINER_MODE = xyes; then
179   dnl Check for swig - this does most of the work for the bindings.
180   dnl AC_PATH_PROGS only honours an already set SWIG if it's a full
181   dnl path.  Listing it in the "to be searched" list like this allows
182   dnl ./configure SWIG=myswig to work.
183   swigoverridden=${SWIG+yes}
184   AC_PATH_PROGS(SWIG, ["${SWIG-swig}"], [])
185   AC_ARG_VAR(SWIG, [SWIG interface generator (only needed by Xapian developers)])
186   if test -z "$SWIG" ; then
187     AC_MSG_ERROR([Can't find SWIG utility])
188   fi
189   dnl Check for new enough SWIG.
190   dnl
191   dnl 3.0.6 fixes compiling the Perl bindings under C++11 ("seed" macro issue).
192   dnl 3.0.8 fixes conversion of integers large than an int in Python 3.
193   dnl 3.0.9 fixes generation of unnecessary _swigconstant helpers for Python.
194   dnl 3.0.12 fixes segfault on unload with PHP 7.1
195   v=`$SWIG -version 2>&1|sed 's/^SWIG Version \([[0-9\.]]*\).*/\1/p;d'`
196   case $v in
197     [[012].*|3.0.?|3.0.1[01]|""])
198       msg="SWIG >= 3.0.12 required (you have ${v:-an unknown version})"
199       if test -n "$swigoverridden" ; then
200         dnl If SWIG was explicitly set, make this a warning only.
201         AC_MSG_WARN([$msg])
202       else
203         AC_MSG_ERROR([$msg])
204       fi ;;
205   esac
206   SWIG_FLAGS=`$XAPIAN_CONFIG --swigflags`
207   AC_SUBST(SWIG_FLAGS)
208   XAPIAN_HEADER_DIRS=
209   XAPIAN_HEADERS=
210   for a in $SWIG_FLAGS ; do
211     case $a in
212     -I*)
213       d=`echo "x$a"|sed 's/^x-I//'`
214       dnl Quote each entry in XAPIAN_HEADER_DIRS with "".
215       XAPIAN_HEADER_DIRS=$XAPIAN_HEADER_DIRS' "'$d'"'
216       for f in "$d/"*.h "$d/xapian/*.h" ; do
217         if test -f "$f" ; then
218           XAPIAN_HEADERS="$XAPIAN_HEADERS $f"
219         fi
220       done
221       ;;
222     esac
223   done
224   AC_SUBST([XAPIAN_HEADER_DIRS])
225   AC_SUBST([XAPIAN_HEADERS])
227   dnl Need perl in maintainer mode to generate the except.i file for python.
228   AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
229   test -z "$PERL" && AC_MSG_ERROR([perl is required in maintainer mode])
230   dnl Need doxygen in maintainer mode to convert C++ doxygen comments to Python
231   dnl docstrings.
232   AC_PATH_PROG(DOXYGEN, doxygen, [])
233   AC_ARG_VAR([DOXYGEN], [Doxygen documentation system])
234   test -z "$DOXYGEN" && AC_MSG_ERROR([doxygen is required to build documentation])
237 AC_ARG_WITH(python,
238   AC_HELP_STRING([--with-python], [enable Python 2 bindings]),
239   [],
240   [with_python=])
242 AC_ARG_WITH(python3,
243   AS_HELP_STRING([--with-python3], [enable Python 3 bindings]),
244   [],
245   [with_python3=])
247 AC_ARG_WITH(php,
248   AC_HELP_STRING([--with-php], [enable PHP 5 bindings]),
249   [],
250   [with_php=])
252 AC_ARG_WITH(php7,
253   AS_HELP_STRING([--with-php7], [enable PHP 7 bindings]),
254   [],
255   [with_php7=])
257 AC_ARG_WITH(ruby,
258   AS_HELP_STRING([--with-ruby], [enable Ruby bindings]),
259   [],
260   [with_ruby=])
262 AC_ARG_WITH(tcl,
263   AS_HELP_STRING([--with-tcl], [enable Tcl bindings]),
264   [],
265   [with_tcl=])
267 AC_ARG_WITH(csharp,
268   AS_HELP_STRING([--with-csharp], [enable CSharp bindings]),
269   [],
270   [with_csharp=])
272 AC_ARG_WITH(java,
273   AS_HELP_STRING([--with-java], [enable Java bindings]),
274   [],
275   [with_java=])
277 AC_ARG_WITH(perl,
278   AS_HELP_STRING([--with-perl], [enable Perl bindings]),
279   [],
280   [with_perl=])
282 AC_ARG_WITH(lua,
283   AS_HELP_STRING([--with-lua], [enable Lua bindings]),
284   [],
285   [with_lua=])
287 case $with_python$with_python3$with_php$with_php7$with_ruby$with_tcl$with_csharp$with_java$with_perl$with_lua in
288 *yes*)
289   dnl Default unspecified values to no.
290   test -z "$with_python" && with_python=no
291   test -z "$with_python3" && with_python3=no
292   test -z "$with_php" && with_php=no
293   test -z "$with_php7" && with_php7=no
294   test -z "$with_tcl" && with_tcl=no
295   test -z "$with_csharp" && with_csharp=no
296   test -z "$with_java" && with_java=no
297   test -z "$with_ruby" && with_ruby=no
298   test -z "$with_perl" && with_perl=no
299   test -z "$with_lua" && with_lua=no
300   ;;
301 esac
303 BINDINGS=
305 if test no != "$with_python" ; then
306   dnl For backward compatibility:
307   : ${PYTHON2="$PYTHON"}
308   : ${PYTHON2_INC="$PYTHON_INC"}
309   : ${PYTHON2_LIB="$PYTHON_LIB"}
310   : ${PYTHON2_LIBS="$PYTHON_LIBS"}
311   : ${PYTHON2_SO="$PYTHON_SO"}
312   dnl See comment for AC_PATH_PROGS(SWIG, ...).
313   if test -n "$PYTHON2" ; then
314     AC_PATH_PROGS(PYTHON2, ["$PYTHON2"], [])
315   else
316     AC_PATH_PROGS(PYTHON2, [python2 python], [])
317   fi
318   AC_ARG_VAR(PYTHON2, [Python 2 interpreter])
319   if test -n "$PYTHON2" ; then
320     dnl Require Python 2.6 or newer.  Older versions are essentially
321     dnl unsupported upstream.
322     AC_MSG_CHECKING([$PYTHON2 version])
323     version=`$PYTHON2 -c 'import sys;print("%d.%d" % sys.version_info[[:2]])' 2>/dev/null`
324     case $version in
325     [2.[6-9]*|2.[1-5][0-9]*])
326       AC_MSG_RESULT([$version])
327       ;;
328     [[3-9].*])
329       AC_MSG_RESULT([$version (too new - use --with-python3 for Python 3 support)])
330       if test yes = "$with_python" ; then
331         AC_MSG_ERROR([Use --with-python3 for Python 3 support ($PYTHON2 is $version)])
332       fi
333       PYTHON2=
334       ;;
335     *)
336       AC_MSG_RESULT([$version (too old)])
337       if test yes = "$with_python" ; then
338         AC_MSG_ERROR([Only Python 2.6 or newer is supported ($PYTHON2 is $version)])
339       fi
340       PYTHON2=
341       ;;
342     esac
343     if test -n "$PYTHON2" ; then
344       if $PYTHON2 -c 'import distutils.sysconfig' 2>/dev/null ; then
345         PYTHON2_INC=`$PYTHON2 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_inc().replace(os.sep,"/"))'`
346         AC_SUBST(PYTHON2_INC)
347       else
348         if test yes = "$with_python" ; then
349           AC_MSG_ERROR([Couldn't import Python module distutils.sysconfig - you probably need to install a python-dev or python-devel package])
350         else
351           AC_MSG_WARN([Couldn't import Python module distutils.sysconfig - you probably don't have a python-dev or python-devel package installed])
352           PYTHON2=
353         fi
354       fi
355     fi
356     AC_MSG_CHECKING([for python2 sphinx module])
357     if $PYTHON2 -c 'import sphinx;print(repr(sphinx.main))' >&5 2>&5 ; then
358       AC_MSG_RESULT([yes])
359     else
360       AC_MSG_RESULT([no])
361       if test yes = "$with_python" ; then
362         AC_MSG_ERROR([Couldn't import sphinx module and call sphinx.main() for Python2 - try package python-sphinx])
363       fi
364       PYTHON2=
365     fi
366     if test -n "$PYTHON2" ; then
367       dnl Check that Python.h is there, which is a good way to check that
368       dnl the appropriate python-dev package has been installed.
369       AC_MSG_CHECKING([for $PYTHON2_INC/Python.h])
370       if test -f "$PYTHON2_INC/Python.h" ; then
371         AC_MSG_RESULT(yes)
372         AC_MSG_CHECKING([for directory to install python2 bindings in])
373         if test -z "$PYTHON2_LIB" ; then
374           PYTHON2_LIB=`$PYTHON2 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_lib(1).replace(os.sep,"/"))'`
375         fi
376         AC_MSG_RESULT([$PYTHON2_LIB])
377         AC_ARG_VAR(PYTHON2_LIB, [Directory to install python2 bindings in])
379         AC_MSG_CHECKING([for python2 libraries to link against])
380         case $host_os in
381         mingw* | pw32*)
382           PYTHON2_LIBS=`$PYTHON2 -c 'import os,sys;print("-L"+os.path.join(sys.prefix,"libs").replace(os.sep,"/")+" -lpython"+sys.version[[:3]].replace(".",""))'` ;;
383         cygwin*)
384           PYTHON2_LIBS=`$PYTHON2 -c 'import os,sys;print("-L"+os.path.join(sys.path[[3]],"config")+" -lpython"+sys.version[[:3]])'` ;;
385         *)
386           PYTHON2_LIBS= ;;
387         esac
388         AC_SUBST(PYTHON2_LIBS)
389         AC_MSG_RESULT([$PYTHON2_LIBS])
391         AC_MSG_CHECKING([for python2 module extension])
392         dnl Usually ".so", but for example, Mac OS X uses ".dylib".
393         PYTHON2_SO=`$PYTHON2 -c 'import distutils.sysconfig;print(distutils.sysconfig.get_config_vars("SO")[[0]])'`
394         AC_SUBST(PYTHON2_SO)
395         AC_MSG_RESULT([$PYTHON2_SO])
396         BINDINGS="$BINDINGS python"
397       else
398         AC_MSG_RESULT([no (install python-dev or python-devel package or similar)])
399         if test yes = "$with_python" ; then
400           AC_MSG_ERROR([Python.h not found])
401         fi
402       fi
403     fi
404   fi
407 if test no != "$with_python3" ; then
408   dnl See comment for AC_PATH_PROGS(SWIG, ...).
409   if test -n "$PYTHON3" ; then
410     AC_PATH_PROGS(PYTHON3, ["$PYTHON3"], [])
411   else
412     AC_PATH_PROGS(PYTHON3, [python3 python], [])
413   fi
414   AC_ARG_VAR(PYTHON3, [Python 3 interpreter])
415   if test -n "$PYTHON3" ; then
416     dnl Require Python 3.2 or newer, as that's the oldest version we can
417     dnl easily test with.  If anyone's keen to support older versions, please
418     dnl test and send in any patches needed to get it to work.
419     AC_MSG_CHECKING([$PYTHON3 version])
420     version=`$PYTHON3 -c 'import sys;print("%d.%d" % sys.version_info[[:2]])' 2>/dev/null`
421     case $version in
422     [3.[2-9]*|3.1[0-9]*|[4-9].*])
423       AC_MSG_RESULT([$version])
424       ;;
425     *)
426       AC_MSG_RESULT([$version (too old)])
427       if test yes = "$with_python3" ; then
428         AC_MSG_ERROR([Only Python 3.2 or newer is supported ($python3 is $version)])
429       fi
430       PYTHON3=
431       ;;
432     esac
433     if test -n "$PYTHON3" ; then
434       if $PYTHON3 -c 'import distutils.sysconfig' 2>/dev/null ; then
435         PYTHON3_INC=`$PYTHON3 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_inc().replace(os.sep,"/"))'`
436         AC_SUBST(PYTHON3_INC)
437       else
438         if test yes = "$with_python3" ; then
439           AC_MSG_ERROR([Couldn't import Python module distutils.sysconfig - you probably need to install a python3-dev or python3-devel package])
440         else
441           AC_MSG_WARN([Couldn't import Python module distutils.sysconfig - you probably don't have a python3-dev or python3-devel package installed])
442           PYTHON3=
443         fi
444       fi
445     fi
446     AC_MSG_CHECKING([for python3 sphinx module])
447     if $PYTHON3 -c 'import sphinx' >&5 2>&5 ; then
448       AC_MSG_RESULT([yes])
449     else
450       AC_MSG_RESULT([no])
451       if test yes = "$with_python3" ; then
452         AC_MSG_ERROR([Couldn't import sphinx module for Python3 - try package python3-sphinx])
453       fi
454       PYTHON3=
455     fi
456     if test -n "$PYTHON3" ; then
457       dnl Check that Python.h is there, which is a good way to check that
458       dnl the appropriate python3-dev package has been installed.
459       AC_MSG_CHECKING([for $PYTHON3_INC/Python.h])
460       if test -f "$PYTHON3_INC/Python.h" ; then
461         AC_MSG_RESULT(yes)
462         AC_MSG_CHECKING([for directory to install python3 bindings in])
463         if test -z "$PYTHON3_LIB" ; then
464           PYTHON3_LIB=`$PYTHON3 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_lib(1).replace(os.sep,"/"))'`
465         fi
466         AC_MSG_RESULT([$PYTHON3_LIB])
467         AC_ARG_VAR(PYTHON3_LIB, [Directory to install python3 bindings in])
469         AC_MSG_CHECKING([for python3 libraries to link against])
470         case $host_os in
471         mingw* | pw32*)
472           PYTHON3_LIBS=`$PYTHON3 -c 'import os,sys;print("-L"+os.path.join(sys.prefix,"libs").replace(os.sep,"/")+" -lpython"+sys.version[[:3]].replace(".",""))'` ;;
473         cygwin*)
474           PYTHON3_LIBS=`$PYTHON3 -c 'import os,sys;print("-L"+os.path.join(sys.path[[3]],"config")+" -lpython"+sys.version[[:3]])'` ;;
475         *)
476           PYTHON3_LIBS= ;;
477         esac
478         AC_SUBST(PYTHON3_LIBS)
479         AC_MSG_RESULT([$PYTHON3_LIBS])
481         AC_MSG_CHECKING([for python3 module extension])
482         dnl Usually ".so", but for example, Mac OS X uses ".dylib".
483         PYTHON3_SO=`$PYTHON3 -c 'import distutils.sysconfig;print(distutils.sysconfig.get_config_vars("SO")[[0]])'`
484         AC_SUBST(PYTHON3_SO)
485         AC_MSG_RESULT([$PYTHON3_SO])
487         AC_MSG_CHECKING([for tag for cached compiled scripts])
488         PYTHON3_CACHE_TAG=`$PYTHON3 -c 'import imp;print(imp.get_tag())'`
489         AC_SUBST(PYTHON3_CACHE_TAG)
490         AC_MSG_RESULT([$PYTHON3_CACHE_TAG])
492         AC_MSG_CHECKING([for extension of cached and optimized python3 bytecode])
493         PYTHON3_CACHE_OPT1_EXT=`$PYTHON3 -c 'import imp,sys;print("%s.pyo"%imp.get_tag()) if sys.version_info.minor<5 else print("{1}{2}".format(*imp.util.cache_from_source("",optimization=1).rpartition(imp.get_tag())))'`
494         AC_SUBST(PYTHON3_CACHE_OPT1_EXT)
495         AC_MSG_RESULT([$PYTHON3_CACHE_OPT1_EXT])
497         BINDINGS="$BINDINGS python3"
498       else
499         AC_MSG_RESULT([no (install python3-dev or python3-devel package or similar)])
500         if test yes = "$with_python3" ; then
501           AC_MSG_ERROR([Python.h not found])
502         fi
503       fi
504     fi
505   fi
508 if test x$USE_MAINTAINER_MODE = xyes; then
509   dnl Need python in maintainer mode to run doxy2swig.py.
510   dnl Either Python 2 or 3 is OK for this.
511   if test -n "$PYTHON2" ; then
512     PYTHON=$PYTHON2
513   elif test -n "$PYTHON3" ; then
514     PYTHON=$PYTHON3
515   else
516     AC_PATH_PROGS(PYTHON, [python2 python python3], [])
517   fi
518   test -z "$PYTHON" && AC_MSG_ERROR([python is required in maintainer mode])
521 if test no != "$with_php" ; then
522   dnl See comment for AC_PATH_PROGS(SWIG, ...).
523   if test -n "$PHP_CONFIG" ; then
524     AC_PATH_PROGS(PHP_CONFIG, ["$PHP_CONFIG"], [])
525   fi
526   if test -z "$PHP_CONFIG" ; then
527     AC_PATH_PROGS(PHP_CONFIG, [php-config5 php-config5.6 php-config5.5 php-config], [])
528   fi
529   AC_ARG_VAR(PHP_CONFIG, [php-config utility for PHP5])
530   AC_ARG_VAR(PHP, [PHP5 interpreter (optional - only needed to run PHP5 testsuite with)])
531   if test -n "$PHP_CONFIG" ; then
532     AC_MSG_CHECKING([$PHP_CONFIG version])
533     version=`$PHP_CONFIG --version 2>/dev/null`
534     case $version in
535     dnl 5.6 was the final PHP5 release.
536     5.5.*|5.6.*)
537       AC_MSG_RESULT([$version])
538       PHP_MAJOR_VERSION=`echo "$version"|cut -d. -f1`
539       ;;
540     *)
541       AC_MSG_RESULT([$version (not supported, PHP5 bindings need PHP 5.x where x >= 5)])
542       if test yes = "$with_php" ; then
543         AC_MSG_ERROR([$PHP_CONFIG reports version $version - PHP5 bindings need PHP 5.x where x >= 5])
544       fi
545       with_php=no
546       ;;
547     esac
548     AC_SUBST(PHP_MAJOR_VERSION)
550     if test no != "$with_php" ; then
551       AC_MSG_CHECKING([for PHP5 extension directory])
552       if test -z "$PHP_EXTENSION_DIR" ; then
553         PHP_EXTENSION_DIR=`$PHP_CONFIG --extension-dir`
554       fi
555       AC_MSG_RESULT([$PHP_EXTENSION_DIR])
556       AC_ARG_VAR(PHP_EXTENSION_DIR, [Directory to install PHP5 extensions in])
557     fi
559     if test no != "$with_php" ; then
560       PHP_INC=`$PHP_CONFIG --includes`
561       AC_SUBST(PHP_INC)
562       save_CPPFLAGS=$CPPFLAGS
563       CPPFLAGS="$CPPFLAGS $PHP_INC"
564       dnl One of SGI's SuSE boxes has php-config but no headers.
565       AC_CHECK_HEADER(zend.h, [], [
566         if test yes = "$with_php" ; then
567           AC_MSG_ERROR(['$PHP_CONFIG --includes' reports '$PHP_INC' but zend.h can't be included from there])
568         fi
569         with_php=no], [ ])
570       CPPFLAGS=$save_CPPFLAGS
571     fi
573     if test no != "$with_php" ; then
574       if test x"$PHP" = x ; then
575         AC_MSG_CHECKING([for PHP5 interpreter])
576         dnl PHP5's php-config supports --php-binary, so just use that.
577         PHP=`$PHP_CONFIG --php-binary 2>/dev/null`
578         if test x"$PHP" != x ; then
579           if $PHP -r 'exit(0);' 2> /dev/null ; then
580             if $PHP -r 'exit(PHP_MAJOR_VERSION==5?0:1);' 2> /dev/null ; then
581               AC_MSG_RESULT([$PHP])
582             else
583               dnl We get /usr/bin/php on Debian, which might be PHP7:
584               dnl https://bugs.debian.org/819139
585               if ${PHP}5 -r 'exit(PHP_MAJOR_VERSION==5?0:1);' 2> /dev/null ; then
586                 PHP=${PHP}5
587                 AC_MSG_RESULT([$PHP])
588               else
589                 AC_MSG_RESULT([no ($PHP isn't PHP5)])
590                 PHP=
591               fi
592             fi
593           else
594             AC_MSG_RESULT([no ($PHP does not work)])
595             PHP=
596           fi
597         else
598           AC_MSG_RESULT([not found])
599         fi
600       else
601         AC_PATH_PROGS(PHP, ["$PHP"], [])
602       fi
603       if test x"$PHP" = x ; then
604         AC_MSG_WARN([No PHP5 interpreter found - PHP5 bindings tests will be skipped])
605         dnl The skiptest script just returns exit code 77.
606         PHP='$(top_srcdir)/skiptest'
607       else
608         AC_MSG_CHECKING([for PHP5 path separator])
609         PHP_PATH_SEPARATOR=`$PHP -r 'echo PATH_SEPARATOR;'`
610         AC_SUBST([PHP_PATH_SEPARATOR])
611         AC_MSG_RESULT([$PHP_PATH_SEPARATOR])
612       fi
614       case $host_os in
615       mingw* | pw32*)
616         dnl This is a bit of an informed guess, pending more information from
617         dnl someone who actually has mingw and wants to build the PHP bindings
618         dnl there.  FIXME.
619         PHP_LIBS="-L`$PHP_CONFIG --prefix` -lphp${PHP_MAJOR_VERSION}ts" ;;
620       cygwin*)
621         PHP_LIBS="-lphp${PHP_MAJOR_VERSION}lib" ;;
622       *)
623         PHP_LIBS= ;;
624       esac
625       AC_SUBST(PHP_LIBS)
626       BINDINGS="$BINDINGS php"
627     fi
628   fi
631 if test no != "$with_php7" ; then
632   dnl See comment for AC_PATH_PROGS(SWIG, ...).
633   if test -n "$PHP_CONFIG7" ; then
634     AC_PATH_PROGS(PHP_CONFIG7, ["$PHP_CONFIG7"], [])
635   fi
636   if test -z "$PHP_CONFIG7" ; then
637     AC_PATH_PROGS(PHP_CONFIG7, [php-config7.4 php-config7.3 php-config7.2 php-config7.1 php-config7.0 php-config], [])
638   fi
639   AC_ARG_VAR(PHP_CONFIG7, [php-config utility for PHP7])
640   AC_ARG_VAR(PHP7, [PHP7 interpreter (optional - only needed to run PHP7 testsuite with)])
641   if test -n "$PHP_CONFIG7" ; then
642     AC_MSG_CHECKING([$PHP_CONFIG7 version])
643     version=`$PHP_CONFIG7 --version 2>/dev/null`
644     case $version in
645     [[0123456].*])
646       AC_MSG_RESULT([$version (not supported, PHP7 bindings need PHP 7.x)])
647       if test yes = "$with_php7" ; then
648         AC_MSG_ERROR([$PHP_CONFIG7 reports version $version - PHP7 bindings need 7.x])
649       fi
650       with_php7=no
651       ;;
652     7.*)
653       AC_MSG_RESULT([$version])
654       PHP7_MAJOR_VERSION=`echo "$version"|cut -d. -f1`
655       ;;
656     *)
657       AC_MSG_RESULT([$version (PHP >= 8.0 isn't yet supported)])
658       if test yes = "$with_php7" ; then
659         AC_MSG_ERROR([$PHP_CONFIG7 reports version $version - PHP7 bindings need 7.x])
660       fi
661       with_php7=no
662       ;;
663     esac
664     AC_SUBST(PHP7_MAJOR_VERSION)
666     if test no != "$with_php7" ; then
667       AC_MSG_CHECKING([for PHP7 extension directory])
668       if test -z "$PHP7_EXTENSION_DIR" ; then
669         PHP7_EXTENSION_DIR=`$PHP_CONFIG7 --extension-dir`
670       fi
671       AC_MSG_RESULT([$PHP7_EXTENSION_DIR])
672       AC_ARG_VAR(PHP7_EXTENSION_DIR, [Directory to install PHP7 extensions in])
673     fi
675     if test no != "$with_php7" ; then
676       PHP7_INC=`$PHP_CONFIG7 --includes`
677       AC_SUBST(PHP7_INC)
678     fi
680     if test no != "$with_php7" ; then
681       if test x"$PHP7" = x ; then
682         AC_MSG_CHECKING([for PHP7 interpreter])
683         dnl PHP7's php-config supports --php-binary, so just use that.
684         PHP7=`$PHP_CONFIG7 --php-binary 2>/dev/null`
685         if test x"$PHP7" != x ; then
686           if $PHP7 -r 'exit(0);' 2> /dev/null ; then
687             if $PHP7 -r 'exit(PHP_MAJOR_VERSION==7?0:1);' 2> /dev/null ; then
688               AC_MSG_RESULT([$PHP7])
689             else
690               AC_MSG_RESULT([no ($PHP7 isn't PHP7)])
691               PHP7=
692             fi
693           else
694             AC_MSG_RESULT([no ($PHP7 does not work)])
695             PHP7=
696           fi
697         else
698           AC_MSG_RESULT([not found])
699         fi
700       else
701         AC_PATH_PROGS(PHP7, ["$PHP7"], [])
702       fi
703       if test x"$PHP7" = x ; then
704         AC_MSG_WARN([No PHP7 interpreter found - PHP7 bindings tests will be skipped])
705         dnl The skiptest script just returns exit code 77.
706         PHP7='$(top_srcdir)/skiptest'
707       else
708         AC_MSG_CHECKING([for PHP7 path separator])
709         PHP7_PATH_SEPARATOR=`$PHP7 -r 'echo PATH_SEPARATOR;'`
710         AC_SUBST([PHP7_PATH_SEPARATOR])
711         AC_MSG_RESULT([$PHP7_PATH_SEPARATOR])
712       fi
714       case $host_os in
715       mingw* | pw32*)
716         dnl This is a bit of an informed guess, pending more information from
717         dnl someone who actually has mingw and wants to build the PHP bindings
718         dnl there.  FIXME.
719         PHP7_LIBS="-L`$PHP_CONFIG7 --prefix` -lphp${PHP7_MAJOR_VERSION}ts" ;;
720       cygwin*)
721         PHP7_LIBS="-lphp${PHP7_MAJOR_VERSION}lib" ;;
722       *)
723         PHP7_LIBS= ;;
724       esac
725       AC_SUBST(PHP7_LIBS)
726       BINDINGS="$BINDINGS php7"
727     fi
728   fi
731 if test no != "$with_tcl" ; then
732   dnl The documented minimum requirement is Tcl 8.5.  Older versions may work,
733   dnl but we don't test with them regularly, and they are no longer supported
734   dnl upstream.  Also ::tcl::pckconfig was added in Tcl 8.5, which makes the
735   dnl tests below simpler and more reliable.
736   dnl
737   dnl If you really want to build with an older version, run configure with
738   dnl a lower tcl_min and specify at least TCL_INC explicitly:
739   dnl
740   dnl ./configure tcl_min=8.4 TCL_INC=/usr/include/tcl8.4
741   dnl
742   dnl We definitely need at least Tcl 8.1 for TCL_STUBS.
743   : ${tcl_min=8.5}
744   AC_PATH_PROGS(TCLSH, ["${TCLSH-tclsh}"], [])
745   AC_ARG_VAR(TCLSH, [Tcl interpreter])
746   if test -n "$TCLSH" ; then
747     AC_MSG_CHECKING([$TCLSH version])
748     if echo 'if {$tcl_version < '"$tcl_min"' } { exit 1 }'|$TCLSH 2> /dev/null ; then
749       tcl_version=`echo 'puts "$tcl_version"'|$TCLSH`
750       AC_MSG_RESULT([$tcl_version])
752       AC_ARG_VAR(TCL_LIB, [Directory to install Tcl files into])
753       if test -z "$TCL_LIB" ; then
754         [TCL_LIB=`echo 'foreach d $tcl_pkgPath {if {![regexp {/share(/|$)} $d]} {break}};puts $d'|$TCLSH`]
755       fi
756       AC_SUBST(TCL_LIB)
758       AC_ARG_VAR([TCL_INC], [Directory to include for Tcl headers])
759       if test -z "$TCL_INC" ; then
760         dnl ::tcl::pkgconfig was added in Tcl 8.5.
761         [TCL_INC=`echo 'puts [::tcl::pkgconfig get includedir,runtime]'|$TCLSH 2> /dev/null`]
762       fi
764       dnl Check that the headers are there (the tcl8.N-dev package
765       dnl may not be installed).
766       TCL_CPPFLAGS=
767       AC_MSG_CHECKING([for tcl.h from Tcl $tcl_version])
768       if test x"$TCL_INC" != x && test -f "$TCL_INC/tcl.h" ; then
769         tcl_hdr_version=`awk '($1 == "#define" && $2 == "TCL_VERSION") {print $3}' "$TCL_INC/tcl.h"|sed 's/"//g'`
770         if test x"$tcl_hdr_version" = x"$tcl_version" ; then
771           AC_MSG_RESULT([$TCL_INC/tcl.h])
772           BINDINGS="$BINDINGS tcl8"
773           if test x"$TCL_INC" != x"/usr/include" ; then
774             TCL_CPPFLAGS="-I$TCL_INC"
775           fi
776         else
777           AC_MSG_RESULT([not found])
778           if test yes = "$with_tcl" ; then
779             AC_MSG_ERROR([Found tcl.h from version $tcl_hdr_version, not $tcl_version - specify TCL_INC on configure command line])
780           fi
781           TCLSH=
782         fi
783       else
784         AC_MSG_RESULT([not found])
785         if test yes = "$with_tcl" ; then
786           AC_MSG_ERROR([Can't find tcl.h])
787         fi
788         TCLSH=
789       fi
791       if test -n "$TCLSH" ; then
792         dnl Cygwin needs to link with -ltcl8.5 or similar.
793         TCL_LIBS=
794         case $host_os in
795         cygwin*)
796           AC_CHECK_LIB([tcl$tcl_version], [Tcl_Init],
797                        [TCL_LIBS="-ltcl$tcl_version"],
798                        [AC_MSG_ERROR([libtcl$tcl_version not found])])
799           ;;
800         *)
801           dnl ::tcl::pkgconfig was added in Tcl 8.5, but prior to 8.6 it isn't
802           dnl necessary to link against -ltclstub anyway.
803           [tcl_libdir_runtime=`echo 'puts [::tcl::pkgconfig get libdir,runtime]'|$TCLSH 2> /dev/null`]
804           if test -n "$tcl_libdir_runtime" ; then
805             for x in "/tcl$tcl_version" "" ; do
806               TCLCONFIG_SH=$tcl_libdir_runtime$x/tclConfig.sh
807               if test -r "$TCLCONFIG_SH" ; then
808                 eval "`sed 's/^TCL_STUB_LIB_SPEC=/TCL_LIBS=/p;d' $TCLCONFIG_SH`"
809                 break
810               fi
811             done
812           fi
813           TCL_CPPFLAGS="$TCL_CPPFLAGS -DUSE_TCL_STUBS" ;;
814         esac
815       fi
817       AC_SUBST(TCL_CPPFLAGS)
818       AC_SUBST(TCL_LIBS)
819     else
820       AC_MSG_RESULT([< $tcl_min (too old)])
821       if test yes = "$with_tcl" ; then
822         AC_MSG_ERROR([$TCLSH too old (Tcl $tcl_min or newer required)])
823       fi
824     fi
825   else
826     if test yes = "$with_tcl" ; then
827       AC_MSG_ERROR([tclsh not found])
828     fi
829   fi
832 if test no != "$with_csharp" ; then
833   csc_note=
834   AC_ARG_VAR(CSC, [CSharp compiler command])
835   if test -n "$CSC" ; then
836     AC_PATH_PROGS(CSC, ["$CSC"], [])
837   fi
838   if test -z "$CSC" ; then
839     dnl First we try cli-csc and mono-csc, which are used by Debian and Ubuntu
840     dnl as "alternatives" which can be mapped to the CSharp compiler the admin
841     dnl favours.
842     AC_PATH_PROGS(CSC, [cli-csc mono-csc], [])
843     if test -z "$CSC" ; then
844       dnl mcs is the Mono CSharp compiler, which is a unified compiler
845       dnl available from Mono 2.11 (and also the compiler in Mono 1.0, but
846       dnl that's no longer relevant).
847       AC_PATH_PROGS(CSC, [mcs], [])
848       if test -n "$CSC" ; then
849         dnl There are other tools called mcs (such as /usr/bin/mcs on Tru64),
850         dnl so we check that the mcs we found understands --version which is
851         dnl sufficient to distinguish mono's mcs from the Tru64 one.
852         AC_MSG_CHECKING([whether $CSC is from GNU Mono])
853         if (exec >&5 2>&5;$CSC --version </dev/null;exit $?) ; then
854           AC_MSG_RESULT(yes)
855         else
856           AC_MSG_RESULT(no)
857           CSC=
858           csc_note="$csc_note (found different mcs program)"
859         fi
860       fi
861     fi
862     if test -z "$CSC" ; then
863       dnl csc is the Microsoft CSharp compiler.
864       AC_PATH_PROGS(CSC, [csc], [])
865       if test -n "$CSC" ; then
866         dnl Chicken (the Scheme-to-C compiler) includes a tool called csc so we
867         dnl check if the output from "csc -version" includes the word chicken
868         dnl which is sufficient to distinguish Chicken's csc from Microsoft's
869         dnl csc.exe.
870         AC_MSG_CHECKING([whether $CSC is for CSharp])
871         if $CSC -version 2>/dev/null|grep chicken > /dev/null ; then
872           AC_MSG_RESULT(no)
873           CSC=
874           csc_note="$csc_note (found Chicken csc program)"
875         else
876           AC_MSG_RESULT(yes)
877         fi
878       fi
879     fi
880   fi
882   if test -n "$CSC" ; then
883     AC_ARG_VAR(GACUTIL, [gacutil utility to use for CSharp bindings])
884     if test -n "$GACUTIL" ; then
885       AC_PATH_PROGS(GACUTIL, ["$GACUTIL"], [])
886     fi
887     if test -z "$GACUTIL" ; then
888       AC_PATH_PROGS(GACUTIL, [cli-gacutil gacutil], [])
889     fi
891     AC_ARG_VAR(SN, [sn utility to use for CSharp bindings])
892     if test -n "$SN" ; then
893       AC_PATH_PROGS(SN, ["$SN"], [])
894     fi
895     if test -z "$SN" ; then
896       AC_PATH_PROGS(SN, [cli-sn sn], [])
897     fi
898     if test -n "$GACUTIL" -a -n "$SN" ; then
899       AC_MSG_CHECKING([whether the CSharp compiler works])
900       [echo 'class conftest { public static void Main() { System.Console.WriteLine("OK"); } }' > conftest.cs]
901       if (exec >&5 2>&5;$CSC /out:conftest.exe conftest.cs;exit $?) ; then
902         AC_MSG_RESULT(yes)
903         AC_MSG_CHECKING([whether CSharp programs can just be run])
904         if test OK = "`./conftest.exe 2> /dev/null`" ; then
905           AC_MSG_RESULT(yes)
906           RUN_CSHARP=
907         else
908           AC_MSG_RESULT(no)
909           AC_PATH_PROGS(CLI, ["${CLI-cli}"], [])
910           if test -z "$CLI" ; then
911             AC_PATH_PROGS(CLI, [mono ilrun], [])
912           fi
913           AC_ARG_VAR(CLI, [CSharp bytecode interpreter (optional - only needed to run CSharp testsuite with)])
914           if test -n "$CLI" ; then
915             AC_MSG_CHECKING([whether $CLI can run CSharp programs])
916             if test OK = "`$CLI ./conftest.exe 2> /dev/null`" ; then
917               AC_MSG_RESULT(yes)
918               RUN_CSHARP=$CLI
919             else
920               AC_MSG_RESULT([no - CSharp tests will be skipped])
921               RUN_CSHARP='\$(top_srcdir)/skiptest'
922             fi
923           else
924             AC_MSG_RESULT([not found - CSharp tests will be skipped])
925             RUN_CSHARP='\$(top_srcdir)/skiptest'
926           fi
927         fi
928         AC_SUBST(RUN_CSHARP)
930         AC_MSG_CHECKING([for extra flags for $GACUTIL])
931         GACUTIL_FLAGS='/package $(ASSEMBLY) /gacdir $(libdir) /root $(DESTDIR)$(libdir)'
932         dnl Microsoft's gacutil accepts fewer options than Mono's
933         $GACUTIL /\?|grep '\<Mono\>' >/dev/null || GACUTIL_FLAGS=
934         AC_SUBST([GACUTIL_FLAGS])
935         if test -z "$GACUTIL_FLAGS" ; then
936           AC_MSG_RESULT([no])
937         else
938           AC_MSG_RESULT([$GACUTIL_FLAGS])
939         fi
941         BINDINGS="$BINDINGS csharp"
942       else
943         AC_MSG_RESULT(no)
944         if test yes = "$with_csharp" ; then
945           AC_MSG_ERROR([CSharp compiler $CSC doesn't work])
946         fi
947       fi
948     else
949       if test yes = "$with_csharp" ; then
950         if test -z "$GACUTIL" ; then
951           AC_MSG_ERROR([Mono gacutil not found])
952         elif test -z "$SN" ; then
953           AC_MSG_ERROR([Mono sn not found])
954         fi
955       fi
956     fi
957   else
958     if test yes = "$with_csharp" ; then
959       AC_MSG_ERROR([CSharp compiler not found$csc_note])
960     fi
961   fi
964 JAVA_CPPFLAGS=
965 if test no != "$with_java" ; then
966   AC_PATH_PROGS(JAVA, ["${JAVA-java}"], [],
967         [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
968   AC_PATH_PROGS(JAVAC, ["${JAVAC-javac}"], [],
969         [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
970   AC_PATH_PROGS(JAR, ["${JAR-jar}"], [],
971         [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
972   AC_ARG_VAR(JAVA, [Java interpreter command])
973   AC_ARG_VAR(JAVAC, [Java compiler command])
974   AC_ARG_VAR(JAR, [java jar utility])
975   AC_ARG_VAR(JAVA_HOME, [Pathname of the directory where the JDK is installed])
976   AC_ARG_VAR(JDK_HOME, [Pathname of the directory where the JDK is installed])
977   AC_ARG_VAR(JNI_INCLUDE_DIR, [Pathname of the directory where jni.h is installed])
978   if test -n "$JAVA" -a -n "$JAVAC" -a -n "$JAR" ; then
979     dnl Eric says:
980     dnl  The JNI library *requires* "Java 2", which is 1.2 or better.
981     dnl
982     dnl So checking for jni.h presumably implicitly checks we have "Java 2".
983     dnl Note: jni.h #defines JNI_VERSION_1_[12468] (but not 3, 5 or 7 it seems).
984     dnl So we could check for one of these if we want to check for a particular
985     dnl JDK version...
986     java_ok=no
987     AC_CHECK_HEADER([jni.h], [java_ok=yes], [
988       dnl We need to look for jni.h in /usr/lib/jvm/java-gcj/include on some
989       dnl Debian and Ubuntu boxes at least.  And on Mac OS X, jni.h lives
990       dnl in /System/Library/Frameworks/JavaVM.framework/Headers.
991       SAVE_CPPFLAGS=$CPPFLAGS
992       real_javac=$JAVAC
993       dnl Avoid endlessly traversing if there's a symlink loop.
994       for count in 1 2 3 4 5 6 7 8 9 ; do
995         r=`readlink "$real_javac"`
996         test -n "$r" || break
997         real_javac=$r
998       done
999       dnl Translate ".../bin/javac" to ".../include".
1000       [rel_jnidir=`echo "$real_javac"|sed 's!/[^/]*/[^/]*$!/include!'`]
1001       for jnidir in \
1002           $JNI_INCLUDE_DIR \
1003           ${JAVA_HOME+"$JAVA_HOME/include"} \
1004           ${JDK_HOME+"$JDK_HOME/include"} \
1005           "$rel_jnidir" \
1006           /System/Library/Frameworks/JavaVM.framework/Headers ; do
1007         CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
1008         AC_MSG_CHECKING([for jni.h in $jnidir])
1009         if test -f "$jnidir/jni.h" ; then
1010           AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
1011           if test yes = $java_ok ; then
1012             AC_MSG_RESULT([yes])
1013             JAVA_CPPFLAGS=-I$jnidir
1014             break
1015           fi
1017           dnl For OpenJDK (and maybe others) we have to specify an extra -I
1018           dnl option for an OS-specific subdirectory containing a "jni_md.h"
1019           dnl header which is included by "jni.h".  Sadly we seem to need to
1020           dnl hardcode a mapping for these platform names - the list below
1021           dnl was determined by inspecting the source code of OpenJDK 8.
1022           jni_host_os=
1023           case $host_os in
1024             linux*)
1025               jni_host_os=linux ;;
1026             solaris*)
1027               jni_host_os=solaris ;;
1028             mingw* | pw32* | cygwin*)
1029               jni_host_os=win32 ;;
1030             darwin*)
1031               jni_host_os=darwin ;;
1032             *bsd*)
1033               jni_host_os=bsd ;;
1034             aix*)
1035               jni_host_os=aix ;;
1036           esac
1037           if test -n "$jni_host_os" ; then
1038             CPPFLAGS="$CPPFLAGS -I$jnidir/$jni_host_os"
1039             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
1040             if test yes = $java_ok ; then
1041               AC_MSG_RESULT([yes, requires additional -I$jnidir/$jni_host_os])
1042               JAVA_CPPFLAGS="-I$jnidir -I$jnidir/$jni_host_os"
1043               break
1044             fi
1045           fi
1046           AC_MSG_RESULT([found, but not usable])
1048           CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
1049         else
1050           AC_MSG_RESULT([no])
1051         fi
1052       done
1053       CPPFLAGS=$SAVE_CPPFLAGS
1054       test noyes = $java_ok$with_java && AC_MSG_ERROR([jni.h not found])
1055       ], [ ])
1056     AC_SUBST(JAVA_CPPFLAGS)
1057     if test yes = $java_ok ; then
1058       AC_MSG_CHECKING([for Java path separator])
1059       [echo 'public class conftest { public static void main(String[] args) { System.out.println(System.getProperty("path.separator")); } }' > conftest.java]
1060       if (exec >&5 2>&5;$JAVAC conftest.java;exit $?) ; then
1061         JAVA_PATHSEP=`$JAVA conftest 2>&5`
1062         AC_SUBST(JAVA_PATHSEP)
1063         if test -n "$JAVA_PATHSEP" ; then
1064           AC_MSG_RESULT($JAVA_PATHSEP)
1065           BINDINGS="$BINDINGS java"
1067           dnl If -Xcheck:jni is supported then run tests with it.
1068           dnl
1069           dnl ... except that with OpenJDK 8 and 9 -Xcheck:jni seems to report
1070           dnl false positives and so can't usefully be turned on in this
1071           dnl situation.  Recheck this with future versions.
1072 dnl       AC_MSG_CHECKING([for $JAVA -Xcheck:jni option])
1073 dnl       JAVA_PATHSEP2=`$JAVA conftest 2>&5`
1074           JAVA_CHECK_JNI_OPTION=
1075 dnl       if test "$JAVA_PATHSEP" = "$JAVA_PATHSEP2" ; then
1076 dnl         JAVA_CHECK_JNI_OPTION=-Xcheck:jni
1077 dnl         AC_MSG_RESULT([yes])
1078 dnl       else
1079 dnl         AC_MSG_RESULT([no])
1080 dnl       fi
1081           AC_SUBST([JAVA_CHECK_JNI_OPTION])
1082         else
1083           AC_MSG_RESULT([failed to run test program])
1084           java_ok=no
1085         fi
1086       else
1087         AC_MSG_RESULT([failed to compile test program])
1088         java_ok=no
1089       fi
1090       if test no = "$java_ok" ; then
1091         test yes = "$with_java" && AC_MSG_ERROR([Couldn't compile and run a simple Java test program])
1092       fi
1093     fi
1094   else
1095     if test yes = "$with_java" ; then
1096       if test -z "$JAVA" ; then
1097         AC_MSG_ERROR([java not found])
1098       elif test -z "$JAVAC" ; then
1099         AC_MSG_ERROR([javac not found])
1100       elif test -z "$JAR" ; then
1101         AC_MSG_ERROR([jar not found])
1102       fi
1103     fi
1104   fi
1107 if test no != "$with_ruby" ; then
1108   dnl See comment for AC_PATH_PROGS(SWIG, ...).
1109   if test -n "$RUBY" ; then
1110     AC_PATH_PROGS(RUBY, ["$RUBY"], [])
1111   else
1112     AC_PATH_PROGS(RUBY, [ruby], [])
1113   fi
1114   AC_ARG_VAR(RUBY, [Ruby interpreter])
1115   if test -n "$RUBY" ; then
1116     dnl Require Ruby 2.1 or newer.
1117     AC_MSG_CHECKING([$RUBY version])
1118     dnl RUBY_VERSION works with 1.6.  Once we've checked we have at least 1.8
1119     dnl we can safely use RbConfig below (RbConfig requires Ruby 1.8).
1120     version=`$RUBY -e 'print RUBY_VERSION' 2>/dev/null`
1121     case $version in
1122     "")
1123       AC_MSG_RESULT([\$RUBY -e 'print RUBY_VERSION' didn't work])
1124       if test yes = "$with_ruby" ; then
1125         AC_MSG_ERROR([Working Ruby interpreter not found])
1126       fi
1127       RUBY=
1128       ;;
1129     [[01].*|2.0.*])
1130       AC_MSG_RESULT([$version (too old)])
1131       if test yes = "$with_ruby" ; then
1132         AC_MSG_ERROR([Only Ruby 2.1 or newer is supported ($RUBY is $version)])
1133       fi
1134       RUBY=
1135       ;;
1136     esac
1137     if test -n "$RUBY" ; then
1138       AC_MSG_RESULT([$version])
1139       AC_ARG_VAR(RUBY_INC, [Directory where ruby.h can be found])
1140       if test -z "$RUBY_INC" ; then
1141         dnl Ruby 1.9 added rubyhdrdir.
1142         [RUBY_INC=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyhdrdir"]'`]
1143       fi
1144       AC_SUBST(RUBY_INC)
1145       dnl Check that ruby.h is there, which is a good way to check that
1146       dnl the appropriate ruby-dev package has been installed.
1147       AC_MSG_CHECKING([for $RUBY_INC/ruby.h])
1148       if test -f "$RUBY_INC/ruby.h" ; then
1149         AC_MSG_RESULT(yes)
1151         AC_ARG_VAR(RUBY_INC_ARCH, [Directory where ruby/config.h can be found])
1152         if test -z "$RUBY_INC_ARCH" ; then
1153           dnl Ruby 2.0 and later have rubyarchhdrdir.
1154           [RUBY_INC_ARCH=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyarchhdrdir"]'`]
1155         fi
1156         AC_SUBST(RUBY_INC_ARCH)
1158         AC_ARG_VAR(RUBY_LIB, [Directory to install ruby files into])
1159         if test -z "$RUBY_LIB" ; then
1160           [RUBY_LIB=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitelibdir"]'`]
1161         fi
1162         AC_SUBST(RUBY_LIB)
1164         AC_ARG_VAR(RUBY_LIB_ARCH, [Directory to install ruby binary modules into])
1165         if test -z "$RUBY_LIB_ARCH" ; then
1166           [RUBY_LIB_ARCH=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitearchdir"]'`]
1167         fi
1168         AC_SUBST(RUBY_LIB_ARCH)
1170         RUBY_LIBS=
1171         if test unsupported = "$allow_undefined_flag" ; then
1172           dnl For Microsoft Windows and a few other platforms.
1173           [RUBY_LIBS=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["LIBRUBYARG"]'`]
1174         fi
1175         AC_SUBST(RUBY_LIBS)
1177         dnl rdoc is included as part of the Ruby core distribution, so run it
1178         dnl at build time rather shipping the rather large generated output in
1179         dnl our source tarball.
1180         if test -n "$RDOC" ; then
1181           AC_PATH_PROGS(RDOC, ["$RDOC"], [])
1182         else
1183           dnl Try replace the *last* 'ruby' with 'rdoc'.
1184           rdoc_best_guess=`echo "$RUBY"|sed 's,\(.*\)ruby,\1rdoc,'`
1185           AC_PATH_PROGS(RDOC, ["$rdoc_best_guess"], [])
1186           if test -z "$RDOC"; then
1187             AC_PATH_PROGS(RDOC, [rdoc], [])
1188           fi
1189         fi
1190         if test -n "$RDOC"; then
1191           BINDINGS="$BINDINGS ruby"
1192         fi
1193         AC_ARG_VAR([RDOC], [Ruby documentation generator])
1194       else
1195         AC_MSG_RESULT([no (install ruby-dev or ruby-devel package or similar)])
1196         if test yes = "$with_ruby" ; then
1197           AC_MSG_ERROR([ruby.h not found])
1198         fi
1199       fi
1200       RUBY_DLEXT=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG[["DLEXT"]]'`
1201       AC_SUBST(RUBY_DLEXT)
1202     fi
1203   fi
1206 if test no != "$with_perl" ; then
1207   AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
1208   AC_ARG_VAR(PERL, [Perl interpreter])
1209   if test -n "$PERL" ; then
1210     if test -z "$PERL_INC" ; then
1211       PERL_INC=`$PERL -MConfig -e 'print $Config{archlibexp}, "/CORE"'`
1212     fi
1213     AC_SUBST(PERL_INC)
1215     AC_ARG_VAR(PERL_ARCH, [Directory to install architecture-dependent perl files into])
1216     if test -z "$PERL_ARCH" ; then
1217       PERL_ARCH=`$PERL -MConfig -e 'print $Config{installsitearch}'`
1218     fi
1219     AC_SUBST(PERL_ARCH)
1221     AC_ARG_VAR(PERL_LIB, [Directory to install architecture-independent perl files into])
1222     if test -z "$PERL_LIB" ; then
1223       PERL_LIB=`$PERL -MConfig -e 'print $Config{installsitelib}'`
1224     fi
1225     AC_SUBST(PERL_LIB)
1227     AC_ARG_VAR(PERL_SO, [Extension for compiled Perl modules])
1228     if test -z "$PERL_SO" ; then
1229       PERL_SO=`$PERL -MConfig -e 'print ".", $Config{dlext}'`
1230     fi
1231     AC_SUBST(PERL_SO)
1233     if test -z "$PERL_XAPIAN_VERSION" ; then
1234       dnl snapshot versions look like 1.2.3_git123
1235       case $PACKAGE_VERSION in
1236       *_git*)
1237         PERL_XAPIAN_VERSION=`echo "$PACKAGE_VERSION"|sed 's/_git/./'` ;;
1238       *)
1239         PERL_XAPIAN_VERSION=$PACKAGE_VERSION.0 ;;
1240       esac
1241     fi
1242     AC_SUBST(PERL_XAPIAN_VERSION)
1244     BINDINGS="$BINDINGS perl"
1245   else
1246     if test yes = "$with_perl" ; then
1247       AC_MSG_ERROR([perl not found])
1248     fi
1249   fi
1252 if test no != "$with_lua" ; then
1253   AC_PATH_PROGS(LUA, ["${LUA-lua}"], [])
1254   AC_ARG_VAR(LUA, [lua interpreter])
1255   if test -n "$LUA" ; then
1256     dnl We need Lua 5.1 or later.
1257     AC_MSG_CHECKING([$LUA version])
1258     lua_version=`$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' 2>&AS_MESSAGE_LOG_FD`
1260     case $lua_version in
1261     [[01234]].*|5.0|5.0.*)
1262       AC_MSG_RESULT([$lua_version < 5.1 (too old)])
1263       if test yes = "$with_lua" ; then
1264         AC_MSG_ERROR([$LUA too old (Lua 5.1 or newer required)])
1265       fi
1266       LUA=
1267       ;;
1268     "")
1269       AC_MSG_RESULT([\$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' didn't work])
1271       if test yes = "$with_lua" ; then
1272         AC_MSG_ERROR([Working Lua interpreter not found])
1273       fi
1274       LUA=
1275       ;;
1276     esac
1278     if test -n "$LUA" ; then
1279       AC_MSG_RESULT([$lua_version])
1281       AC_ARG_VAR([LUA_LIB], [Directory to install compiled Lua modules into])
1282       AC_ARG_VAR([LUA_SO], [Extension for compiled Lua modules (e.g. LUA_SO=.so)])
1283       AC_MSG_CHECKING([for directory to install compiled Lua modules into])
1284       if test -z "$LUA_LIB" -o -z "$LUA_SO" ; then
1285         lua_cpath=`$LUA -e 'require("package") print(package.cpath)'`
1286         dnl Look for the first absolute path in lua_cpath which has leaf
1287         dnl "?.<ext>" and put the directory part into lua_lib and <ext> into
1288         dnl lua_so.  If LUA_SO was specified by the user, only consider
1289         dnl entries where <ext> matches LUA_SO.
1290         lua_lib=
1291         lua_so=
1292         case $LUA_SO in
1293           "")
1294            [lua_so_pat='[a-zA-Z][a-zA-Z]*'] ;;
1295           .*)
1296             dnl If LUA_SO has a leading '.', remove it.
1297             lua_so_pat=`AS_ECHO("$LUA_SO")|sed 's/^\.//'` ;;
1298           *)
1299             dnl If LUA_SO was specified without a leading '.', add one to the
1300             dnl value substituted into Makefile.in.
1301             lua_so_pat=$LUA_SO
1302             LUA_SO=.$LUA_SO
1303             ;;
1304         esac
1305         while test x"$lua_cpath" != x ; do
1306           [lua_lib=`expr X"$lua_cpath" : X'\([^;]*\)'`]
1307           lua_so=.`expr X"$lua_lib" : X'/.*/?\.\('"$lua_so_pat"'\)$'`
1308           case $lua_so in
1309             .|.lua)
1310               dnl If someone has foolishly put ?.lua in cpath, ignore them.
1311               lua_lib=
1312               ;;
1313             *)
1314               lua_lib=`expr X"$lua_lib" : X'\(/.*\)/?\.'"$lua_so_pat"'$'`
1315               break ;;
1316           esac
1317           [lua_cpath=`expr X"$lua_cpath" : X'[^;]*;*\(.*\)'`]
1318         done
1319         test -n "$LUA_LIB" || LUA_LIB=$lua_lib
1320         test -n "$LUA_SO" || LUA_SO=$lua_so
1321       fi
1322       if test -z "$LUA_LIB"; then
1323         AC_MSG_RESULT([not found])
1324       else
1325         AC_MSG_RESULT([$LUA_LIB])
1326       fi
1327       AC_SUBST([LUA_LIB])
1329       AC_MSG_CHECKING([for extension to use for compiled Lua modules])
1330       if test -z "$LUA_SO"; then
1331         AC_MSG_RESULT([not found])
1332       else
1333         AC_MSG_RESULT([$LUA_SO])
1334       fi
1335       AC_SUBST([LUA_SO])
1337       AC_MSG_CHECKING([for Lua header files])
1338       AC_ARG_VAR([LUA_INC], [Directory to include for lua headers])
1339       if test -z "$LUA_INC" ; then
1340         dirs="/usr/include/lua$lua_version /usr/local/include/lua$lua_version"
1341         for i in $dirs ; do
1342           if test -r "$i/lua.h"; then
1343             LUA_INC=$i
1344             break
1345           fi
1346         done
1347       fi
1349       if test -z "$LUA_INC" ; then
1350         AC_MSG_RESULT([not found])
1351       else
1352         AC_MSG_RESULT([$LUA_INC])
1353         BINDINGS="$BINDINGS lua"
1354         LUA_CPPFLAGS="-I$LUA_INC"
1355       fi
1356       AC_SUBST([LUA_CPPFLAGS])
1357     fi
1358   else
1359     if test yes = "$with_lua" ; then
1360       AC_MSG_ERROR([lua not found])
1361     fi
1362   fi
1365 AC_SUBST(BINDINGS)
1367 case $BINDINGS in
1368 *python*) dnl Matches python and/or python3
1369   dnl C++11 has thread_local
1370   dnl GCC and some others have __thread
1371   dnl MSVC and some others have __declspec(thread)
1372   AC_MSG_CHECKING([for thread-local storage qualifier])
1373   AC_ARG_VAR([THREAD_LOCAL], [thread-local storage qualifier])
1374   if test -z "$THREAD_LOCAL" ; then
1375     for t in thread_local __thread '__declspec(thread)' ; do
1376       AC_COMPILE_IFELSE([AC_LANG_SOURCE([[static $t void * p;]])],
1377                         [THREAD_LOCAL=$t; break])
1378     done
1379   fi
1380   if test -z "$THREAD_LOCAL" ; then
1381     AC_MSG_RESULT([unknown, disabling thread-local support])
1382   else
1383     AC_MSG_RESULT([$THREAD_LOCAL])
1384     AC_DEFINE_UNQUOTED([THREAD_LOCAL], [$THREAD_LOCAL], [Thread local storage qualifier (undefined if no TLS)])
1385   fi
1386   ;;
1387 esac
1389 dnl Set flags to control warnings (enable more, or disable annoying ones)
1390 dnl and other compiler specific flags.
1391 SWIG_CXXFLAGS=
1392 if test yes = "$GXX" ; then
1393   dnl Python itself is compiled with -fno-strict-aliasing, and it appears
1394   dnl it's safest to follow this lead when compiling the SWIG generated
1395   dnl interface code.  E.g.:
1396   dnl   https://article.gmane.org/gmane.comp.gcc.devel/74692
1397   dnl The code SWIG generates for other languages seems to have similar
1398   dnl issues too, so just turn this on for all of them.
1399   dnl
1400   dnl There's no need to check -fno-strict-aliasing is supported as it works
1401   dnl with GCC 2.95 and we don't support anything older.
1402   SWIG_CXXFLAGS="-fno-strict-aliasing"
1404   dnl We need to explicitly link against -lstdc++ on OpenBSD (discovered
1405   dnl on OpenBSD 3.7 with GCC 3.3.5 but this appears to be due to a
1406   dnl deliberate decision on the part of OpenBSD developers).  Luckily
1407   dnl we can just always specify -lstdc++ explicitly if GCC is the
1408   dnl compiler and libtool will eliminate the duplicate on other
1409   dnl platforms.
1410   XAPIAN_LIBS="$XAPIAN_LIBS -lstdc++"
1412   dnl Intel's C++ compiler is identified as "GXX" by autoconf's test - check
1413   dnl which we actually have.
1414   AC_EGREP_CPP(yes,
1415     [#ifdef __INTEL_COMPILER
1416      yes
1417      #endif
1418     ],
1419     [
1420       dnl Intel's compiler:
1421       dnl
1422       dnl -w1 stops the avalanche of uninteresting "remark" messages.
1423       dnl -wd... disables warnings which don't have good code workarounds.
1424       dnl
1425       dnl Swig generated code gives lots of unused and uninitialized warnings.
1426       dnl They're non-harmful, so suppress them.
1427       SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -w1 -wd177,1572"
1428     ],
1429     [
1430       dnl GCC or clang:
1431       dnl
1432       dnl Swig generated code gives lots of unused and uninitialized warnings.
1433       dnl They're non-harmful, so suppress them.
1434       SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -Wno-unused -Wno-uninitialized"
1435     ])
1437   if test no != "$enable_visibility"; then
1438     dnl GCC doesn't support symbol visibility on all platforms (e.g. it isn't
1439     dnl supported on mingw and visibility attributes result in warnings).
1440     AC_MSG_CHECKING([if $CXX -fvisibility=hidden -fvisibility-inlines-hidden works])
1441     if echo 'int bar() __attribute__((visibility("default"))); int baz() __attribute__((visibility("internal"))); int bar() { return 6; } int baz() { return 7; } int foo() {return 42;}'|$CXX -Werror -fvisibility=hidden -fvisibility-inlines-hidden -c -oconftest.o -xc++ - >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
1442       AC_MSG_RESULT([yes])
1443       SWIG_CXXFLAGS="$SWIG_CXXFLAGS -fvisibility=hidden -fvisibility-inlines-hidden"
1444     else
1445       AC_MSG_RESULT([no])
1446     fi
1447   fi
1449 AC_SUBST(SWIG_CXXFLAGS)
1451 dnl Restore CXXFLAGS to those the user specified or autoconf defaulted to.
1452 CXXFLAGS=$save_CXXFLAGS
1454 dnl Required for auto regeneration to work in a combined maintainer-mode tree.
1455 : ${AUTOM4TE=autom4te}
1456 AC_SUBST([AUTOM4TE])
1458 AC_CONFIG_FILES([Makefile
1459  doxygen_xml.conf
1460  xapian-version.h
1461  python/Makefile python/docs/conf.py python/version.i
1462  python3/Makefile python3/docs/conf.py python3/version.i
1463  php/Makefile
1464  php7/Makefile
1465  java/Makefile
1466  tcl8/Makefile tcl8/pkgIndex.tcl
1467  csharp/Makefile csharp/AssemblyInfo.cs
1468  ruby/Makefile
1469  perl/Makefile
1470  lua/Makefile
1471  xapian-bindings.spec
1472  ])
1473 AC_OUTPUT
1475 echo ""
1476 if test -z "$BINDINGS" ; then
1477   echo "*** Not found the required tools for building bindings for any"
1478   echo "*** supported language!"
1479   echo "***"
1480   echo "*** You may need to install -dev or -devel packages for the languages"
1481   echo "*** you want to build bindings for."
1482   echo "***"
1483   echo "*** For details of how to point configure at tools not on PATH, see:"
1484   echo "***     ./configure --help"
1485 else
1486   echo "*** Building bindings for languages:" $BINDINGS
1488 echo ""
1489 if test "$COMPAT_VERSION" != "$XAPIAN_VERSION" ; then
1490   release_series=[`echo "$COMPAT_VERSION"|sed 's/[0-9][0-9]*$//'`]
1491   case $XAPIAN_VERSION in
1492   $release_series*) ;;
1493   *)
1494     AC_MSG_ERROR([Xapian library is version ${XAPIAN_VERSION-<0.8.2} which is from a different release series to bindings $PACKAGE_VERSION, so they aren't compatible.])
1495     ;;
1496   esac
1497   dnl 0.8.2 was the first version which set XAPIAN_VERSION
1498   AC_MSG_WARN([Xapian library is version ${XAPIAN_VERSION-<0.8.2} but the bindings are version $PACKAGE_VERSION - we strongly recommend using matching versions.])