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.20])
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 Some Python versions (or maybe packages) need us to explicitly
495 dnl `import importlib.util` here, but others work without it.
497 dnl This needs a shell-level || because Python one line program support
499 PYTHON3_CACHE_OPT1_EXT=`$PYTHON3 -O -c 'import importlib,importlib.util,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")'`
500 AC_SUBST(PYTHON3_CACHE_OPT1_EXT)
501 AC_MSG_RESULT([$PYTHON3_CACHE_OPT1_EXT])
503 BINDINGS="$BINDINGS python3"
505 AC_MSG_RESULT([no (install python3-dev or python3-devel package or similar)])
506 if test yes = "$with_python3" ; then
507 AC_MSG_ERROR([Python.h not found])
514 if test x$USE_MAINTAINER_MODE = xyes; then
515 dnl Need python in maintainer mode to run doxy2swig.py.
516 dnl Either Python 2 or 3 is OK for this.
517 if test -n "$PYTHON2" ; then
519 elif test -n "$PYTHON3" ; then
522 AC_PATH_PROGS(PYTHON, [python2 python python3], [])
524 test -z "$PYTHON" && AC_MSG_ERROR([python is required in maintainer mode])
527 if test no != "$with_php" ; then
528 dnl See comment for AC_PATH_PROGS(SWIG, ...).
529 if test -n "$PHP_CONFIG" ; then
530 AC_PATH_PROGS(PHP_CONFIG, ["$PHP_CONFIG"], [])
532 if test -z "$PHP_CONFIG" ; then
533 AC_PATH_PROGS(PHP_CONFIG, [php-config5 php-config5.6 php-config5.5 php-config], [])
535 AC_ARG_VAR(PHP_CONFIG, [php-config utility for PHP5])
536 AC_ARG_VAR(PHP, [PHP5 interpreter (optional - only needed to run PHP5 testsuite with)])
537 if test -n "$PHP_CONFIG" ; then
538 AC_MSG_CHECKING([$PHP_CONFIG version])
539 version=`$PHP_CONFIG --version 2>/dev/null`
541 dnl 5.6 was the final PHP5 release.
543 AC_MSG_RESULT([$version])
544 PHP_MAJOR_VERSION=`echo "$version"|cut -d. -f1`
547 AC_MSG_RESULT([$version (not supported, PHP5 bindings need PHP 5.x where x >= 5)])
548 if test yes = "$with_php" ; then
549 AC_MSG_ERROR([$PHP_CONFIG reports version $version - PHP5 bindings need PHP 5.x where x >= 5])
554 AC_SUBST(PHP_MAJOR_VERSION)
556 if test no != "$with_php" ; then
557 AC_MSG_CHECKING([for PHP5 extension directory])
558 if test -z "$PHP_EXTENSION_DIR" ; then
559 PHP_EXTENSION_DIR=`$PHP_CONFIG --extension-dir`
561 AC_MSG_RESULT([$PHP_EXTENSION_DIR])
562 AC_ARG_VAR(PHP_EXTENSION_DIR, [Directory to install PHP5 extensions in])
565 if test no != "$with_php" ; then
566 PHP_INC=`$PHP_CONFIG --includes`
568 save_CPPFLAGS=$CPPFLAGS
569 CPPFLAGS="$CPPFLAGS $PHP_INC"
570 dnl One of SGI's SuSE boxes has php-config but no headers.
571 AC_CHECK_HEADER(zend.h, [], [
572 if test yes = "$with_php" ; then
573 AC_MSG_ERROR(['$PHP_CONFIG --includes' reports '$PHP_INC' but zend.h can't be included from there])
576 CPPFLAGS=$save_CPPFLAGS
579 if test no != "$with_php" ; then
580 if test x"$PHP" = x ; then
581 AC_MSG_CHECKING([for PHP5 interpreter])
582 dnl PHP5's php-config supports --php-binary, so just use that.
583 PHP=`$PHP_CONFIG --php-binary 2>/dev/null`
584 if test x"$PHP" != x ; then
585 if $PHP -r 'exit(0);' 2> /dev/null ; then
586 if $PHP -r 'exit(PHP_MAJOR_VERSION==5?0:1);' 2> /dev/null ; then
587 AC_MSG_RESULT([$PHP])
589 dnl We get /usr/bin/php on Debian, which might be PHP7:
590 dnl https://bugs.debian.org/819139
591 if ${PHP}5 -r 'exit(PHP_MAJOR_VERSION==5?0:1);' 2> /dev/null ; then
593 AC_MSG_RESULT([$PHP])
595 AC_MSG_RESULT([no ($PHP isn't PHP5)])
600 AC_MSG_RESULT([no ($PHP does not work)])
604 AC_MSG_RESULT([not found])
607 AC_PATH_PROGS(PHP, ["$PHP"], [])
609 if test x"$PHP" = x ; then
610 AC_MSG_WARN([No PHP5 interpreter found - PHP5 bindings tests will be skipped])
611 dnl The skiptest script just returns exit code 77.
612 PHP='$(top_srcdir)/skiptest'
614 AC_MSG_CHECKING([for PHP5 path separator])
615 PHP_PATH_SEPARATOR=`$PHP -r 'echo PATH_SEPARATOR;'`
616 AC_SUBST([PHP_PATH_SEPARATOR])
617 AC_MSG_RESULT([$PHP_PATH_SEPARATOR])
622 dnl This is a bit of an informed guess, pending more information from
623 dnl someone who actually has mingw and wants to build the PHP bindings
625 PHP_LIBS="-L`$PHP_CONFIG --prefix` -lphp${PHP_MAJOR_VERSION}ts" ;;
627 PHP_LIBS="-lphp${PHP_MAJOR_VERSION}lib" ;;
632 BINDINGS="$BINDINGS php"
637 if test no != "$with_php7" ; then
638 dnl See comment for AC_PATH_PROGS(SWIG, ...).
639 if test -n "$PHP_CONFIG7" ; then
640 AC_PATH_PROGS(PHP_CONFIG7, ["$PHP_CONFIG7"], [])
642 if test -z "$PHP_CONFIG7" ; then
643 AC_PATH_PROGS(PHP_CONFIG7, [php-config7.4 php-config7.3 php-config7.2 php-config7.1 php-config7.0 php-config], [])
645 AC_ARG_VAR(PHP_CONFIG7, [php-config utility for PHP7])
646 AC_ARG_VAR(PHP7, [PHP7 interpreter (optional - only needed to run PHP7 testsuite with)])
647 if test -n "$PHP_CONFIG7" ; then
648 AC_MSG_CHECKING([$PHP_CONFIG7 version])
649 version=`$PHP_CONFIG7 --version 2>/dev/null`
652 AC_MSG_RESULT([$version (not supported, PHP7 bindings need PHP 7.x)])
653 if test yes = "$with_php7" ; then
654 AC_MSG_ERROR([$PHP_CONFIG7 reports version $version - PHP7 bindings need 7.x])
659 AC_MSG_RESULT([$version])
660 PHP7_MAJOR_VERSION=`echo "$version"|cut -d. -f1`
663 AC_MSG_RESULT([$version (PHP >= 8.0 isn't yet supported)])
664 if test yes = "$with_php7" ; then
665 AC_MSG_ERROR([$PHP_CONFIG7 reports version $version - PHP7 bindings need 7.x])
670 AC_SUBST(PHP7_MAJOR_VERSION)
672 if test no != "$with_php7" ; then
673 AC_MSG_CHECKING([for PHP7 extension directory])
674 if test -z "$PHP7_EXTENSION_DIR" ; then
675 PHP7_EXTENSION_DIR=`$PHP_CONFIG7 --extension-dir`
677 AC_MSG_RESULT([$PHP7_EXTENSION_DIR])
678 AC_ARG_VAR(PHP7_EXTENSION_DIR, [Directory to install PHP7 extensions in])
681 if test no != "$with_php7" ; then
682 PHP7_INC=`$PHP_CONFIG7 --includes`
686 if test no != "$with_php7" ; then
687 if test x"$PHP7" = x ; then
688 AC_MSG_CHECKING([for PHP7 interpreter])
689 dnl PHP7's php-config supports --php-binary, so just use that.
690 PHP7=`$PHP_CONFIG7 --php-binary 2>/dev/null`
691 if test x"$PHP7" != x ; then
692 if $PHP7 -r 'exit(0);' 2> /dev/null ; then
693 if $PHP7 -r 'exit(PHP_MAJOR_VERSION==7?0:1);' 2> /dev/null ; then
694 AC_MSG_RESULT([$PHP7])
696 AC_MSG_RESULT([no ($PHP7 isn't PHP7)])
700 AC_MSG_RESULT([no ($PHP7 does not work)])
704 AC_MSG_RESULT([not found])
707 AC_PATH_PROGS(PHP7, ["$PHP7"], [])
709 if test x"$PHP7" = x ; then
710 AC_MSG_WARN([No PHP7 interpreter found - PHP7 bindings tests will be skipped])
711 dnl The skiptest script just returns exit code 77.
712 PHP7='$(top_srcdir)/skiptest'
714 AC_MSG_CHECKING([for PHP7 path separator])
715 PHP7_PATH_SEPARATOR=`$PHP7 -r 'echo PATH_SEPARATOR;'`
716 AC_SUBST([PHP7_PATH_SEPARATOR])
717 AC_MSG_RESULT([$PHP7_PATH_SEPARATOR])
722 dnl This is a bit of an informed guess, pending more information from
723 dnl someone who actually has mingw and wants to build the PHP bindings
725 PHP7_LIBS="-L`$PHP_CONFIG7 --prefix` -lphp${PHP7_MAJOR_VERSION}ts" ;;
727 PHP7_LIBS="-lphp${PHP7_MAJOR_VERSION}lib" ;;
732 BINDINGS="$BINDINGS php7"
737 if test no != "$with_tcl" ; then
738 dnl The documented minimum requirement is Tcl 8.5. Older versions may work,
739 dnl but we don't test with them regularly, and they are no longer supported
740 dnl upstream. Also ::tcl::pckconfig was added in Tcl 8.5, which makes the
741 dnl tests below simpler and more reliable.
743 dnl If you really want to build with an older version, run configure with
744 dnl a lower tcl_min and specify at least TCL_INC explicitly:
746 dnl ./configure tcl_min=8.4 TCL_INC=/usr/include/tcl8.4
748 dnl We definitely need at least Tcl 8.1 for TCL_STUBS.
750 AC_PATH_PROGS(TCLSH, ["${TCLSH-tclsh}"], [])
751 AC_ARG_VAR(TCLSH, [Tcl interpreter])
752 if test -n "$TCLSH" ; then
753 AC_MSG_CHECKING([$TCLSH version])
754 if echo 'if {$tcl_version < '"$tcl_min"' } { exit 1 }'|$TCLSH 2> /dev/null ; then
755 tcl_version=`echo 'puts "$tcl_version"'|$TCLSH`
756 AC_MSG_RESULT([$tcl_version])
758 AC_ARG_VAR(TCL_LIB, [Directory to install Tcl files into])
759 if test -z "$TCL_LIB" ; then
760 [TCL_LIB=`echo 'foreach d $tcl_pkgPath {if {![regexp {/share(/|$)} $d]} {break}};puts $d'|$TCLSH`]
764 AC_ARG_VAR([TCL_INC], [Directory to include for Tcl headers])
765 if test -z "$TCL_INC" ; then
766 dnl ::tcl::pkgconfig was added in Tcl 8.5.
767 [TCL_INC=`echo 'puts [::tcl::pkgconfig get includedir,runtime]'|$TCLSH 2> /dev/null`]
770 dnl Check that the headers are there (the tcl8.N-dev package
771 dnl may not be installed).
773 AC_MSG_CHECKING([for tcl.h from Tcl $tcl_version])
774 if test x"$TCL_INC" != x && test -f "$TCL_INC/tcl.h" ; then
775 tcl_hdr_version=`awk '($1 == "#define" && $2 == "TCL_VERSION") {print $3}' "$TCL_INC/tcl.h"|sed 's/"//g'`
776 if test x"$tcl_hdr_version" = x"$tcl_version" ; then
777 AC_MSG_RESULT([$TCL_INC/tcl.h])
778 BINDINGS="$BINDINGS tcl8"
779 if test x"$TCL_INC" != x"/usr/include" ; then
780 TCL_CPPFLAGS="-I$TCL_INC"
783 AC_MSG_RESULT([not found])
784 if test yes = "$with_tcl" ; then
785 AC_MSG_ERROR([Found tcl.h from version $tcl_hdr_version, not $tcl_version - specify TCL_INC on configure command line])
790 AC_MSG_RESULT([not found])
791 if test yes = "$with_tcl" ; then
792 AC_MSG_ERROR([Can't find tcl.h])
797 if test -n "$TCLSH" ; then
798 dnl Cygwin needs to link with -ltcl8.5 or similar.
802 AC_CHECK_LIB([tcl$tcl_version], [Tcl_Init],
803 [TCL_LIBS="-ltcl$tcl_version"],
804 [AC_MSG_ERROR([libtcl$tcl_version not found])])
807 dnl ::tcl::pkgconfig was added in Tcl 8.5, but prior to 8.6 it isn't
808 dnl necessary to link against -ltclstub anyway.
809 [tcl_libdir_runtime=`echo 'puts [::tcl::pkgconfig get libdir,runtime]'|$TCLSH 2> /dev/null`]
810 if test -n "$tcl_libdir_runtime" ; then
811 for x in "/tcl$tcl_version" "" ; do
812 TCLCONFIG_SH=$tcl_libdir_runtime$x/tclConfig.sh
813 if test -r "$TCLCONFIG_SH" ; then
814 eval "`sed 's/^TCL_STUB_LIB_SPEC=/TCL_LIBS=/p;d' $TCLCONFIG_SH`"
819 TCL_CPPFLAGS="$TCL_CPPFLAGS -DUSE_TCL_STUBS" ;;
823 AC_SUBST(TCL_CPPFLAGS)
826 AC_MSG_RESULT([< $tcl_min (too old)])
827 if test yes = "$with_tcl" ; then
828 AC_MSG_ERROR([$TCLSH too old (Tcl $tcl_min or newer required)])
832 if test yes = "$with_tcl" ; then
833 AC_MSG_ERROR([tclsh not found])
838 if test no != "$with_csharp" ; then
840 AC_ARG_VAR(CSC, [CSharp compiler command])
841 if test -n "$CSC" ; then
842 AC_PATH_PROGS(CSC, ["$CSC"], [])
844 if test -z "$CSC" ; then
845 dnl First we try cli-csc and mono-csc, which are used by Debian and Ubuntu
846 dnl as "alternatives" which can be mapped to the CSharp compiler the admin
848 AC_PATH_PROGS(CSC, [cli-csc mono-csc], [])
849 if test -z "$CSC" ; then
850 dnl mcs is the Mono CSharp compiler, which is a unified compiler
851 dnl available from Mono 2.11 (and also the compiler in Mono 1.0, but
852 dnl that's no longer relevant).
853 AC_PATH_PROGS(CSC, [mcs], [])
854 if test -n "$CSC" ; then
855 dnl There are other tools called mcs (such as /usr/bin/mcs on Tru64),
856 dnl so we check that the mcs we found understands --version which is
857 dnl sufficient to distinguish mono's mcs from the Tru64 one.
858 AC_MSG_CHECKING([whether $CSC is from GNU Mono])
859 if (exec >&5 2>&5;$CSC --version </dev/null;exit $?) ; then
864 csc_note="$csc_note (found different mcs program)"
868 if test -z "$CSC" ; then
869 dnl csc is the Microsoft CSharp compiler.
870 AC_PATH_PROGS(CSC, [csc], [])
871 if test -n "$CSC" ; then
872 dnl Chicken (the Scheme-to-C compiler) includes a tool called csc so we
873 dnl check if the output from "csc -version" includes the word chicken
874 dnl which is sufficient to distinguish Chicken's csc from Microsoft's
876 AC_MSG_CHECKING([whether $CSC is for CSharp])
877 if $CSC -version 2>/dev/null|grep chicken > /dev/null ; then
880 csc_note="$csc_note (found Chicken csc program)"
888 if test -n "$CSC" ; then
889 AC_ARG_VAR(GACUTIL, [gacutil utility to use for CSharp bindings])
890 if test -n "$GACUTIL" ; then
891 AC_PATH_PROGS(GACUTIL, ["$GACUTIL"], [])
893 if test -z "$GACUTIL" ; then
894 AC_PATH_PROGS(GACUTIL, [cli-gacutil gacutil], [])
897 AC_ARG_VAR(SN, [sn utility to use for CSharp bindings])
898 if test -n "$SN" ; then
899 AC_PATH_PROGS(SN, ["$SN"], [])
901 if test -z "$SN" ; then
902 AC_PATH_PROGS(SN, [cli-sn sn], [])
904 if test -n "$GACUTIL" -a -n "$SN" ; then
905 AC_MSG_CHECKING([whether the CSharp compiler works])
906 [echo 'class conftest { public static void Main() { System.Console.WriteLine("OK"); } }' > conftest.cs]
907 if (exec >&5 2>&5;$CSC /out:conftest.exe conftest.cs;exit $?) ; then
909 AC_MSG_CHECKING([whether CSharp programs can just be run])
910 if test OK = "`./conftest.exe 2> /dev/null`" ; then
915 AC_PATH_PROGS(CLI, ["${CLI-cli}"], [])
916 if test -z "$CLI" ; then
917 AC_PATH_PROGS(CLI, [mono ilrun], [])
919 AC_ARG_VAR(CLI, [CSharp bytecode interpreter (optional - only needed to run CSharp testsuite with)])
920 if test -n "$CLI" ; then
921 AC_MSG_CHECKING([whether $CLI can run CSharp programs])
922 if test OK = "`$CLI ./conftest.exe 2> /dev/null`" ; then
926 AC_MSG_RESULT([no - CSharp tests will be skipped])
927 RUN_CSHARP='\$(top_srcdir)/skiptest'
930 AC_MSG_RESULT([not found - CSharp tests will be skipped])
931 RUN_CSHARP='\$(top_srcdir)/skiptest'
936 AC_MSG_CHECKING([for extra flags for $GACUTIL])
937 GACUTIL_FLAGS='/package $(ASSEMBLY) /gacdir $(libdir) /root $(DESTDIR)$(libdir)'
938 dnl Microsoft's gacutil accepts fewer options than Mono's
939 $GACUTIL /\?|grep '\<Mono\>' >/dev/null || GACUTIL_FLAGS=
940 AC_SUBST([GACUTIL_FLAGS])
941 if test -z "$GACUTIL_FLAGS" ; then
944 AC_MSG_RESULT([$GACUTIL_FLAGS])
947 BINDINGS="$BINDINGS csharp"
950 if test yes = "$with_csharp" ; then
951 AC_MSG_ERROR([CSharp compiler $CSC doesn't work])
955 if test yes = "$with_csharp" ; then
956 if test -z "$GACUTIL" ; then
957 AC_MSG_ERROR([Mono gacutil not found])
958 elif test -z "$SN" ; then
959 AC_MSG_ERROR([Mono sn not found])
964 if test yes = "$with_csharp" ; then
965 AC_MSG_ERROR([CSharp compiler not found$csc_note])
971 if test no != "$with_java" ; then
972 AC_PATH_PROGS(JAVA, ["${JAVA-java}"], [],
973 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
974 AC_PATH_PROGS(JAVAC, ["${JAVAC-javac}"], [],
975 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
976 AC_PATH_PROGS(JAR, ["${JAR-jar}"], [],
977 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
978 AC_ARG_VAR(JAVA, [Java interpreter command])
979 AC_ARG_VAR(JAVAC, [Java compiler command])
980 AC_ARG_VAR(JAR, [java jar utility])
981 AC_ARG_VAR(JAVA_HOME, [Pathname of the directory where the JDK is installed])
982 AC_ARG_VAR(JDK_HOME, [Pathname of the directory where the JDK is installed])
983 AC_ARG_VAR(JNI_INCLUDE_DIR, [Pathname of the directory where jni.h is installed])
984 if test -n "$JAVA" -a -n "$JAVAC" -a -n "$JAR" ; then
986 dnl The JNI library *requires* "Java 2", which is 1.2 or better.
988 dnl So checking for jni.h presumably implicitly checks we have "Java 2".
989 dnl Note: jni.h #defines JNI_VERSION_1_[12468] (but not 3, 5 or 7 it seems).
990 dnl So we could check for one of these if we want to check for a particular
993 AC_CHECK_HEADER([jni.h], [java_ok=yes], [
994 dnl We need to look for jni.h in /usr/lib/jvm/java-gcj/include on some
995 dnl Debian and Ubuntu boxes at least. And on Mac OS X, jni.h lives
996 dnl in /System/Library/Frameworks/JavaVM.framework/Headers.
997 SAVE_CPPFLAGS=$CPPFLAGS
999 dnl Avoid endlessly traversing if there's a symlink loop.
1000 for count in 1 2 3 4 5 6 7 8 9 ; do
1001 r=`readlink "$real_javac"`
1002 test -n "$r" || break
1005 dnl Translate ".../bin/javac" to ".../include".
1006 [rel_jnidir=`echo "$real_javac"|sed 's!/[^/]*/[^/]*$!/include!'`]
1009 ${JAVA_HOME+"$JAVA_HOME/include"} \
1010 ${JDK_HOME+"$JDK_HOME/include"} \
1012 /System/Library/Frameworks/JavaVM.framework/Headers ; do
1013 CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
1014 AC_MSG_CHECKING([for jni.h in $jnidir])
1015 if test -f "$jnidir/jni.h" ; then
1016 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
1017 if test yes = $java_ok ; then
1018 AC_MSG_RESULT([yes])
1019 JAVA_CPPFLAGS=-I$jnidir
1023 dnl For OpenJDK (and maybe others) we have to specify an extra -I
1024 dnl option for an OS-specific subdirectory containing a "jni_md.h"
1025 dnl header which is included by "jni.h". Sadly we seem to need to
1026 dnl hardcode a mapping for these platform names - the list below
1027 dnl was determined by inspecting the source code of OpenJDK 8.
1031 jni_host_os=linux ;;
1033 jni_host_os=solaris ;;
1034 mingw* | pw32* | cygwin*)
1035 jni_host_os=win32 ;;
1037 jni_host_os=darwin ;;
1043 if test -n "$jni_host_os" ; then
1044 CPPFLAGS="$CPPFLAGS -I$jnidir/$jni_host_os"
1045 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
1046 if test yes = $java_ok ; then
1047 AC_MSG_RESULT([yes, requires additional -I$jnidir/$jni_host_os])
1048 JAVA_CPPFLAGS="-I$jnidir -I$jnidir/$jni_host_os"
1052 AC_MSG_RESULT([found, but not usable])
1054 CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
1059 CPPFLAGS=$SAVE_CPPFLAGS
1060 test noyes = $java_ok$with_java && AC_MSG_ERROR([jni.h not found])
1062 AC_SUBST(JAVA_CPPFLAGS)
1063 if test yes = $java_ok ; then
1064 AC_MSG_CHECKING([for Java path separator])
1065 [echo 'public class conftest { public static void main(String[] args) { System.out.println(System.getProperty("path.separator")); } }' > conftest.java]
1066 if (exec >&5 2>&5;$JAVAC conftest.java;exit $?) ; then
1067 JAVA_PATHSEP=`$JAVA conftest 2>&5`
1068 AC_SUBST(JAVA_PATHSEP)
1069 if test -n "$JAVA_PATHSEP" ; then
1070 AC_MSG_RESULT($JAVA_PATHSEP)
1071 BINDINGS="$BINDINGS java"
1073 dnl If -Xcheck:jni is supported then run tests with it.
1075 dnl ... except that with OpenJDK 8 and 9 -Xcheck:jni seems to report
1076 dnl false positives and so can't usefully be turned on in this
1077 dnl situation. Recheck this with future versions.
1078 dnl AC_MSG_CHECKING([for $JAVA -Xcheck:jni option])
1079 dnl JAVA_PATHSEP2=`$JAVA conftest 2>&5`
1080 JAVA_CHECK_JNI_OPTION=
1081 dnl if test "$JAVA_PATHSEP" = "$JAVA_PATHSEP2" ; then
1082 dnl JAVA_CHECK_JNI_OPTION=-Xcheck:jni
1083 dnl AC_MSG_RESULT([yes])
1085 dnl AC_MSG_RESULT([no])
1087 AC_SUBST([JAVA_CHECK_JNI_OPTION])
1089 AC_MSG_RESULT([failed to run test program])
1093 AC_MSG_RESULT([failed to compile test program])
1096 if test no = "$java_ok" ; then
1097 test yes = "$with_java" && AC_MSG_ERROR([Couldn't compile and run a simple Java test program])
1101 if test yes = "$with_java" ; then
1102 if test -z "$JAVA" ; then
1103 AC_MSG_ERROR([java not found])
1104 elif test -z "$JAVAC" ; then
1105 AC_MSG_ERROR([javac not found])
1106 elif test -z "$JAR" ; then
1107 AC_MSG_ERROR([jar not found])
1113 if test no != "$with_ruby" ; then
1114 dnl See comment for AC_PATH_PROGS(SWIG, ...).
1115 if test -n "$RUBY" ; then
1116 AC_PATH_PROGS(RUBY, ["$RUBY"], [])
1118 AC_PATH_PROGS(RUBY, [ruby], [])
1120 AC_ARG_VAR(RUBY, [Ruby interpreter])
1121 if test -n "$RUBY" ; then
1122 dnl Require Ruby 2.1 or newer.
1123 AC_MSG_CHECKING([$RUBY version])
1124 dnl RUBY_VERSION works with 1.6. Once we've checked we have at least 1.8
1125 dnl we can safely use RbConfig below (RbConfig requires Ruby 1.8).
1126 version=`$RUBY -e 'print RUBY_VERSION' 2>/dev/null`
1129 AC_MSG_RESULT([\$RUBY -e 'print RUBY_VERSION' didn't work])
1130 if test yes = "$with_ruby" ; then
1131 AC_MSG_ERROR([Working Ruby interpreter not found])
1136 AC_MSG_RESULT([$version (too old)])
1137 if test yes = "$with_ruby" ; then
1138 AC_MSG_ERROR([Only Ruby 2.1 or newer is supported ($RUBY is $version)])
1143 if test -n "$RUBY" ; then
1144 AC_MSG_RESULT([$version])
1145 AC_ARG_VAR(RUBY_INC, [Directory where ruby.h can be found])
1146 if test -z "$RUBY_INC" ; then
1147 dnl Ruby 1.9 added rubyhdrdir.
1148 [RUBY_INC=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyhdrdir"]'`]
1151 dnl Check that ruby.h is there, which is a good way to check that
1152 dnl the appropriate ruby-dev package has been installed.
1153 AC_MSG_CHECKING([for $RUBY_INC/ruby.h])
1154 if test -f "$RUBY_INC/ruby.h" ; then
1157 AC_ARG_VAR(RUBY_INC_ARCH, [Directory where ruby/config.h can be found])
1158 if test -z "$RUBY_INC_ARCH" ; then
1159 dnl Ruby 2.0 and later have rubyarchhdrdir.
1160 [RUBY_INC_ARCH=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyarchhdrdir"]'`]
1162 AC_SUBST(RUBY_INC_ARCH)
1164 AC_ARG_VAR(RUBY_LIB, [Directory to install ruby files into])
1165 if test -z "$RUBY_LIB" ; then
1166 [RUBY_LIB=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitelibdir"]'`]
1170 AC_ARG_VAR(RUBY_LIB_ARCH, [Directory to install ruby binary modules into])
1171 if test -z "$RUBY_LIB_ARCH" ; then
1172 [RUBY_LIB_ARCH=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitearchdir"]'`]
1174 AC_SUBST(RUBY_LIB_ARCH)
1177 if test unsupported = "$allow_undefined_flag" ; then
1178 dnl For Microsoft Windows and a few other platforms.
1179 [RUBY_LIBS=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["LIBRUBYARG"]'`]
1183 dnl rdoc is included as part of the Ruby core distribution, so run it
1184 dnl at build time rather shipping the rather large generated output in
1185 dnl our source tarball.
1186 if test -n "$RDOC" ; then
1187 AC_PATH_PROGS(RDOC, ["$RDOC"], [])
1189 dnl Try replace the *last* 'ruby' with 'rdoc'.
1190 rdoc_best_guess=`echo "$RUBY"|sed 's,\(.*\)ruby,\1rdoc,'`
1191 AC_PATH_PROGS(RDOC, ["$rdoc_best_guess"], [])
1192 if test -z "$RDOC"; then
1193 AC_PATH_PROGS(RDOC, [rdoc], [])
1196 if test -n "$RDOC"; then
1197 BINDINGS="$BINDINGS ruby"
1199 AC_ARG_VAR([RDOC], [Ruby documentation generator])
1201 AC_MSG_RESULT([no (install ruby-dev or ruby-devel package or similar)])
1202 if test yes = "$with_ruby" ; then
1203 AC_MSG_ERROR([ruby.h not found])
1206 RUBY_DLEXT=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG[["DLEXT"]]'`
1207 AC_SUBST(RUBY_DLEXT)
1212 if test no != "$with_perl" ; then
1213 AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
1214 AC_ARG_VAR(PERL, [Perl interpreter])
1215 if test -n "$PERL" ; then
1216 if test -z "$PERL_INC" ; then
1217 PERL_INC=`$PERL -MConfig -e 'print $Config{archlibexp}, "/CORE"'`
1221 AC_ARG_VAR(PERL_ARCH, [Directory to install architecture-dependent perl files into])
1222 if test -z "$PERL_ARCH" ; then
1223 PERL_ARCH=`$PERL -MConfig -e 'print $Config{installsitearch}'`
1227 AC_ARG_VAR(PERL_LIB, [Directory to install architecture-independent perl files into])
1228 if test -z "$PERL_LIB" ; then
1229 PERL_LIB=`$PERL -MConfig -e 'print $Config{installsitelib}'`
1233 AC_ARG_VAR(PERL_SO, [Extension for compiled Perl modules])
1234 if test -z "$PERL_SO" ; then
1235 PERL_SO=`$PERL -MConfig -e 'print ".", $Config{dlext}'`
1239 if test -z "$PERL_XAPIAN_VERSION" ; then
1240 dnl snapshot versions look like 1.2.3_git123
1241 case $PACKAGE_VERSION in
1243 PERL_XAPIAN_VERSION=`echo "$PACKAGE_VERSION"|sed 's/_git/./'` ;;
1245 PERL_XAPIAN_VERSION=$PACKAGE_VERSION.0 ;;
1248 AC_SUBST(PERL_XAPIAN_VERSION)
1250 BINDINGS="$BINDINGS perl"
1252 if test yes = "$with_perl" ; then
1253 AC_MSG_ERROR([perl not found])
1258 if test no != "$with_lua" ; then
1259 AC_PATH_PROGS(LUA, ["${LUA-lua}"], [])
1260 AC_ARG_VAR(LUA, [lua interpreter])
1261 if test -n "$LUA" ; then
1262 dnl We need Lua 5.1 or later.
1263 AC_MSG_CHECKING([$LUA version])
1264 lua_version=`$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' 2>&AS_MESSAGE_LOG_FD`
1266 case $lua_version in
1267 [[01234]].*|5.0|5.0.*)
1268 AC_MSG_RESULT([$lua_version < 5.1 (too old)])
1269 if test yes = "$with_lua" ; then
1270 AC_MSG_ERROR([$LUA too old (Lua 5.1 or newer required)])
1275 AC_MSG_RESULT([\$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' didn't work])
1277 if test yes = "$with_lua" ; then
1278 AC_MSG_ERROR([Working Lua interpreter not found])
1284 if test -n "$LUA" ; then
1285 AC_MSG_RESULT([$lua_version])
1287 AC_ARG_VAR([LUA_LIB], [Directory to install compiled Lua modules into])
1288 AC_ARG_VAR([LUA_SO], [Extension for compiled Lua modules (e.g. LUA_SO=.so)])
1289 AC_MSG_CHECKING([for directory to install compiled Lua modules into])
1290 if test -z "$LUA_LIB" -o -z "$LUA_SO" ; then
1291 lua_cpath=`$LUA -e 'require("package") print(package.cpath)'`
1292 dnl Look for the first absolute path in lua_cpath which has leaf
1293 dnl "?.<ext>" and put the directory part into lua_lib and <ext> into
1294 dnl lua_so. If LUA_SO was specified by the user, only consider
1295 dnl entries where <ext> matches LUA_SO.
1300 [lua_so_pat='[a-zA-Z][a-zA-Z]*'] ;;
1302 dnl If LUA_SO has a leading '.', remove it.
1303 lua_so_pat=`AS_ECHO("$LUA_SO")|sed 's/^\.//'` ;;
1305 dnl If LUA_SO was specified without a leading '.', add one to the
1306 dnl value substituted into Makefile.in.
1311 while test x"$lua_cpath" != x ; do
1312 [lua_lib=`expr X"$lua_cpath" : X'\([^;]*\)'`]
1313 lua_so=.`expr X"$lua_lib" : X'/.*/?\.\('"$lua_so_pat"'\)$'`
1316 dnl If someone has foolishly put ?.lua in cpath, ignore them.
1320 lua_lib=`expr X"$lua_lib" : X'\(/.*\)/?\.'"$lua_so_pat"'$'`
1323 [lua_cpath=`expr X"$lua_cpath" : X'[^;]*;*\(.*\)'`]
1325 test -n "$LUA_LIB" || LUA_LIB=$lua_lib
1326 test -n "$LUA_SO" || LUA_SO=$lua_so
1328 if test -z "$LUA_LIB"; then
1329 AC_MSG_RESULT([not found])
1331 AC_MSG_RESULT([$LUA_LIB])
1335 AC_MSG_CHECKING([for extension to use for compiled Lua modules])
1336 if test -z "$LUA_SO"; then
1337 AC_MSG_RESULT([not found])
1339 AC_MSG_RESULT([$LUA_SO])
1343 AC_MSG_CHECKING([for Lua header files])
1344 AC_ARG_VAR([LUA_INC], [Directory to include for lua headers])
1345 if test -z "$LUA_INC" ; then
1346 dirs="/usr/include/lua$lua_version /usr/local/include/lua$lua_version"
1348 if test -r "$i/lua.h"; then
1355 if test -z "$LUA_INC" ; then
1356 AC_MSG_RESULT([not found])
1358 AC_MSG_RESULT([$LUA_INC])
1359 BINDINGS="$BINDINGS lua"
1360 LUA_CPPFLAGS="-I$LUA_INC"
1362 AC_SUBST([LUA_CPPFLAGS])
1365 if test yes = "$with_lua" ; then
1366 AC_MSG_ERROR([lua not found])
1374 *python*) dnl Matches python and/or python3
1375 dnl C++11 has thread_local
1376 dnl GCC and some others have __thread
1377 dnl MSVC and some others have __declspec(thread)
1378 AC_MSG_CHECKING([for thread-local storage qualifier])
1379 AC_ARG_VAR([THREAD_LOCAL], [thread-local storage qualifier])
1380 if test -z "$THREAD_LOCAL" ; then
1381 for t in thread_local __thread '__declspec(thread)' ; do
1382 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[static $t void * p;]])],
1383 [THREAD_LOCAL=$t; break])
1386 if test -z "$THREAD_LOCAL" ; then
1387 AC_MSG_RESULT([unknown, disabling thread-local support])
1389 AC_MSG_RESULT([$THREAD_LOCAL])
1390 AC_DEFINE_UNQUOTED([THREAD_LOCAL], [$THREAD_LOCAL], [Thread local storage qualifier (undefined if no TLS)])
1395 dnl Set flags to control warnings (enable more, or disable annoying ones)
1396 dnl and other compiler specific flags.
1398 if test yes = "$GXX" ; then
1399 dnl Python itself is compiled with -fno-strict-aliasing, and it appears
1400 dnl it's safest to follow this lead when compiling the SWIG generated
1401 dnl interface code. E.g.:
1402 dnl https://article.gmane.org/gmane.comp.gcc.devel/74692
1403 dnl The code SWIG generates for other languages seems to have similar
1404 dnl issues too, so just turn this on for all of them.
1406 dnl There's no need to check -fno-strict-aliasing is supported as it works
1407 dnl with GCC 2.95 and we don't support anything older.
1408 SWIG_CXXFLAGS="-fno-strict-aliasing"
1410 dnl We need to explicitly link against -lstdc++ on OpenBSD (discovered
1411 dnl on OpenBSD 3.7 with GCC 3.3.5 but this appears to be due to a
1412 dnl deliberate decision on the part of OpenBSD developers). Luckily
1413 dnl we can just always specify -lstdc++ explicitly if GCC is the
1414 dnl compiler and libtool will eliminate the duplicate on other
1416 XAPIAN_LIBS="$XAPIAN_LIBS -lstdc++"
1418 dnl Intel's C++ compiler is identified as "GXX" by autoconf's test - check
1419 dnl which we actually have.
1421 [#ifdef __INTEL_COMPILER
1426 dnl Intel's compiler:
1428 dnl -w1 stops the avalanche of uninteresting "remark" messages.
1429 dnl -wd... disables warnings which don't have good code workarounds.
1431 dnl Swig generated code gives lots of unused and uninitialized warnings.
1432 dnl They're non-harmful, so suppress them.
1433 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -w1 -wd177,1572"
1438 dnl Swig generated code gives lots of unused and uninitialized warnings.
1439 dnl They're non-harmful, so suppress them.
1440 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -Wno-unused -Wno-uninitialized"
1443 if test no != "$enable_visibility"; then
1444 dnl GCC doesn't support symbol visibility on all platforms (e.g. it isn't
1445 dnl supported on mingw and visibility attributes result in warnings).
1446 AC_MSG_CHECKING([if $CXX -fvisibility=hidden -fvisibility-inlines-hidden works])
1447 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
1448 AC_MSG_RESULT([yes])
1449 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -fvisibility=hidden -fvisibility-inlines-hidden"
1455 AC_SUBST(SWIG_CXXFLAGS)
1457 dnl Restore CXXFLAGS to those the user specified or autoconf defaulted to.
1458 CXXFLAGS=$save_CXXFLAGS
1460 dnl Required for auto regeneration to work in a combined maintainer-mode tree.
1461 : ${AUTOM4TE=autom4te}
1462 AC_SUBST([AUTOM4TE])
1464 AC_CONFIG_FILES([Makefile
1467 python/Makefile python/docs/conf.py python/version.i
1468 python3/Makefile python3/docs/conf.py python3/version.i
1472 tcl8/Makefile tcl8/pkgIndex.tcl
1473 csharp/Makefile csharp/AssemblyInfo.cs
1477 xapian-bindings.spec
1482 if test -z "$BINDINGS" ; then
1483 echo "*** Not found the required tools for building bindings for any"
1484 echo "*** supported language!"
1486 echo "*** You may need to install -dev or -devel packages for the languages"
1487 echo "*** you want to build bindings for."
1489 echo "*** For details of how to point configure at tools not on PATH, see:"
1490 echo "*** ./configure --help"
1492 echo "*** Building bindings for languages:" $BINDINGS
1495 if test "$COMPAT_VERSION" != "$XAPIAN_VERSION" ; then
1496 release_series=[`echo "$COMPAT_VERSION"|sed 's/[0-9][0-9]*$//'`]
1497 case $XAPIAN_VERSION in
1498 $release_series*) ;;
1500 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.])
1503 dnl 0.8.2 was the first version which set XAPIAN_VERSION
1504 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.])