Store minimum compression length in version file
[xapian.git] / xapian-bindings / configure.ac
blob82853e2bf2a413ab7e8fe99e37e3b4487ef691e5
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.3.4])
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[[91]]*)
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_CPLUSPLUS
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]))
96 NEED_JNILIB_EXT=no
97 NEED_INTREE_DYLD=no
98 INTREE_DYLD_PATH=
99 case $host_os in
100 darwin*)
101   NEED_JNILIB_EXT=yes
102   dnl If we're building against an uninstalled xapian-core, xapian-config
103   dnl --libs will give an error.
104   if $XAPIAN_CONFIG --libs >/dev/null 2>/dev/null ; then
105     :
106   else
107     NEED_INTREE_DYLD=yes
108     dnl $XAPIAN_LIBS may have some options first, so grab the last argument,
109     dnl which should be the .la file.
110     set x $XAPIAN_LIBS
111     as_fn_arith $# - 1
112     shift $as_val
113     INTREE_DYLD_PATH=$1
114     dnl Make sure the path is absolute.
115     case $INTREE_DYLD_PATH in
116       /*) ;;
117       *) INTREE_DYLD_PATH=`pwd`/$INTREE_DYLD_PATH ;;
118     esac
119     dnl Add .libs or equivalent.
120     INTREE_DYLD_PATH=`echo "$INTREE_DYLD_PATH"|sed 's,\(.*/\).*,\1,'`$lt_cv_objdir
121     AC_SUBST([INTREE_DYLD_PATH])
122   fi
123   ;;
124 esac
125 AM_CONDITIONAL(NEED_JNILIB_EXT, test yes = "$NEED_JNILIB_EXT")
126 AM_CONDITIONAL(NEED_INTREE_DYLD, test yes = "$NEED_INTREE_DYLD")
128 dnl We want XAPIAN_CXXFLAGS to be used for configure tests, so add it to
129 dnl CXXFLAGS for the duration of configure.
130 save_CXXFLAGS=$CXXFLAGS
131 CXXFLAGS="$CXXFLAGS $XAPIAN_CXXFLAGS"
133 dnl COMPAT_VERSION is the version of xapian-core that "matches" our version.
134 dnl We allow for bindings being version 0.8.5.1 while xapian-core is 0.8.5.
135 dnl COMPAT_VERSION also ignores any _git123 suffix which snapshots will have.
136 COMPAT_VERSION=[`echo "$PACKAGE_VERSION"|sed 's/^\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`]
137 AC_SUBST(COMPAT_VERSION)
139 dnl VERSION_NO_SNAPSHOT simply has any _git123 suffix removed.
140 VERSION_NO_SNAPSHOT=[`echo "$PACKAGE_VERSION"|sed 's/_.*$//'`]
141 AC_SUBST(VERSION_NO_SNAPSHOT)
143 dnl We only need to set docdir for compatibility with autoconf < 2.60 - this
144 dnl code can be removed once we move to requiring autoconf 2.60 or newer.
145 test -n "$docdir" || docdir='${datadir}/doc/${PACKAGE_TARNAME}'
146 AC_SUBST(docdir)
148 AC_ARG_ENABLE(visibility,
149   [AS_HELP_STRING([--disable-visibility], [disable use of GCC visibility])],
150   [case ${enableval} in
151     yes|no) ;;
152     *) AC_MSG_ERROR([bad value ${enableval} for --disable-visibility]) ;;
153   esac])
155 dnl Only probe for SWIG and enable SWIG rules in makefiles if
156 dnl configure --enable-maintainer-mode is used.
157 AM_MAINTAINER_MODE
159 AC_ARG_ENABLE(documentation,
160   [AS_HELP_STRING([--enable-documentation], [enable make rules to rebuild shipped documentation [default=maintainer-mode]])],
161   [case ${enableval} in
162     yes|no) ;;
163     *) AC_MSG_ERROR([bad value ${enableval} for --enable-documentation]) ;;
164   esac])
165 test -z "$enable_documentation" && enable_documentation=$USE_MAINTAINER_MODE
166 AM_CONDITIONAL(DOCUMENTATION_RULES, test x"$enable_documentation" = xyes)
167 AM_CONDITIONAL(MAINTAINER_NO_DOCS, test x"$USE_MAINTAINER_MODE$enable_documentation" = xyesno)
169 if test yes = "$enable_documentation" ; then
170   dnl Check for rst2html. (Needed to make HTML from reStructuredText format)
171   dnl Also look for rst2html.py, which archlinux reportedly installs it as.
172   AC_PATH_PROGS(RST2HTML, [rst2html rst2html.py], [])
173   test -z "$RST2HTML" && AC_MSG_ERROR([rst2html is required to build documentation (try package python-docutils)])
176 if test x$USE_MAINTAINER_MODE = xyes; then
177   dnl Check for swig - this does most of the work for the bindings.
178   dnl AC_PATH_PROGS only honours an already set SWIG if it's a full
179   dnl path.  Listing it in the "to be searched" list like this allows
180   dnl ./configure SWIG=myswig to work.
181   swigoverridden=${SWIG+yes}
182   AC_PATH_PROGS(SWIG, ["${SWIG-swig}"], [])
183   AC_ARG_VAR(SWIG, [SWIG interface generator (only needed by Xapian developers)])
184   if test -z "$SWIG" ; then
185     AC_MSG_ERROR([Can't find SWIG utility])
186   fi
187   dnl Check for new enough SWIG.
188   dnl
189   dnl 3.0.8 fixes conversion of integers large than an int in Python 3.
190   v=`$SWIG -version 2>&1|sed 's/^SWIG Version \([[0-9\.]]*\).*/\1/p;d'`
191   case $v in
192     [[012].*|3.0.[01234567]|""])
193       msg="SWIG >= 3.0.8 required (you have ${v:-an unknown version})"
194       if test -n "$swigoverridden" ; then
195         dnl If SWIG was explicitly set, make this a warning only.
196         AC_MSG_WARN([$msg])
197       else
198         AC_MSG_ERROR([$msg])
199       fi ;;
200   esac
201   SWIG_FLAGS=`$XAPIAN_CONFIG --swigflags`
202   AC_SUBST(SWIG_FLAGS)
203   XAPIAN_HEADER_DIRS=
204   XAPIAN_HEADERS=
205   for a in $SWIG_FLAGS ; do
206     case $a in
207     -I*)
208       d=`echo "x$a"|sed 's/^x-I//'`
209       dnl Quote each entry in XAPIAN_HEADER_DIRS with "".
210       XAPIAN_HEADER_DIRS=$XAPIAN_HEADER_DIRS' "'$d'"'
211       for f in "$d/"*.h "$d/xapian/*.h" ; do
212         if test -f "$f" ; then
213           XAPIAN_HEADERS="$XAPIAN_HEADERS $f"
214         fi
215       done
216       ;;
217     esac
218   done
219   AC_SUBST([XAPIAN_HEADER_DIRS])
220   AC_SUBST([XAPIAN_HEADERS])
222   dnl Need perl in maintainer mode to generate the except.i file for python.
223   AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
224   test -z "$PERL" && AC_MSG_ERROR([perl is required in maintainer mode])
225   dnl Need doxygen in maintainer mode to convert C++ doxygen comments to Python
226   dnl docstrings.
227   AC_PATH_PROG(DOXYGEN, doxygen, [])
228   test -z "$DOXYGEN" && AC_MSG_ERROR([doxygen is required to build documentation])
231 AC_ARG_WITH(python,
232   AC_HELP_STRING([--with-python], [enable Python 2 bindings]),
233   [],
234   [with_python=])
236 AC_ARG_WITH(python3,
237   AC_HELP_STRING([--with-python3], [enable Python 3 bindings]),
238   [],
239   [with_python3=])
241 AC_ARG_WITH(php,
242   AC_HELP_STRING([--with-php], [enable PHP bindings]),
243   [],
244   [with_php=])
246 AC_ARG_WITH(ruby,
247   AC_HELP_STRING([--with-ruby], [enable Ruby bindings]),
248   [],
249   [with_ruby=])
251 AC_ARG_WITH(tcl,
252   AC_HELP_STRING([--with-tcl], [enable Tcl bindings]),
253   [],
254   [with_tcl=])
256 AC_ARG_WITH(csharp,
257   AC_HELP_STRING([--with-csharp], [enable CSharp bindings]),
258   [],
259   [with_csharp=])
261 AC_ARG_WITH(java,
262   AC_HELP_STRING([--with-java], [enable Java bindings]),
263   [],
264   [with_java=])
266 AC_ARG_WITH(perl,
267   AC_HELP_STRING([--with-perl], [enable Perl bindings]),
268   [],
269   [with_perl=])
271 AC_ARG_WITH(lua,
272   AC_HELP_STRING([--with-lua], [enable Lua bindings]),
273   [],
274   [with_lua=])
276 case $with_python$with_python3$with_php$with_ruby$with_tcl$with_csharp$with_java$with_perl$with_lua in
277 *yes*)
278   dnl Default unspecified values to no.
279   test -z "$with_python" && with_python=no
280   test -z "$with_python3" && with_python3=no
281   test -z "$with_php" && with_php=no
282   test -z "$with_tcl" && with_tcl=no
283   test -z "$with_csharp" && with_csharp=no
284   test -z "$with_java" && with_java=no
285   test -z "$with_ruby" && with_ruby=no
286   test -z "$with_perl" && with_perl=no
287   test -z "$with_lua" && with_lua=no
288   ;;
289 esac
291 BINDINGS=
293 if test no != "$with_python" ; then
294   dnl For backward compatibility:
295   : ${PYTHON2="$PYTHON"}
296   : ${PYTHON2_INC="$PYTHON_INC"}
297   : ${PYTHON2_LIB="$PYTHON_LIB"}
298   : ${PYTHON2_LIBS="$PYTHON_LIBS"}
299   : ${PYTHON2_SO="$PYTHON_SO"}
300   dnl See comment for AC_PATH_PROGS(SWIG, ...).
301   if test -n "$PYTHON2" ; then
302     AC_PATH_PROGS(PYTHON2, ["$PYTHON2"], [])
303   else
304     AC_PATH_PROGS(PYTHON2, [python2 python], [])
305   fi
306   AC_ARG_VAR(PYTHON2, [Python 2 interpreter])
307   if test -n "$PYTHON2" ; then
308     dnl Require Python 2.6 or newer.  Older versions are essentially
309     dnl unsupported upstream.
310     AC_MSG_CHECKING([$PYTHON2 version])
311     version=`$PYTHON2 -c 'import sys;print("%d.%d" % sys.version_info[[:2]])' 2>/dev/null`
312     case $version in
313     [2.[6-9]*|2.[1-5][0-9]*])
314       AC_MSG_RESULT([$version])
315       ;;
316     [[3-9].*])
317       AC_MSG_RESULT([$version (too new - use --with-python3 for Python 3 support)])
318       if test yes = "$with_python" ; then
319         AC_MSG_ERROR([Use --with-python3 for Python 3 support ($PYTHON2 is $version)])
320       fi
321       PYTHON2=
322       ;;
323     *)
324       AC_MSG_RESULT([$version (too old)])
325       if test yes = "$with_python" ; then
326         AC_MSG_ERROR([Only Python 2.6 or newer is supported ($PYTHON2 is $version)])
327       fi
328       PYTHON2=
329       ;;
330     esac
331     if test -n "$PYTHON2" ; then
332       if $PYTHON2 -c 'import distutils.sysconfig' 2>/dev/null ; then
333         PYTHON2_INC=`$PYTHON2 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_inc().replace(os.sep,"/"))'`
334         AC_SUBST(PYTHON2_INC)
335       else
336         if test yes = "$with_python" ; then
337           AC_MSG_ERROR([Couldn't import Python module distutils.sysconfig - you probably need to install a python-dev or python-devel package])
338         else
339           AC_MSG_WARN([Couldn't import Python module distutils.sysconfig - you probably don't have a python-dev or python-devel package installed])
340           PYTHON2=
341         fi
342       fi
343     fi
344     if test -n "$PYTHON2" ; then
345       dnl Check that Python.h is there, which is a good way to check that
346       dnl the appropriate python-dev package has been installed.
347       AC_MSG_CHECKING([for $PYTHON2_INC/Python.h])
348       if test -f "$PYTHON2_INC/Python.h" ; then
349         AC_MSG_RESULT(yes)
350         AC_MSG_CHECKING([for directory to install python2 bindings in])
351         if test -z "$PYTHON2_LIB" ; then
352           PYTHON2_LIB=`$PYTHON2 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_lib(1).replace(os.sep,"/"))'`
353         fi
354         AC_MSG_RESULT([$PYTHON2_LIB])
355         AC_ARG_VAR(PYTHON2_LIB, [Directory to install python2 bindings in])
357         AC_MSG_CHECKING([for python2 libraries to link against])
358         case $host_os in
359         mingw* | pw32*)
360           PYTHON2_LIBS=`$PYTHON2 -c 'import os,sys;print("-L"+os.path.join(sys.prefix,"libs").replace(os.sep,"/")+" -lpython"+sys.version[[:3]].replace(".",""))'` ;;
361         cygwin*)
362           PYTHON2_LIBS=`$PYTHON2 -c 'import os,sys;print("-L"+os.path.join(sys.path[[3]],"config")+" -lpython"+sys.version[[:3]])'` ;;
363         *)
364           PYTHON2_LIBS= ;;
365         esac
366         AC_SUBST(PYTHON2_LIBS)
367         AC_MSG_RESULT([$PYTHON2_LIBS])
369         AC_MSG_CHECKING([for python2 module extension])
370         dnl Usually ".so", but for example, Mac OS X uses ".dylib".
371         PYTHON2_SO=`$PYTHON2 -c 'import distutils.sysconfig;print(distutils.sysconfig.get_config_vars("SO")[[0]])'`
372         AC_SUBST(PYTHON2_SO)
373         AC_MSG_RESULT([$PYTHON2_SO])
374         BINDINGS="$BINDINGS python"
375       else
376         AC_MSG_RESULT([no (install python-dev or python-devel package or similar)])
377         if test yes = "$with_python" ; then
378           AC_MSG_ERROR([Python.h not found])
379         fi
380       fi
381     fi
382   fi
385 if test no != "$with_python3" ; then
386   dnl See comment for AC_PATH_PROGS(SWIG, ...).
387   if test -n "$PYTHON3" ; then
388     AC_PATH_PROGS(PYTHON3, ["$PYTHON3"], [])
389   else
390     AC_PATH_PROGS(PYTHON3, [python3 python], [])
391   fi
392   AC_ARG_VAR(PYTHON3, [Python 3 interpreter])
393   if test -n "$PYTHON3" ; then
394     dnl Require Python 3.2 or newer, as that's the oldest version we can
395     dnl easily test with.  If anyone's keen to support older versions, please
396     dnl test and send in any patches needed to get it to work.
397     AC_MSG_CHECKING([$PYTHON3 version])
398     version=`$PYTHON3 -c 'import sys;print("%d.%d" % sys.version_info[[:2]])' 2>/dev/null`
399     case $version in
400     [3.[2-9]*|3.1[0-9]*|[4-9].*])
401       AC_MSG_RESULT([$version])
402       ;;
403     *)
404       AC_MSG_RESULT([$version (too old)])
405       if test yes = "$with_python3" ; then
406         AC_MSG_ERROR([Only Python 3.2 or newer is supported ($python3 is $version)])
407       fi
408       PYTHON3=
409       ;;
410     esac
411     if test -n "$PYTHON3" ; then
412       if $PYTHON3 -c 'import distutils.sysconfig' 2>/dev/null ; then
413         PYTHON3_INC=`$PYTHON3 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_inc().replace(os.sep,"/"))'`
414         AC_SUBST(PYTHON3_INC)
415       else
416         if test yes = "$with_python3" ; then
417           AC_MSG_ERROR([Couldn't import Python module distutils.sysconfig - you probably need to install a python3-dev or python3-devel package])
418         else
419           AC_MSG_WARN([Couldn't import Python module distutils.sysconfig - you probably don't have a python3-dev or python3-devel package installed])
420           PYTHON3=
421         fi
422       fi
423     fi
424     if test -n "$PYTHON3" ; then
425       dnl Check that Python.h is there, which is a good way to check that
426       dnl the appropriate python3-dev package has been installed.
427       AC_MSG_CHECKING([for $PYTHON3_INC/Python.h])
428       if test -f "$PYTHON3_INC/Python.h" ; then
429         AC_MSG_RESULT(yes)
430         AC_MSG_CHECKING([for directory to install python3 bindings in])
431         if test -z "$PYTHON3_LIB" ; then
432           PYTHON3_LIB=`$PYTHON3 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_lib(1).replace(os.sep,"/"))'`
433         fi
434         AC_MSG_RESULT([$PYTHON3_LIB])
435         AC_ARG_VAR(PYTHON3_LIB, [Directory to install python3 bindings in])
437         AC_MSG_CHECKING([for python3 libraries to link against])
438         case $host_os in
439         mingw* | pw32*)
440           PYTHON3_LIBS=`$PYTHON3 -c 'import os,sys;print("-L"+os.path.join(sys.prefix,"libs").replace(os.sep,"/")+" -lpython"+sys.version[[:3]].replace(".",""))'` ;;
441         cygwin*)
442           PYTHON3_LIBS=`$PYTHON3 -c 'import os,sys;print("-L"+os.path.join(sys.path[[3]],"config")+" -lpython"+sys.version[[:3]])'` ;;
443         *)
444           PYTHON3_LIBS= ;;
445         esac
446         AC_SUBST(PYTHON3_LIBS)
447         AC_MSG_RESULT([$PYTHON3_LIBS])
449         AC_MSG_CHECKING([for python3 module extension])
450         dnl Usually ".so", but for example, Mac OS X uses ".dylib".
451         PYTHON3_SO=`$PYTHON3 -c 'import distutils.sysconfig;print(distutils.sysconfig.get_config_vars("SO")[[0]])'`
452         AC_SUBST(PYTHON3_SO)
453         AC_MSG_RESULT([$PYTHON3_SO])
455         AC_MSG_CHECKING([for tag for cached compiled scripts])
456         PYTHON3_CACHE_TAG=`$PYTHON3 -c 'import imp;print(imp.get_tag())'`
457         AC_SUBST(PYTHON3_CACHE_TAG)
458         AC_MSG_RESULT([$PYTHON3_CACHE_TAG])
460         AC_MSG_CHECKING([for extension of cached and optimized python3 bytecode])
461         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())))'`
462         AC_SUBST(PYTHON3_CACHE_OPT1_EXT)
463         AC_MSG_RESULT([$PYTHON3_CACHE_OPT1_EXT])
465         BINDINGS="$BINDINGS python3"
466       else
467         AC_MSG_RESULT([no (install python3-dev or python3-devel package or similar)])
468         if test yes = "$with_python3" ; then
469           AC_MSG_ERROR([Python.h not found])
470         fi
471       fi
472     fi
473   fi
476 if test x$USE_MAINTAINER_MODE = xyes; then
477   dnl Need python in maintainer mode to run doxy2swig.py.
478   dnl Either Python 2 or 3 is OK for this.
479   if test -n "$PYTHON2" ; then
480     PYTHON=$PYTHON2
481   elif test -n "$PYTHON3" ; then
482     PYTHON=$PYTHON3
483   else
484     AC_PATH_PROGS(PYTHON, [python2 python python3], [])
485   fi
486   test -z "$PYTHON" && AC_MSG_ERROR([python is required in maintainer mode])
489 dnl If we're building either python version we need sphinx-build.
490 case $BINDINGS in
491 *python*)
492   AC_PATH_PROG(SPHINX_BUILD, sphinx-build, [])
493   if test -z "$SPHINX_BUILD" ; then
494     AC_MSG_ERROR([sphinx-build is required to build python documentation (try packages python-sphinx or python3-sphinx)])
495   fi
496   ;;
497 esac
499 if test no != "$with_php" ; then
500   dnl See comment for AC_PATH_PROGS(SWIG, ...).
501   AC_PATH_PROGS(PHP_CONFIG, ["${PHP_CONFIG-php-config}"], [])
502   AC_ARG_VAR(PHP_CONFIG, [php-config utility])
503   AC_ARG_VAR(PHP, [php interpreter (optional - only needed to run PHP testsuite with)])
504   if test -n "$PHP_CONFIG" ; then
505     AC_MSG_CHECKING([$PHP_CONFIG version])
506     version=`$PHP_CONFIG --version 2>/dev/null`
507     case $version in
508     [[01234].*|5.[01234].*])
509       AC_MSG_RESULT([$version (not supported, need PHP >= 5.5)])
510       if test yes = "$with_php" ; then
511         AC_MSG_ERROR([Only PHP >= 5.5 is supported ($PHP_CONFIG reports version $version)])
512       fi
513       with_php=no
514       ;;
515     *)
516       AC_MSG_RESULT([$version])
517       PHP_MAJOR_VERSION=`echo "$version"|cut -d. -f1`
518       ;;
519     esac
520     AC_SUBST(PHP_MAJOR_VERSION)
522     if test no != "$with_php" ; then
523       AC_MSG_CHECKING([for PHP extension directory])
524       if test -z "$PHP_EXTENSION_DIR" ; then
525         PHP_EXTENSION_DIR=`$PHP_CONFIG --extension-dir`
526       fi
527       AC_MSG_RESULT([$PHP_EXTENSION_DIR])
528       AC_ARG_VAR(PHP_EXTENSION_DIR, [Directory to install PHP extensions in])
529     fi
531     if test no != "$with_php" ; then
532       PHP_INC=`$PHP_CONFIG --includes`
533       AC_SUBST(PHP_INC)
534       save_CPPFLAGS=$CPPFLAGS
535       CPPFLAGS="$CPPFLAGS $PHP_INC"
536       dnl One of SGI's SuSE boxes has php-config but no headers.
537       AC_CHECK_HEADER(zend.h, [], [
538         if test yes = "$with_php" ; then
539           AC_MSG_ERROR(['$PHP_CONFIG --includes' reports '$PHP_INC' but zend.h can't be included from there])
540         fi
541         with_php=no], [ ])
542       CPPFLAGS=$save_CPPFLAGS
543     fi
545     if test no != "$with_php" ; then
546       if test x"$PHP" = x ; then
547         AC_MSG_CHECKING([for PHP interpreter])
548         dnl PHP5's php-config supports --php-binary, so just use that.
549         PHP=`$PHP_CONFIG --php-binary 2>/dev/null`
550         if test x"$PHP" != x ; then
551           if $PHP -r 'exit(0);' 2> /dev/null ; then
552             AC_MSG_RESULT([$PHP])
553           else
554             AC_MSG_RESULT([no ($PHP does not work)])
555             PHP=
556           fi
557         else
558           AC_MSG_RESULT([not found])
559         fi
560       else
561         AC_PATH_PROGS(PHP, ["$PHP"], [])
562       fi
563       if test x"$PHP" = x ; then
564         AC_MSG_WARN([No PHP interpreter found - PHP bindings tests will be skipped])
565         dnl The skiptest script just returns exit code 77.
566         PHP='$(top_srcdir)/skiptest'
567       else
568         AC_MSG_CHECKING([for PHP path separator])
569         PHP_PATH_SEPARATOR=`$PHP -r 'echo PATH_SEPARATOR;'`
570         AC_SUBST([PHP_PATH_SEPARATOR])
571         AC_MSG_RESULT([$PHP_PATH_SEPARATOR])
572       fi
574       case $host_os in
575       mingw* | pw32*)
576         dnl This is a bit of an informed guess, pending more information from
577         dnl someone who actually has mingw and wants to build the PHP bindings
578         dnl there.  FIXME.
579         PHP_LIBS="-L`$PHP_CONFIG --prefix` -lphp${PHP_MAJOR_VERSION}ts" ;;
580       cygwin*)
581         PHP_LIBS="-lphp${PHP_MAJOR_VERSION}lib" ;;
582       *)
583         PHP_LIBS= ;;
584       esac
585       AC_SUBST(PHP_LIBS)
586       BINDINGS="$BINDINGS php"
587     fi
588   fi
591 if test no != "$with_tcl" ; then
592   dnl The documented minimum requirement is Tcl 8.5.  Older versions may work,
593   dnl but we don't test with them regularly, and they are no longer supported
594   dnl upstream.  Also ::tcl::pckconfig was added in Tcl 8.5, which makes the
595   dnl tests below simpler and more reliable.
596   dnl
597   dnl If you really want to build with an older version, run configure with
598   dnl a lower tcl_min and specify at least TCL_INC explicitly:
599   dnl
600   dnl ./configure tcl_min=8.4 TCL_INC=/usr/include/tcl8.4
601   dnl
602   dnl We definitely need at least Tcl 8.1 for TCL_STUBS.
603   : ${tcl_min=8.5}
604   AC_PATH_PROGS(TCLSH, ["${TCLSH-tclsh}"], [])
605   AC_ARG_VAR(TCLSH, [Tcl interpreter])
606   if test -n "$TCLSH" ; then
607     AC_MSG_CHECKING([$TCLSH version])
608     if echo 'if {$tcl_version < '"$tcl_min"' } { exit 1 }'|$TCLSH 2> /dev/null ; then
609       tcl_version=`echo 'puts "$tcl_version"'|$TCLSH`
610       AC_MSG_RESULT([$tcl_version])
612       AC_ARG_VAR(TCL_LIB, [Directory to install Tcl files into])
613       if test -z "$TCL_LIB" ; then
614         [TCL_LIB=`echo 'foreach d $tcl_pkgPath {if {![regexp {/share(/|$)} $d]} {break}};puts $d'|$TCLSH`]
615       fi
616       AC_SUBST(TCL_LIB)
618       AC_ARG_VAR([TCL_INC], [Directory to include for Tcl headers])
619       if test -z "$TCL_INC" ; then
620         dnl ::tcl::pkgconfig was added in Tcl 8.5.
621         [TCL_INC=`echo 'puts [::tcl::pkgconfig get includedir,runtime]'|$TCLSH 2> /dev/null`]
622       fi
624       dnl Check that the headers are there (the tcl8.N-dev package
625       dnl may not be installed).
626       TCL_CPPFLAGS=
627       AC_MSG_CHECKING([for tcl.h from Tcl $tcl_version])
628       if test x"$TCL_INC" != x && test -f "$TCL_INC/tcl.h" ; then
629         tcl_hdr_version=`awk '($1 == "#define" && $2 == "TCL_VERSION") {print $3}' "$TCL_INC/tcl.h"|sed 's/"//g'`
630         if test x"$tcl_hdr_version" = x"$tcl_version" ; then
631           AC_MSG_RESULT([$TCL_INC/tcl.h])
632           BINDINGS="$BINDINGS tcl8"
633           if test x"$TCL_INC" != x"/usr/include" ; then
634             TCL_CPPFLAGS="-I$TCL_INC"
635           fi
636         else
637           AC_MSG_RESULT([not found])
638           if test yes = "$with_tcl" ; then
639             AC_MSG_ERROR([Found tcl.h from version $tcl_hdr_version, not $tcl_version - specify TCL_INC on configure command line])
640           fi
641           TCLSH=
642         fi
643       else
644         AC_MSG_RESULT([not found])
645         if test yes = "$with_tcl" ; then
646           AC_MSG_ERROR([Can't find tcl.h])
647         fi
648         TCLSH=
649       fi
651       if test -n "$TCLSH" ; then
652         dnl Cygwin needs to link with -ltcl8.5 or similar.
653         TCL_LIBS=
654         case $host_os in
655         cygwin*)
656           AC_CHECK_LIB([tcl$tcl_version], [Tcl_Init],
657                        [TCL_LIBS="-ltcl$tcl_version"],
658                        [AC_MSG_ERROR([libtcl$tcl_version not found])])
659           ;;
660         *)
661           dnl ::tcl::pkgconfig was added in Tcl 8.5, but prior to 8.6 it isn't
662           dnl necessary to link against -ltclstub anyway.
663           [TCLCONFIG_SH=`echo 'puts [file join [::tcl::pkgconfig get libdir,runtime] tclConfig.sh]'|$TCLSH 2> /dev/null`]
664           if test -n "$TCLCONFIG_SH" && test -r "$TCLCONFIG_SH" ; then
665             eval "`sed 's/^TCL_STUB_LIB_SPEC=/TCL_LIBS=/p;d' $TCLCONFIG_SH`"
666           fi
667           TCL_CPPFLAGS="$TCL_CPPFLAGS -DUSE_TCL_STUBS" ;;
668         esac
669       fi
671       AC_SUBST(TCL_CPPFLAGS)
672       AC_SUBST(TCL_LIBS)
673     else
674       AC_MSG_RESULT([< $tcl_min (too old)])
675       if test yes = "$with_tcl" ; then
676         AC_MSG_ERROR([$TCLSH too old (Tcl $tcl_min or newer required)])
677       fi
678     fi
679   else
680     if test yes = "$with_tcl" ; then
681       AC_MSG_ERROR([tclsh not found])
682     fi
683   fi
686 if test no != "$with_csharp" ; then
687   csc_note=
688   AC_ARG_VAR(CSC, [CSharp compiler command])
689   if test -n "$CSC" ; then
690     AC_PATH_PROGS(CSC, ["$CSC"], [])
691   fi
692   if test -z "$CSC" ; then
693     dnl First we try cli-csc and mono-csc, which are used by Debian and Ubuntu
694     dnl as "alternatives" which can be mapped to the CSharp compiler the admin
695     dnl favours.
696     AC_PATH_PROGS(CSC, [cli-csc mono-csc], [])
697     if test -z "$CSC" ; then
698       dnl mcs is the Mono CSharp compiler, which is a unified compiler
699       dnl available from Mono 2.11 (and also the compiler in Mono 1.0, but
700       dnl that's no longer relevant).
701       AC_PATH_PROGS(CSC, [mcs], [])
702       if test -n "$CSC" ; then
703         dnl There are other tools called mcs (such as /usr/bin/mcs on Tru64),
704         dnl so we check that the mcs we found understands --version which is
705         dnl sufficient to distinguish mono's mcs from the Tru64 one.
706         AC_MSG_CHECKING([whether $CSC is from GNU Mono])
707         if (exec >&5 2>&5;$CSC --version </dev/null;exit $?) ; then
708           AC_MSG_RESULT(yes)
709         else
710           AC_MSG_RESULT(no)
711           CSC=
712           csc_note="$csc_note (found different mcs program)"
713         fi
714       fi
715     fi
716     if test -z "$CSC" ; then
717       dnl gmcs, smcs, and dmcs are versions of the Mono CSharp compiler
718       dnl targeting various runtime versions, deprecated in favour of mcs
719       dnl (checked for above) as of Mono 2.11.
720       dnl
721       dnl cscc is the Portable.NET CSharp compiler.
722       AC_PATH_PROGS(CSC, [dmcs smcs gmcs cscc], [])
723     fi
724     if test -z "$CSC" ; then
725       dnl csc is the Microsoft CSharp compiler.
726       AC_PATH_PROGS(CSC, [csc], [])
727       if test -n "$CSC" ; then
728         dnl Chicken (the Scheme-to-C compiler) includes a tool called csc so we
729         dnl check if the output from "csc -version" includes the word chicken
730         dnl which is sufficient to distinguish Chicken's csc from Microsoft's
731         dnl csc.exe.
732         AC_MSG_CHECKING([whether $CSC is for CSharp])
733         if $CSC -version 2>/dev/null|grep chicken > /dev/null ; then
734           AC_MSG_RESULT(no)
735           CSC=
736           csc_note="$csc_note (found Chicken csc program)"
737         else
738           AC_MSG_RESULT(yes)
739         fi
740       fi
741     fi
742   fi
744   if test -n "$CSC" ; then
745     AC_ARG_VAR(GACUTIL, [gacutil utility to use for CSharp bindings])
746     if test -n "$GACUTIL" ; then
747       AC_PATH_PROGS(GACUTIL, ["$GACUTIL"], [])
748     fi
749     if test -z "$GACUTIL" ; then
750       AC_PATH_PROGS(GACUTIL, [cli-gacutil gacutil ilgac], [])
751     fi
753     AC_ARG_VAR(SN, [sn utility to use for CSharp bindings])
754     if test -n "$SN" ; then
755       AC_PATH_PROGS(SN, ["$SN"], [])
756     fi
757     if test -z "$SN" ; then
758       AC_PATH_PROGS(SN, [cli-sn sn], [])
759     fi
760     if test -z "$SN" ; then
761       case $GACUTIL in
762       dnl Portable.net doesn't support strong naming yet and ilgac doesn't
763       dnl require assemblies to be strong named before adding them to the GAC.
764       *ilgac*) SN=/bin/true ;;
765       esac
766     fi
767     if test -n "$GACUTIL" -a -n "$SN" ; then
768       AC_MSG_CHECKING([whether the CSharp compiler works])
769       [echo 'class conftest { public static void Main() { System.Console.WriteLine("OK"); } }' > conftest.cs]
770       if (exec >&5 2>&5;$CSC /out:conftest.exe conftest.cs;exit $?) ; then
771         AC_MSG_RESULT(yes)
772         AC_MSG_CHECKING([whether CSharp programs can just be run])
773         if test OK = "`./conftest.exe 2> /dev/null`" ; then
774           AC_MSG_RESULT(yes)
775           RUN_CSHARP=
776         else
777           AC_MSG_RESULT(no)
778           AC_PATH_PROGS(CLI, ["${CLI-cli}"], [])
779           if test -z "$CLI" ; then
780             AC_PATH_PROGS(CLI, [mono ilrun], [])
781           fi
782           AC_ARG_VAR(CLI, [CSharp bytecode interpreter (optional - only needed to run CSharp testsuite with)])
783           if test -n "$CLI" ; then
784             AC_MSG_CHECKING([whether $CLI can run CSharp programs])
785             if test OK = "`$CLI ./conftest.exe 2> /dev/null`" ; then
786               AC_MSG_RESULT(yes)
787               RUN_CSHARP=$CLI
788             else
789               AC_MSG_RESULT([no - CSharp tests will be skipped])
790               RUN_CSHARP='\$(top_srcdir)/skiptest'
791             fi
792           else
793             AC_MSG_RESULT([not found - CSharp tests will be skipped])
794             RUN_CSHARP='\$(top_srcdir)/skiptest'
795           fi
796         fi
797         AC_SUBST(RUN_CSHARP)
799         AC_MSG_CHECKING([for extra flags for $GACUTIL])
800         GACUTIL_FLAGS='/package $(ASSEMBLY) /gacdir $(libdir) /root $(DESTDIR)$(libdir)'
801         case $GACUTIL in
802         *ilgac*) ;;
803         *)
804           dnl Microsoft's gacutil accepts fewer options than Mono's
805           $GACUTIL /\?|grep '\<Mono\>' >/dev/null || GACUTIL_FLAGS=
806           ;;
807         esac
808         AC_SUBST([GACUTIL_FLAGS])
809         if test -z "$GACUTIL_FLAGS" ; then
810           AC_MSG_RESULT([no])
811         else
812           AC_MSG_RESULT([$GACUTIL_FLAGS])
813         fi
815         BINDINGS="$BINDINGS csharp"
816       else
817         AC_MSG_RESULT(no)
818         if test yes = "$with_csharp" ; then
819           AC_MSG_ERROR([CSharp compiler $CSC doesn't work])
820         fi
821       fi
822     else
823       if test yes = "$with_csharp" ; then
824         if test -z "$GACUTIL" ; then
825           AC_MSG_ERROR([Mono gacutil not found])
826         elif test -z "$SN" ; then
827           AC_MSG_ERROR([Mono sn not found])
828         fi
829       fi
830     fi
831   else
832     if test yes = "$with_csharp" ; then
833       AC_MSG_ERROR([CSharp compiler not found$csc_note])
834     fi
835   fi
838 JAVA_CPPFLAGS=
839 if test no != "$with_java" ; then
840   AC_PATH_PROGS(JAVA, ["${JAVA-java}"], [],
841         [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
842   AC_PATH_PROGS(JAVAC, ["${JAVAC-javac}"], [],
843         [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
844   AC_PATH_PROGS(JAR, ["${JAR-jar}"], [],
845         [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
846   AC_ARG_VAR(JAVA, [Java interpreter command])
847   AC_ARG_VAR(JAVAC, [Java compiler command])
848   AC_ARG_VAR(JAR, [java jar utility])
849   AC_ARG_VAR(JAVA_HOME, [Pathname of the directory where the JDK is installed])
850   AC_ARG_VAR(JDK_HOME, [Pathname of the directory where the JDK is installed])
851   AC_ARG_VAR(JNI_INCLUDE_DIR, [Pathname of the directory where jni.h is installed])
852   if test -n "$JAVA" -a -n "$JAVAC" -a -n "$JAR" ; then
853     dnl Eric says:
854     dnl  The JNI library *requires* "Java 2", which is 1.2 or better.
855     dnl
856     dnl So checking for jni.h presumably implicitly checks we have "Java 2".
857     dnl Note: jni.h #defines JNI_VERSION_1_[1246] (but not 3 or 5 it seems).
858     dnl So we could check for one of these if we want to check for a particular
859     dnl JDK version...
860     java_ok=no
861     AC_CHECK_HEADER([jni.h], [java_ok=yes], [
862       dnl We need to look for jni.h in /usr/lib/jvm/java-gcj/include on some
863       dnl Debian and Ubuntu boxes at least.  And on Mac OS X, jni.h lives
864       dnl in /System/Library/Frameworks/JavaVM.framework/Headers.
865       SAVE_CPPFLAGS=$CPPFLAGS
866       real_javac=$JAVAC
867       dnl Avoid endlessly traversing if there's a symlink loop.
868       for count in 1 2 3 4 5 6 7 8 9 ; do
869         r=`readlink "$real_javac"`
870         test -n "$r" || break
871         real_javac=$r
872       done
873       dnl Translate ".../bin/javac" to ".../include".
874       [rel_jnidir=`echo "$real_javac"|sed 's!/[^/]*/[^/]*$!/include!'`]
875       for jnidir in \
876           $JNI_INCLUDE_DIR \
877           ${JAVA_HOME+"$JAVA_HOME/include"} \
878           ${JDK_HOME+"$JDK_HOME/include"} \
879           "$rel_jnidir" \
880           /System/Library/Frameworks/JavaVM.framework/Headers ; do
881         CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
882         AC_MSG_CHECKING([for jni.h in $jnidir])
883         if test -f "$jnidir/jni.h" ; then
884           AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
885           if test yes = $java_ok ; then
886             AC_MSG_RESULT([yes])
887             JAVA_CPPFLAGS=-I$jnidir
888             break
889           fi
891           dnl Sun's JDK requires the user to pass an extra -I for a
892           dnl subdirectory named after the host_os.  Sadly we seem to
893           dnl need to hardcode a list of the platform names.
894           jni_host_os=
895           case $host_os in
896             linux*)
897               jni_host_os=linux ;;
898             solaris*)
899               jni_host_os=solaris ;;
900             mingw* | pw32*)
901               jni_host_os=win32 ;;
902           esac
903           if test -n "$jni_host_os" ; then
904             CPPFLAGS="$CPPFLAGS -I$jnidir/$jni_host_os"
905             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
906             if test yes = $java_ok ; then
907               AC_MSG_RESULT([yes, requires additional -I$jnidir/$jni_host_os])
908               JAVA_CPPFLAGS="-I$jnidir -I$jnidir/$jni_host_os"
909               break
910             fi
911           fi
912           AC_MSG_RESULT([found, but not usable])
914           CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
915         else
916           AC_MSG_RESULT([no])
917         fi
918       done
919       CPPFLAGS=$SAVE_CPPFLAGS
920       test noyes = $java_ok$with_java && AC_MSG_ERROR([jni.h not found])
921       ], [ ])
922     AC_SUBST(JAVA_CPPFLAGS)
923     if test yes = $java_ok ; then
924       AC_MSG_CHECKING([for Java path separator])
925       [echo 'public class conftest { public static void main(String[] args) { System.out.println(System.getProperty("path.separator")); } }' > conftest.java]
926       if (exec >&5 2>&5;$JAVAC conftest.java;exit $?) ; then
927         JAVA_PATHSEP=`$JAVA conftest 2>&5`
928         AC_SUBST(JAVA_PATHSEP)
929         if test -n "$JAVA_PATHSEP" ; then
930           AC_MSG_RESULT($JAVA_PATHSEP)
931           BINDINGS="$BINDINGS java"
932         else
933           AC_MSG_RESULT([failed to run test program])
934           java_ok=no
935         fi
936       else
937         AC_MSG_RESULT([failed to compile test program])
938         java_ok=no
939       fi
940       if test no = "$java_ok" ; then
941         test yes = "$with_java" && AC_MSG_ERROR([Couldn't compile and run a simple Java test program])
942       fi
943     fi
944   else
945     if test yes = "$with_java" ; then
946       if test -z "$JAVA" ; then
947         AC_MSG_ERROR([java not found])
948       elif test -z "$JAVAC" ; then
949         AC_MSG_ERROR([javac not found])
950       elif test -z "$JAR" ; then
951         AC_MSG_ERROR([jar not found])
952       fi
953     fi
954   fi
957 if test no != "$with_ruby" ; then
958   dnl See comment for AC_PATH_PROGS(SWIG, ...).
959   if test -n "$RUBY" ; then
960     AC_PATH_PROGS(RUBY, ["$RUBY"], [])
961   else
962     AC_PATH_PROGS(RUBY, [ruby], [])
963   fi
964   AC_ARG_VAR(RUBY, [Ruby interpreter])
965   if test -n "$RUBY" ; then
966     dnl Require Ruby 1.8 or newer.  Paul says:
967     dnl  I'm using 1.8.4.  I imagine anything in the 1.8.x series will be fine,
968     dnl  not sure about 1.6 but hardly anyone uses <1.8.
969     dnl
970     dnl Brief testing with Ruby 1.6.8 show the bindings probably work there,
971     dnl but smoketest.rb doesn't because the test/unit module isn't available.
972     AC_MSG_CHECKING([$RUBY version])
973     dnl RUBY_VERSION works with 1.6.  Once we've checked we have at least 1.8
974     dnl we can safely use RbConfig below (RbConfig requires Ruby 1.8; Config
975     dnl gives a deprecation warning with Ruby 1.9.3).
976     version=`$RUBY -e 'print RUBY_VERSION' 2>/dev/null`
977     case $version in
978     "")
979       AC_MSG_RESULT([\$RUBY -e 'print RUBY_VERSION' didn't work])
980       if test yes = "$with_ruby" ; then
981         AC_MSG_ERROR([Working Ruby interpreter not found])
982       fi
983       RUBY=
984       ;;
985     [0.*|1.[0-7]|1.[0-7].*])
986       AC_MSG_RESULT([$version (too old)])
987       if test yes = "$with_ruby" ; then
988         AC_MSG_ERROR([Only Ruby 1.8 or newer is supported ($RUBY is $version)])
989       fi
990       RUBY=
991       ;;
992     esac
993     if test -n "$RUBY" ; then
994       AC_MSG_RESULT([$version])
995       AC_ARG_VAR(RUBY_INC, [Directory where ruby.h can be found])
996       if test -z "$RUBY_INC" ; then
997         dnl Ruby 1.9 added rubyhdrdir; for older Ruby we use archdir.
998         [RUBY_INC=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyhdrdir"] || RbConfig::CONFIG["archdir"]'`]
999       fi
1000       AC_SUBST(RUBY_INC)
1001       dnl Check that ruby.h is there, which is a good way to check that
1002       dnl the appropriate ruby-dev package has been installed.
1003       AC_MSG_CHECKING([for $RUBY_INC/ruby.h])
1004       if test -f "$RUBY_INC/ruby.h" ; then
1005         AC_MSG_RESULT(yes)
1007         AC_MSG_CHECKING([for ruby/io.h])
1008         rm -f ruby/rubyio.h
1009         if test -f "$RUBY_INC/ruby/io.h" ; then
1010           AC_MSG_RESULT(yes)
1012           dnl In a VPATH build, the ruby subdirectory won't exist the first
1013           dnl time.
1014           AS_MKDIR_P([ruby])
1016           dnl Newer Ruby has ruby/io.h - older has rubyio.h.  Ruby doesn't
1017           dnl seem to provide any way to generate code which works with
1018           dnl both (and even the version number isn't a discriminator as
1019           dnl Debian etch has 1.9 without ruby/io.h).  The SWIG version
1020           dnl we're currently using assumes rubyio.h exists and luckily
1021           dnl it includes it with "", so we can just drop a rubyio.h
1022           dnl wrapper alongside ruby/xapian_wrap.cc.
1023           echo '#include <ruby/io.h>' > ruby/rubyio.h
1024         else
1025           AC_MSG_RESULT(no)
1026         fi
1028         AC_ARG_VAR(RUBY_INC_ARCH, [Directory where ruby/config.h can be found (needed from Ruby 1.9)])
1029         if test -z "$RUBY_INC_ARCH" ; then
1030           dnl Ruby 2.0 and later Ruby 1.9 have rubyarchhdrdir; for early 1.9,
1031           dnl use rubyhdrdir+"/"+arch.
1032           [RUBY_INC_ARCH=`$RUBY -rrbconfig -e 'd = RbConfig::CONFIG["rubyhdrdir"]; print RbConfig::CONFIG["rubyarchhdrdir"] || (d ? d + "/" + RbConfig::CONFIG["arch"] : "")'`]
1033           dnl Ruby 1.8 has no rubyhdrdir, so set RUBY_INC_ARCH=RUBY_INC.
1034           test x"$RUBY_INC_ARCH" != x || RUBY_INC_ARCH=$RUBY_INC
1035         fi
1036         AC_SUBST(RUBY_INC_ARCH)
1038         AC_ARG_VAR(RUBY_LIB, [Directory to install ruby files into])
1039         if test -z "$RUBY_LIB" ; then
1040           [RUBY_LIB=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitelibdir"]'`]
1041         fi
1042         AC_SUBST(RUBY_LIB)
1044         AC_ARG_VAR(RUBY_LIB_ARCH, [Directory to install ruby binary modules into])
1045         if test -z "$RUBY_LIB_ARCH" ; then
1046           [RUBY_LIB_ARCH=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitearchdir"]'`]
1047         fi
1048         AC_SUBST(RUBY_LIB_ARCH)
1050         RUBY_LIBS=
1051         if test unsupported = "$allow_undefined_flag" ; then
1052           dnl For Microsoft Windows and a few other platforms.
1053           [RUBY_LIBS=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["LIBRUBYARG"]'`]
1054         fi
1055         AC_SUBST(RUBY_LIBS)
1057         dnl rdoc is included as part of the Ruby core distribution, so run it
1058         dnl at build time rather shipping the rather large generated output in
1059         dnl our source tarball.
1060         if test -n "$RDOC" ; then
1061           AC_PATH_PROGS(RDOC, ["$RDOC"], [])
1062         else
1063           dnl Try replace the *last* 'ruby' with 'rdoc'.
1064           rdoc_best_guess=`echo "$RUBY"|sed 's,\(.*\)ruby,\1rdoc,'`
1065           AC_PATH_PROGS(RDOC, ["$rdoc_best_guess"], [])
1066           if test -z "$RDOC"; then
1067             AC_PATH_PROGS(RDOC, [rdoc], [])
1068           fi
1069         fi
1070         if test -n "$RDOC"; then
1071           BINDINGS="$BINDINGS ruby"
1072         fi
1073       else
1074         AC_MSG_RESULT([no (install ruby-dev or ruby-devel package or similar)])
1075         if test yes = "$with_ruby" ; then
1076           AC_MSG_ERROR([ruby.h not found])
1077         fi
1078       fi
1079       RUBY_DLEXT=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG[["DLEXT"]]'`
1080       AC_SUBST(RUBY_DLEXT)
1081     fi
1082   fi
1085 if test no != "$with_perl" ; then
1086   AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
1087   AC_ARG_VAR(PERL, [perl interpreter])
1088   if test -n "$PERL" ; then
1089     AC_PATH_PROGS(PROVE, ["${PROVE-prove}"], [])
1090     AC_ARG_VAR(PROVE, [Perl Test::Harness test runner])
1091     if test x"$PROVE" = x ; then
1092       AC_MSG_WARN([Perl 'prove' tool not found - Perl bindings tests will be skipped])
1093       dnl The skiptest script just returns exit code 77.
1094       PROVE='$(top_srcdir)/skiptest'
1095     fi
1097     if test -z "$PERL_INC" ; then
1098       PERL_INC=`$PERL -MConfig -e 'print $Config{archlibexp}, "/CORE"'`
1099     fi
1100     AC_SUBST(PERL_INC)
1102     AC_ARG_VAR(PERL_ARCH, [Directory to install architecture-dependent perl files into])
1103     if test -z "$PERL_ARCH" ; then
1104       PERL_ARCH=`$PERL -MConfig -e 'print $Config{installsitearch}'`
1105     fi
1106     AC_SUBST(PERL_ARCH)
1108     AC_ARG_VAR(PERL_LIB, [Directory to install architecture-independent perl files into])
1109     if test -z "$PERL_LIB" ; then
1110       PERL_LIB=`$PERL -MConfig -e 'print $Config{installsitelib}'`
1111     fi
1112     AC_SUBST(PERL_LIB)
1114     AC_ARG_VAR(PERL_SO, [Extension for compiled Perl modules])
1115     if test -z "$PERL_SO" ; then
1116       PERL_SO=`$PERL -MConfig -e 'print ".", $Config{dlext}'`
1117     fi
1118     AC_SUBST(PERL_SO)
1120     if test -z "$PERL_XAPIAN_VERSION" ; then
1121       dnl snapshot versions look like 1.2.3_git123 or 1.2.3_svn14971
1122       case $PACKAGE_VERSION in
1123       *_git*)
1124         PERL_XAPIAN_VERSION=`echo "$PACKAGE_VERSION"|sed 's/_git/./'` ;;
1125       *_svn*)
1126         PERL_XAPIAN_VERSION=`echo "$PACKAGE_VERSION"|sed 's/_svn/./'` ;;
1127       *)
1128         PERL_XAPIAN_VERSION=$PACKAGE_VERSION.0 ;;
1129       esac
1130     fi
1131     AC_SUBST(PERL_XAPIAN_VERSION)
1133     BINDINGS="$BINDINGS perl"
1134   else
1135     if test yes = "$with_perl" ; then
1136       AC_MSG_ERROR([perl not found])
1137     fi
1138   fi
1141 if test no != "$with_lua" ; then
1142   AC_PATH_PROGS(LUA, ["${LUA-lua}"], [])
1143   AC_ARG_VAR(LUA, [lua interpreter])
1144   if test -n "$LUA" ; then
1145     dnl We need Lua 5.1 or later.
1146     AC_MSG_CHECKING([$LUA version])
1147     lua_version=`$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' 2>&AS_MESSAGE_LOG_FD`
1149     case $lua_version in
1150     [[01234]].*|5.0|5.0.*)
1151       AC_MSG_RESULT([$lua_version < 5.1 (too old)])
1152       if test yes = "$with_lua" ; then
1153         AC_MSG_ERROR([$LUA too old (Lua 5.1 or newer required)])
1154       fi
1155       LUA=
1156       ;;
1157     "")
1158       AC_MSG_RESULT([\$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' didn't work])
1160       if test yes = "$with_lua" ; then
1161         AC_MSG_ERROR([Working Lua interpreter not found])
1162       fi
1163       LUA=
1164       ;;
1165     esac
1167     if test -n "$LUA" ; then
1168       AC_MSG_RESULT([$lua_version])
1170       AC_ARG_VAR([LUA_LIB], [Directory to install compiled Lua modules into])
1171       AC_ARG_VAR([LUA_SO], [Extension for compiled Lua modules (e.g. LUA_SO=.so)])
1172       AC_MSG_CHECKING([for directory to install compiled Lua modules into])
1173       if test -z "$LUA_LIB" -o -z "$LUA_SO" ; then
1174         lua_cpath=`$LUA -e 'require("package") print(package.cpath)'`
1175         dnl Look for the first absolute path in lua_cpath which has leaf
1176         dnl "?.<ext>" and put the directory part into lua_lib and <ext> into
1177         dnl lua_so.  If LUA_SO was specified by the user, only consider
1178         dnl entries where <ext> matches LUA_SO.
1179         lua_lib=
1180         lua_so=
1181         case $LUA_SO in
1182           "")
1183            [lua_so_pat='[a-zA-Z][a-zA-Z]*'] ;;
1184           .*)
1185             dnl If LUA_SO has a leading '.', remove it.
1186             lua_so_pat=`AS_ECHO("$LUA_SO")|sed 's/^\.//'` ;;
1187           *)
1188             dnl If LUA_SO was specified without a leading '.', add one to the
1189             dnl value substituted into Makefile.in.
1190             lua_so_pat=$LUA_SO
1191             LUA_SO=.$LUA_SO
1192             ;;
1193         esac
1194         while test x"$lua_cpath" != x ; do
1195           [lua_lib=`expr X"$lua_cpath" : X'\([^;]*\)'`]
1196           lua_so=.`expr X"$lua_lib" : X'/.*/?\.\('"$lua_so_pat"'\)$'`
1197           case $lua_so in
1198             .|.lua)
1199               dnl If someone has foolishly put ?.lua in cpath, ignore them.
1200               lua_lib=
1201               ;;
1202             *)
1203               lua_lib=`expr X"$lua_lib" : X'\(/.*\)/?\.'"$lua_so_pat"'$'`
1204               break ;;
1205           esac
1206           [lua_cpath=`expr X"$lua_cpath" : X'[^;]*;*\(.*\)'`]
1207         done
1208         test -n "$LUA_LIB" || LUA_LIB=$lua_lib
1209         test -n "$LUA_SO" || LUA_SO=$lua_so
1210       fi
1211       if test -z "$LUA_LIB"; then
1212         AC_MSG_RESULT([not found])
1213       else
1214         AC_MSG_RESULT([$LUA_LIB])
1215       fi
1216       AC_SUBST([LUA_LIB])
1218       AC_MSG_CHECKING([for extension to use for compiled Lua modules])
1219       if test -z "$LUA_SO"; then
1220         AC_MSG_RESULT([not found])
1221       else
1222         AC_MSG_RESULT([$LUA_SO])
1223       fi
1224       AC_SUBST([LUA_SO])
1226       AC_MSG_CHECKING([for Lua header files])
1227       AC_ARG_VAR([LUA_INC], [Directory to include for lua headers])
1228       if test -z "$LUA_INC" ; then
1229         dirs="/usr/include/lua$lua_version /usr/local/include/lua$lua_version"
1230         for i in $dirs ; do
1231           if test -r "$i/lua.h"; then
1232             LUA_INC=$i
1233             break
1234           fi
1235         done
1236       fi
1238       if test -z "$LUA_INC" ; then
1239         AC_MSG_RESULT([not found])
1240       else
1241         AC_MSG_RESULT([$LUA_INC])
1242         BINDINGS="$BINDINGS lua"
1243         LUA_CPPFLAGS="-I$LUA_INC"
1244       fi
1245       AC_SUBST([LUA_CPPFLAGS])
1246     fi
1247   else
1248     if test yes = "$with_lua" ; then
1249       AC_MSG_ERROR([lua not found])
1250     fi
1251   fi
1254 AC_SUBST(BINDINGS)
1256 case $BINDINGS in
1257 *python*) dnl Matches python and/or python3
1258   dnl C++11 has thread_local
1259   dnl GCC and some others have __thread
1260   dnl MSVC and some others have __declspec(thread)
1261   AC_MSG_CHECKING([for thread-local storage qualifier])
1262   AC_ARG_VAR([THREAD_LOCAL], [thread-local storage qualifier])
1263   if test -z "$THREAD_LOCAL" ; then
1264     for t in thread_local __thread '__declspec(thread)' ; do
1265       AC_COMPILE_IFELSE([AC_LANG_SOURCE([[static $t void * p;]])],
1266                         [THREAD_LOCAL=$t; break])
1267     done
1268   fi
1269   if test -z "$THREAD_LOCAL" ; then
1270     AC_MSG_RESULT([unknown, disabling thread-local support])
1271   else
1272     AC_MSG_RESULT([$THREAD_LOCAL])
1273     AC_DEFINE_UNQUOTED([THREAD_LOCAL], [$THREAD_LOCAL], [Thread local storage qualifier (undefined if no TLS)])
1274   fi
1275   ;;
1276 esac
1278 dnl Set flags to control warnings (enable more, or disable annoying ones)
1279 dnl and other compiler specific flags.
1280 SWIG_CXXFLAGS=
1281 if test yes = "$GXX" ; then
1282   dnl Python itself is compiled with -fno-strict-aliasing, and it appears
1283   dnl it's safest to follow this lead when compiling the SWIG generated
1284   dnl interface code.  E.g.:
1285   dnl   http://article.gmane.org/gmane.comp.gcc.devel/74692
1286   dnl The code SWIG generates for other languages seems to have similar
1287   dnl issues too, so just turn this on for all of them.
1288   dnl
1289   dnl There's no need to check -fno-strict-aliasing is supported as it works
1290   dnl with GCC 2.95 and we don't support anything older.
1291   SWIG_CXXFLAGS="-fno-strict-aliasing"
1293   dnl We need to explicitly link against -lstdc++ on OpenBSD (discovered
1294   dnl on OpenBSD 3.7 with GCC 3.3.5 but this appears to be due to a
1295   dnl deliberate decision on the part of OpenBSD developers).  Luckily
1296   dnl we can just always specify -lstdc++ explicitly if GCC is the
1297   dnl compiler and libtool will eliminate the duplicate on other
1298   dnl platforms.
1299   XAPIAN_LIBS="$XAPIAN_LIBS -lstdc++"
1301   dnl Intel's C++ compiler is identified as "GXX" by autoconf's test - check
1302   dnl which we actually have.
1303   AC_EGREP_CPP(yes,
1304     [#ifdef __INTEL_COMPILER
1305      yes
1306      #endif
1307     ],
1308     [
1309       dnl Intel's compiler:
1310       dnl
1311       dnl -w1 stops the avalanche of uninteresting "remark" messages.
1312       dnl -wd... disables warnings which don't have good code workarounds.
1313       dnl
1314       dnl Swig generated code gives lots of unused and uninitialized warnings.
1315       dnl They're non-harmful, so suppress them.
1316       SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -w1 -wd177,1572"
1317     ],
1318     [
1319       dnl GCC or clang:
1320       dnl
1321       dnl Swig generated code gives lots of unused and uninitialized warnings.
1322       dnl They're non-harmful, so suppress them.
1323       SWIG_CXXFLAGS="$SWIG_CXXFLAGS -fshow-column -Wall -Wno-unused -Wno-uninitialized"
1324     ])
1326   if test no != "$enable_visibility"; then
1327     dnl GCC doesn't support symbol visibility on all platforms (e.g. it isn't
1328     dnl on mingw).
1329     AC_MSG_CHECKING([if $CXX -fvisibility=hidden works])
1330     if echo 'int bar() __attribute__((visibility("default"))); int foo() {return 42;}'|$CXX -Werror -fvisibility=hidden -c -oconftest.o -xc++ - >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
1331       AC_MSG_RESULT([yes])
1332       SWIG_CXXFLAGS="$SWIG_CXXFLAGS -fvisibility=hidden"
1333     else
1334       AC_MSG_RESULT([no])
1335     fi
1336   fi
1338 AC_SUBST(SWIG_CXXFLAGS)
1340 dnl Restore CXXFLAGS to those the user specified or autoconf defaulted to.
1341 CXXFLAGS=$save_CXXFLAGS
1343 dnl Required for auto regeneration to work in a combined maintainer-mode tree.
1344 : ${AUTOM4TE=autom4te}
1345 AC_SUBST([AUTOM4TE])
1347 AC_CONFIG_FILES([Makefile
1348  doxygen_xml.conf
1349  xapian-version.h
1350  python/Makefile python/docs/conf.py python/version.i
1351  python3/Makefile python3/docs/conf.py python3/version.i
1352  php/Makefile
1353  java/Makefile
1354  tcl8/Makefile tcl8/pkgIndex.tcl
1355  csharp/Makefile csharp/AssemblyInfo.cs
1356  ruby/Makefile
1357  perl/Makefile perl/util.i
1358  lua/Makefile
1359  xapian-bindings.spec
1360  ])
1361 AC_OUTPUT
1363 echo ""
1364 if test -z "$BINDINGS" ; then
1365   echo "*** Not found the required tools for building bindings for any"
1366   echo "*** supported language!"
1367   echo "***"
1368   echo "*** You may need to install -dev or -devel packages for the languages"
1369   echo "*** you want to build bindings for."
1370   echo "***"
1371   echo "*** For details of how to point configure at tools not on PATH, see:"
1372   echo "***     ./configure --help"
1373 else
1374   echo "*** Building bindings for languages:" $BINDINGS
1376 echo ""
1377 if test "$COMPAT_VERSION" != "$XAPIAN_VERSION" ; then
1378   release_series=[`echo "$COMPAT_VERSION"|sed 's/[0-9][0-9]*$//'`]
1379   case $XAPIAN_VERSION in
1380   $release_series*) ;;
1381   *)
1382     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.])
1383     ;;
1384   esac
1385   dnl 0.8.2 was the first version which set XAPIAN_VERSION
1386   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.])