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
7 m4_define([project_version], [1.4.19])
8 AC_INIT([xapian-bindings], project_version, [https://xapian.org/bugs])
10 dnl See xapian-core's HACKING document for details of the reasons for required
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.
25 dnl NB we must do this *BEFORE* LT_INIT since that is what checks
26 dnl MACOSX_DEPLOYMENT_TARGET.
28 OVERRIDE_MACOSX_DEPLOYMENT_TARGET=
30 *86*-darwin8*|*-darwin[[912]]*)
31 dnl On 10.5 or later, and 10.4 on x86, the deployment target defaults to the
32 dnl OS version, so we don't need to override on these.
35 case $MACOSX_DEPLOYMENT_TARGET in
37 OVERRIDE_MACOSX_DEPLOYMENT_TARGET=10.3 ;;
39 AC_MSG_WARN([Overriding MACOSX_DEPLOYMENT_TARGET from $MACOSX_DEPLOYMENT_TARGET to 10.3])
40 OVERRIDE_MACOSX_DEPLOYMENT_TARGET=10.3 ;;
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.
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).
60 if test unsupported = "$allow_undefined_flag" ; then
61 NO_UNDEFINED=-no-undefined
63 AC_SUBST(NO_UNDEFINED)
65 dnl Checks for programs.
68 # Checked: freebsd8.0 openbsd4.6 solaris2.9 solaris2.10
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
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
85 dnl Run tests using the C++ compiler.
88 dnl Probe for any options needed to enable C++11 support.
89 AX_CXX_COMPILE_STDCXX_11
91 dnl Check for xapian-core.
93 [xapian-config]regexp(project_version,
94 [^\([0-9]*\.[0-9]*[13579]\)\..*$], [-\1]))
103 dnl If we're building against an uninstalled xapian-core, xapian-config
104 dnl --libs will give an error.
105 if $XAPIAN_CONFIG --libs >/dev/null 2>/dev/null ; then
109 dnl $XAPIAN_LIBS may have some options first, so grab the last argument,
110 dnl which should be the .la file.
115 dnl Make sure the path is absolute.
116 case $INTREE_DYLD_PATH in
118 *) INTREE_DYLD_PATH=`pwd`/$INTREE_DYLD_PATH ;;
120 dnl Add .libs or equivalent.
121 INTREE_DYLD_PATH=`echo "$INTREE_DYLD_PATH"|sed 's,\(.*/\).*,\1,'`$lt_cv_objdir
122 AC_SUBST([INTREE_DYLD_PATH])
126 AM_CONDITIONAL(NEED_JNILIB_EXT, test yes = "$NEED_JNILIB_EXT")
127 AM_CONDITIONAL(NEED_INTREE_DYLD, test yes = "$NEED_INTREE_DYLD")
129 dnl We want XAPIAN_CXXFLAGS to be used for configure tests, so add it to
130 dnl CXXFLAGS for the duration of configure.
131 save_CXXFLAGS=$CXXFLAGS
132 CXXFLAGS="$CXXFLAGS $XAPIAN_CXXFLAGS"
134 dnl COMPAT_VERSION is the version of xapian-core that "matches" our version.
135 dnl We allow for bindings being version 0.8.5.1 while xapian-core is 0.8.5.
136 dnl COMPAT_VERSION also ignores any _git123 suffix which snapshots will have.
137 COMPAT_VERSION=[`echo "$PACKAGE_VERSION"|sed 's/^\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`]
138 AC_SUBST(COMPAT_VERSION)
140 dnl VERSION_NO_SNAPSHOT simply has any _git123 suffix removed.
141 VERSION_NO_SNAPSHOT=[`echo "$PACKAGE_VERSION"|sed 's/_.*$//'`]
142 AC_SUBST(VERSION_NO_SNAPSHOT)
144 dnl We only need to set docdir for compatibility with autoconf < 2.60 - this
145 dnl code can be removed once we move to requiring autoconf 2.60 or newer.
146 test -n "$docdir" || docdir='${datadir}/doc/${PACKAGE_TARNAME}'
149 AC_ARG_ENABLE(visibility,
150 [AS_HELP_STRING([--disable-visibility], [disable use of GCC visibility])],
151 [case ${enableval} in
153 *) AC_MSG_ERROR([bad value ${enableval} for --disable-visibility]) ;;
156 dnl Only probe for SWIG and enable SWIG rules in makefiles if
157 dnl configure --enable-maintainer-mode is used.
160 AC_ARG_ENABLE(documentation,
161 [AS_HELP_STRING([--enable-documentation], [enable make rules to rebuild shipped documentation [default=maintainer-mode]])],
162 [case ${enableval} in
164 *) AC_MSG_ERROR([bad value ${enableval} for --enable-documentation]) ;;
166 test -z "$enable_documentation" && enable_documentation=$USE_MAINTAINER_MODE
167 AM_CONDITIONAL(DOCUMENTATION_RULES, test x"$enable_documentation" = xyes)
168 AM_CONDITIONAL(MAINTAINER_NO_DOCS, test x"$USE_MAINTAINER_MODE$enable_documentation" = xyesno)
170 if test yes = "$enable_documentation" ; then
171 dnl Check for rst2html. (Needed to make HTML from reStructuredText format)
172 dnl Also look for rst2html.py, which archlinux reportedly installs it as.
173 AC_PATH_PROGS(RST2HTML, [rst2html rst2html.py], [])
174 AC_ARG_VAR([RST2HTML], [reST to HTML convertor])
175 test -z "$RST2HTML" && AC_MSG_ERROR([rst2html is required to build documentation (try package python-docutils)])
178 if test x$USE_MAINTAINER_MODE = xyes; then
179 dnl Check for swig - this does most of the work for the bindings.
180 dnl AC_PATH_PROGS only honours an already set SWIG if it's a full
181 dnl path. Listing it in the "to be searched" list like this allows
182 dnl ./configure SWIG=myswig to work.
183 swigoverridden=${SWIG+yes}
184 AC_PATH_PROGS(SWIG, ["${SWIG-swig}"], [])
185 AC_ARG_VAR(SWIG, [SWIG interface generator (only needed by Xapian developers)])
186 if test -z "$SWIG" ; then
187 AC_MSG_ERROR([Can't find SWIG utility])
189 dnl Check for new enough SWIG.
191 dnl 3.0.6 fixes compiling the Perl bindings under C++11 ("seed" macro issue).
192 dnl 3.0.8 fixes conversion of integers large than an int in Python 3.
193 dnl 3.0.9 fixes generation of unnecessary _swigconstant helpers for Python.
194 dnl 3.0.12 fixes segfault on unload with PHP 7.1
195 v=`$SWIG -version 2>&1|sed 's/^SWIG Version \([[0-9\.]]*\).*/\1/p;d'`
197 [[012].*|3.0.?|3.0.1[01]|""])
198 msg="SWIG >= 3.0.12 required (you have ${v:-an unknown version})"
199 if test -n "$swigoverridden" ; then
200 dnl If SWIG was explicitly set, make this a warning only.
206 SWIG_FLAGS=`$XAPIAN_CONFIG --swigflags`
210 for a in $SWIG_FLAGS ; do
213 d=`echo "x$a"|sed 's/^x-I//'`
214 dnl Quote each entry in XAPIAN_HEADER_DIRS with "".
215 XAPIAN_HEADER_DIRS=$XAPIAN_HEADER_DIRS' "'$d'"'
216 for f in "$d/"*.h "$d/xapian/*.h" ; do
217 if test -f "$f" ; then
218 XAPIAN_HEADERS="$XAPIAN_HEADERS $f"
224 AC_SUBST([XAPIAN_HEADER_DIRS])
225 AC_SUBST([XAPIAN_HEADERS])
227 dnl Need perl in maintainer mode to generate the except.i file for python.
228 AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
229 test -z "$PERL" && AC_MSG_ERROR([perl is required in maintainer mode])
230 dnl Need doxygen in maintainer mode to convert C++ doxygen comments to Python
232 AC_PATH_PROG(DOXYGEN, doxygen, [])
233 AC_ARG_VAR([DOXYGEN], [Doxygen documentation system])
234 test -z "$DOXYGEN" && AC_MSG_ERROR([doxygen is required to build documentation])
238 AC_HELP_STRING([--with-python], [enable Python 2 bindings]),
243 AS_HELP_STRING([--with-python3], [enable Python 3 bindings]),
248 AC_HELP_STRING([--with-php], [enable PHP 5 bindings]),
253 AS_HELP_STRING([--with-php7], [enable PHP 7 bindings]),
258 AS_HELP_STRING([--with-ruby], [enable Ruby bindings]),
263 AS_HELP_STRING([--with-tcl], [enable Tcl bindings]),
268 AS_HELP_STRING([--with-csharp], [enable CSharp bindings]),
273 AS_HELP_STRING([--with-java], [enable Java bindings]),
278 AS_HELP_STRING([--with-perl], [enable Perl bindings]),
283 AS_HELP_STRING([--with-lua], [enable Lua bindings]),
287 case $with_python$with_python3$with_php$with_php7$with_ruby$with_tcl$with_csharp$with_java$with_perl$with_lua in
289 dnl Default unspecified values to no.
290 test -z "$with_python" && with_python=no
291 test -z "$with_python3" && with_python3=no
292 test -z "$with_php" && with_php=no
293 test -z "$with_php7" && with_php7=no
294 test -z "$with_tcl" && with_tcl=no
295 test -z "$with_csharp" && with_csharp=no
296 test -z "$with_java" && with_java=no
297 test -z "$with_ruby" && with_ruby=no
298 test -z "$with_perl" && with_perl=no
299 test -z "$with_lua" && with_lua=no
305 if test no != "$with_python" ; then
306 dnl For backward compatibility:
307 : ${PYTHON2="$PYTHON"}
308 : ${PYTHON2_INC="$PYTHON_INC"}
309 : ${PYTHON2_LIB="$PYTHON_LIB"}
310 : ${PYTHON2_LIBS="$PYTHON_LIBS"}
311 : ${PYTHON2_SO="$PYTHON_SO"}
312 dnl See comment for AC_PATH_PROGS(SWIG, ...).
313 if test -n "$PYTHON2" ; then
314 AC_PATH_PROGS(PYTHON2, ["$PYTHON2"], [])
316 AC_PATH_PROGS(PYTHON2, [python2 python], [])
318 AC_ARG_VAR(PYTHON2, [Python 2 interpreter])
319 if test -n "$PYTHON2" ; then
320 dnl Require Python 2.6 or newer. Older versions are essentially
321 dnl unsupported upstream.
322 AC_MSG_CHECKING([$PYTHON2 version])
323 version=`$PYTHON2 -c 'import sys;print("%d.%d" % sys.version_info[[:2]])' 2>/dev/null`
325 [2.[6-9]*|2.[1-5][0-9]*])
326 AC_MSG_RESULT([$version])
329 AC_MSG_RESULT([$version (too new - use --with-python3 for Python 3 support)])
330 if test yes = "$with_python" ; then
331 AC_MSG_ERROR([Use --with-python3 for Python 3 support ($PYTHON2 is $version)])
336 AC_MSG_RESULT([$version (too old)])
337 if test yes = "$with_python" ; then
338 AC_MSG_ERROR([Only Python 2.6 or newer is supported ($PYTHON2 is $version)])
343 if test -n "$PYTHON2" ; then
344 if $PYTHON2 -c 'import distutils.sysconfig' 2>/dev/null ; then
345 PYTHON2_INC=`$PYTHON2 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_inc().replace(os.sep,"/"))'`
346 AC_SUBST(PYTHON2_INC)
348 if test yes = "$with_python" ; then
349 AC_MSG_ERROR([Couldn't import Python module distutils.sysconfig - you probably need to install a python-dev or python-devel package])
351 AC_MSG_WARN([Couldn't import Python module distutils.sysconfig - you probably don't have a python-dev or python-devel package installed])
356 AC_MSG_CHECKING([for python2 sphinx module])
357 if $PYTHON2 -c 'import sphinx;print(repr(sphinx.main))' >&5 2>&5 ; then
361 if test yes = "$with_python" ; then
362 AC_MSG_ERROR([Couldn't import sphinx module and call sphinx.main() for Python2 - try package python-sphinx])
366 if test -n "$PYTHON2" ; then
367 dnl Check that Python.h is there, which is a good way to check that
368 dnl the appropriate python-dev package has been installed.
369 AC_MSG_CHECKING([for $PYTHON2_INC/Python.h])
370 if test -f "$PYTHON2_INC/Python.h" ; then
372 AC_MSG_CHECKING([for directory to install python2 bindings in])
373 if test -z "$PYTHON2_LIB" ; then
374 PYTHON2_LIB=`$PYTHON2 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_lib(1).replace(os.sep,"/"))'`
376 AC_MSG_RESULT([$PYTHON2_LIB])
377 AC_ARG_VAR(PYTHON2_LIB, [Directory to install python2 bindings in])
379 AC_MSG_CHECKING([for python2 libraries to link against])
382 PYTHON2_LIBS=`$PYTHON2 -c 'import os,sys;print("-L"+os.path.join(sys.prefix,"libs").replace(os.sep,"/")+" -lpython"+sys.version[[:3]].replace(".",""))'` ;;
384 PYTHON2_LIBS=`$PYTHON2 -c 'import os,sys;print("-L"+os.path.join(sys.path[[3]],"config")+" -lpython"+sys.version[[:3]])'` ;;
388 AC_SUBST(PYTHON2_LIBS)
389 AC_MSG_RESULT([$PYTHON2_LIBS])
391 AC_MSG_CHECKING([for python2 module extension])
392 dnl Usually ".so", but for example, Mac OS X uses ".dylib".
393 PYTHON2_SO=`$PYTHON2 -c 'import distutils.sysconfig;print(distutils.sysconfig.get_config_vars("SO")[[0]])'`
395 AC_MSG_RESULT([$PYTHON2_SO])
396 BINDINGS="$BINDINGS python"
398 AC_MSG_RESULT([no (install python-dev or python-devel package or similar)])
399 if test yes = "$with_python" ; then
400 AC_MSG_ERROR([Python.h not found])
407 if test no != "$with_python3" ; then
408 dnl See comment for AC_PATH_PROGS(SWIG, ...).
409 if test -n "$PYTHON3" ; then
410 AC_PATH_PROGS(PYTHON3, ["$PYTHON3"], [])
412 AC_PATH_PROGS(PYTHON3, [python3 python], [])
414 AC_ARG_VAR(PYTHON3, [Python 3 interpreter])
415 if test -n "$PYTHON3" ; then
416 dnl Require Python 3.2 or newer, as that's the oldest version we can
417 dnl easily test with. If anyone's keen to support older versions, please
418 dnl test and send in any patches needed to get it to work.
419 AC_MSG_CHECKING([$PYTHON3 version])
420 version=`$PYTHON3 -c 'import sys;print("%d.%d" % sys.version_info[[:2]])' 2>/dev/null`
422 [3.[2-9]*|3.1[0-9]*|[4-9].*])
423 AC_MSG_RESULT([$version])
426 AC_MSG_RESULT([$version (too old)])
427 if test yes = "$with_python3" ; then
428 AC_MSG_ERROR([Only Python 3.2 or newer is supported ($python3 is $version)])
433 if test -n "$PYTHON3" ; then
434 if $PYTHON3 -c 'import distutils.sysconfig' 2>/dev/null ; then
435 PYTHON3_INC=`$PYTHON3 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_inc().replace(os.sep,"/"))'`
436 AC_SUBST(PYTHON3_INC)
438 if test yes = "$with_python3" ; then
439 AC_MSG_ERROR([Couldn't import Python module distutils.sysconfig - you probably need to install a python3-dev or python3-devel package])
441 AC_MSG_WARN([Couldn't import Python module distutils.sysconfig - you probably don't have a python3-dev or python3-devel package installed])
446 AC_MSG_CHECKING([for python3 sphinx module])
447 if $PYTHON3 -c 'import sphinx' >&5 2>&5 ; then
451 if test yes = "$with_python3" ; then
452 AC_MSG_ERROR([Couldn't import sphinx module for Python3 - try package python3-sphinx])
456 if test -n "$PYTHON3" ; then
457 dnl Check that Python.h is there, which is a good way to check that
458 dnl the appropriate python3-dev package has been installed.
459 AC_MSG_CHECKING([for $PYTHON3_INC/Python.h])
460 if test -f "$PYTHON3_INC/Python.h" ; then
462 AC_MSG_CHECKING([for directory to install python3 bindings in])
463 if test -z "$PYTHON3_LIB" ; then
464 PYTHON3_LIB=`$PYTHON3 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_lib(1).replace(os.sep,"/"))'`
466 AC_MSG_RESULT([$PYTHON3_LIB])
467 AC_ARG_VAR(PYTHON3_LIB, [Directory to install python3 bindings in])
469 AC_MSG_CHECKING([for python3 libraries to link against])
472 PYTHON3_LIBS=`$PYTHON3 -c 'import os,sys;print("-L"+os.path.join(sys.prefix,"libs").replace(os.sep,"/")+" -lpython"+sys.version[[:3]].replace(".",""))'` ;;
474 PYTHON3_LIBS=`$PYTHON3 -c 'import os,sys;print("-L"+os.path.join(sys.path[[3]],"config")+" -lpython"+sys.version[[:3]])'` ;;
478 AC_SUBST(PYTHON3_LIBS)
479 AC_MSG_RESULT([$PYTHON3_LIBS])
481 AC_MSG_CHECKING([for python3 module extension])
482 dnl Usually ".so", but for example, Mac OS X uses ".dylib".
483 PYTHON3_SO=`$PYTHON3 -c 'import distutils.sysconfig;print(distutils.sysconfig.get_config_vars("SO")[[0]])'`
485 AC_MSG_RESULT([$PYTHON3_SO])
487 AC_MSG_CHECKING([for tag for cached compiled scripts])
488 PYTHON3_CACHE_TAG=`$PYTHON3 -c 'import imp;print(imp.get_tag())'`
489 AC_SUBST(PYTHON3_CACHE_TAG)
490 AC_MSG_RESULT([$PYTHON3_CACHE_TAG])
492 AC_MSG_CHECKING([for extension of cached and optimized python3 bytecode])
493 PYTHON3_CACHE_OPT1_EXT=`$PYTHON3 -c 'import imp,sys;print("%s.pyo"%imp.get_tag()) if sys.version_info.minor<5 else print("{1}{2}".format(*imp.util.cache_from_source("",optimization=1).rpartition(imp.get_tag())))'`
494 AC_SUBST(PYTHON3_CACHE_OPT1_EXT)
495 AC_MSG_RESULT([$PYTHON3_CACHE_OPT1_EXT])
497 BINDINGS="$BINDINGS python3"
499 AC_MSG_RESULT([no (install python3-dev or python3-devel package or similar)])
500 if test yes = "$with_python3" ; then
501 AC_MSG_ERROR([Python.h not found])
508 if test x$USE_MAINTAINER_MODE = xyes; then
509 dnl Need python in maintainer mode to run doxy2swig.py.
510 dnl Either Python 2 or 3 is OK for this.
511 if test -n "$PYTHON2" ; then
513 elif test -n "$PYTHON3" ; then
516 AC_PATH_PROGS(PYTHON, [python2 python python3], [])
518 test -z "$PYTHON" && AC_MSG_ERROR([python is required in maintainer mode])
521 if test no != "$with_php" ; then
522 dnl See comment for AC_PATH_PROGS(SWIG, ...).
523 if test -n "$PHP_CONFIG" ; then
524 AC_PATH_PROGS(PHP_CONFIG, ["$PHP_CONFIG"], [])
526 if test -z "$PHP_CONFIG" ; then
527 AC_PATH_PROGS(PHP_CONFIG, [php-config5 php-config5.6 php-config5.5 php-config], [])
529 AC_ARG_VAR(PHP_CONFIG, [php-config utility for PHP5])
530 AC_ARG_VAR(PHP, [PHP5 interpreter (optional - only needed to run PHP5 testsuite with)])
531 if test -n "$PHP_CONFIG" ; then
532 AC_MSG_CHECKING([$PHP_CONFIG version])
533 version=`$PHP_CONFIG --version 2>/dev/null`
535 dnl 5.6 was the final PHP5 release.
537 AC_MSG_RESULT([$version])
538 PHP_MAJOR_VERSION=`echo "$version"|cut -d. -f1`
541 AC_MSG_RESULT([$version (not supported, PHP5 bindings need PHP 5.x where x >= 5)])
542 if test yes = "$with_php" ; then
543 AC_MSG_ERROR([$PHP_CONFIG reports version $version - PHP5 bindings need PHP 5.x where x >= 5])
548 AC_SUBST(PHP_MAJOR_VERSION)
550 if test no != "$with_php" ; then
551 AC_MSG_CHECKING([for PHP5 extension directory])
552 if test -z "$PHP_EXTENSION_DIR" ; then
553 PHP_EXTENSION_DIR=`$PHP_CONFIG --extension-dir`
555 AC_MSG_RESULT([$PHP_EXTENSION_DIR])
556 AC_ARG_VAR(PHP_EXTENSION_DIR, [Directory to install PHP5 extensions in])
559 if test no != "$with_php" ; then
560 PHP_INC=`$PHP_CONFIG --includes`
562 save_CPPFLAGS=$CPPFLAGS
563 CPPFLAGS="$CPPFLAGS $PHP_INC"
564 dnl One of SGI's SuSE boxes has php-config but no headers.
565 AC_CHECK_HEADER(zend.h, [], [
566 if test yes = "$with_php" ; then
567 AC_MSG_ERROR(['$PHP_CONFIG --includes' reports '$PHP_INC' but zend.h can't be included from there])
570 CPPFLAGS=$save_CPPFLAGS
573 if test no != "$with_php" ; then
574 if test x"$PHP" = x ; then
575 AC_MSG_CHECKING([for PHP5 interpreter])
576 dnl PHP5's php-config supports --php-binary, so just use that.
577 PHP=`$PHP_CONFIG --php-binary 2>/dev/null`
578 if test x"$PHP" != x ; then
579 if $PHP -r 'exit(0);' 2> /dev/null ; then
580 if $PHP -r 'exit(PHP_MAJOR_VERSION==5?0:1);' 2> /dev/null ; then
581 AC_MSG_RESULT([$PHP])
583 dnl We get /usr/bin/php on Debian, which might be PHP7:
584 dnl https://bugs.debian.org/819139
585 if ${PHP}5 -r 'exit(PHP_MAJOR_VERSION==5?0:1);' 2> /dev/null ; then
587 AC_MSG_RESULT([$PHP])
589 AC_MSG_RESULT([no ($PHP isn't PHP5)])
594 AC_MSG_RESULT([no ($PHP does not work)])
598 AC_MSG_RESULT([not found])
601 AC_PATH_PROGS(PHP, ["$PHP"], [])
603 if test x"$PHP" = x ; then
604 AC_MSG_WARN([No PHP5 interpreter found - PHP5 bindings tests will be skipped])
605 dnl The skiptest script just returns exit code 77.
606 PHP='$(top_srcdir)/skiptest'
608 AC_MSG_CHECKING([for PHP5 path separator])
609 PHP_PATH_SEPARATOR=`$PHP -r 'echo PATH_SEPARATOR;'`
610 AC_SUBST([PHP_PATH_SEPARATOR])
611 AC_MSG_RESULT([$PHP_PATH_SEPARATOR])
616 dnl This is a bit of an informed guess, pending more information from
617 dnl someone who actually has mingw and wants to build the PHP bindings
619 PHP_LIBS="-L`$PHP_CONFIG --prefix` -lphp${PHP_MAJOR_VERSION}ts" ;;
621 PHP_LIBS="-lphp${PHP_MAJOR_VERSION}lib" ;;
626 BINDINGS="$BINDINGS php"
631 if test no != "$with_php7" ; then
632 dnl See comment for AC_PATH_PROGS(SWIG, ...).
633 if test -n "$PHP_CONFIG7" ; then
634 AC_PATH_PROGS(PHP_CONFIG7, ["$PHP_CONFIG7"], [])
636 if test -z "$PHP_CONFIG7" ; then
637 AC_PATH_PROGS(PHP_CONFIG7, [php-config7.4 php-config7.3 php-config7.2 php-config7.1 php-config7.0 php-config], [])
639 AC_ARG_VAR(PHP_CONFIG7, [php-config utility for PHP7])
640 AC_ARG_VAR(PHP7, [PHP7 interpreter (optional - only needed to run PHP7 testsuite with)])
641 if test -n "$PHP_CONFIG7" ; then
642 AC_MSG_CHECKING([$PHP_CONFIG7 version])
643 version=`$PHP_CONFIG7 --version 2>/dev/null`
646 AC_MSG_RESULT([$version (not supported, PHP7 bindings need PHP 7.x)])
647 if test yes = "$with_php7" ; then
648 AC_MSG_ERROR([$PHP_CONFIG7 reports version $version - PHP7 bindings need 7.x])
653 AC_MSG_RESULT([$version])
654 PHP7_MAJOR_VERSION=`echo "$version"|cut -d. -f1`
657 AC_MSG_RESULT([$version (PHP >= 8.0 isn't yet supported)])
658 if test yes = "$with_php7" ; then
659 AC_MSG_ERROR([$PHP_CONFIG7 reports version $version - PHP7 bindings need 7.x])
664 AC_SUBST(PHP7_MAJOR_VERSION)
666 if test no != "$with_php7" ; then
667 AC_MSG_CHECKING([for PHP7 extension directory])
668 if test -z "$PHP7_EXTENSION_DIR" ; then
669 PHP7_EXTENSION_DIR=`$PHP_CONFIG7 --extension-dir`
671 AC_MSG_RESULT([$PHP7_EXTENSION_DIR])
672 AC_ARG_VAR(PHP7_EXTENSION_DIR, [Directory to install PHP7 extensions in])
675 if test no != "$with_php7" ; then
676 PHP7_INC=`$PHP_CONFIG7 --includes`
680 if test no != "$with_php7" ; then
681 if test x"$PHP7" = x ; then
682 AC_MSG_CHECKING([for PHP7 interpreter])
683 dnl PHP7's php-config supports --php-binary, so just use that.
684 PHP7=`$PHP_CONFIG7 --php-binary 2>/dev/null`
685 if test x"$PHP7" != x ; then
686 if $PHP7 -r 'exit(0);' 2> /dev/null ; then
687 if $PHP7 -r 'exit(PHP_MAJOR_VERSION==7?0:1);' 2> /dev/null ; then
688 AC_MSG_RESULT([$PHP7])
690 AC_MSG_RESULT([no ($PHP7 isn't PHP7)])
694 AC_MSG_RESULT([no ($PHP7 does not work)])
698 AC_MSG_RESULT([not found])
701 AC_PATH_PROGS(PHP7, ["$PHP7"], [])
703 if test x"$PHP7" = x ; then
704 AC_MSG_WARN([No PHP7 interpreter found - PHP7 bindings tests will be skipped])
705 dnl The skiptest script just returns exit code 77.
706 PHP7='$(top_srcdir)/skiptest'
708 AC_MSG_CHECKING([for PHP7 path separator])
709 PHP7_PATH_SEPARATOR=`$PHP7 -r 'echo PATH_SEPARATOR;'`
710 AC_SUBST([PHP7_PATH_SEPARATOR])
711 AC_MSG_RESULT([$PHP7_PATH_SEPARATOR])
716 dnl This is a bit of an informed guess, pending more information from
717 dnl someone who actually has mingw and wants to build the PHP bindings
719 PHP7_LIBS="-L`$PHP_CONFIG7 --prefix` -lphp${PHP7_MAJOR_VERSION}ts" ;;
721 PHP7_LIBS="-lphp${PHP7_MAJOR_VERSION}lib" ;;
726 BINDINGS="$BINDINGS php7"
731 if test no != "$with_tcl" ; then
732 dnl The documented minimum requirement is Tcl 8.5. Older versions may work,
733 dnl but we don't test with them regularly, and they are no longer supported
734 dnl upstream. Also ::tcl::pckconfig was added in Tcl 8.5, which makes the
735 dnl tests below simpler and more reliable.
737 dnl If you really want to build with an older version, run configure with
738 dnl a lower tcl_min and specify at least TCL_INC explicitly:
740 dnl ./configure tcl_min=8.4 TCL_INC=/usr/include/tcl8.4
742 dnl We definitely need at least Tcl 8.1 for TCL_STUBS.
744 AC_PATH_PROGS(TCLSH, ["${TCLSH-tclsh}"], [])
745 AC_ARG_VAR(TCLSH, [Tcl interpreter])
746 if test -n "$TCLSH" ; then
747 AC_MSG_CHECKING([$TCLSH version])
748 if echo 'if {$tcl_version < '"$tcl_min"' } { exit 1 }'|$TCLSH 2> /dev/null ; then
749 tcl_version=`echo 'puts "$tcl_version"'|$TCLSH`
750 AC_MSG_RESULT([$tcl_version])
752 AC_ARG_VAR(TCL_LIB, [Directory to install Tcl files into])
753 if test -z "$TCL_LIB" ; then
754 [TCL_LIB=`echo 'foreach d $tcl_pkgPath {if {![regexp {/share(/|$)} $d]} {break}};puts $d'|$TCLSH`]
758 AC_ARG_VAR([TCL_INC], [Directory to include for Tcl headers])
759 if test -z "$TCL_INC" ; then
760 dnl ::tcl::pkgconfig was added in Tcl 8.5.
761 [TCL_INC=`echo 'puts [::tcl::pkgconfig get includedir,runtime]'|$TCLSH 2> /dev/null`]
764 dnl Check that the headers are there (the tcl8.N-dev package
765 dnl may not be installed).
767 AC_MSG_CHECKING([for tcl.h from Tcl $tcl_version])
768 if test x"$TCL_INC" != x && test -f "$TCL_INC/tcl.h" ; then
769 tcl_hdr_version=`awk '($1 == "#define" && $2 == "TCL_VERSION") {print $3}' "$TCL_INC/tcl.h"|sed 's/"//g'`
770 if test x"$tcl_hdr_version" = x"$tcl_version" ; then
771 AC_MSG_RESULT([$TCL_INC/tcl.h])
772 BINDINGS="$BINDINGS tcl8"
773 if test x"$TCL_INC" != x"/usr/include" ; then
774 TCL_CPPFLAGS="-I$TCL_INC"
777 AC_MSG_RESULT([not found])
778 if test yes = "$with_tcl" ; then
779 AC_MSG_ERROR([Found tcl.h from version $tcl_hdr_version, not $tcl_version - specify TCL_INC on configure command line])
784 AC_MSG_RESULT([not found])
785 if test yes = "$with_tcl" ; then
786 AC_MSG_ERROR([Can't find tcl.h])
791 if test -n "$TCLSH" ; then
792 dnl Cygwin needs to link with -ltcl8.5 or similar.
796 AC_CHECK_LIB([tcl$tcl_version], [Tcl_Init],
797 [TCL_LIBS="-ltcl$tcl_version"],
798 [AC_MSG_ERROR([libtcl$tcl_version not found])])
801 dnl ::tcl::pkgconfig was added in Tcl 8.5, but prior to 8.6 it isn't
802 dnl necessary to link against -ltclstub anyway.
803 [tcl_libdir_runtime=`echo 'puts [::tcl::pkgconfig get libdir,runtime]'|$TCLSH 2> /dev/null`]
804 if test -n "$tcl_libdir_runtime" ; then
805 for x in "/tcl$tcl_version" "" ; do
806 TCLCONFIG_SH=$tcl_libdir_runtime$x/tclConfig.sh
807 if test -r "$TCLCONFIG_SH" ; then
808 eval "`sed 's/^TCL_STUB_LIB_SPEC=/TCL_LIBS=/p;d' $TCLCONFIG_SH`"
813 TCL_CPPFLAGS="$TCL_CPPFLAGS -DUSE_TCL_STUBS" ;;
817 AC_SUBST(TCL_CPPFLAGS)
820 AC_MSG_RESULT([< $tcl_min (too old)])
821 if test yes = "$with_tcl" ; then
822 AC_MSG_ERROR([$TCLSH too old (Tcl $tcl_min or newer required)])
826 if test yes = "$with_tcl" ; then
827 AC_MSG_ERROR([tclsh not found])
832 if test no != "$with_csharp" ; then
834 AC_ARG_VAR(CSC, [CSharp compiler command])
835 if test -n "$CSC" ; then
836 AC_PATH_PROGS(CSC, ["$CSC"], [])
838 if test -z "$CSC" ; then
839 dnl First we try cli-csc and mono-csc, which are used by Debian and Ubuntu
840 dnl as "alternatives" which can be mapped to the CSharp compiler the admin
842 AC_PATH_PROGS(CSC, [cli-csc mono-csc], [])
843 if test -z "$CSC" ; then
844 dnl mcs is the Mono CSharp compiler, which is a unified compiler
845 dnl available from Mono 2.11 (and also the compiler in Mono 1.0, but
846 dnl that's no longer relevant).
847 AC_PATH_PROGS(CSC, [mcs], [])
848 if test -n "$CSC" ; then
849 dnl There are other tools called mcs (such as /usr/bin/mcs on Tru64),
850 dnl so we check that the mcs we found understands --version which is
851 dnl sufficient to distinguish mono's mcs from the Tru64 one.
852 AC_MSG_CHECKING([whether $CSC is from GNU Mono])
853 if (exec >&5 2>&5;$CSC --version </dev/null;exit $?) ; then
858 csc_note="$csc_note (found different mcs program)"
862 if test -z "$CSC" ; then
863 dnl csc is the Microsoft CSharp compiler.
864 AC_PATH_PROGS(CSC, [csc], [])
865 if test -n "$CSC" ; then
866 dnl Chicken (the Scheme-to-C compiler) includes a tool called csc so we
867 dnl check if the output from "csc -version" includes the word chicken
868 dnl which is sufficient to distinguish Chicken's csc from Microsoft's
870 AC_MSG_CHECKING([whether $CSC is for CSharp])
871 if $CSC -version 2>/dev/null|grep chicken > /dev/null ; then
874 csc_note="$csc_note (found Chicken csc program)"
882 if test -n "$CSC" ; then
883 AC_ARG_VAR(GACUTIL, [gacutil utility to use for CSharp bindings])
884 if test -n "$GACUTIL" ; then
885 AC_PATH_PROGS(GACUTIL, ["$GACUTIL"], [])
887 if test -z "$GACUTIL" ; then
888 AC_PATH_PROGS(GACUTIL, [cli-gacutil gacutil], [])
891 AC_ARG_VAR(SN, [sn utility to use for CSharp bindings])
892 if test -n "$SN" ; then
893 AC_PATH_PROGS(SN, ["$SN"], [])
895 if test -z "$SN" ; then
896 AC_PATH_PROGS(SN, [cli-sn sn], [])
898 if test -n "$GACUTIL" -a -n "$SN" ; then
899 AC_MSG_CHECKING([whether the CSharp compiler works])
900 [echo 'class conftest { public static void Main() { System.Console.WriteLine("OK"); } }' > conftest.cs]
901 if (exec >&5 2>&5;$CSC /out:conftest.exe conftest.cs;exit $?) ; then
903 AC_MSG_CHECKING([whether CSharp programs can just be run])
904 if test OK = "`./conftest.exe 2> /dev/null`" ; then
909 AC_PATH_PROGS(CLI, ["${CLI-cli}"], [])
910 if test -z "$CLI" ; then
911 AC_PATH_PROGS(CLI, [mono ilrun], [])
913 AC_ARG_VAR(CLI, [CSharp bytecode interpreter (optional - only needed to run CSharp testsuite with)])
914 if test -n "$CLI" ; then
915 AC_MSG_CHECKING([whether $CLI can run CSharp programs])
916 if test OK = "`$CLI ./conftest.exe 2> /dev/null`" ; then
920 AC_MSG_RESULT([no - CSharp tests will be skipped])
921 RUN_CSHARP='\$(top_srcdir)/skiptest'
924 AC_MSG_RESULT([not found - CSharp tests will be skipped])
925 RUN_CSHARP='\$(top_srcdir)/skiptest'
930 AC_MSG_CHECKING([for extra flags for $GACUTIL])
931 GACUTIL_FLAGS='/package $(ASSEMBLY) /gacdir $(libdir) /root $(DESTDIR)$(libdir)'
932 dnl Microsoft's gacutil accepts fewer options than Mono's
933 $GACUTIL /\?|grep '\<Mono\>' >/dev/null || GACUTIL_FLAGS=
934 AC_SUBST([GACUTIL_FLAGS])
935 if test -z "$GACUTIL_FLAGS" ; then
938 AC_MSG_RESULT([$GACUTIL_FLAGS])
941 BINDINGS="$BINDINGS csharp"
944 if test yes = "$with_csharp" ; then
945 AC_MSG_ERROR([CSharp compiler $CSC doesn't work])
949 if test yes = "$with_csharp" ; then
950 if test -z "$GACUTIL" ; then
951 AC_MSG_ERROR([Mono gacutil not found])
952 elif test -z "$SN" ; then
953 AC_MSG_ERROR([Mono sn not found])
958 if test yes = "$with_csharp" ; then
959 AC_MSG_ERROR([CSharp compiler not found$csc_note])
965 if test no != "$with_java" ; then
966 AC_PATH_PROGS(JAVA, ["${JAVA-java}"], [],
967 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
968 AC_PATH_PROGS(JAVAC, ["${JAVAC-javac}"], [],
969 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
970 AC_PATH_PROGS(JAR, ["${JAR-jar}"], [],
971 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
972 AC_ARG_VAR(JAVA, [Java interpreter command])
973 AC_ARG_VAR(JAVAC, [Java compiler command])
974 AC_ARG_VAR(JAR, [java jar utility])
975 AC_ARG_VAR(JAVA_HOME, [Pathname of the directory where the JDK is installed])
976 AC_ARG_VAR(JDK_HOME, [Pathname of the directory where the JDK is installed])
977 AC_ARG_VAR(JNI_INCLUDE_DIR, [Pathname of the directory where jni.h is installed])
978 if test -n "$JAVA" -a -n "$JAVAC" -a -n "$JAR" ; then
980 dnl The JNI library *requires* "Java 2", which is 1.2 or better.
982 dnl So checking for jni.h presumably implicitly checks we have "Java 2".
983 dnl Note: jni.h #defines JNI_VERSION_1_[12468] (but not 3, 5 or 7 it seems).
984 dnl So we could check for one of these if we want to check for a particular
987 AC_CHECK_HEADER([jni.h], [java_ok=yes], [
988 dnl We need to look for jni.h in /usr/lib/jvm/java-gcj/include on some
989 dnl Debian and Ubuntu boxes at least. And on Mac OS X, jni.h lives
990 dnl in /System/Library/Frameworks/JavaVM.framework/Headers.
991 SAVE_CPPFLAGS=$CPPFLAGS
993 dnl Avoid endlessly traversing if there's a symlink loop.
994 for count in 1 2 3 4 5 6 7 8 9 ; do
995 r=`readlink "$real_javac"`
996 test -n "$r" || break
999 dnl Translate ".../bin/javac" to ".../include".
1000 [rel_jnidir=`echo "$real_javac"|sed 's!/[^/]*/[^/]*$!/include!'`]
1003 ${JAVA_HOME+"$JAVA_HOME/include"} \
1004 ${JDK_HOME+"$JDK_HOME/include"} \
1006 /System/Library/Frameworks/JavaVM.framework/Headers ; do
1007 CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
1008 AC_MSG_CHECKING([for jni.h in $jnidir])
1009 if test -f "$jnidir/jni.h" ; then
1010 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
1011 if test yes = $java_ok ; then
1012 AC_MSG_RESULT([yes])
1013 JAVA_CPPFLAGS=-I$jnidir
1017 dnl For OpenJDK (and maybe others) we have to specify an extra -I
1018 dnl option for an OS-specific subdirectory containing a "jni_md.h"
1019 dnl header which is included by "jni.h". Sadly we seem to need to
1020 dnl hardcode a mapping for these platform names - the list below
1021 dnl was determined by inspecting the source code of OpenJDK 8.
1025 jni_host_os=linux ;;
1027 jni_host_os=solaris ;;
1028 mingw* | pw32* | cygwin*)
1029 jni_host_os=win32 ;;
1031 jni_host_os=darwin ;;
1037 if test -n "$jni_host_os" ; then
1038 CPPFLAGS="$CPPFLAGS -I$jnidir/$jni_host_os"
1039 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
1040 if test yes = $java_ok ; then
1041 AC_MSG_RESULT([yes, requires additional -I$jnidir/$jni_host_os])
1042 JAVA_CPPFLAGS="-I$jnidir -I$jnidir/$jni_host_os"
1046 AC_MSG_RESULT([found, but not usable])
1048 CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
1053 CPPFLAGS=$SAVE_CPPFLAGS
1054 test noyes = $java_ok$with_java && AC_MSG_ERROR([jni.h not found])
1056 AC_SUBST(JAVA_CPPFLAGS)
1057 if test yes = $java_ok ; then
1058 AC_MSG_CHECKING([for Java path separator])
1059 [echo 'public class conftest { public static void main(String[] args) { System.out.println(System.getProperty("path.separator")); } }' > conftest.java]
1060 if (exec >&5 2>&5;$JAVAC conftest.java;exit $?) ; then
1061 JAVA_PATHSEP=`$JAVA conftest 2>&5`
1062 AC_SUBST(JAVA_PATHSEP)
1063 if test -n "$JAVA_PATHSEP" ; then
1064 AC_MSG_RESULT($JAVA_PATHSEP)
1065 BINDINGS="$BINDINGS java"
1067 dnl If -Xcheck:jni is supported then run tests with it.
1069 dnl ... except that with OpenJDK 8 and 9 -Xcheck:jni seems to report
1070 dnl false positives and so can't usefully be turned on in this
1071 dnl situation. Recheck this with future versions.
1072 dnl AC_MSG_CHECKING([for $JAVA -Xcheck:jni option])
1073 dnl JAVA_PATHSEP2=`$JAVA conftest 2>&5`
1074 JAVA_CHECK_JNI_OPTION=
1075 dnl if test "$JAVA_PATHSEP" = "$JAVA_PATHSEP2" ; then
1076 dnl JAVA_CHECK_JNI_OPTION=-Xcheck:jni
1077 dnl AC_MSG_RESULT([yes])
1079 dnl AC_MSG_RESULT([no])
1081 AC_SUBST([JAVA_CHECK_JNI_OPTION])
1083 AC_MSG_RESULT([failed to run test program])
1087 AC_MSG_RESULT([failed to compile test program])
1090 if test no = "$java_ok" ; then
1091 test yes = "$with_java" && AC_MSG_ERROR([Couldn't compile and run a simple Java test program])
1095 if test yes = "$with_java" ; then
1096 if test -z "$JAVA" ; then
1097 AC_MSG_ERROR([java not found])
1098 elif test -z "$JAVAC" ; then
1099 AC_MSG_ERROR([javac not found])
1100 elif test -z "$JAR" ; then
1101 AC_MSG_ERROR([jar not found])
1107 if test no != "$with_ruby" ; then
1108 dnl See comment for AC_PATH_PROGS(SWIG, ...).
1109 if test -n "$RUBY" ; then
1110 AC_PATH_PROGS(RUBY, ["$RUBY"], [])
1112 AC_PATH_PROGS(RUBY, [ruby], [])
1114 AC_ARG_VAR(RUBY, [Ruby interpreter])
1115 if test -n "$RUBY" ; then
1116 dnl Require Ruby 2.1 or newer.
1117 AC_MSG_CHECKING([$RUBY version])
1118 dnl RUBY_VERSION works with 1.6. Once we've checked we have at least 1.8
1119 dnl we can safely use RbConfig below (RbConfig requires Ruby 1.8).
1120 version=`$RUBY -e 'print RUBY_VERSION' 2>/dev/null`
1123 AC_MSG_RESULT([\$RUBY -e 'print RUBY_VERSION' didn't work])
1124 if test yes = "$with_ruby" ; then
1125 AC_MSG_ERROR([Working Ruby interpreter not found])
1130 AC_MSG_RESULT([$version (too old)])
1131 if test yes = "$with_ruby" ; then
1132 AC_MSG_ERROR([Only Ruby 2.1 or newer is supported ($RUBY is $version)])
1137 if test -n "$RUBY" ; then
1138 AC_MSG_RESULT([$version])
1139 AC_ARG_VAR(RUBY_INC, [Directory where ruby.h can be found])
1140 if test -z "$RUBY_INC" ; then
1141 dnl Ruby 1.9 added rubyhdrdir.
1142 [RUBY_INC=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyhdrdir"]'`]
1145 dnl Check that ruby.h is there, which is a good way to check that
1146 dnl the appropriate ruby-dev package has been installed.
1147 AC_MSG_CHECKING([for $RUBY_INC/ruby.h])
1148 if test -f "$RUBY_INC/ruby.h" ; then
1151 AC_ARG_VAR(RUBY_INC_ARCH, [Directory where ruby/config.h can be found])
1152 if test -z "$RUBY_INC_ARCH" ; then
1153 dnl Ruby 2.0 and later have rubyarchhdrdir.
1154 [RUBY_INC_ARCH=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyarchhdrdir"]'`]
1156 AC_SUBST(RUBY_INC_ARCH)
1158 AC_ARG_VAR(RUBY_LIB, [Directory to install ruby files into])
1159 if test -z "$RUBY_LIB" ; then
1160 [RUBY_LIB=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitelibdir"]'`]
1164 AC_ARG_VAR(RUBY_LIB_ARCH, [Directory to install ruby binary modules into])
1165 if test -z "$RUBY_LIB_ARCH" ; then
1166 [RUBY_LIB_ARCH=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitearchdir"]'`]
1168 AC_SUBST(RUBY_LIB_ARCH)
1171 if test unsupported = "$allow_undefined_flag" ; then
1172 dnl For Microsoft Windows and a few other platforms.
1173 [RUBY_LIBS=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["LIBRUBYARG"]'`]
1177 dnl rdoc is included as part of the Ruby core distribution, so run it
1178 dnl at build time rather shipping the rather large generated output in
1179 dnl our source tarball.
1180 if test -n "$RDOC" ; then
1181 AC_PATH_PROGS(RDOC, ["$RDOC"], [])
1183 dnl Try replace the *last* 'ruby' with 'rdoc'.
1184 rdoc_best_guess=`echo "$RUBY"|sed 's,\(.*\)ruby,\1rdoc,'`
1185 AC_PATH_PROGS(RDOC, ["$rdoc_best_guess"], [])
1186 if test -z "$RDOC"; then
1187 AC_PATH_PROGS(RDOC, [rdoc], [])
1190 if test -n "$RDOC"; then
1191 BINDINGS="$BINDINGS ruby"
1193 AC_ARG_VAR([RDOC], [Ruby documentation generator])
1195 AC_MSG_RESULT([no (install ruby-dev or ruby-devel package or similar)])
1196 if test yes = "$with_ruby" ; then
1197 AC_MSG_ERROR([ruby.h not found])
1200 RUBY_DLEXT=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG[["DLEXT"]]'`
1201 AC_SUBST(RUBY_DLEXT)
1206 if test no != "$with_perl" ; then
1207 AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
1208 AC_ARG_VAR(PERL, [Perl interpreter])
1209 if test -n "$PERL" ; then
1210 if test -z "$PERL_INC" ; then
1211 PERL_INC=`$PERL -MConfig -e 'print $Config{archlibexp}, "/CORE"'`
1215 AC_ARG_VAR(PERL_ARCH, [Directory to install architecture-dependent perl files into])
1216 if test -z "$PERL_ARCH" ; then
1217 PERL_ARCH=`$PERL -MConfig -e 'print $Config{installsitearch}'`
1221 AC_ARG_VAR(PERL_LIB, [Directory to install architecture-independent perl files into])
1222 if test -z "$PERL_LIB" ; then
1223 PERL_LIB=`$PERL -MConfig -e 'print $Config{installsitelib}'`
1227 AC_ARG_VAR(PERL_SO, [Extension for compiled Perl modules])
1228 if test -z "$PERL_SO" ; then
1229 PERL_SO=`$PERL -MConfig -e 'print ".", $Config{dlext}'`
1233 if test -z "$PERL_XAPIAN_VERSION" ; then
1234 dnl snapshot versions look like 1.2.3_git123
1235 case $PACKAGE_VERSION in
1237 PERL_XAPIAN_VERSION=`echo "$PACKAGE_VERSION"|sed 's/_git/./'` ;;
1239 PERL_XAPIAN_VERSION=$PACKAGE_VERSION.0 ;;
1242 AC_SUBST(PERL_XAPIAN_VERSION)
1244 BINDINGS="$BINDINGS perl"
1246 if test yes = "$with_perl" ; then
1247 AC_MSG_ERROR([perl not found])
1252 if test no != "$with_lua" ; then
1253 AC_PATH_PROGS(LUA, ["${LUA-lua}"], [])
1254 AC_ARG_VAR(LUA, [lua interpreter])
1255 if test -n "$LUA" ; then
1256 dnl We need Lua 5.1 or later.
1257 AC_MSG_CHECKING([$LUA version])
1258 lua_version=`$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' 2>&AS_MESSAGE_LOG_FD`
1260 case $lua_version in
1261 [[01234]].*|5.0|5.0.*)
1262 AC_MSG_RESULT([$lua_version < 5.1 (too old)])
1263 if test yes = "$with_lua" ; then
1264 AC_MSG_ERROR([$LUA too old (Lua 5.1 or newer required)])
1269 AC_MSG_RESULT([\$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' didn't work])
1271 if test yes = "$with_lua" ; then
1272 AC_MSG_ERROR([Working Lua interpreter not found])
1278 if test -n "$LUA" ; then
1279 AC_MSG_RESULT([$lua_version])
1281 AC_ARG_VAR([LUA_LIB], [Directory to install compiled Lua modules into])
1282 AC_ARG_VAR([LUA_SO], [Extension for compiled Lua modules (e.g. LUA_SO=.so)])
1283 AC_MSG_CHECKING([for directory to install compiled Lua modules into])
1284 if test -z "$LUA_LIB" -o -z "$LUA_SO" ; then
1285 lua_cpath=`$LUA -e 'require("package") print(package.cpath)'`
1286 dnl Look for the first absolute path in lua_cpath which has leaf
1287 dnl "?.<ext>" and put the directory part into lua_lib and <ext> into
1288 dnl lua_so. If LUA_SO was specified by the user, only consider
1289 dnl entries where <ext> matches LUA_SO.
1294 [lua_so_pat='[a-zA-Z][a-zA-Z]*'] ;;
1296 dnl If LUA_SO has a leading '.', remove it.
1297 lua_so_pat=`AS_ECHO("$LUA_SO")|sed 's/^\.//'` ;;
1299 dnl If LUA_SO was specified without a leading '.', add one to the
1300 dnl value substituted into Makefile.in.
1305 while test x"$lua_cpath" != x ; do
1306 [lua_lib=`expr X"$lua_cpath" : X'\([^;]*\)'`]
1307 lua_so=.`expr X"$lua_lib" : X'/.*/?\.\('"$lua_so_pat"'\)$'`
1310 dnl If someone has foolishly put ?.lua in cpath, ignore them.
1314 lua_lib=`expr X"$lua_lib" : X'\(/.*\)/?\.'"$lua_so_pat"'$'`
1317 [lua_cpath=`expr X"$lua_cpath" : X'[^;]*;*\(.*\)'`]
1319 test -n "$LUA_LIB" || LUA_LIB=$lua_lib
1320 test -n "$LUA_SO" || LUA_SO=$lua_so
1322 if test -z "$LUA_LIB"; then
1323 AC_MSG_RESULT([not found])
1325 AC_MSG_RESULT([$LUA_LIB])
1329 AC_MSG_CHECKING([for extension to use for compiled Lua modules])
1330 if test -z "$LUA_SO"; then
1331 AC_MSG_RESULT([not found])
1333 AC_MSG_RESULT([$LUA_SO])
1337 AC_MSG_CHECKING([for Lua header files])
1338 AC_ARG_VAR([LUA_INC], [Directory to include for lua headers])
1339 if test -z "$LUA_INC" ; then
1340 dirs="/usr/include/lua$lua_version /usr/local/include/lua$lua_version"
1342 if test -r "$i/lua.h"; then
1349 if test -z "$LUA_INC" ; then
1350 AC_MSG_RESULT([not found])
1352 AC_MSG_RESULT([$LUA_INC])
1353 BINDINGS="$BINDINGS lua"
1354 LUA_CPPFLAGS="-I$LUA_INC"
1356 AC_SUBST([LUA_CPPFLAGS])
1359 if test yes = "$with_lua" ; then
1360 AC_MSG_ERROR([lua not found])
1368 *python*) dnl Matches python and/or python3
1369 dnl C++11 has thread_local
1370 dnl GCC and some others have __thread
1371 dnl MSVC and some others have __declspec(thread)
1372 AC_MSG_CHECKING([for thread-local storage qualifier])
1373 AC_ARG_VAR([THREAD_LOCAL], [thread-local storage qualifier])
1374 if test -z "$THREAD_LOCAL" ; then
1375 for t in thread_local __thread '__declspec(thread)' ; do
1376 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[static $t void * p;]])],
1377 [THREAD_LOCAL=$t; break])
1380 if test -z "$THREAD_LOCAL" ; then
1381 AC_MSG_RESULT([unknown, disabling thread-local support])
1383 AC_MSG_RESULT([$THREAD_LOCAL])
1384 AC_DEFINE_UNQUOTED([THREAD_LOCAL], [$THREAD_LOCAL], [Thread local storage qualifier (undefined if no TLS)])
1389 dnl Set flags to control warnings (enable more, or disable annoying ones)
1390 dnl and other compiler specific flags.
1392 if test yes = "$GXX" ; then
1393 dnl Python itself is compiled with -fno-strict-aliasing, and it appears
1394 dnl it's safest to follow this lead when compiling the SWIG generated
1395 dnl interface code. E.g.:
1396 dnl https://article.gmane.org/gmane.comp.gcc.devel/74692
1397 dnl The code SWIG generates for other languages seems to have similar
1398 dnl issues too, so just turn this on for all of them.
1400 dnl There's no need to check -fno-strict-aliasing is supported as it works
1401 dnl with GCC 2.95 and we don't support anything older.
1402 SWIG_CXXFLAGS="-fno-strict-aliasing"
1404 dnl We need to explicitly link against -lstdc++ on OpenBSD (discovered
1405 dnl on OpenBSD 3.7 with GCC 3.3.5 but this appears to be due to a
1406 dnl deliberate decision on the part of OpenBSD developers). Luckily
1407 dnl we can just always specify -lstdc++ explicitly if GCC is the
1408 dnl compiler and libtool will eliminate the duplicate on other
1410 XAPIAN_LIBS="$XAPIAN_LIBS -lstdc++"
1412 dnl Intel's C++ compiler is identified as "GXX" by autoconf's test - check
1413 dnl which we actually have.
1415 [#ifdef __INTEL_COMPILER
1420 dnl Intel's compiler:
1422 dnl -w1 stops the avalanche of uninteresting "remark" messages.
1423 dnl -wd... disables warnings which don't have good code workarounds.
1425 dnl Swig generated code gives lots of unused and uninitialized warnings.
1426 dnl They're non-harmful, so suppress them.
1427 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -w1 -wd177,1572"
1432 dnl Swig generated code gives lots of unused and uninitialized warnings.
1433 dnl They're non-harmful, so suppress them.
1434 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -Wno-unused -Wno-uninitialized"
1437 if test no != "$enable_visibility"; then
1438 dnl GCC doesn't support symbol visibility on all platforms (e.g. it isn't
1439 dnl supported on mingw and visibility attributes result in warnings).
1440 AC_MSG_CHECKING([if $CXX -fvisibility=hidden -fvisibility-inlines-hidden works])
1441 if echo 'int bar() __attribute__((visibility("default"))); int baz() __attribute__((visibility("internal"))); int bar() { return 6; } int baz() { return 7; } int foo() {return 42;}'|$CXX -Werror -fvisibility=hidden -fvisibility-inlines-hidden -c -oconftest.o -xc++ - >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
1442 AC_MSG_RESULT([yes])
1443 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -fvisibility=hidden -fvisibility-inlines-hidden"
1449 AC_SUBST(SWIG_CXXFLAGS)
1451 dnl Restore CXXFLAGS to those the user specified or autoconf defaulted to.
1452 CXXFLAGS=$save_CXXFLAGS
1454 dnl Required for auto regeneration to work in a combined maintainer-mode tree.
1455 : ${AUTOM4TE=autom4te}
1456 AC_SUBST([AUTOM4TE])
1458 AC_CONFIG_FILES([Makefile
1461 python/Makefile python/docs/conf.py python/version.i
1462 python3/Makefile python3/docs/conf.py python3/version.i
1466 tcl8/Makefile tcl8/pkgIndex.tcl
1467 csharp/Makefile csharp/AssemblyInfo.cs
1471 xapian-bindings.spec
1476 if test -z "$BINDINGS" ; then
1477 echo "*** Not found the required tools for building bindings for any"
1478 echo "*** supported language!"
1480 echo "*** You may need to install -dev or -devel packages for the languages"
1481 echo "*** you want to build bindings for."
1483 echo "*** For details of how to point configure at tools not on PATH, see:"
1484 echo "*** ./configure --help"
1486 echo "*** Building bindings for languages:" $BINDINGS
1489 if test "$COMPAT_VERSION" != "$XAPIAN_VERSION" ; then
1490 release_series=[`echo "$COMPAT_VERSION"|sed 's/[0-9][0-9]*$//'`]
1491 case $XAPIAN_VERSION in
1492 $release_series*) ;;
1494 AC_MSG_ERROR([Xapian library is version ${XAPIAN_VERSION-<0.8.2} which is from a different release series to bindings $PACKAGE_VERSION, so they aren't compatible.])
1497 dnl 0.8.2 was the first version which set XAPIAN_VERSION
1498 AC_MSG_WARN([Xapian library is version ${XAPIAN_VERSION-<0.8.2} but the bindings are version $PACKAGE_VERSION - we strongly recommend using matching versions.])