Merge branch 'svn/1.2' of at:/home/xapian-git/xapian into svn/1.2
[xapian.git] / xapian-bindings / configure.ac
blob6c559fb566252da85fe201ff4825063888055981
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 AC_INIT([xapian-bindings], [1.2.23], [https://xapian.org/bugs])
9 dnl See xapian-core's HACKING document for details of the reasons for required
10 dnl versions.
11 AM_INIT_AUTOMAKE([1.11.2 -Wportability tar-ustar no-dist-gzip dist-xz])
12 AC_CONFIG_SRCDIR([xapian.i])
14 AC_CONFIG_HEADERS([config.h])
16 AC_CONFIG_MACRO_DIR([m4])
18 dnl Mac OS X needs MACOSX_DEPLOYMENT_TARGET set to 10.3 (or higher) to
19 dnl successfully link the SWIG generated modules.  The link always fails
20 dnl on earlier versions of Mac OS X (10.1.4 and 10.2.8 tested), so always
21 dnl setting MACOSX_DEPLOYMENT_TARGET to at least 10.3 seems to be the
22 dnl appropriate thing to do.  Most Mac OS X developers will have upgraded
23 dnl from 10.1 and 10.2 by now anyhow.
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 Check for xapian-core.
89 XO_LIB_XAPIAN([], [], [xapian-config])
91 NEED_JNILIB_EXT=no
92 NEED_INTREE_DYLD=no
93 INTREE_DYLD_PATH=
94 case $host_os in
95 darwin*)
96   NEED_JNILIB_EXT=yes
97   dnl If we're building against an uninstalled xapian-core, xapian-config
98   dnl --libs will give an error.
99   if $XAPIAN_CONFIG --libs >/dev/null 2>/dev/null ; then
100     :
101   else
102     NEED_INTREE_DYLD=yes
103     dnl $XAPIAN_LIBS may have some options first, so grab the last argument,
104     dnl which should be the .la file.
105     set x $XAPIAN_LIBS
106     as_fn_arith $# - 1
107     shift $as_val
108     INTREE_DYLD_PATH=$1
109     dnl Make sure the path is absolute.
110     case $INTREE_DYLD_PATH in
111       /*) ;;
112       *) INTREE_DYLD_PATH=`pwd`/$INTREE_DYLD_PATH ;;
113     esac
114     dnl Add .libs or equivalent.
115     INTREE_DYLD_PATH=`echo "$INTREE_DYLD_PATH"|sed 's,\(.*/\).*,\1,'`$lt_cv_objdir
116     AC_SUBST([INTREE_DYLD_PATH])
117   fi
118   ;;
119 esac
120 AM_CONDITIONAL(NEED_JNILIB_EXT, test yes = "$NEED_JNILIB_EXT")
121 AM_CONDITIONAL(NEED_INTREE_DYLD, test yes = "$NEED_INTREE_DYLD")
123 dnl We want XAPIAN_CXXFLAGS to be used for configure tests, so add it to
124 dnl CXXFLAGS for the duration of configure.
125 save_CXXFLAGS=$CXXFLAGS
126 CXXFLAGS="$CXXFLAGS $XAPIAN_CXXFLAGS"
128 dnl COMPAT_VERSION is the version of xapian-core that "matches" our version.
129 dnl We allow for bindings being version 0.8.5.1 while xapian-core is 0.8.5.
130 dnl COMPAT_VERSION also ignores any _git123 suffix which snapshots will have.
131 COMPAT_VERSION=[`echo "$PACKAGE_VERSION"|sed 's/^\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`]
132 AC_SUBST(COMPAT_VERSION)
134 dnl VERSION_NO_SNAPSHOT simply has any _git123 suffix removed.
135 VERSION_NO_SNAPSHOT=[`echo "$PACKAGE_VERSION"|sed 's/_.*$//'`]
136 AC_SUBST(VERSION_NO_SNAPSHOT)
138 dnl We only need to set docdir for compatibility with autoconf < 2.60 - this
139 dnl code can be removed once we move to requiring autoconf 2.60 or newer.
140 test -n "$docdir" || docdir='${datadir}/doc/${PACKAGE_TARNAME}'
141 AC_SUBST(docdir)
143 AC_ARG_ENABLE(quiet,
144   [AS_HELP_STRING([--enable-quiet], [enable quiet building [default=no]])],
145   [case ${enableval} in
146     yes|no) ;;
147     *) AC_MSG_ERROR([bad value ${enableval} for --enable-quiet]) ;;
148   esac])
150 dnl Pass `--quiet' to libtool if quiet building is requested.  Using an
151 dnl AC_SUBST-ed value like this allows the choice to be easily overridden
152 dnl if you want to see exactly what make and libtool are up to - just run
153 dnl make like this: `make QUIET='
154 QUIET=
155 if test yes = "$enable_quiet"; then
156   QUIET=--quiet
158 AC_SUBST(QUIET)
160 dnl Only probe for SWIG and enable SWIG rules in makefiles if
161 dnl configure --enable-maintainer-mode is used.
162 AM_MAINTAINER_MODE
164 AC_ARG_ENABLE(documentation,
165   [AS_HELP_STRING([--enable-documentation], [enable make rules to rebuild documentation [default=maintainer-mode]])],
166   [case ${enableval} in
167     yes|no) ;;
168     *) AC_MSG_ERROR([bad value ${enableval} for --enable-documentation]) ;;
169   esac])
170 test -z "$enable_documentation" && enable_documentation=$USE_MAINTAINER_MODE
171 AM_CONDITIONAL(DOCUMENTATION_RULES, test x"$enable_documentation" = xyes)
172 AM_CONDITIONAL(MAINTAINER_NO_DOCS, test x"$USE_MAINTAINER_MODE$enable_documentation" = xyesno)
174 if test x$USE_MAINTAINER_MODE = xyes; then
175   dnl Check for swig - this does most of the work for the bindings.
176   dnl AC_PATH_PROGS only honours an already set SWIG if it's a full
177   dnl path.  Listing it in the "to be searched" list like this allows
178   dnl ./configure SWIG=myswig to work.
179   swigoverridden=${SWIG+yes}
180   AC_PATH_PROGS(SWIG, ["${SWIG-swig}"], [])
181   AC_ARG_VAR(SWIG, [SWIG interface generator (only needed by Xapian developers)])
182   if test -z "$SWIG" ; then
183     AC_MSG_ERROR([Can't find SWIG utility])
184   fi
185   dnl Check for new enough SWIG.
186   dnl
187   dnl 2.0.5 avoids E_NOTICE from generating 'return $r;' when $r isn't set.
188   v=`$SWIG -version 2>&1|sed 's/^SWIG Version \([[0-9\.]]*\).*/\1/p;d'`
189   case $v in
190     [[01].*|2.0.[0-4]|""])
191       msg="SWIG >= 2.0.5 (commit 210266c) required (you have ${v:-an unknown version})"
192       if test -n "$swigoverridden" ; then
193         dnl If SWIG was explicitly set, make this a warning only.
194         AC_MSG_WARN([$msg])
195       else
196         AC_MSG_ERROR([$msg])
197       fi ;;
198   esac
199   SWIG_FLAGS="`$XAPIAN_CONFIG --swigflags` -Werror"
200   AC_SUBST(SWIG_FLAGS)
202   dnl Need perl in maintainer mode to generate the except.i file for python.
203   AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
204   test -z "$PERL" && AC_MSG_ERROR([perl is required in maintainer mode])
205   dnl Need python in maintainer mode to run doxy2swig.py.
206   AC_PATH_PROGS(PYTHON, ["${PYTHON-python2 python}"], [])
207   test -z "$PYTHON" && AC_MSG_ERROR([python is required in maintainer mode])
210 AC_ARG_WITH(python,
211   AC_HELP_STRING([--with-python], [enable Python bindings]),
212   [],
213   [with_python=])
215 AC_ARG_WITH(php,
216   AC_HELP_STRING([--with-php], [enable PHP bindings]),
217   [],
218   [with_php=])
220 AC_ARG_WITH(ruby,
221   AC_HELP_STRING([--with-ruby], [enable Ruby bindings]),
222   [],
223   [with_ruby=])
225 AC_ARG_WITH(tcl,
226   AC_HELP_STRING([--with-tcl], [enable Tcl bindings]),
227   [],
228   [with_tcl=])
230 AC_ARG_WITH(csharp,
231   AC_HELP_STRING([--with-csharp], [enable CSharp bindings]),
232   [],
233   [with_csharp=])
235 AC_ARG_WITH(java,
236   AC_HELP_STRING([--with-java], [enable Java bindings]),
237   [],
238   [with_java=])
240 AC_ARG_WITH(perl,
241   AC_HELP_STRING([--with-perl], [enable Perl bindings]),
242   [],
243   [with_perl=])
245 AC_ARG_WITH(lua,
246   AC_HELP_STRING([--with-lua], [enable Lua bindings]),
247   [],
248   [with_lua=])
250 case $with_python$with_php$with_ruby$with_tcl$with_csharp$with_java$with_perl$with_lua in
251 *yes*)
252   dnl Default unspecified values to no.
253   test -z "$with_python" && with_python=no
254   test -z "$with_php" && with_php=no
255   test -z "$with_tcl" && with_tcl=no
256   test -z "$with_csharp" && with_csharp=no
257   test -z "$with_java" && with_java=no
258   test -z "$with_ruby" && with_ruby=no
259   test -z "$with_perl" && with_perl=no
260   test -z "$with_lua" && with_lua=no
261   ;;
262 esac
264 BINDINGS=
266 if test no != "$with_python" ; then
267   dnl See comment for AC_PATH_PROGS(SWIG, ...).
268   AC_PATH_PROGS(PYTHON, ["${PYTHON-python2 python}"], [])
269   AC_ARG_VAR(PYTHON, [Python interpreter])
270   if test -n "$PYTHON" ; then
271     dnl Require Python 2.3 or newer.  It's now > 4.5 years since the last
272     dnl 2.2.x release, so 2.2 is essentially unsupported upstream.
273     AC_MSG_CHECKING([$PYTHON version])
274     version=`$PYTHON -c 'import sys;print("%d.%d" % sys.version_info[[:2]])' 2>/dev/null`
275     case $version in
276     [2.[3-9]*|2.[12][0-9][0-9]*])
277       AC_MSG_RESULT([$version])
278       ;;
279     [[3-9].*])
280       AC_MSG_RESULT([$version (too new - only Python 2 is supported by Xapian 1.2.x)])
281       if test yes = "$with_python" ; then
282         AC_MSG_ERROR([Only Python 2 is supported by Xapian 1.2.x ($python is $version)])
283       fi
284       PYTHON=
285       ;;
286     *)
287       AC_MSG_RESULT([$version (too old)])
288       if test yes = "$with_python" ; then
289         AC_MSG_ERROR([Only python 2.3 or newer is supported ($python is $version)])
290       fi
291       PYTHON=
292       ;;
293     esac
294     if test -n "$PYTHON" ; then
295       if $PYTHON -c 'import distutils.sysconfig' 2>/dev/null ; then
296         PYTHON_INC=`$PYTHON -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_inc().replace(os.sep,"/"))'`
297         AC_SUBST(PYTHON_INC)
298       else
299         if test yes = "$with_python" ; then
300           AC_MSG_ERROR([Couldn't import Python module distutils.sysconfig - you probably need to install a python-dev or python-devel package])
301         else
302           AC_MSG_WARN([Couldn't import Python module distutils.sysconfig - you probably don't have a python-dev or python-devel package installed])
303           PYTHON=
304         fi
305       fi
306     fi
307     if test -n "$PYTHON" ; then
308       dnl Check that Python.h is there, which is a good way to check that
309       dnl the appropriate python-dev package has been installed.
310       AC_MSG_CHECKING([for $PYTHON_INC/Python.h])
311       if test -f "$PYTHON_INC/Python.h" ; then
312         AC_MSG_RESULT(yes)
313         AC_MSG_CHECKING([for directory to install python bindings in])
314         if test -z "$PYTHON_LIB" ; then
315           PYTHON_LIB=`$PYTHON -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_lib(1).replace(os.sep,"/"))'`
316         fi
317         AC_MSG_RESULT([$PYTHON_LIB])
318         AC_ARG_VAR(PYTHON_LIB, [Directory to install python bindings in])
320         AC_MSG_CHECKING([for python libraries to link against])
321         case $host_os in
322         mingw* | pw32*)
323           PYTHON_LIBS=`$PYTHON -c 'import os,sys;print("-L"+os.path.join(sys.prefix,"libs").replace(os.sep,"/")+" -lpython"+sys.version[[:3]].replace(".",""))'` ;;
324         cygwin*)
325           PYTHON_LIBS=`$PYTHON -c 'import os,sys;print("-L"+os.path.join(sys.path[[3]],"config")+" -lpython"+sys.version[[:3]])'` ;;
326         *)
327           PYTHON_LIBS= ;;
328         esac
329         AC_SUBST(PYTHON_LIBS)
330         AC_MSG_RESULT([$PYTHON_LIBS])
332         AC_MSG_CHECKING([for python module extension])
333         dnl Usually ".so", but for example, Mac OS X uses ".dylib".
334         PYTHON_SO=`$PYTHON -c 'import distutils.sysconfig;print(distutils.sysconfig.get_config_vars("SO")[[0]])'`
335         AC_SUBST(PYTHON_SO)
336         AC_MSG_RESULT([$PYTHON_SO])
338         BINDINGS="$BINDINGS python"
339       else
340         AC_MSG_RESULT([no (install python-dev or python-devel package or similar)])
341         if test yes = "$with_python" ; then
342           AC_MSG_ERROR([Python.h not found])
343         fi
344       fi
345     fi
346   fi
349 if test no != "$with_php" ; then
350   dnl See comment for AC_PATH_PROGS(SWIG, ...).
351   AC_PATH_PROGS(PHP_CONFIG, ["${PHP_CONFIG-php-config}"], [])
352   AC_ARG_VAR(PHP_CONFIG, [php-config utility])
353   AC_ARG_VAR(PHP, [php interpreter (optional - only needed to run PHP testsuite with)])
354   if test -n "$PHP_CONFIG" ; then
355     AC_MSG_CHECKING([$PHP_CONFIG version])
356     version=`$PHP_CONFIG --version 2>/dev/null`
357     case $version in
358     5.*)
359       AC_MSG_RESULT([$version])
360       PHP_MAJOR_VERSION=5
361       ;;
362     7.*)
363       AC_MSG_RESULT([$version (not supported, SWIG doesn't support PHP7 yet)])
364       if test yes = "$with_php" ; then
365         AC_MSG_ERROR([SWIG doesn't yet support PHP7 ($PHP_CONFIG reports version $version)])
366       fi
367       with_php=no
368       ;;
369     *)
370       AC_MSG_RESULT([$version (not supported)])
371       if test yes = "$with_php" ; then
372         AC_MSG_ERROR([Only PHP5 is supported ($PHP_CONFIG reports version $version)])
373       fi
374       with_php=no
375       ;;
376     esac
377     AC_SUBST(PHP_MAJOR_VERSION)
379     if test no != "$with_php" ; then
380       AC_MSG_CHECKING([for PHP extension directory])
381       if test -z "$PHP_EXTENSION_DIR" ; then
382         PHP_EXTENSION_DIR=`$PHP_CONFIG --extension-dir`
383       fi
384       AC_MSG_RESULT([$PHP_EXTENSION_DIR])
385       AC_ARG_VAR(PHP_EXTENSION_DIR, [Directory to install PHP extensions in])
386     fi
388     if test no != "$with_php" ; then
389       PHP_INC=`$PHP_CONFIG --includes`
390       AC_SUBST(PHP_INC)
391       save_CPPFLAGS=$CPPFLAGS
392       CPPFLAGS="$CPPFLAGS $PHP_INC"
393       dnl One of SGI's SuSE boxes has php-config but no headers.
394       AC_CHECK_HEADER(zend.h, [], [
395         if test yes = "$with_php" ; then
396           AC_MSG_ERROR(['$PHP_CONFIG --includes' reports '$PHP_INC' but zend.h can't be included from there])
397         fi
398         with_php=no], [ ])
399       CPPFLAGS=$save_CPPFLAGS
400     fi
402     if test no != "$with_php" ; then
403       PHP_found=no
404       case $PHP in
405         "")
406           dnl PHP5's php-config has --php-binary which gives the path to the
407           dnl PHP interpreter.  Otherwise, try "$prefix/bin/php$N" then
408           dnl "$prefix/bin/php".
409           php_prefix=`$PHP_CONFIG --prefix 2>/dev/null`
410           php_bin=$php_prefix/bin/php
411           php_binary=
412           php_binary_major=
413           if $PHP_CONFIG --php_binary > /dev/null 2>&1 ; then
414             php_binary=`$PHP_CONFIG --php-binary 2>/dev/null`
415             case $php_binary in
416               *[0-9]) ;;
417               *) php_binary_major=$php_binary$PHP_MAJOR_VERSION ;;
418             esac
419           fi
420           for php in $php_binary $php_binary_major $php_bin$PHP_MAJOR_VERSION $php_bin ; do
421             AC_MSG_CHECKING([for $php])
422             for ac_exec_ext in '' $ac_executable_extensions; do
423               if $as_executable_p "$php$ac_exec_ext"; then
424                 dnl We get /usr/bin/php on Debian, which might be PHP7:
425                 dnl https://bugs.debian.org/819139
426                 if $php$ac_exec_ext -r 'exit(PHP_MAJOR_VERSION=='"$PHP_MAJOR_VERSION"'?0:1);' 2> /dev/null ; then
427                   PHP=$php$ac_exec_ext
428                   AC_MSG_RESULT([$PHP])
429                   PHP_found=yes
430                   break 2
431                 fi
432               fi
433             done
434             AC_MSG_RESULT([no])
435           done
436           ;;
437         [[\\/]* | ?:[\\/]*]) ;;
438         *)
439           dnl Handle PHP passed in without a path - e.g. PHP=php5
440           AC_PATH_PROGS(PHP, ["$PHP"], [])
441           test -n "$PHP" && PHP_found=yes
442           ;;
443       esac
444       if test yes != "$PHP_found" ; then
445         dnl Try phpN then php.  If the PHP interpreter can't be found, skip the
446         dnl PHP bindings tests.
447         AC_PATH_PROGS(PHP, [php$PHP_MAJOR_VERSION php], [])
448       fi
449       if test -z "$PHP" ; then
450         AC_MSG_WARN([No PHP interpreter found - PHP bindings tests will be skipped])
451         dnl The skiptest script just returns exit code 77.
452         PHP='$(top_srcdir)/skiptest'
453       else
454         AC_MSG_CHECKING([for PHP path separator])
455         PHP_PATH_SEPARATOR=`$PHP -r 'echo PATH_SEPARATOR;'`
456         AC_SUBST([PHP_PATH_SEPARATOR])
457         AC_MSG_RESULT([$PHP_PATH_SEPARATOR])
458       fi
460       case $host_os in
461       mingw* | pw32*)
462         dnl This is a bit of an informed guess, pending more information from
463         dnl someone who actually has mingw and wants to build the PHP bindings
464         dnl there.  FIXME.
465         PHP_LIBS="-L`$PHP_CONFIG --prefix` -lphp${PHP_MAJOR_VERSION}ts" ;;
466       cygwin*)
467         PHP_LIBS="-lphp${PHP_MAJOR_VERSION}lib" ;;
468       *)
469         PHP_LIBS= ;;
470       esac
471       AC_SUBST(PHP_LIBS)
472       BINDINGS="$BINDINGS php"
473     fi
474   fi
477 if test no != "$with_tcl" ; then
478   AC_PATH_PROGS(TCLSH, ["${TCLSH-tclsh}"], [])
479   AC_ARG_VAR(TCLSH, [Tcl interpreter])
480   if test -n "$TCLSH" ; then
481     dnl We need Tcl 8.1 or later for TCL_STUBS.
482     dnl Note: The bindings can easily be made to work with Tcl 8.0 (just
483     dnl don't pass -DUSE_TCL_STUBS when compiling) should you need that.
484     AC_MSG_CHECKING([$TCLSH version])
485     if echo 'if {$tcl_version < 8.1 } { exit 1 }'|$TCLSH 2> /dev/null ; then
486       tcl_version=`echo 'puts "$tcl_version"'|$TCLSH`
487       AC_MSG_RESULT([$tcl_version])
489       AC_ARG_VAR(TCL_LIB, [Directory to install Tcl files into])
490       if test -z "$TCL_LIB" ; then
491         [TCL_LIB=`echo 'foreach d $tcl_pkgPath {if {![regexp {/share(/|$)} $d]} {break}};puts $d'|$TCLSH`]
492       fi
493       AC_SUBST(TCL_LIB)
495       AC_ARG_VAR([TCL_INC], [Directory to include for Tcl headers])
496       if test -z "$TCL_INC" ; then
497         dnl ::tcl::pkgconfig was added in Tcl 8.5.
498         [TCL_INC=`echo 'puts [::tcl::pkgconfig get includedir,runtime]'|$TCLSH 2> /dev/null`]
499         if test -z "$TCL_INC" ; then
500           dnl Prior to Tcl 8.5, there's no good way to get
501           dnl "/usr/include/tcl8.N" directly - tclConfig.sh contains it, but
502           dnl there's no reliable way to locate that prior to Tcl 8.5!
503           dnl
504           dnl So first we find the prefix Tcl is installed under (e.g. "/usr")
505           dnl from the path on TCLSH (or default to /usr if the path doesn't
506           dnl contain "/bin/"), and then we append "/include/tcl" and
507           dnl $tcl_version.
508           tcl_prefix=`echo "$TCLSH"|sed 's!/bin/.*!!p;d'`
509           test -n "$tcl_prefix" || tcl_prefix=/usr
510           TCL_INC=${tcl_prefix}/include/tcl${tcl_version}
511           test -f "$TCL_INC/tcl.h" || TCL_INC=/usr/include
512         fi
513       fi
515       dnl Check that the headers are there (the tcl8.N-dev package
516       dnl may not be installed).
517       TCL_CPPFLAGS=
518       AC_MSG_CHECKING([for tcl.h for version $tcl_version])
519       if test -f "$TCL_INC/tcl.h" ; then
520         tcl_hdr_version=`awk '($1 == "#define" && $2 == "TCL_VERSION") {print $3}' "$TCL_INC/tcl.h"|sed 's/"//g'`
521         if test x"$tcl_hdr_version" = x"$tcl_version" ; then
522           AC_MSG_RESULT([$TCL_INC/tcl.h])
523           BINDINGS="$BINDINGS tcl8"
524           if test x"$TCL_INC" != x"/usr/include" ; then
525             TCL_CPPFLAGS="-I$TCL_INC"
526           fi
527         else
528           AC_MSG_RESULT([not found])
529           if test yes = "$with_tcl" ; then
530             AC_MSG_ERROR([Found tcl.h for version $tcl_hdr_version, not $tcl_version])
531           fi
532           TCLSH=
533         fi
534       else
535         AC_MSG_RESULT([not found])
536         if test yes = "$with_tcl" ; then
537           AC_MSG_ERROR([Can't find tcl.h])
538         fi
539         TCLSH=
540       fi
542       if test -n "$TCLSH" ; then
543         dnl Cygwin needs to link with -ltcl8.5 or similar.
544         TCL_LIBS=
545         case $host_os in
546         cygwin*)
547           AC_CHECK_LIB([tcl$tcl_version], [Tcl_Init],
548                        [TCL_LIBS="-ltcl$tcl_version"],
549                        [AC_MSG_ERROR([libtcl$tcl_version not found])])
550           ;;
551         *)
552           dnl ::tcl::pkgconfig was added in Tcl 8.5, but prior to 8.6 it isn't
553           dnl necessary to link against -ltclstub anyway.
554           [TCLCONFIG_SH=`echo 'puts [file join [::tcl::pkgconfig get libdir,runtime] tclConfig.sh]'|$TCLSH 2> /dev/null`]
555           if test -n "$TCLCONFIG_SH" && test -r "$TCLCONFIG_SH" ; then
556             eval "`grep ^TCL_STUB_LIB_SPEC= $TCLCONFIG_SH`"
557             TCL_LIBS=$TCL_STUB_LIB_SPEC
558           fi
559           TCL_CPPFLAGS="$TCL_CPPFLAGS -DUSE_TCL_STUBS" ;;
560         esac
561       fi
563       AC_SUBST(TCL_CPPFLAGS)
564       AC_SUBST(TCL_LIBS)
565     else
566       AC_MSG_RESULT([< 8.1 (too old)])
567       if test yes = "$with_tcl" ; then
568         AC_MSG_ERROR([$TCLSH too old (Tcl 8.1 or newer required)])
569       fi
570     fi
571   else
572     if test yes = "$with_tcl" ; then
573       AC_MSG_ERROR([tclsh not found])
574     fi
575   fi
578 if test no != "$with_csharp" ; then
579   csc_note=
580   AC_ARG_VAR(CSC, [CSharp compiler command])
581   if test -n "$CSC" ; then
582     AC_PATH_PROGS(CSC, ["$CSC"], [])
583   fi
584   if test -z "$CSC" ; then
585     dnl First we try cli-csc and mono-csc, which are used by Debian and Ubuntu
586     dnl as "alternatives" which can be mapped to the CSharp compiler the admin
587     dnl favours.
588     AC_PATH_PROGS(CSC, [cli-csc mono-csc], [])
589     if test -z "$CSC" ; then
590       dnl mcs is the Mono CSharp compiler, which is a unified compiler
591       dnl available from Mono 2.11 (and also the compiler in Mono 1.0, but
592       dnl that's no longer relevant).
593       AC_PATH_PROGS(CSC, [mcs], [])
594       if test -n "$CSC" ; then
595         dnl There are other tools called mcs (such as /usr/bin/mcs on Tru64),
596         dnl so we check that the mcs we found understands --version which is
597         dnl sufficient to distinguish mono's mcs from the Tru64 one.
598         AC_MSG_CHECKING([whether $CSC is from GNU Mono])
599         if (exec >&5 2>&5;$CSC --version </dev/null;exit $?) ; then
600           AC_MSG_RESULT(yes)
601         else
602           AC_MSG_RESULT(no)
603           CSC=
604           csc_note="$csc_note (found different mcs program)"
605         fi
606       fi
607     fi
608     if test -z "$CSC" ; then
609       dnl gmcs, smcs, and dmcs are versions of the Mono CSharp compiler
610       dnl targeting various runtime versions, deprecated in favour of mcs
611       dnl (checked for above) as of Mono 2.11.
612       dnl
613       dnl cscc is the Portable.NET CSharp compiler.
614       AC_PATH_PROGS(CSC, [dmcs smcs gmcs cscc], [])
615     fi
616     if test -z "$CSC" ; then
617       dnl csc is the Microsoft CSharp compiler.
618       AC_PATH_PROGS(CSC, [csc], [])
619       if test -n "$CSC" ; then
620         dnl Chicken (the Scheme-to-C compiler) includes a tool called csc so we
621         dnl check if the output from "csc -version" includes the word chicken
622         dnl which is sufficient to distinguish Chicken's csc from Microsoft's
623         dnl csc.exe.
624         AC_MSG_CHECKING([whether $CSC is for CSharp])
625         if $CSC -version 2>/dev/null|grep chicken > /dev/null ; then
626           AC_MSG_RESULT(no)
627           CSC=
628           csc_note="$csc_note (found Chicken csc program)"
629         else
630           AC_MSG_RESULT(yes)
631         fi
632       fi
633     fi
634   fi
636   if test -n "$CSC" ; then
637     AC_ARG_VAR(GACUTIL, [gacutil utility to use for CSharp bindings])
638     if test -n "$GACUTIL" ; then
639       AC_PATH_PROGS(GACUTIL, ["$GACUTIL"], [])
640     fi
641     if test -z "$GACUTIL" ; then
642       AC_PATH_PROGS(GACUTIL, [cli-gacutil gacutil ilgac], [])
643     fi
645     AC_ARG_VAR(SN, [sn utility to use for CSharp bindings])
646     if test -n "$SN" ; then
647       AC_PATH_PROGS(SN, ["$SN"], [])
648     fi
649     if test -z "$SN" ; then
650       AC_PATH_PROGS(SN, [cli-sn sn], [])
651     fi
652     if test -z "$SN" ; then
653       case $GACUTIL in
654       dnl Portable.net doesn't support strong naming yet and ilgac doesn't
655       dnl require assemblies to be strong named before adding them to the GAC.
656       *ilgac*) SN=/bin/true ;;
657       esac
658     fi
659     if test -n "$GACUTIL" -a -n "$SN" ; then
660       AC_MSG_CHECKING([whether the CSharp compiler works])
661       [echo 'class conftest { public static void Main() { System.Console.WriteLine("OK"); } }' > conftest.cs]
662       if (exec >&5 2>&5;$CSC /out:conftest.exe conftest.cs;exit $?) ; then
663         AC_MSG_RESULT(yes)
664         AC_MSG_CHECKING([whether CSharp programs can just be run])
665         if test OK = "`./conftest.exe 2> /dev/null`" ; then
666           AC_MSG_RESULT(yes)
667           RUN_CSHARP=
668         else
669           AC_MSG_RESULT(no)
670           AC_PATH_PROGS(MONO, ["${MONO-mono}"], [])
671           if test -z "$MONO" ; then
672             AC_PATH_PROGS(MONO, [ilrun], [])
673           fi
674           AC_ARG_VAR(MONO, [CSharp bytecode interpreter (optional - only needed to run CSharp testsuite with)])
675           if test -n "$MONO" ; then
676             AC_MSG_CHECKING([whether $MONO can run CSharp programs])
677             if test OK = "`$MONO ./conftest.exe 2> /dev/null`" ; then
678               AC_MSG_RESULT(yes)
679               RUN_CSHARP=mono
680             else
681               AC_MSG_RESULT([no - CSharp tests will be skipped])
682               RUN_CSHARP='\$(top_srcdir)/skiptest'
683             fi
684           else
685             AC_MSG_RESULT([not found - CSharp tests will be skipped])
686             RUN_CSHARP='\$(top_srcdir)/skiptest'
687           fi
688         fi
689         AC_SUBST(RUN_CSHARP)
691         AC_MSG_CHECKING([for extra flags for $GACUTIL])
692         GACUTIL_FLAGS='/package $(ASSEMBLY) /gacdir $(libdir) /root $(DESTDIR)$(libdir)'
693         case $GACUTIL in
694         *ilgac*) ;;
695         *)
696           dnl Microsoft's gacutil accepts fewer options than Mono's
697           $GACUTIL /\?|grep '\<Mono\>' >/dev/null || GACUTIL_FLAGS=
698           ;;
699         esac
700         AC_SUBST([GACUTIL_FLAGS])
701         if test -z "$GACUTIL_FLAGS" ; then
702           AC_MSG_RESULT([no])
703         else
704           AC_MSG_RESULT([$GACUTIL_FLAGS])
705         fi
707         BINDINGS="$BINDINGS csharp"
708       else
709         AC_MSG_RESULT(no)
710         if test yes = "$with_csharp" ; then
711           AC_MSG_ERROR([CSharp compiler $CSC doesn't work])
712         fi
713       fi
714     else
715       if test yes = "$with_csharp" ; then
716         if test -z "$GACUTIL" ; then
717           AC_MSG_ERROR([Mono gacutil not found])
718         elif test -z "$SN" ; then
719           AC_MSG_ERROR([Mono sn not found])
720         fi
721       fi
722     fi
723   else
724     if test yes = "$with_csharp" ; then
725       AC_MSG_ERROR([CSharp compiler not found$csc_note])
726     fi
727   fi
730 JAVA_CPPFLAGS=
731 if test no != "$with_java" ; then
732   AC_PATH_PROGS(JAVA, ["${JAVA-java}"], [],
733         [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
734   AC_PATH_PROGS(JAVAC, ["${JAVAC-javac}"], [],
735         [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
736   AC_PATH_PROGS(JAR, ["${JAR-jar}"], [],
737         [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
738   AC_ARG_VAR(JAVA, [Java interpreter command])
739   AC_ARG_VAR(JAVAC, [Java compiler command])
740   AC_ARG_VAR(JAR, [java jar utility])
741   AC_ARG_VAR(JAVA_HOME, [Pathname of the directory where the JDK is installed])
742   AC_ARG_VAR(JDK_HOME, [Pathname of the directory where the JDK is installed])
743   AC_ARG_VAR(JNI_INCLUDE_DIR, [Pathname of the directory where jni.h is installed])
744   if test -n "$JAVA" -a -n "$JAVAC" -a -n "$JAR" ; then
745     dnl Eric says:
746     dnl  The JNI library *requires* "Java 2", which is 1.2 or better.
747     dnl
748     dnl So checking for jni.h presumably implicitly checks we have "Java 2".
749     dnl Note: jni.h #defines JNI_VERSION_1_[1246] (but not 3 or 5 it seems).
750     dnl So we could check for one of these if we want to check for a particular
751     dnl JDK version...
752     java_ok=no
753     AC_CHECK_HEADER([jni.h], [java_ok=yes], [
754       dnl We need to look for jni.h in /usr/lib/jvm/java-gcj/include on some
755       dnl Debian and Ubuntu boxes at least.  And on Mac OS X, jni.h lives
756       dnl in /System/Library/Frameworks/JavaVM.framework/Headers.
757       SAVE_CPPFLAGS=$CPPFLAGS
758       real_javac=$JAVAC
759       dnl Avoid endlessly traversing if there's a symlink loop.
760       for count in 1 2 3 4 5 6 7 8 9 ; do
761         r=`readlink "$real_javac"`
762         test -n "$r" || break
763         real_javac=$r
764       done
765       dnl Translate ".../bin/javac" to ".../include".
766       [rel_jnidir=`echo "$real_javac"|sed 's!/[^/]*/[^/]*$!/include!'`]
767       for jnidir in \
768           $JNI_INCLUDE_DIR \
769           ${JAVA_HOME+"$JAVA_HOME/include"} \
770           ${JDK_HOME+"$JDK_HOME/include"} \
771           "$rel_jnidir" \
772           /System/Library/Frameworks/JavaVM.framework/Headers ; do
773         CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
774         AC_MSG_CHECKING([for jni.h in $jnidir])
775         if test -f "$jnidir/jni.h" ; then
776           AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
777           if test yes = $java_ok ; then
778             AC_MSG_RESULT([yes])
779             JAVA_CPPFLAGS=-I$jnidir
780             break
781           fi
783           dnl Sun's JDK requires the user to pass an extra -I for a
784           dnl subdirectory named after the host_os.  Sadly we seem to
785           dnl need to hardcode a list of the platform names.
786           jni_host_os=
787           case $host_os in
788             linux*)
789               jni_host_os=linux ;;
790             solaris*)
791               jni_host_os=solaris ;;
792             mingw* | pw32*)
793               jni_host_os=win32 ;;
794           esac
795           if test -n "$jni_host_os" ; then
796             CPPFLAGS="$CPPFLAGS -I$jnidir/$jni_host_os"
797             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
798             if test yes = $java_ok ; then
799               AC_MSG_RESULT([yes, requires additional -I$jnidir/$jni_host_os])
800               JAVA_CPPFLAGS="-I$jnidir -I$jnidir/$jni_host_os"
801               break
802             fi
803           fi
804           AC_MSG_RESULT([found, but not usable])
806           CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
807         else
808           AC_MSG_RESULT([no])
809         fi
810       done
811       CPPFLAGS=$SAVE_CPPFLAGS
812       test noyes = $java_ok$with_java && AC_MSG_ERROR([jni.h not found])
813       ], [ ])
814     AC_SUBST(JAVA_CPPFLAGS)
815     if test yes = $java_ok ; then
816       AC_MSG_CHECKING([for Java path separator])
817       [echo 'public class conftest { public static void main(String[] args) { System.out.println(System.getProperty("path.separator")); } }' > conftest.java]
818       if (exec >&5 2>&5;$JAVAC conftest.java;exit $?) ; then
819         JAVA_PATHSEP=`$JAVA conftest 2>&5`
820         AC_SUBST(JAVA_PATHSEP)
821         if test -n "$JAVA_PATHSEP" ; then
822           AC_MSG_RESULT($JAVA_PATHSEP)
823           BINDINGS="$BINDINGS java"
824         else
825           AC_MSG_RESULT([failed to run test program])
826           java_ok=no
827         fi
828       else
829         AC_MSG_RESULT([failed to compile test program])
830         java_ok=no
831       fi
832       if test no = "$java_ok" ; then
833         test yes = "$with_java" && AC_MSG_ERROR([Couldn't compile and run a simple Java test program])
834       fi
835     fi
836   else
837     if test yes = "$with_java" ; then
838       if test -z "$JAVA" ; then
839         AC_MSG_ERROR([java not found])
840       elif test -z "$JAVAC" ; then
841         AC_MSG_ERROR([javac not found])
842       elif test -z "$JAR" ; then
843         AC_MSG_ERROR([jar not found])
844       fi
845     fi
846   fi
849 if test no != "$with_ruby" ; then
850   dnl See comment for AC_PATH_PROGS(SWIG, ...).
851   if test -n "$RUBY" ; then
852     AC_PATH_PROGS(RUBY, ["$RUBY"], [])
853   else
854     AC_PATH_PROGS(RUBY, [ruby1.8 ruby], [])
855   fi
856   AC_ARG_VAR(RUBY, [Ruby interpreter])
857   if test -n "$RUBY" ; then
858     dnl Require Ruby 1.8 or newer.  Paul says:
859     dnl  I'm using 1.8.4.  I imagine anything in the 1.8.x series will be fine,
860     dnl  not sure about 1.6 but hardly anyone uses <1.8.
861     dnl
862     dnl Brief testing with Ruby 1.6.8 show the bindings probably work there,
863     dnl but smoketest.rb doesn't because the test/unit module isn't available.
864     AC_MSG_CHECKING([$RUBY version])
865     dnl RUBY_VERSION works with 1.6.  Once we've checked we have at least 1.8
866     dnl we can safely use RbConfig below (RbConfig requires Ruby 1.8; Config
867     dnl gives a deprecation warning with Ruby 1.9.3).
868     version=`$RUBY -e 'print RUBY_VERSION' 2>/dev/null`
869     case $version in
870     "")
871       AC_MSG_RESULT([\$RUBY -e 'print RUBY_VERSION' didn't work])
872       if test yes = "$with_ruby" ; then
873         AC_MSG_ERROR([Working Ruby interpreter not found])
874       fi
875       RUBY=
876       ;;
877     [0.*|1.[0-7]|1.[0-7].*])
878       AC_MSG_RESULT([$version (too old)])
879       if test yes = "$with_ruby" ; then
880         AC_MSG_ERROR([Only Ruby 1.8 or newer is supported ($RUBY is $version)])
881       fi
882       RUBY=
883       ;;
884     esac
885     if test -n "$RUBY" ; then
886       AC_MSG_RESULT([$version])
887       AC_ARG_VAR(RUBY_INC, [Directory where ruby.h can be found])
888       if test -z "$RUBY_INC" ; then
889         dnl Ruby 1.9 added rubyhdrdir; for older Ruby we use archdir.
890         [RUBY_INC=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyhdrdir"] || RbConfig::CONFIG["archdir"]'`]
891       fi
892       AC_SUBST(RUBY_INC)
893       dnl Check that ruby.h is there, which is a good way to check that
894       dnl the appropriate ruby-dev package has been installed.
895       AC_MSG_CHECKING([for $RUBY_INC/ruby.h])
896       if test -f "$RUBY_INC/ruby.h" ; then
897         AC_MSG_RESULT(yes)
899         AC_MSG_CHECKING([for ruby/io.h])
900         rm -f ruby/rubyio.h
901         if test -f "$RUBY_INC/ruby/io.h" ; then
902           AC_MSG_RESULT(yes)
904           dnl In a VPATH build, the ruby subdirectory won't exist the first
905           dnl time.
906           test -d ruby || mkdir ruby
908           dnl Newer Ruby has ruby/io.h - older has rubyio.h.  Ruby doesn't
909           dnl seem to provide any way to generate code which works with
910           dnl both (and even the version number isn't a discriminator as
911           dnl Debian etch has 1.9 without ruby/io.h).  The SWIG version
912           dnl we're currently using assumes rubyio.h exists and luckily
913           dnl it includes it with "", so we can just drop a rubyio.h
914           dnl wrapper alongside ruby/xapian_wrap.cc.
915           echo '#include <ruby/io.h>' > ruby/rubyio.h
916         else
917           AC_MSG_RESULT(no)
918         fi
920         AC_ARG_VAR(RUBY_INC_ARCH, [Directory where ruby/config.h can be found (needed from Ruby 1.9)])
921         if test -z "$RUBY_INC_ARCH" ; then
922           dnl Ruby 2.0 and later Ruby 1.9 have rubyarchhdrdir; for early 1.9,
923           dnl use rubyhdrdir+"/"+arch.
924           [RUBY_INC_ARCH=`$RUBY -rrbconfig -e 'd = RbConfig::CONFIG["rubyhdrdir"]; print RbConfig::CONFIG["rubyarchhdrdir"] || (d ? d + "/" + RbConfig::CONFIG["arch"] : "")'`]
925           dnl Ruby 1.8 has no rubyhdrdir, so set RUBY_INC_ARCH=RUBY_INC.
926           test x"$RUBY_INC_ARCH" != x || RUBY_INC_ARCH=$RUBY_INC
927         fi
928         AC_SUBST(RUBY_INC_ARCH)
930         AC_ARG_VAR(RUBY_LIB, [Directory to install ruby files into])
931         if test -z "$RUBY_LIB" ; then
932           [RUBY_LIB=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitelibdir"]'`]
933         fi
934         AC_SUBST(RUBY_LIB)
936         AC_ARG_VAR(RUBY_LIB_ARCH, [Directory to install ruby binary modules into])
937         if test -z "$RUBY_LIB_ARCH" ; then
938           [RUBY_LIB_ARCH=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitearchdir"]'`]
939         fi
940         AC_SUBST(RUBY_LIB_ARCH)
942         RUBY_LIBS=
943         if test unsupported = "$allow_undefined_flag" ; then
944           dnl For Microsoft Windows and a few other platforms.
945           [RUBY_LIBS=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["LIBRUBYARG"]'`]
946         fi
947         AC_SUBST(RUBY_LIBS)
949         if test yes = "$enable_documentation" ; then
950           if test -n "$RDOC" ; then
951             AC_PATH_PROGS(RDOC, ["$RDOC"], [])
952           else
953             dnl Try replace the *last* 'ruby' with 'rdoc'.
954             rdoc_best_guess=`echo "$RUBY"|sed 's,\(.*\)ruby,\1rdoc,'`
955             AC_PATH_PROGS(RDOC, ["$rdoc_best_guess"], [])
956             if test -z "$RDOC"; then
957               AC_PATH_PROGS(RDOC, [rdoc], [])
958               test -n "$RDOC" || RDOC="$MISSING rdoc"
959             fi
960           fi
961         fi
963         BINDINGS="$BINDINGS ruby"
964       else
965         AC_MSG_RESULT([no (install ruby-dev or ruby-devel package or similar)])
966         if test yes = "$with_ruby" ; then
967           AC_MSG_ERROR([ruby.h not found])
968         fi
969       fi
970       RUBY_DLEXT=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG[["DLEXT"]]'`
971       AC_SUBST(RUBY_DLEXT)
972     fi
973   fi
976 if test no != "$with_perl" ; then
977   AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
978   AC_ARG_VAR(PERL, [perl interpreter])
979   if test -n "$PERL" ; then
980     AC_ARG_VAR(PERL_INC, [Directory to include for XSUB,h and other Perl API headers])
981     if test -z "$PERL_INC" ; then
982       PERL_INC=`$PERL -MConfig -e 'print $Config{archlibexp}, "/CORE"'`
983     fi
984     AC_SUBST(PERL_INC)
986     AC_ARG_VAR(PERL_ARCH, [Directory to install architecture-dependent perl files into])
987     if test -z "$PERL_ARCH" ; then
988       PERL_ARCH=`$PERL -MConfig -e 'print $Config{installsitearch}'`
989     fi
990     AC_SUBST(PERL_ARCH)
992     AC_ARG_VAR(PERL_LIB, [Directory to install architecture-independent perl files into])
993     if test -z "$PERL_LIB" ; then
994       PERL_LIB=`$PERL -MConfig -e 'print $Config{installsitelib}'`
995     fi
996     AC_SUBST(PERL_LIB)
998     AC_ARG_VAR(PERL_SO, [for perl module extension])
999     if test -z "$PERL_SO" ; then
1000       PERL_SO=`$PERL -MConfig -e 'print ".", $Config{dlext}'`
1001     fi
1002     AC_SUBST(PERL_SO)
1004     if test -z "$PERL_XAPIAN_VERSION" ; then
1005       dnl snapshot versions look like 1.2.3_git123 or 1.2.3_svn14971
1006       case $PACKAGE_VERSION in
1007       *_git*)
1008         PERL_XAPIAN_VERSION=`echo "$PACKAGE_VERSION"|sed 's/_git/./'` ;;
1009       *_svn*)
1010         PERL_XAPIAN_VERSION=`echo "$PACKAGE_VERSION"|sed 's/_svn/./'` ;;
1011       *)
1012         PERL_XAPIAN_VERSION=$PACKAGE_VERSION.0 ;;
1013       esac
1014     fi
1015     AC_SUBST(PERL_XAPIAN_VERSION)
1017     BINDINGS="$BINDINGS perl"
1018   else
1019     if test yes = "$with_perl" ; then
1020       AC_MSG_ERROR([perl not found])
1021     fi
1022   fi
1025 if test no != "$with_lua" ; then
1026   AC_PATH_PROGS(LUA, ["${LUA-lua}"], [])
1027   AC_ARG_VAR(LUA, [lua interpreter])
1028   if test -n "$LUA" ; then
1029     dnl We need Lua 5.1 or later.
1030     AC_MSG_CHECKING([$LUA version])
1031     lua_version=`$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' 2>&AS_MESSAGE_LOG_FD`
1033     case $lua_version in
1034     [[01234]].*|5.0|5.0.*)
1035       AC_MSG_RESULT([$lua_version < 5.1 (too old)])
1036       if test yes = "$with_lua" ; then
1037         AC_MSG_ERROR([$LUA too old (Lua 5.1 or newer required)])
1038       fi
1039       LUA=
1040       ;;
1041     "")
1042       AC_MSG_RESULT([\$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' didn't work])
1044       if test yes = "$with_lua" ; then
1045         AC_MSG_ERROR([Working Lua interpreter not found])
1046       fi
1047       LUA=
1048       ;;
1049     esac
1051     if test -n "$LUA" ; then
1052       AC_MSG_RESULT([$lua_version])
1054       AC_ARG_VAR([LUA_LIB], [Directory to install compiled Lua modules into])
1055       AC_ARG_VAR([LUA_SO], [Extension for compiled Lua modules (e.g. LUA_SO=.so)])
1056       AC_MSG_CHECKING([for directory to install compiled Lua modules into])
1057       if test -z "$LUA_LIB" -o -z "$LUA_SO" ; then
1058         lua_cpath=`$LUA -e 'require("package") print(package.cpath)'`
1059         dnl Look for the first absolute path in lua_cpath which has leaf
1060         dnl "?.<ext>" and put the directory part into lua_lib and <ext> into
1061         dnl lua_so.  If LUA_SO was specified by the user, only consider
1062         dnl entries where <ext> matches LUA_SO.
1063         lua_lib=
1064         lua_so=
1065         case $LUA_SO in
1066           "")
1067            [lua_so_pat='[a-zA-Z][a-zA-Z]*'] ;;
1068           .*)
1069             dnl If LUA_SO has a leading '.', remove it.
1070             lua_so_pat=`AS_ECHO("$LUA_SO")|sed 's/^\.//'` ;;
1071           *)
1072             dnl If LUA_SO was specified without a leading '.', add one to the
1073             dnl value substituted into Makefile.in.
1074             lua_so_pat=$LUA_SO
1075             LUA_SO=.$LUA_SO
1076             ;;
1077         esac
1078         while test x"$lua_cpath" != x ; do
1079           [lua_lib=`expr X"$lua_cpath" : X'\([^;]*\)'`]
1080           lua_so=.`expr X"$lua_lib" : X'/.*/?\.\('"$lua_so_pat"'\)$'`
1081           case $lua_so in
1082             .|.lua)
1083               dnl If someone has foolishly put ?.lua in cpath, ignore them.
1084               lua_lib=
1085               ;;
1086             *)
1087               lua_lib=`expr X"$lua_lib" : X'\(/.*\)/?\.'"$lua_so_pat"'$'`
1088               break ;;
1089           esac
1090           [lua_cpath=`expr X"$lua_cpath" : X'[^;]*;*\(.*\)'`]
1091         done
1092         test -n "$LUA_LIB" || LUA_LIB=$lua_lib
1093         test -n "$LUA_SO" || LUA_SO=$lua_so
1094       fi
1095       if test -z "$LUA_LIB"; then
1096         AC_MSG_RESULT([not found])
1097       else
1098         AC_MSG_RESULT([$LUA_LIB])
1099       fi
1100       AC_SUBST([LUA_LIB])
1102       AC_MSG_CHECKING([for extension to use for compiled Lua modules])
1103       if test -z "$LUA_SO"; then
1104         AC_MSG_RESULT([not found])
1105       else
1106         AC_MSG_RESULT([$LUA_SO])
1107       fi
1108       AC_SUBST([LUA_SO])
1110       AC_MSG_CHECKING([for Lua header files])
1111       AC_ARG_VAR([LUA_INC], [Directory to include for lua headers])
1112       if test -z "$LUA_INC" ; then
1113         dirs="/usr/include/lua$lua_version /usr/local/include/lua$lua_version"
1114         for i in $dirs ; do
1115           if test -r "$i/lua.h"; then
1116             LUA_INC=$i
1117             break
1118           fi
1119         done
1120       fi
1122       if test -z "$LUA_INC" ; then
1123         AC_MSG_RESULT([not found])
1124       else
1125         AC_MSG_RESULT([$LUA_INC])
1126         BINDINGS="$BINDINGS lua"
1127         LUA_CPPFLAGS="-I$LUA_INC"
1128       fi
1129       AC_SUBST([LUA_CPPFLAGS])
1130     fi
1131   else
1132     if test yes = "$with_lua" ; then
1133       AC_MSG_ERROR([lua not found])
1134     fi
1135   fi
1138 AC_SUBST(BINDINGS)
1140 dnl Set flags to control warnings (enable more, or disable annoying ones)
1141 dnl and other compiler specific flags.
1142 SWIG_CXXFLAGS=
1143 JAVA_CXXFLAGS=
1144 if test yes = "$GXX" ; then
1145   dnl Python itself is compiled with -fno-strict-aliasing, and it appears
1146   dnl it's safest to follow this lead when compiling the SWIG generated
1147   dnl interface code.  E.g.:
1148   dnl   http://article.gmane.org/gmane.comp.gcc.devel/74692
1149   dnl The code SWIG generates for other languages seems to have similar
1150   dnl issues too, so just turn this on for all of them.
1151   dnl
1152   dnl There's no need to check -fno-strict-aliasing is supported as it works
1153   dnl with GCC 2.95 and we don't support anything older.
1154   SWIG_CXXFLAGS="-fno-strict-aliasing"
1156   dnl We need to explicitly link against -lstdc++ on OpenBSD (discovered
1157   dnl on OpenBSD 3.7 with GCC 3.3.5 but this appears to be due to a
1158   dnl deliberate decision on the part of OpenBSD developers).  Luckily
1159   dnl we can just always specify -lstdc++ explicitly if GCC is the
1160   dnl compiler and libtool will eliminate the duplicate on other
1161   dnl platforms.
1162   XAPIAN_LIBS="$XAPIAN_LIBS -lstdc++"
1164   dnl Intel's C++ compiler is identified as "GXX" by autoconf's test - check
1165   dnl which we actually have.
1166   AC_EGREP_CPP(yes,
1167     [#ifdef __INTEL_COMPILER
1168      yes
1169      #endif
1170     ],
1171     [
1172       dnl Intel's compiler:
1173       dnl
1174       dnl -w1 stops the avalanche of uninteresting "remark" messages.
1175       dnl -wd... disables warnings which don't have good code workarounds.
1176       dnl
1177       dnl Swig generated code gives lots of unused and uninitialized warnings.
1178       dnl They're non-harmful, so suppress them.
1179       SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -w1 -wd177,1572"
1180       dnl The Java JNI wrappers have a few unused variables.
1181       JAVA_CXXFLAGS="-Wall -w1 -wd177,1572"
1182     ],
1183     [
1184       dnl GCC:
1185       dnl
1186       dnl Swig generated code gives lots of unused and uninitialized warnings.
1187       dnl They're non-harmful, so suppress them.
1188       SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -Wno-unused -Wno-uninitialized"
1189       AC_MSG_CHECKING([whether to use -fvisibility=hidden])
1190       dnl To be robust, we check both that -fvisibility=hidden is recognised
1191       dnl and that SWIG will have added the visibility attributes.
1192       dnl The GCC wiki says it's supported from GCC 4.0 onwards.  GCC 3.4
1193       dnl also supports -fvisibility, but doesn't allow visibility to be
1194       dnl specified for classes, which probably breaks throwing exception
1195       dnl classes from the library.  We want that to work, so only switch
1196       dnl this on for GCC 4.0 onwards.
1197       SAVE_CXXFLAGS=$CXXFLAGS
1198       CXXFLAGS="-fvisibility=hidden"
1199       AC_TRY_COMPILE([], [
1200 #if __GNUC__ >= 4
1201   /* GCC supports -fvisibility and allows specifying visibility for classes. */
1202 #else
1203   choke me
1204 #endif
1206                      AC_MSG_RESULT(yes)
1207                      SWIG_CXXFLAGS="$SWIG_CXXFLAGS -fvisibility=hidden"
1208                      ,
1209                      AC_MSG_RESULT(no))
1210       CXXFLAGS=$SAVE_CXXFLAGS
1211       dnl The Java JNI wrappers have a few unused variables.
1212       JAVA_CXXFLAGS="-Wall -W -Wno-unused"
1213     ])
1215 AC_SUBST(SWIG_CXXFLAGS)
1216 AC_SUBST(JAVA_CXXFLAGS)
1218 dnl Restore CXXFLAGS to those the user specified or autoconf defaulted to.
1219 CXXFLAGS=$save_CXXFLAGS
1221 dnl Required for auto regeneration to work in a combined maintainer-mode tree.
1222 : ${AUTOM4TE=autom4te}
1223 AC_SUBST([AUTOM4TE])
1225 AC_CONFIG_FILES([Makefile
1226  xapian-version.h
1227  python/Makefile python/version.i
1228  php/Makefile
1229  java/Makefile java/native/Makefile java/org/xapian/Makefile
1230  java/org/xapian/errors/Makefile java/org/xapian/examples/Makefile
1231  java-swig/Makefile
1232  tcl8/Makefile tcl8/pkgIndex.tcl
1233  csharp/Makefile csharp/AssemblyInfo.cs
1234  ruby/Makefile
1235  perl/Makefile perl/util.i
1236  lua/Makefile
1237  xapian-bindings.spec
1238  ])
1239 AC_OUTPUT
1241 echo ""
1242 if test -z "$BINDINGS" ; then
1243   echo "*** Not found the required tools for building bindings for any"
1244   echo "*** supported language!"
1245   echo "***"
1246   echo "*** You may need to install -dev or -devel packages for the languages"
1247   echo "*** you want to build bindings for."
1248   echo "***"
1249   echo "*** For details of how to point configure at tools not on PATH, see:"
1250   echo "***     ./configure --help"
1251 else
1252   echo "*** Building bindings for languages:" $BINDINGS
1254 echo ""
1255 if test "$COMPAT_VERSION" != "$XAPIAN_VERSION" ; then
1256   release_series=[`echo "$COMPAT_VERSION"|sed 's/[0-9][0-9]*$//'`]
1257   case $XAPIAN_VERSION in
1258   $release_series*) ;;
1259   *)
1260     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.])
1261     ;;
1262   esac
1263   dnl 0.8.2 was the first version which set XAPIAN_VERSION
1264   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.])