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 PYTHON3_INC=`$PYTHON3 -c 'import os,sysconfig;print(sysconfig.get_path("include").replace(os.sep,"/"))' 2>/dev/null`
435 AC_SUBST(PYTHON3_INC)
437 AC_MSG_CHECKING([for python3 sphinx module])
438 if $PYTHON3 -c 'import sphinx' >&5 2>&5 ; then
442 if test yes = "$with_python3" ; then
443 AC_MSG_ERROR([Couldn't import sphinx module for Python3 - try package python3-sphinx])
447 if test -n "$PYTHON3" ; then
448 dnl Check that Python.h is there, which is a good way to check that
449 dnl the appropriate python3-dev package has been installed.
450 AC_MSG_CHECKING([for $PYTHON3_INC/Python.h])
451 if test -f "$PYTHON3_INC/Python.h" ; then
453 AC_MSG_CHECKING([for directory to install python3 bindings in])
454 if test -z "$PYTHON3_LIB" ; then
455 PYTHON3_LIB=`$PYTHON3 -c 'import os,sysconfig;print(sysconfig.get_path("platlib").replace(os.sep,"/"))'`
457 AC_MSG_RESULT([$PYTHON3_LIB])
458 AC_ARG_VAR(PYTHON3_LIB, [Directory to install python3 bindings in])
460 AC_MSG_CHECKING([for python3 libraries to link against])
463 PYTHON3_LIBS=`$PYTHON3 -c 'import os,sys;print("-L"+os.path.join(sys.prefix,"libs").replace(os.sep,"/")+" -lpython"+sys.version[[:3]].replace(".",""))'` ;;
465 PYTHON3_LIBS=`$PYTHON3 -c 'import os,sys;print("-L"+os.path.join(sys.path[[3]],"config")+" -lpython"+sys.version[[:3]])'` ;;
469 AC_SUBST(PYTHON3_LIBS)
470 AC_MSG_RESULT([$PYTHON3_LIBS])
472 AC_MSG_CHECKING([for python3 module extension])
473 dnl Encodes the Python version the module is built for, and ends with
474 dnl the platform-dependent shared object extension (which is `.so` on
475 dnl most Unix-like platforms) - e.g. `.cpython-310-x86_64-linux-gnu.so`
476 PYTHON3_EXT_SUFFIX=`$PYTHON3 -c 'import sysconfig;print(sysconfig.get_config_var("EXT_SUFFIX"))'`
477 AC_SUBST(PYTHON3_EXT_SUFFIX)
478 AC_MSG_RESULT([$PYTHON3_EXT_SUFFIX])
480 AC_MSG_CHECKING([for tag for cached compiled scripts])
481 dnl Since Python 3.3 sys.implementation.cache_tag is the preferred option here,
482 dnl and the old approach issues deprecation warnings since Python 3.7.
484 dnl This needs a shell-level || because Python one line program support is poor.
485 PYTHON3_CACHE_TAG=`$PYTHON3 -c 'import sys;print(sys.implementation.cache_tag)' 2>/dev/null || $PYTHON3 -c 'import imp;print(imp.get_tag())'`
486 AC_SUBST(PYTHON3_CACHE_TAG)
487 AC_MSG_RESULT([$PYTHON3_CACHE_TAG])
489 AC_MSG_CHECKING([for extension of cached and optimized python3 bytecode])
490 dnl We use -O instead of cache_from_source()'s optimization parameter
491 dnl as the latter was only added in Python 3.5. The fallback is needed
492 dnl as cache_from_source() itself is new in Python 3.4.
494 dnl This needs a shell-level || because Python one line program support
496 PYTHON3_CACHE_OPT1_EXT=`$PYTHON3 -O -c 'import importlib,sys;print("{1}{2}".format(*importlib.util.cache_from_source("").rpartition(sys.implementation.cache_tag)))' 2>/dev/null || $PYTHON3 -c 'import imp;print(imp.get_tag()+".pyo")'`
497 AC_SUBST(PYTHON3_CACHE_OPT1_EXT)
498 AC_MSG_RESULT([$PYTHON3_CACHE_OPT1_EXT])
500 BINDINGS="$BINDINGS python3"
502 AC_MSG_RESULT([no (install python3-dev or python3-devel package or similar)])
503 if test yes = "$with_python3" ; then
504 AC_MSG_ERROR([Python.h not found])
511 if test x$USE_MAINTAINER_MODE = xyes; then
512 dnl Need python in maintainer mode to run doxy2swig.py.
513 dnl Either Python 2 or 3 is OK for this.
514 if test -n "$PYTHON2" ; then
516 elif test -n "$PYTHON3" ; then
519 AC_PATH_PROGS(PYTHON, [python2 python python3], [])
521 test -z "$PYTHON" && AC_MSG_ERROR([python is required in maintainer mode])
524 if test no != "$with_php" ; then
525 dnl See comment for AC_PATH_PROGS(SWIG, ...).
526 if test -n "$PHP_CONFIG" ; then
527 AC_PATH_PROGS(PHP_CONFIG, ["$PHP_CONFIG"], [])
529 if test -z "$PHP_CONFIG" ; then
530 AC_PATH_PROGS(PHP_CONFIG, [php-config5 php-config5.6 php-config5.5 php-config], [])
532 AC_ARG_VAR(PHP_CONFIG, [php-config utility for PHP5])
533 AC_ARG_VAR(PHP, [PHP5 interpreter (optional - only needed to run PHP5 testsuite with)])
534 if test -n "$PHP_CONFIG" ; then
535 AC_MSG_CHECKING([$PHP_CONFIG version])
536 version=`$PHP_CONFIG --version 2>/dev/null`
538 dnl 5.6 was the final PHP5 release.
540 AC_MSG_RESULT([$version])
541 PHP_MAJOR_VERSION=`echo "$version"|cut -d. -f1`
544 AC_MSG_RESULT([$version (not supported, PHP5 bindings need PHP 5.x where x >= 5)])
545 if test yes = "$with_php" ; then
546 AC_MSG_ERROR([$PHP_CONFIG reports version $version - PHP5 bindings need PHP 5.x where x >= 5])
551 AC_SUBST(PHP_MAJOR_VERSION)
553 if test no != "$with_php" ; then
554 AC_MSG_CHECKING([for PHP5 extension directory])
555 if test -z "$PHP_EXTENSION_DIR" ; then
556 PHP_EXTENSION_DIR=`$PHP_CONFIG --extension-dir`
558 AC_MSG_RESULT([$PHP_EXTENSION_DIR])
559 AC_ARG_VAR(PHP_EXTENSION_DIR, [Directory to install PHP5 extensions in])
562 if test no != "$with_php" ; then
563 PHP_INC=`$PHP_CONFIG --includes`
565 save_CPPFLAGS=$CPPFLAGS
566 CPPFLAGS="$CPPFLAGS $PHP_INC"
567 dnl One of SGI's SuSE boxes has php-config but no headers.
568 AC_CHECK_HEADER(zend.h, [], [
569 if test yes = "$with_php" ; then
570 AC_MSG_ERROR(['$PHP_CONFIG --includes' reports '$PHP_INC' but zend.h can't be included from there])
573 CPPFLAGS=$save_CPPFLAGS
576 if test no != "$with_php" ; then
577 if test x"$PHP" = x ; then
578 AC_MSG_CHECKING([for PHP5 interpreter])
579 dnl PHP5's php-config supports --php-binary, so just use that.
580 PHP=`$PHP_CONFIG --php-binary 2>/dev/null`
581 if test x"$PHP" != x ; then
582 if $PHP -r 'exit(0);' 2> /dev/null ; then
583 if $PHP -r 'exit(PHP_MAJOR_VERSION==5?0:1);' 2> /dev/null ; then
584 AC_MSG_RESULT([$PHP])
586 dnl We get /usr/bin/php on Debian, which might be PHP7:
587 dnl https://bugs.debian.org/819139
588 if ${PHP}5 -r 'exit(PHP_MAJOR_VERSION==5?0:1);' 2> /dev/null ; then
590 AC_MSG_RESULT([$PHP])
592 AC_MSG_RESULT([no ($PHP isn't PHP5)])
597 AC_MSG_RESULT([no ($PHP does not work)])
601 AC_MSG_RESULT([not found])
604 AC_PATH_PROGS(PHP, ["$PHP"], [])
606 if test x"$PHP" = x ; then
607 AC_MSG_WARN([No PHP5 interpreter found - PHP5 bindings tests will be skipped])
608 dnl The skiptest script just returns exit code 77.
609 PHP='$(top_srcdir)/skiptest'
611 AC_MSG_CHECKING([for PHP5 path separator])
612 PHP_PATH_SEPARATOR=`$PHP -r 'echo PATH_SEPARATOR;'`
613 AC_SUBST([PHP_PATH_SEPARATOR])
614 AC_MSG_RESULT([$PHP_PATH_SEPARATOR])
619 dnl This is a bit of an informed guess, pending more information from
620 dnl someone who actually has mingw and wants to build the PHP bindings
622 PHP_LIBS="-L`$PHP_CONFIG --prefix` -lphp${PHP_MAJOR_VERSION}ts" ;;
624 PHP_LIBS="-lphp${PHP_MAJOR_VERSION}lib" ;;
629 BINDINGS="$BINDINGS php"
634 if test no != "$with_php7" ; then
635 dnl See comment for AC_PATH_PROGS(SWIG, ...).
636 if test -n "$PHP_CONFIG7" ; then
637 AC_PATH_PROGS(PHP_CONFIG7, ["$PHP_CONFIG7"], [])
639 if test -z "$PHP_CONFIG7" ; then
640 AC_PATH_PROGS(PHP_CONFIG7, [php-config7.4 php-config7.3 php-config7.2 php-config7.1 php-config7.0 php-config], [])
642 AC_ARG_VAR(PHP_CONFIG7, [php-config utility for PHP7])
643 AC_ARG_VAR(PHP7, [PHP7 interpreter (optional - only needed to run PHP7 testsuite with)])
644 if test -n "$PHP_CONFIG7" ; then
645 AC_MSG_CHECKING([$PHP_CONFIG7 version])
646 version=`$PHP_CONFIG7 --version 2>/dev/null`
649 AC_MSG_RESULT([$version (not supported, PHP7 bindings need PHP 7.x)])
650 if test yes = "$with_php7" ; then
651 AC_MSG_ERROR([$PHP_CONFIG7 reports version $version - PHP7 bindings need 7.x])
656 AC_MSG_RESULT([$version])
657 PHP7_MAJOR_VERSION=`echo "$version"|cut -d. -f1`
660 AC_MSG_RESULT([$version (PHP >= 8.0 isn't yet supported)])
661 if test yes = "$with_php7" ; then
662 AC_MSG_ERROR([$PHP_CONFIG7 reports version $version - PHP7 bindings need 7.x])
667 AC_SUBST(PHP7_MAJOR_VERSION)
669 if test no != "$with_php7" ; then
670 AC_MSG_CHECKING([for PHP7 extension directory])
671 if test -z "$PHP7_EXTENSION_DIR" ; then
672 PHP7_EXTENSION_DIR=`$PHP_CONFIG7 --extension-dir`
674 AC_MSG_RESULT([$PHP7_EXTENSION_DIR])
675 AC_ARG_VAR(PHP7_EXTENSION_DIR, [Directory to install PHP7 extensions in])
678 if test no != "$with_php7" ; then
679 PHP7_INC=`$PHP_CONFIG7 --includes`
683 if test no != "$with_php7" ; then
684 if test x"$PHP7" = x ; then
685 AC_MSG_CHECKING([for PHP7 interpreter])
686 dnl PHP7's php-config supports --php-binary, so just use that.
687 PHP7=`$PHP_CONFIG7 --php-binary 2>/dev/null`
688 if test x"$PHP7" != x ; then
689 if $PHP7 -r 'exit(0);' 2> /dev/null ; then
690 if $PHP7 -r 'exit(PHP_MAJOR_VERSION==7?0:1);' 2> /dev/null ; then
691 AC_MSG_RESULT([$PHP7])
693 AC_MSG_RESULT([no ($PHP7 isn't PHP7)])
697 AC_MSG_RESULT([no ($PHP7 does not work)])
701 AC_MSG_RESULT([not found])
704 AC_PATH_PROGS(PHP7, ["$PHP7"], [])
706 if test x"$PHP7" = x ; then
707 AC_MSG_WARN([No PHP7 interpreter found - PHP7 bindings tests will be skipped])
708 dnl The skiptest script just returns exit code 77.
709 PHP7='$(top_srcdir)/skiptest'
711 AC_MSG_CHECKING([for PHP7 path separator])
712 PHP7_PATH_SEPARATOR=`$PHP7 -r 'echo PATH_SEPARATOR;'`
713 AC_SUBST([PHP7_PATH_SEPARATOR])
714 AC_MSG_RESULT([$PHP7_PATH_SEPARATOR])
719 dnl This is a bit of an informed guess, pending more information from
720 dnl someone who actually has mingw and wants to build the PHP bindings
722 PHP7_LIBS="-L`$PHP_CONFIG7 --prefix` -lphp${PHP7_MAJOR_VERSION}ts" ;;
724 PHP7_LIBS="-lphp${PHP7_MAJOR_VERSION}lib" ;;
729 BINDINGS="$BINDINGS php7"
734 if test no != "$with_tcl" ; then
735 dnl The documented minimum requirement is Tcl 8.5. Older versions may work,
736 dnl but we don't test with them regularly, and they are no longer supported
737 dnl upstream. Also ::tcl::pckconfig was added in Tcl 8.5, which makes the
738 dnl tests below simpler and more reliable.
740 dnl If you really want to build with an older version, run configure with
741 dnl a lower tcl_min and specify at least TCL_INC explicitly:
743 dnl ./configure tcl_min=8.4 TCL_INC=/usr/include/tcl8.4
745 dnl We definitely need at least Tcl 8.1 for TCL_STUBS.
747 AC_PATH_PROGS(TCLSH, ["${TCLSH-tclsh}"], [])
748 AC_ARG_VAR(TCLSH, [Tcl interpreter])
749 if test -n "$TCLSH" ; then
750 AC_MSG_CHECKING([$TCLSH version])
751 if echo 'if {$tcl_version < '"$tcl_min"' } { exit 1 }'|$TCLSH 2> /dev/null ; then
752 tcl_version=`echo 'puts "$tcl_version"'|$TCLSH`
753 AC_MSG_RESULT([$tcl_version])
755 AC_ARG_VAR(TCL_LIB, [Directory to install Tcl files into])
756 if test -z "$TCL_LIB" ; then
757 [TCL_LIB=`echo 'foreach d $tcl_pkgPath {if {![regexp {/share(/|$)} $d]} {break}};puts $d'|$TCLSH`]
761 AC_ARG_VAR([TCL_INC], [Directory to include for Tcl headers])
762 if test -z "$TCL_INC" ; then
763 dnl ::tcl::pkgconfig was added in Tcl 8.5.
764 [TCL_INC=`echo 'puts [::tcl::pkgconfig get includedir,runtime]'|$TCLSH 2> /dev/null`]
767 dnl Check that the headers are there (the tcl8.N-dev package
768 dnl may not be installed).
770 AC_MSG_CHECKING([for tcl.h from Tcl $tcl_version])
771 if test x"$TCL_INC" != x && test -f "$TCL_INC/tcl.h" ; then
772 tcl_hdr_version=`awk '($1 == "#define" && $2 == "TCL_VERSION") {print $3}' "$TCL_INC/tcl.h"|sed 's/"//g'`
773 if test x"$tcl_hdr_version" = x"$tcl_version" ; then
774 AC_MSG_RESULT([$TCL_INC/tcl.h])
775 BINDINGS="$BINDINGS tcl8"
776 if test x"$TCL_INC" != x"/usr/include" ; then
777 TCL_CPPFLAGS="-I$TCL_INC"
780 AC_MSG_RESULT([not found])
781 if test yes = "$with_tcl" ; then
782 AC_MSG_ERROR([Found tcl.h from version $tcl_hdr_version, not $tcl_version - specify TCL_INC on configure command line])
787 AC_MSG_RESULT([not found])
788 if test yes = "$with_tcl" ; then
789 AC_MSG_ERROR([Can't find tcl.h])
794 if test -n "$TCLSH" ; then
795 dnl Cygwin needs to link with -ltcl8.5 or similar.
799 AC_CHECK_LIB([tcl$tcl_version], [Tcl_Init],
800 [TCL_LIBS="-ltcl$tcl_version"],
801 [AC_MSG_ERROR([libtcl$tcl_version not found])])
804 dnl ::tcl::pkgconfig was added in Tcl 8.5, but prior to 8.6 it isn't
805 dnl necessary to link against -ltclstub anyway.
806 [tcl_libdir_runtime=`echo 'puts [::tcl::pkgconfig get libdir,runtime]'|$TCLSH 2> /dev/null`]
807 if test -n "$tcl_libdir_runtime" ; then
808 for x in "/tcl$tcl_version" "" ; do
809 TCLCONFIG_SH=$tcl_libdir_runtime$x/tclConfig.sh
810 if test -r "$TCLCONFIG_SH" ; then
811 eval "`sed 's/^TCL_STUB_LIB_SPEC=/TCL_LIBS=/p;d' $TCLCONFIG_SH`"
816 TCL_CPPFLAGS="$TCL_CPPFLAGS -DUSE_TCL_STUBS" ;;
820 AC_SUBST(TCL_CPPFLAGS)
823 AC_MSG_RESULT([< $tcl_min (too old)])
824 if test yes = "$with_tcl" ; then
825 AC_MSG_ERROR([$TCLSH too old (Tcl $tcl_min or newer required)])
829 if test yes = "$with_tcl" ; then
830 AC_MSG_ERROR([tclsh not found])
835 if test no != "$with_csharp" ; then
837 AC_ARG_VAR(CSC, [CSharp compiler command])
838 if test -n "$CSC" ; then
839 AC_PATH_PROGS(CSC, ["$CSC"], [])
841 if test -z "$CSC" ; then
842 dnl First we try cli-csc and mono-csc, which are used by Debian and Ubuntu
843 dnl as "alternatives" which can be mapped to the CSharp compiler the admin
845 AC_PATH_PROGS(CSC, [cli-csc mono-csc], [])
846 if test -z "$CSC" ; then
847 dnl mcs is the Mono CSharp compiler, which is a unified compiler
848 dnl available from Mono 2.11 (and also the compiler in Mono 1.0, but
849 dnl that's no longer relevant).
850 AC_PATH_PROGS(CSC, [mcs], [])
851 if test -n "$CSC" ; then
852 dnl There are other tools called mcs (such as /usr/bin/mcs on Tru64),
853 dnl so we check that the mcs we found understands --version which is
854 dnl sufficient to distinguish mono's mcs from the Tru64 one.
855 AC_MSG_CHECKING([whether $CSC is from GNU Mono])
856 if (exec >&5 2>&5;$CSC --version </dev/null;exit $?) ; then
861 csc_note="$csc_note (found different mcs program)"
865 if test -z "$CSC" ; then
866 dnl csc is the Microsoft CSharp compiler.
867 AC_PATH_PROGS(CSC, [csc], [])
868 if test -n "$CSC" ; then
869 dnl Chicken (the Scheme-to-C compiler) includes a tool called csc so we
870 dnl check if the output from "csc -version" includes the word chicken
871 dnl which is sufficient to distinguish Chicken's csc from Microsoft's
873 AC_MSG_CHECKING([whether $CSC is for CSharp])
874 if $CSC -version 2>/dev/null|grep chicken > /dev/null ; then
877 csc_note="$csc_note (found Chicken csc program)"
885 if test -n "$CSC" ; then
886 AC_ARG_VAR(GACUTIL, [gacutil utility to use for CSharp bindings])
887 if test -n "$GACUTIL" ; then
888 AC_PATH_PROGS(GACUTIL, ["$GACUTIL"], [])
890 if test -z "$GACUTIL" ; then
891 AC_PATH_PROGS(GACUTIL, [cli-gacutil gacutil], [])
894 AC_ARG_VAR(SN, [sn utility to use for CSharp bindings])
895 if test -n "$SN" ; then
896 AC_PATH_PROGS(SN, ["$SN"], [])
898 if test -z "$SN" ; then
899 AC_PATH_PROGS(SN, [cli-sn sn], [])
901 if test -n "$GACUTIL" -a -n "$SN" ; then
902 AC_MSG_CHECKING([whether the CSharp compiler works])
903 [echo 'class conftest { public static void Main() { System.Console.WriteLine("OK"); } }' > conftest.cs]
904 if (exec >&5 2>&5;$CSC /out:conftest.exe conftest.cs;exit $?) ; then
906 AC_MSG_CHECKING([whether CSharp programs can just be run])
907 if test OK = "`./conftest.exe 2> /dev/null`" ; then
912 AC_PATH_PROGS(CLI, ["${CLI-cli}"], [])
913 if test -z "$CLI" ; then
914 AC_PATH_PROGS(CLI, [mono ilrun], [])
916 AC_ARG_VAR(CLI, [CSharp bytecode interpreter (optional - only needed to run CSharp testsuite with)])
917 if test -n "$CLI" ; then
918 AC_MSG_CHECKING([whether $CLI can run CSharp programs])
919 if test OK = "`$CLI ./conftest.exe 2> /dev/null`" ; then
923 AC_MSG_RESULT([no - CSharp tests will be skipped])
924 RUN_CSHARP='\$(top_srcdir)/skiptest'
927 AC_MSG_RESULT([not found - CSharp tests will be skipped])
928 RUN_CSHARP='\$(top_srcdir)/skiptest'
933 AC_MSG_CHECKING([for extra flags for $GACUTIL])
934 GACUTIL_FLAGS='/package $(ASSEMBLY) /gacdir $(libdir) /root $(DESTDIR)$(libdir)'
935 dnl Microsoft's gacutil accepts fewer options than Mono's
936 $GACUTIL /\?|grep '\<Mono\>' >/dev/null || GACUTIL_FLAGS=
937 AC_SUBST([GACUTIL_FLAGS])
938 if test -z "$GACUTIL_FLAGS" ; then
941 AC_MSG_RESULT([$GACUTIL_FLAGS])
944 BINDINGS="$BINDINGS csharp"
947 if test yes = "$with_csharp" ; then
948 AC_MSG_ERROR([CSharp compiler $CSC doesn't work])
952 if test yes = "$with_csharp" ; then
953 if test -z "$GACUTIL" ; then
954 AC_MSG_ERROR([Mono gacutil not found])
955 elif test -z "$SN" ; then
956 AC_MSG_ERROR([Mono sn not found])
961 if test yes = "$with_csharp" ; then
962 AC_MSG_ERROR([CSharp compiler not found$csc_note])
968 if test no != "$with_java" ; then
969 AC_PATH_PROGS(JAVA, ["${JAVA-java}"], [],
970 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
971 AC_PATH_PROGS(JAVAC, ["${JAVAC-javac}"], [],
972 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
973 AC_PATH_PROGS(JAR, ["${JAR-jar}"], [],
974 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
975 AC_ARG_VAR(JAVA, [Java interpreter command])
976 AC_ARG_VAR(JAVAC, [Java compiler command])
977 AC_ARG_VAR(JAR, [java jar utility])
978 AC_ARG_VAR(JAVA_HOME, [Pathname of the directory where the JDK is installed])
979 AC_ARG_VAR(JDK_HOME, [Pathname of the directory where the JDK is installed])
980 AC_ARG_VAR(JNI_INCLUDE_DIR, [Pathname of the directory where jni.h is installed])
981 if test -n "$JAVA" -a -n "$JAVAC" -a -n "$JAR" ; then
983 dnl The JNI library *requires* "Java 2", which is 1.2 or better.
985 dnl So checking for jni.h presumably implicitly checks we have "Java 2".
986 dnl Note: jni.h #defines JNI_VERSION_1_[12468] (but not 3, 5 or 7 it seems).
987 dnl So we could check for one of these if we want to check for a particular
990 AC_CHECK_HEADER([jni.h], [java_ok=yes], [
991 dnl We need to look for jni.h in /usr/lib/jvm/java-gcj/include on some
992 dnl Debian and Ubuntu boxes at least. And on Mac OS X, jni.h lives
993 dnl in /System/Library/Frameworks/JavaVM.framework/Headers.
994 SAVE_CPPFLAGS=$CPPFLAGS
996 dnl Avoid endlessly traversing if there's a symlink loop.
997 for count in 1 2 3 4 5 6 7 8 9 ; do
998 r=`readlink "$real_javac"`
999 test -n "$r" || break
1002 dnl Translate ".../bin/javac" to ".../include".
1003 [rel_jnidir=`echo "$real_javac"|sed 's!/[^/]*/[^/]*$!/include!'`]
1006 ${JAVA_HOME+"$JAVA_HOME/include"} \
1007 ${JDK_HOME+"$JDK_HOME/include"} \
1009 /System/Library/Frameworks/JavaVM.framework/Headers ; do
1010 CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
1011 AC_MSG_CHECKING([for jni.h in $jnidir])
1012 if test -f "$jnidir/jni.h" ; then
1013 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
1014 if test yes = $java_ok ; then
1015 AC_MSG_RESULT([yes])
1016 JAVA_CPPFLAGS=-I$jnidir
1020 dnl For OpenJDK (and maybe others) we have to specify an extra -I
1021 dnl option for an OS-specific subdirectory containing a "jni_md.h"
1022 dnl header which is included by "jni.h". Sadly we seem to need to
1023 dnl hardcode a mapping for these platform names - the list below
1024 dnl was determined by inspecting the source code of OpenJDK 8.
1028 jni_host_os=linux ;;
1030 jni_host_os=solaris ;;
1031 mingw* | pw32* | cygwin*)
1032 jni_host_os=win32 ;;
1034 jni_host_os=darwin ;;
1040 if test -n "$jni_host_os" ; then
1041 CPPFLAGS="$CPPFLAGS -I$jnidir/$jni_host_os"
1042 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
1043 if test yes = $java_ok ; then
1044 AC_MSG_RESULT([yes, requires additional -I$jnidir/$jni_host_os])
1045 JAVA_CPPFLAGS="-I$jnidir -I$jnidir/$jni_host_os"
1049 AC_MSG_RESULT([found, but not usable])
1051 CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
1056 CPPFLAGS=$SAVE_CPPFLAGS
1057 test noyes = $java_ok$with_java && AC_MSG_ERROR([jni.h not found])
1059 AC_SUBST(JAVA_CPPFLAGS)
1060 if test yes = $java_ok ; then
1061 AC_MSG_CHECKING([for Java path separator])
1062 [echo 'public class conftest { public static void main(String[] args) { System.out.println(System.getProperty("path.separator")); } }' > conftest.java]
1063 if (exec >&5 2>&5;$JAVAC conftest.java;exit $?) ; then
1064 JAVA_PATHSEP=`$JAVA conftest 2>&5`
1065 AC_SUBST(JAVA_PATHSEP)
1066 if test -n "$JAVA_PATHSEP" ; then
1067 AC_MSG_RESULT($JAVA_PATHSEP)
1068 BINDINGS="$BINDINGS java"
1070 dnl If -Xcheck:jni is supported then run tests with it.
1072 dnl ... except that with OpenJDK 8 and 9 -Xcheck:jni seems to report
1073 dnl false positives and so can't usefully be turned on in this
1074 dnl situation. Recheck this with future versions.
1075 dnl AC_MSG_CHECKING([for $JAVA -Xcheck:jni option])
1076 dnl JAVA_PATHSEP2=`$JAVA conftest 2>&5`
1077 JAVA_CHECK_JNI_OPTION=
1078 dnl if test "$JAVA_PATHSEP" = "$JAVA_PATHSEP2" ; then
1079 dnl JAVA_CHECK_JNI_OPTION=-Xcheck:jni
1080 dnl AC_MSG_RESULT([yes])
1082 dnl AC_MSG_RESULT([no])
1084 AC_SUBST([JAVA_CHECK_JNI_OPTION])
1086 AC_MSG_RESULT([failed to run test program])
1090 AC_MSG_RESULT([failed to compile test program])
1093 if test no = "$java_ok" ; then
1094 test yes = "$with_java" && AC_MSG_ERROR([Couldn't compile and run a simple Java test program])
1098 if test yes = "$with_java" ; then
1099 if test -z "$JAVA" ; then
1100 AC_MSG_ERROR([java not found])
1101 elif test -z "$JAVAC" ; then
1102 AC_MSG_ERROR([javac not found])
1103 elif test -z "$JAR" ; then
1104 AC_MSG_ERROR([jar not found])
1110 if test no != "$with_ruby" ; then
1111 dnl See comment for AC_PATH_PROGS(SWIG, ...).
1112 if test -n "$RUBY" ; then
1113 AC_PATH_PROGS(RUBY, ["$RUBY"], [])
1115 AC_PATH_PROGS(RUBY, [ruby], [])
1117 AC_ARG_VAR(RUBY, [Ruby interpreter])
1118 if test -n "$RUBY" ; then
1119 dnl Require Ruby 2.1 or newer.
1120 AC_MSG_CHECKING([$RUBY version])
1121 dnl RUBY_VERSION works with 1.6. Once we've checked we have at least 1.8
1122 dnl we can safely use RbConfig below (RbConfig requires Ruby 1.8).
1123 version=`$RUBY -e 'print RUBY_VERSION' 2>/dev/null`
1126 AC_MSG_RESULT([\$RUBY -e 'print RUBY_VERSION' didn't work])
1127 if test yes = "$with_ruby" ; then
1128 AC_MSG_ERROR([Working Ruby interpreter not found])
1133 AC_MSG_RESULT([$version (too old)])
1134 if test yes = "$with_ruby" ; then
1135 AC_MSG_ERROR([Only Ruby 2.1 or newer is supported ($RUBY is $version)])
1140 if test -n "$RUBY" ; then
1141 AC_MSG_RESULT([$version])
1142 AC_ARG_VAR(RUBY_INC, [Directory where ruby.h can be found])
1143 if test -z "$RUBY_INC" ; then
1144 dnl Ruby 1.9 added rubyhdrdir.
1145 [RUBY_INC=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyhdrdir"]'`]
1148 dnl Check that ruby.h is there, which is a good way to check that
1149 dnl the appropriate ruby-dev package has been installed.
1150 AC_MSG_CHECKING([for $RUBY_INC/ruby.h])
1151 if test -f "$RUBY_INC/ruby.h" ; then
1154 AC_ARG_VAR(RUBY_INC_ARCH, [Directory where ruby/config.h can be found])
1155 if test -z "$RUBY_INC_ARCH" ; then
1156 dnl Ruby 2.0 and later have rubyarchhdrdir.
1157 [RUBY_INC_ARCH=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyarchhdrdir"]'`]
1159 AC_SUBST(RUBY_INC_ARCH)
1161 AC_ARG_VAR(RUBY_LIB, [Directory to install ruby files into])
1162 if test -z "$RUBY_LIB" ; then
1163 [RUBY_LIB=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitelibdir"]'`]
1167 AC_ARG_VAR(RUBY_LIB_ARCH, [Directory to install ruby binary modules into])
1168 if test -z "$RUBY_LIB_ARCH" ; then
1169 [RUBY_LIB_ARCH=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitearchdir"]'`]
1171 AC_SUBST(RUBY_LIB_ARCH)
1174 if test unsupported = "$allow_undefined_flag" ; then
1175 dnl For Microsoft Windows and a few other platforms.
1176 [RUBY_LIBS=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["LIBRUBYARG"]'`]
1180 dnl rdoc is included as part of the Ruby core distribution, so run it
1181 dnl at build time rather shipping the rather large generated output in
1182 dnl our source tarball.
1183 if test -n "$RDOC" ; then
1184 AC_PATH_PROGS(RDOC, ["$RDOC"], [])
1186 dnl Try replace the *last* 'ruby' with 'rdoc'.
1187 rdoc_best_guess=`echo "$RUBY"|sed 's,\(.*\)ruby,\1rdoc,'`
1188 AC_PATH_PROGS(RDOC, ["$rdoc_best_guess"], [])
1189 if test -z "$RDOC"; then
1190 AC_PATH_PROGS(RDOC, [rdoc], [])
1193 if test -n "$RDOC"; then
1194 BINDINGS="$BINDINGS ruby"
1196 AC_ARG_VAR([RDOC], [Ruby documentation generator])
1198 AC_MSG_RESULT([no (install ruby-dev or ruby-devel package or similar)])
1199 if test yes = "$with_ruby" ; then
1200 AC_MSG_ERROR([ruby.h not found])
1203 RUBY_DLEXT=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG[["DLEXT"]]'`
1204 AC_SUBST(RUBY_DLEXT)
1209 if test no != "$with_perl" ; then
1210 AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
1211 AC_ARG_VAR(PERL, [Perl interpreter])
1212 if test -n "$PERL" ; then
1213 if test -z "$PERL_INC" ; then
1214 PERL_INC=`$PERL -MConfig -e 'print $Config{archlibexp}, "/CORE"'`
1218 AC_ARG_VAR(PERL_ARCH, [Directory to install architecture-dependent perl files into])
1219 if test -z "$PERL_ARCH" ; then
1220 PERL_ARCH=`$PERL -MConfig -e 'print $Config{installsitearch}'`
1224 AC_ARG_VAR(PERL_LIB, [Directory to install architecture-independent perl files into])
1225 if test -z "$PERL_LIB" ; then
1226 PERL_LIB=`$PERL -MConfig -e 'print $Config{installsitelib}'`
1230 AC_ARG_VAR(PERL_SO, [Extension for compiled Perl modules])
1231 if test -z "$PERL_SO" ; then
1232 PERL_SO=`$PERL -MConfig -e 'print ".", $Config{dlext}'`
1236 if test -z "$PERL_XAPIAN_VERSION" ; then
1237 dnl snapshot versions look like 1.2.3_git123
1238 case $PACKAGE_VERSION in
1240 PERL_XAPIAN_VERSION=`echo "$PACKAGE_VERSION"|sed 's/_git/./'` ;;
1242 PERL_XAPIAN_VERSION=$PACKAGE_VERSION.0 ;;
1245 AC_SUBST(PERL_XAPIAN_VERSION)
1247 BINDINGS="$BINDINGS perl"
1249 if test yes = "$with_perl" ; then
1250 AC_MSG_ERROR([perl not found])
1255 if test no != "$with_lua" ; then
1256 AC_PATH_PROGS(LUA, ["${LUA-lua}"], [])
1257 AC_ARG_VAR(LUA, [lua interpreter])
1258 if test -n "$LUA" ; then
1259 dnl We need Lua 5.1 or later.
1260 AC_MSG_CHECKING([$LUA version])
1261 lua_version=`$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' 2>&AS_MESSAGE_LOG_FD`
1263 case $lua_version in
1264 [[01234]].*|5.0|5.0.*)
1265 AC_MSG_RESULT([$lua_version < 5.1 (too old)])
1266 if test yes = "$with_lua" ; then
1267 AC_MSG_ERROR([$LUA too old (Lua 5.1 or newer required)])
1272 AC_MSG_RESULT([\$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' didn't work])
1274 if test yes = "$with_lua" ; then
1275 AC_MSG_ERROR([Working Lua interpreter not found])
1281 if test -n "$LUA" ; then
1282 AC_MSG_RESULT([$lua_version])
1284 AC_ARG_VAR([LUA_LIB], [Directory to install compiled Lua modules into])
1285 AC_ARG_VAR([LUA_SO], [Extension for compiled Lua modules (e.g. LUA_SO=.so)])
1286 AC_MSG_CHECKING([for directory to install compiled Lua modules into])
1287 if test -z "$LUA_LIB" -o -z "$LUA_SO" ; then
1288 lua_cpath=`$LUA -e 'require("package") print(package.cpath)'`
1289 dnl Look for the first absolute path in lua_cpath which has leaf
1290 dnl "?.<ext>" and put the directory part into lua_lib and <ext> into
1291 dnl lua_so. If LUA_SO was specified by the user, only consider
1292 dnl entries where <ext> matches LUA_SO.
1297 [lua_so_pat='[a-zA-Z][a-zA-Z]*'] ;;
1299 dnl If LUA_SO has a leading '.', remove it.
1300 lua_so_pat=`AS_ECHO("$LUA_SO")|sed 's/^\.//'` ;;
1302 dnl If LUA_SO was specified without a leading '.', add one to the
1303 dnl value substituted into Makefile.in.
1308 while test x"$lua_cpath" != x ; do
1309 [lua_lib=`expr X"$lua_cpath" : X'\([^;]*\)'`]
1310 lua_so=.`expr X"$lua_lib" : X'/.*/?\.\('"$lua_so_pat"'\)$'`
1313 dnl If someone has foolishly put ?.lua in cpath, ignore them.
1317 lua_lib=`expr X"$lua_lib" : X'\(/.*\)/?\.'"$lua_so_pat"'$'`
1320 [lua_cpath=`expr X"$lua_cpath" : X'[^;]*;*\(.*\)'`]
1322 test -n "$LUA_LIB" || LUA_LIB=$lua_lib
1323 test -n "$LUA_SO" || LUA_SO=$lua_so
1325 if test -z "$LUA_LIB"; then
1326 AC_MSG_RESULT([not found])
1328 AC_MSG_RESULT([$LUA_LIB])
1332 AC_MSG_CHECKING([for extension to use for compiled Lua modules])
1333 if test -z "$LUA_SO"; then
1334 AC_MSG_RESULT([not found])
1336 AC_MSG_RESULT([$LUA_SO])
1340 AC_MSG_CHECKING([for Lua header files])
1341 AC_ARG_VAR([LUA_INC], [Directory to include for lua headers])
1342 if test -z "$LUA_INC" ; then
1343 dirs="/usr/include/lua$lua_version /usr/local/include/lua$lua_version"
1345 if test -r "$i/lua.h"; then
1352 if test -z "$LUA_INC" ; then
1353 AC_MSG_RESULT([not found])
1355 AC_MSG_RESULT([$LUA_INC])
1356 BINDINGS="$BINDINGS lua"
1357 LUA_CPPFLAGS="-I$LUA_INC"
1359 AC_SUBST([LUA_CPPFLAGS])
1362 if test yes = "$with_lua" ; then
1363 AC_MSG_ERROR([lua not found])
1371 *python*) dnl Matches python and/or python3
1372 dnl C++11 has thread_local
1373 dnl GCC and some others have __thread
1374 dnl MSVC and some others have __declspec(thread)
1375 AC_MSG_CHECKING([for thread-local storage qualifier])
1376 AC_ARG_VAR([THREAD_LOCAL], [thread-local storage qualifier])
1377 if test -z "$THREAD_LOCAL" ; then
1378 for t in thread_local __thread '__declspec(thread)' ; do
1379 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[static $t void * p;]])],
1380 [THREAD_LOCAL=$t; break])
1383 if test -z "$THREAD_LOCAL" ; then
1384 AC_MSG_RESULT([unknown, disabling thread-local support])
1386 AC_MSG_RESULT([$THREAD_LOCAL])
1387 AC_DEFINE_UNQUOTED([THREAD_LOCAL], [$THREAD_LOCAL], [Thread local storage qualifier (undefined if no TLS)])
1392 dnl Set flags to control warnings (enable more, or disable annoying ones)
1393 dnl and other compiler specific flags.
1395 if test yes = "$GXX" ; then
1396 dnl Python itself is compiled with -fno-strict-aliasing, and it appears
1397 dnl it's safest to follow this lead when compiling the SWIG generated
1398 dnl interface code. E.g.:
1399 dnl https://article.gmane.org/gmane.comp.gcc.devel/74692
1400 dnl The code SWIG generates for other languages seems to have similar
1401 dnl issues too, so just turn this on for all of them.
1403 dnl There's no need to check -fno-strict-aliasing is supported as it works
1404 dnl with GCC 2.95 and we don't support anything older.
1405 SWIG_CXXFLAGS="-fno-strict-aliasing"
1407 dnl We need to explicitly link against -lstdc++ on OpenBSD (discovered
1408 dnl on OpenBSD 3.7 with GCC 3.3.5 but this appears to be due to a
1409 dnl deliberate decision on the part of OpenBSD developers). Luckily
1410 dnl we can just always specify -lstdc++ explicitly if GCC is the
1411 dnl compiler and libtool will eliminate the duplicate on other
1413 XAPIAN_LIBS="$XAPIAN_LIBS -lstdc++"
1415 dnl Intel's C++ compiler is identified as "GXX" by autoconf's test - check
1416 dnl which we actually have.
1418 [#ifdef __INTEL_COMPILER
1423 dnl Intel's compiler:
1425 dnl -w1 stops the avalanche of uninteresting "remark" messages.
1426 dnl -wd... disables warnings which don't have good code workarounds.
1428 dnl Swig generated code gives lots of unused and uninitialized warnings.
1429 dnl They're non-harmful, so suppress them.
1430 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -w1 -wd177,1572"
1435 dnl Swig generated code gives lots of unused and uninitialized warnings.
1436 dnl They're non-harmful, so suppress them.
1437 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -Wno-unused -Wno-uninitialized"
1440 if test no != "$enable_visibility"; then
1441 dnl GCC doesn't support symbol visibility on all platforms (e.g. it isn't
1442 dnl supported on mingw and visibility attributes result in warnings).
1443 AC_MSG_CHECKING([if $CXX -fvisibility=hidden -fvisibility-inlines-hidden works])
1444 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
1445 AC_MSG_RESULT([yes])
1446 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -fvisibility=hidden -fvisibility-inlines-hidden"
1452 AC_SUBST(SWIG_CXXFLAGS)
1454 dnl Restore CXXFLAGS to those the user specified or autoconf defaulted to.
1455 CXXFLAGS=$save_CXXFLAGS
1457 dnl Required for auto regeneration to work in a combined maintainer-mode tree.
1458 : ${AUTOM4TE=autom4te}
1459 AC_SUBST([AUTOM4TE])
1461 AC_CONFIG_FILES([Makefile
1464 python/Makefile python/docs/conf.py python/version.i
1465 python3/Makefile python3/docs/conf.py python3/version.i
1469 tcl8/Makefile tcl8/pkgIndex.tcl
1470 csharp/Makefile csharp/AssemblyInfo.cs
1474 xapian-bindings.spec
1479 if test -z "$BINDINGS" ; then
1480 echo "*** Not found the required tools for building bindings for any"
1481 echo "*** supported language!"
1483 echo "*** You may need to install -dev or -devel packages for the languages"
1484 echo "*** you want to build bindings for."
1486 echo "*** For details of how to point configure at tools not on PATH, see:"
1487 echo "*** ./configure --help"
1489 echo "*** Building bindings for languages:" $BINDINGS
1492 if test "$COMPAT_VERSION" != "$XAPIAN_VERSION" ; then
1493 release_series=[`echo "$COMPAT_VERSION"|sed 's/[0-9][0-9]*$//'`]
1494 case $XAPIAN_VERSION in
1495 $release_series*) ;;
1497 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.])
1500 dnl 0.8.2 was the first version which set XAPIAN_VERSION
1501 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.])