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.3.4])
8 AC_INIT([xapian-bindings], project_version, [https://xapian.org/bugs])
10 dnl See xapian-core's HACKING document for details of the reasons for required
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[[91]]*)
31 dnl On 10.5 or later, and 10.4 on x86, the deployment target defaults to the
32 dnl OS version, so we don't need to override on these.
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]))
102 dnl If we're building against an uninstalled xapian-core, xapian-config
103 dnl --libs will give an error.
104 if $XAPIAN_CONFIG --libs >/dev/null 2>/dev/null ; then
108 dnl $XAPIAN_LIBS may have some options first, so grab the last argument,
109 dnl which should be the .la file.
114 dnl Make sure the path is absolute.
115 case $INTREE_DYLD_PATH in
117 *) INTREE_DYLD_PATH=`pwd`/$INTREE_DYLD_PATH ;;
119 dnl Add .libs or equivalent.
120 INTREE_DYLD_PATH=`echo "$INTREE_DYLD_PATH"|sed 's,\(.*/\).*,\1,'`$lt_cv_objdir
121 AC_SUBST([INTREE_DYLD_PATH])
125 AM_CONDITIONAL(NEED_JNILIB_EXT, test yes = "$NEED_JNILIB_EXT")
126 AM_CONDITIONAL(NEED_INTREE_DYLD, test yes = "$NEED_INTREE_DYLD")
128 dnl We want XAPIAN_CXXFLAGS to be used for configure tests, so add it to
129 dnl CXXFLAGS for the duration of configure.
130 save_CXXFLAGS=$CXXFLAGS
131 CXXFLAGS="$CXXFLAGS $XAPIAN_CXXFLAGS"
133 dnl COMPAT_VERSION is the version of xapian-core that "matches" our version.
134 dnl We allow for bindings being version 0.8.5.1 while xapian-core is 0.8.5.
135 dnl COMPAT_VERSION also ignores any _git123 suffix which snapshots will have.
136 COMPAT_VERSION=[`echo "$PACKAGE_VERSION"|sed 's/^\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`]
137 AC_SUBST(COMPAT_VERSION)
139 dnl VERSION_NO_SNAPSHOT simply has any _git123 suffix removed.
140 VERSION_NO_SNAPSHOT=[`echo "$PACKAGE_VERSION"|sed 's/_.*$//'`]
141 AC_SUBST(VERSION_NO_SNAPSHOT)
143 dnl We only need to set docdir for compatibility with autoconf < 2.60 - this
144 dnl code can be removed once we move to requiring autoconf 2.60 or newer.
145 test -n "$docdir" || docdir='${datadir}/doc/${PACKAGE_TARNAME}'
148 AC_ARG_ENABLE(visibility,
149 [AS_HELP_STRING([--disable-visibility], [disable use of GCC visibility])],
150 [case ${enableval} in
152 *) AC_MSG_ERROR([bad value ${enableval} for --disable-visibility]) ;;
155 dnl Only probe for SWIG and enable SWIG rules in makefiles if
156 dnl configure --enable-maintainer-mode is used.
159 AC_ARG_ENABLE(documentation,
160 [AS_HELP_STRING([--enable-documentation], [enable make rules to rebuild shipped documentation [default=maintainer-mode]])],
161 [case ${enableval} in
163 *) AC_MSG_ERROR([bad value ${enableval} for --enable-documentation]) ;;
165 test -z "$enable_documentation" && enable_documentation=$USE_MAINTAINER_MODE
166 AM_CONDITIONAL(DOCUMENTATION_RULES, test x"$enable_documentation" = xyes)
167 AM_CONDITIONAL(MAINTAINER_NO_DOCS, test x"$USE_MAINTAINER_MODE$enable_documentation" = xyesno)
169 if test yes = "$enable_documentation" ; then
170 dnl Check for rst2html. (Needed to make HTML from reStructuredText format)
171 dnl Also look for rst2html.py, which archlinux reportedly installs it as.
172 AC_PATH_PROGS(RST2HTML, [rst2html rst2html.py], [])
173 test -z "$RST2HTML" && AC_MSG_ERROR([rst2html is required to build documentation (try package python-docutils)])
176 if test x$USE_MAINTAINER_MODE = xyes; then
177 dnl Check for swig - this does most of the work for the bindings.
178 dnl AC_PATH_PROGS only honours an already set SWIG if it's a full
179 dnl path. Listing it in the "to be searched" list like this allows
180 dnl ./configure SWIG=myswig to work.
181 swigoverridden=${SWIG+yes}
182 AC_PATH_PROGS(SWIG, ["${SWIG-swig}"], [])
183 AC_ARG_VAR(SWIG, [SWIG interface generator (only needed by Xapian developers)])
184 if test -z "$SWIG" ; then
185 AC_MSG_ERROR([Can't find SWIG utility])
187 dnl Check for new enough SWIG.
189 dnl 3.0.8 fixes conversion of integers large than an int in Python 3.
190 v=`$SWIG -version 2>&1|sed 's/^SWIG Version \([[0-9\.]]*\).*/\1/p;d'`
192 [[012].*|3.0.[01234567]|""])
193 msg="SWIG >= 3.0.8 required (you have ${v:-an unknown version})"
194 if test -n "$swigoverridden" ; then
195 dnl If SWIG was explicitly set, make this a warning only.
201 SWIG_FLAGS=`$XAPIAN_CONFIG --swigflags`
205 for a in $SWIG_FLAGS ; do
208 d=`echo "x$a"|sed 's/^x-I//'`
209 dnl Quote each entry in XAPIAN_HEADER_DIRS with "".
210 XAPIAN_HEADER_DIRS=$XAPIAN_HEADER_DIRS' "'$d'"'
211 for f in "$d/"*.h "$d/xapian/*.h" ; do
212 if test -f "$f" ; then
213 XAPIAN_HEADERS="$XAPIAN_HEADERS $f"
219 AC_SUBST([XAPIAN_HEADER_DIRS])
220 AC_SUBST([XAPIAN_HEADERS])
222 dnl Need perl in maintainer mode to generate the except.i file for python.
223 AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
224 test -z "$PERL" && AC_MSG_ERROR([perl is required in maintainer mode])
225 dnl Need doxygen in maintainer mode to convert C++ doxygen comments to Python
227 AC_PATH_PROG(DOXYGEN, doxygen, [])
228 test -z "$DOXYGEN" && AC_MSG_ERROR([doxygen is required to build documentation])
232 AC_HELP_STRING([--with-python], [enable Python 2 bindings]),
237 AC_HELP_STRING([--with-python3], [enable Python 3 bindings]),
242 AC_HELP_STRING([--with-php], [enable PHP bindings]),
247 AC_HELP_STRING([--with-ruby], [enable Ruby bindings]),
252 AC_HELP_STRING([--with-tcl], [enable Tcl bindings]),
257 AC_HELP_STRING([--with-csharp], [enable CSharp bindings]),
262 AC_HELP_STRING([--with-java], [enable Java bindings]),
267 AC_HELP_STRING([--with-perl], [enable Perl bindings]),
272 AC_HELP_STRING([--with-lua], [enable Lua bindings]),
276 case $with_python$with_python3$with_php$with_ruby$with_tcl$with_csharp$with_java$with_perl$with_lua in
278 dnl Default unspecified values to no.
279 test -z "$with_python" && with_python=no
280 test -z "$with_python3" && with_python3=no
281 test -z "$with_php" && with_php=no
282 test -z "$with_tcl" && with_tcl=no
283 test -z "$with_csharp" && with_csharp=no
284 test -z "$with_java" && with_java=no
285 test -z "$with_ruby" && with_ruby=no
286 test -z "$with_perl" && with_perl=no
287 test -z "$with_lua" && with_lua=no
293 if test no != "$with_python" ; then
294 dnl For backward compatibility:
295 : ${PYTHON2="$PYTHON"}
296 : ${PYTHON2_INC="$PYTHON_INC"}
297 : ${PYTHON2_LIB="$PYTHON_LIB"}
298 : ${PYTHON2_LIBS="$PYTHON_LIBS"}
299 : ${PYTHON2_SO="$PYTHON_SO"}
300 dnl See comment for AC_PATH_PROGS(SWIG, ...).
301 if test -n "$PYTHON2" ; then
302 AC_PATH_PROGS(PYTHON2, ["$PYTHON2"], [])
304 AC_PATH_PROGS(PYTHON2, [python2 python], [])
306 AC_ARG_VAR(PYTHON2, [Python 2 interpreter])
307 if test -n "$PYTHON2" ; then
308 dnl Require Python 2.6 or newer. Older versions are essentially
309 dnl unsupported upstream.
310 AC_MSG_CHECKING([$PYTHON2 version])
311 version=`$PYTHON2 -c 'import sys;print("%d.%d" % sys.version_info[[:2]])' 2>/dev/null`
313 [2.[6-9]*|2.[1-5][0-9]*])
314 AC_MSG_RESULT([$version])
317 AC_MSG_RESULT([$version (too new - use --with-python3 for Python 3 support)])
318 if test yes = "$with_python" ; then
319 AC_MSG_ERROR([Use --with-python3 for Python 3 support ($PYTHON2 is $version)])
324 AC_MSG_RESULT([$version (too old)])
325 if test yes = "$with_python" ; then
326 AC_MSG_ERROR([Only Python 2.6 or newer is supported ($PYTHON2 is $version)])
331 if test -n "$PYTHON2" ; then
332 if $PYTHON2 -c 'import distutils.sysconfig' 2>/dev/null ; then
333 PYTHON2_INC=`$PYTHON2 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_inc().replace(os.sep,"/"))'`
334 AC_SUBST(PYTHON2_INC)
336 if test yes = "$with_python" ; then
337 AC_MSG_ERROR([Couldn't import Python module distutils.sysconfig - you probably need to install a python-dev or python-devel package])
339 AC_MSG_WARN([Couldn't import Python module distutils.sysconfig - you probably don't have a python-dev or python-devel package installed])
344 if test -n "$PYTHON2" ; then
345 dnl Check that Python.h is there, which is a good way to check that
346 dnl the appropriate python-dev package has been installed.
347 AC_MSG_CHECKING([for $PYTHON2_INC/Python.h])
348 if test -f "$PYTHON2_INC/Python.h" ; then
350 AC_MSG_CHECKING([for directory to install python2 bindings in])
351 if test -z "$PYTHON2_LIB" ; then
352 PYTHON2_LIB=`$PYTHON2 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_lib(1).replace(os.sep,"/"))'`
354 AC_MSG_RESULT([$PYTHON2_LIB])
355 AC_ARG_VAR(PYTHON2_LIB, [Directory to install python2 bindings in])
357 AC_MSG_CHECKING([for python2 libraries to link against])
360 PYTHON2_LIBS=`$PYTHON2 -c 'import os,sys;print("-L"+os.path.join(sys.prefix,"libs").replace(os.sep,"/")+" -lpython"+sys.version[[:3]].replace(".",""))'` ;;
362 PYTHON2_LIBS=`$PYTHON2 -c 'import os,sys;print("-L"+os.path.join(sys.path[[3]],"config")+" -lpython"+sys.version[[:3]])'` ;;
366 AC_SUBST(PYTHON2_LIBS)
367 AC_MSG_RESULT([$PYTHON2_LIBS])
369 AC_MSG_CHECKING([for python2 module extension])
370 dnl Usually ".so", but for example, Mac OS X uses ".dylib".
371 PYTHON2_SO=`$PYTHON2 -c 'import distutils.sysconfig;print(distutils.sysconfig.get_config_vars("SO")[[0]])'`
373 AC_MSG_RESULT([$PYTHON2_SO])
374 BINDINGS="$BINDINGS python"
376 AC_MSG_RESULT([no (install python-dev or python-devel package or similar)])
377 if test yes = "$with_python" ; then
378 AC_MSG_ERROR([Python.h not found])
385 if test no != "$with_python3" ; then
386 dnl See comment for AC_PATH_PROGS(SWIG, ...).
387 if test -n "$PYTHON3" ; then
388 AC_PATH_PROGS(PYTHON3, ["$PYTHON3"], [])
390 AC_PATH_PROGS(PYTHON3, [python3 python], [])
392 AC_ARG_VAR(PYTHON3, [Python 3 interpreter])
393 if test -n "$PYTHON3" ; then
394 dnl Require Python 3.2 or newer, as that's the oldest version we can
395 dnl easily test with. If anyone's keen to support older versions, please
396 dnl test and send in any patches needed to get it to work.
397 AC_MSG_CHECKING([$PYTHON3 version])
398 version=`$PYTHON3 -c 'import sys;print("%d.%d" % sys.version_info[[:2]])' 2>/dev/null`
400 [3.[2-9]*|3.1[0-9]*|[4-9].*])
401 AC_MSG_RESULT([$version])
404 AC_MSG_RESULT([$version (too old)])
405 if test yes = "$with_python3" ; then
406 AC_MSG_ERROR([Only Python 3.2 or newer is supported ($python3 is $version)])
411 if test -n "$PYTHON3" ; then
412 if $PYTHON3 -c 'import distutils.sysconfig' 2>/dev/null ; then
413 PYTHON3_INC=`$PYTHON3 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_inc().replace(os.sep,"/"))'`
414 AC_SUBST(PYTHON3_INC)
416 if test yes = "$with_python3" ; then
417 AC_MSG_ERROR([Couldn't import Python module distutils.sysconfig - you probably need to install a python3-dev or python3-devel package])
419 AC_MSG_WARN([Couldn't import Python module distutils.sysconfig - you probably don't have a python3-dev or python3-devel package installed])
424 if test -n "$PYTHON3" ; then
425 dnl Check that Python.h is there, which is a good way to check that
426 dnl the appropriate python3-dev package has been installed.
427 AC_MSG_CHECKING([for $PYTHON3_INC/Python.h])
428 if test -f "$PYTHON3_INC/Python.h" ; then
430 AC_MSG_CHECKING([for directory to install python3 bindings in])
431 if test -z "$PYTHON3_LIB" ; then
432 PYTHON3_LIB=`$PYTHON3 -c 'import os,distutils.sysconfig;print(distutils.sysconfig.get_python_lib(1).replace(os.sep,"/"))'`
434 AC_MSG_RESULT([$PYTHON3_LIB])
435 AC_ARG_VAR(PYTHON3_LIB, [Directory to install python3 bindings in])
437 AC_MSG_CHECKING([for python3 libraries to link against])
440 PYTHON3_LIBS=`$PYTHON3 -c 'import os,sys;print("-L"+os.path.join(sys.prefix,"libs").replace(os.sep,"/")+" -lpython"+sys.version[[:3]].replace(".",""))'` ;;
442 PYTHON3_LIBS=`$PYTHON3 -c 'import os,sys;print("-L"+os.path.join(sys.path[[3]],"config")+" -lpython"+sys.version[[:3]])'` ;;
446 AC_SUBST(PYTHON3_LIBS)
447 AC_MSG_RESULT([$PYTHON3_LIBS])
449 AC_MSG_CHECKING([for python3 module extension])
450 dnl Usually ".so", but for example, Mac OS X uses ".dylib".
451 PYTHON3_SO=`$PYTHON3 -c 'import distutils.sysconfig;print(distutils.sysconfig.get_config_vars("SO")[[0]])'`
453 AC_MSG_RESULT([$PYTHON3_SO])
455 AC_MSG_CHECKING([for tag for cached compiled scripts])
456 PYTHON3_CACHE_TAG=`$PYTHON3 -c 'import imp;print(imp.get_tag())'`
457 AC_SUBST(PYTHON3_CACHE_TAG)
458 AC_MSG_RESULT([$PYTHON3_CACHE_TAG])
460 AC_MSG_CHECKING([for extension of cached and optimized python3 bytecode])
461 PYTHON3_CACHE_OPT1_EXT=`$PYTHON3 -c 'import imp,sys;print("%s.pyo"%imp.get_tag()) if sys.version_info.minor<5 else print("{1}{2}".format(*imp.util.cache_from_source("",optimization=1).rpartition(imp.get_tag())))'`
462 AC_SUBST(PYTHON3_CACHE_OPT1_EXT)
463 AC_MSG_RESULT([$PYTHON3_CACHE_OPT1_EXT])
465 BINDINGS="$BINDINGS python3"
467 AC_MSG_RESULT([no (install python3-dev or python3-devel package or similar)])
468 if test yes = "$with_python3" ; then
469 AC_MSG_ERROR([Python.h not found])
476 if test x$USE_MAINTAINER_MODE = xyes; then
477 dnl Need python in maintainer mode to run doxy2swig.py.
478 dnl Either Python 2 or 3 is OK for this.
479 if test -n "$PYTHON2" ; then
481 elif test -n "$PYTHON3" ; then
484 AC_PATH_PROGS(PYTHON, [python2 python python3], [])
486 test -z "$PYTHON" && AC_MSG_ERROR([python is required in maintainer mode])
489 dnl If we're building either python version we need sphinx-build.
492 AC_PATH_PROG(SPHINX_BUILD, sphinx-build, [])
493 if test -z "$SPHINX_BUILD" ; then
494 AC_MSG_ERROR([sphinx-build is required to build python documentation (try packages python-sphinx or python3-sphinx)])
499 if test no != "$with_php" ; then
500 dnl See comment for AC_PATH_PROGS(SWIG, ...).
501 AC_PATH_PROGS(PHP_CONFIG, ["${PHP_CONFIG-php-config}"], [])
502 AC_ARG_VAR(PHP_CONFIG, [php-config utility])
503 AC_ARG_VAR(PHP, [php interpreter (optional - only needed to run PHP testsuite with)])
504 if test -n "$PHP_CONFIG" ; then
505 AC_MSG_CHECKING([$PHP_CONFIG version])
506 version=`$PHP_CONFIG --version 2>/dev/null`
508 [[01234].*|5.[01234].*])
509 AC_MSG_RESULT([$version (not supported, need PHP >= 5.5)])
510 if test yes = "$with_php" ; then
511 AC_MSG_ERROR([Only PHP >= 5.5 is supported ($PHP_CONFIG reports version $version)])
516 AC_MSG_RESULT([$version])
517 PHP_MAJOR_VERSION=`echo "$version"|cut -d. -f1`
520 AC_SUBST(PHP_MAJOR_VERSION)
522 if test no != "$with_php" ; then
523 AC_MSG_CHECKING([for PHP extension directory])
524 if test -z "$PHP_EXTENSION_DIR" ; then
525 PHP_EXTENSION_DIR=`$PHP_CONFIG --extension-dir`
527 AC_MSG_RESULT([$PHP_EXTENSION_DIR])
528 AC_ARG_VAR(PHP_EXTENSION_DIR, [Directory to install PHP extensions in])
531 if test no != "$with_php" ; then
532 PHP_INC=`$PHP_CONFIG --includes`
534 save_CPPFLAGS=$CPPFLAGS
535 CPPFLAGS="$CPPFLAGS $PHP_INC"
536 dnl One of SGI's SuSE boxes has php-config but no headers.
537 AC_CHECK_HEADER(zend.h, [], [
538 if test yes = "$with_php" ; then
539 AC_MSG_ERROR(['$PHP_CONFIG --includes' reports '$PHP_INC' but zend.h can't be included from there])
542 CPPFLAGS=$save_CPPFLAGS
545 if test no != "$with_php" ; then
546 if test x"$PHP" = x ; then
547 AC_MSG_CHECKING([for PHP interpreter])
548 dnl PHP5's php-config supports --php-binary, so just use that.
549 PHP=`$PHP_CONFIG --php-binary 2>/dev/null`
550 if test x"$PHP" != x ; then
551 if $PHP -r 'exit(0);' 2> /dev/null ; then
552 AC_MSG_RESULT([$PHP])
554 AC_MSG_RESULT([no ($PHP does not work)])
558 AC_MSG_RESULT([not found])
561 AC_PATH_PROGS(PHP, ["$PHP"], [])
563 if test x"$PHP" = x ; then
564 AC_MSG_WARN([No PHP interpreter found - PHP bindings tests will be skipped])
565 dnl The skiptest script just returns exit code 77.
566 PHP='$(top_srcdir)/skiptest'
568 AC_MSG_CHECKING([for PHP path separator])
569 PHP_PATH_SEPARATOR=`$PHP -r 'echo PATH_SEPARATOR;'`
570 AC_SUBST([PHP_PATH_SEPARATOR])
571 AC_MSG_RESULT([$PHP_PATH_SEPARATOR])
576 dnl This is a bit of an informed guess, pending more information from
577 dnl someone who actually has mingw and wants to build the PHP bindings
579 PHP_LIBS="-L`$PHP_CONFIG --prefix` -lphp${PHP_MAJOR_VERSION}ts" ;;
581 PHP_LIBS="-lphp${PHP_MAJOR_VERSION}lib" ;;
586 BINDINGS="$BINDINGS php"
591 if test no != "$with_tcl" ; then
592 dnl The documented minimum requirement is Tcl 8.5. Older versions may work,
593 dnl but we don't test with them regularly, and they are no longer supported
594 dnl upstream. Also ::tcl::pckconfig was added in Tcl 8.5, which makes the
595 dnl tests below simpler and more reliable.
597 dnl If you really want to build with an older version, run configure with
598 dnl a lower tcl_min and specify at least TCL_INC explicitly:
600 dnl ./configure tcl_min=8.4 TCL_INC=/usr/include/tcl8.4
602 dnl We definitely need at least Tcl 8.1 for TCL_STUBS.
604 AC_PATH_PROGS(TCLSH, ["${TCLSH-tclsh}"], [])
605 AC_ARG_VAR(TCLSH, [Tcl interpreter])
606 if test -n "$TCLSH" ; then
607 AC_MSG_CHECKING([$TCLSH version])
608 if echo 'if {$tcl_version < '"$tcl_min"' } { exit 1 }'|$TCLSH 2> /dev/null ; then
609 tcl_version=`echo 'puts "$tcl_version"'|$TCLSH`
610 AC_MSG_RESULT([$tcl_version])
612 AC_ARG_VAR(TCL_LIB, [Directory to install Tcl files into])
613 if test -z "$TCL_LIB" ; then
614 [TCL_LIB=`echo 'foreach d $tcl_pkgPath {if {![regexp {/share(/|$)} $d]} {break}};puts $d'|$TCLSH`]
618 AC_ARG_VAR([TCL_INC], [Directory to include for Tcl headers])
619 if test -z "$TCL_INC" ; then
620 dnl ::tcl::pkgconfig was added in Tcl 8.5.
621 [TCL_INC=`echo 'puts [::tcl::pkgconfig get includedir,runtime]'|$TCLSH 2> /dev/null`]
624 dnl Check that the headers are there (the tcl8.N-dev package
625 dnl may not be installed).
627 AC_MSG_CHECKING([for tcl.h from Tcl $tcl_version])
628 if test x"$TCL_INC" != x && test -f "$TCL_INC/tcl.h" ; then
629 tcl_hdr_version=`awk '($1 == "#define" && $2 == "TCL_VERSION") {print $3}' "$TCL_INC/tcl.h"|sed 's/"//g'`
630 if test x"$tcl_hdr_version" = x"$tcl_version" ; then
631 AC_MSG_RESULT([$TCL_INC/tcl.h])
632 BINDINGS="$BINDINGS tcl8"
633 if test x"$TCL_INC" != x"/usr/include" ; then
634 TCL_CPPFLAGS="-I$TCL_INC"
637 AC_MSG_RESULT([not found])
638 if test yes = "$with_tcl" ; then
639 AC_MSG_ERROR([Found tcl.h from version $tcl_hdr_version, not $tcl_version - specify TCL_INC on configure command line])
644 AC_MSG_RESULT([not found])
645 if test yes = "$with_tcl" ; then
646 AC_MSG_ERROR([Can't find tcl.h])
651 if test -n "$TCLSH" ; then
652 dnl Cygwin needs to link with -ltcl8.5 or similar.
656 AC_CHECK_LIB([tcl$tcl_version], [Tcl_Init],
657 [TCL_LIBS="-ltcl$tcl_version"],
658 [AC_MSG_ERROR([libtcl$tcl_version not found])])
661 dnl ::tcl::pkgconfig was added in Tcl 8.5, but prior to 8.6 it isn't
662 dnl necessary to link against -ltclstub anyway.
663 [TCLCONFIG_SH=`echo 'puts [file join [::tcl::pkgconfig get libdir,runtime] tclConfig.sh]'|$TCLSH 2> /dev/null`]
664 if test -n "$TCLCONFIG_SH" && test -r "$TCLCONFIG_SH" ; then
665 eval "`sed 's/^TCL_STUB_LIB_SPEC=/TCL_LIBS=/p;d' $TCLCONFIG_SH`"
667 TCL_CPPFLAGS="$TCL_CPPFLAGS -DUSE_TCL_STUBS" ;;
671 AC_SUBST(TCL_CPPFLAGS)
674 AC_MSG_RESULT([< $tcl_min (too old)])
675 if test yes = "$with_tcl" ; then
676 AC_MSG_ERROR([$TCLSH too old (Tcl $tcl_min or newer required)])
680 if test yes = "$with_tcl" ; then
681 AC_MSG_ERROR([tclsh not found])
686 if test no != "$with_csharp" ; then
688 AC_ARG_VAR(CSC, [CSharp compiler command])
689 if test -n "$CSC" ; then
690 AC_PATH_PROGS(CSC, ["$CSC"], [])
692 if test -z "$CSC" ; then
693 dnl First we try cli-csc and mono-csc, which are used by Debian and Ubuntu
694 dnl as "alternatives" which can be mapped to the CSharp compiler the admin
696 AC_PATH_PROGS(CSC, [cli-csc mono-csc], [])
697 if test -z "$CSC" ; then
698 dnl mcs is the Mono CSharp compiler, which is a unified compiler
699 dnl available from Mono 2.11 (and also the compiler in Mono 1.0, but
700 dnl that's no longer relevant).
701 AC_PATH_PROGS(CSC, [mcs], [])
702 if test -n "$CSC" ; then
703 dnl There are other tools called mcs (such as /usr/bin/mcs on Tru64),
704 dnl so we check that the mcs we found understands --version which is
705 dnl sufficient to distinguish mono's mcs from the Tru64 one.
706 AC_MSG_CHECKING([whether $CSC is from GNU Mono])
707 if (exec >&5 2>&5;$CSC --version </dev/null;exit $?) ; then
712 csc_note="$csc_note (found different mcs program)"
716 if test -z "$CSC" ; then
717 dnl gmcs, smcs, and dmcs are versions of the Mono CSharp compiler
718 dnl targeting various runtime versions, deprecated in favour of mcs
719 dnl (checked for above) as of Mono 2.11.
721 dnl cscc is the Portable.NET CSharp compiler.
722 AC_PATH_PROGS(CSC, [dmcs smcs gmcs cscc], [])
724 if test -z "$CSC" ; then
725 dnl csc is the Microsoft CSharp compiler.
726 AC_PATH_PROGS(CSC, [csc], [])
727 if test -n "$CSC" ; then
728 dnl Chicken (the Scheme-to-C compiler) includes a tool called csc so we
729 dnl check if the output from "csc -version" includes the word chicken
730 dnl which is sufficient to distinguish Chicken's csc from Microsoft's
732 AC_MSG_CHECKING([whether $CSC is for CSharp])
733 if $CSC -version 2>/dev/null|grep chicken > /dev/null ; then
736 csc_note="$csc_note (found Chicken csc program)"
744 if test -n "$CSC" ; then
745 AC_ARG_VAR(GACUTIL, [gacutil utility to use for CSharp bindings])
746 if test -n "$GACUTIL" ; then
747 AC_PATH_PROGS(GACUTIL, ["$GACUTIL"], [])
749 if test -z "$GACUTIL" ; then
750 AC_PATH_PROGS(GACUTIL, [cli-gacutil gacutil ilgac], [])
753 AC_ARG_VAR(SN, [sn utility to use for CSharp bindings])
754 if test -n "$SN" ; then
755 AC_PATH_PROGS(SN, ["$SN"], [])
757 if test -z "$SN" ; then
758 AC_PATH_PROGS(SN, [cli-sn sn], [])
760 if test -z "$SN" ; then
762 dnl Portable.net doesn't support strong naming yet and ilgac doesn't
763 dnl require assemblies to be strong named before adding them to the GAC.
764 *ilgac*) SN=/bin/true ;;
767 if test -n "$GACUTIL" -a -n "$SN" ; then
768 AC_MSG_CHECKING([whether the CSharp compiler works])
769 [echo 'class conftest { public static void Main() { System.Console.WriteLine("OK"); } }' > conftest.cs]
770 if (exec >&5 2>&5;$CSC /out:conftest.exe conftest.cs;exit $?) ; then
772 AC_MSG_CHECKING([whether CSharp programs can just be run])
773 if test OK = "`./conftest.exe 2> /dev/null`" ; then
778 AC_PATH_PROGS(CLI, ["${CLI-cli}"], [])
779 if test -z "$CLI" ; then
780 AC_PATH_PROGS(CLI, [mono ilrun], [])
782 AC_ARG_VAR(CLI, [CSharp bytecode interpreter (optional - only needed to run CSharp testsuite with)])
783 if test -n "$CLI" ; then
784 AC_MSG_CHECKING([whether $CLI can run CSharp programs])
785 if test OK = "`$CLI ./conftest.exe 2> /dev/null`" ; then
789 AC_MSG_RESULT([no - CSharp tests will be skipped])
790 RUN_CSHARP='\$(top_srcdir)/skiptest'
793 AC_MSG_RESULT([not found - CSharp tests will be skipped])
794 RUN_CSHARP='\$(top_srcdir)/skiptest'
799 AC_MSG_CHECKING([for extra flags for $GACUTIL])
800 GACUTIL_FLAGS='/package $(ASSEMBLY) /gacdir $(libdir) /root $(DESTDIR)$(libdir)'
804 dnl Microsoft's gacutil accepts fewer options than Mono's
805 $GACUTIL /\?|grep '\<Mono\>' >/dev/null || GACUTIL_FLAGS=
808 AC_SUBST([GACUTIL_FLAGS])
809 if test -z "$GACUTIL_FLAGS" ; then
812 AC_MSG_RESULT([$GACUTIL_FLAGS])
815 BINDINGS="$BINDINGS csharp"
818 if test yes = "$with_csharp" ; then
819 AC_MSG_ERROR([CSharp compiler $CSC doesn't work])
823 if test yes = "$with_csharp" ; then
824 if test -z "$GACUTIL" ; then
825 AC_MSG_ERROR([Mono gacutil not found])
826 elif test -z "$SN" ; then
827 AC_MSG_ERROR([Mono sn not found])
832 if test yes = "$with_csharp" ; then
833 AC_MSG_ERROR([CSharp compiler not found$csc_note])
839 if test no != "$with_java" ; then
840 AC_PATH_PROGS(JAVA, ["${JAVA-java}"], [],
841 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
842 AC_PATH_PROGS(JAVAC, ["${JAVAC-javac}"], [],
843 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
844 AC_PATH_PROGS(JAR, ["${JAR-jar}"], [],
845 [${JAVA_HOME+$JAVA_HOME/bin:}${JDK_HOME+$JDK_HOME/bin:}$PATH])
846 AC_ARG_VAR(JAVA, [Java interpreter command])
847 AC_ARG_VAR(JAVAC, [Java compiler command])
848 AC_ARG_VAR(JAR, [java jar utility])
849 AC_ARG_VAR(JAVA_HOME, [Pathname of the directory where the JDK is installed])
850 AC_ARG_VAR(JDK_HOME, [Pathname of the directory where the JDK is installed])
851 AC_ARG_VAR(JNI_INCLUDE_DIR, [Pathname of the directory where jni.h is installed])
852 if test -n "$JAVA" -a -n "$JAVAC" -a -n "$JAR" ; then
854 dnl The JNI library *requires* "Java 2", which is 1.2 or better.
856 dnl So checking for jni.h presumably implicitly checks we have "Java 2".
857 dnl Note: jni.h #defines JNI_VERSION_1_[1246] (but not 3 or 5 it seems).
858 dnl So we could check for one of these if we want to check for a particular
861 AC_CHECK_HEADER([jni.h], [java_ok=yes], [
862 dnl We need to look for jni.h in /usr/lib/jvm/java-gcj/include on some
863 dnl Debian and Ubuntu boxes at least. And on Mac OS X, jni.h lives
864 dnl in /System/Library/Frameworks/JavaVM.framework/Headers.
865 SAVE_CPPFLAGS=$CPPFLAGS
867 dnl Avoid endlessly traversing if there's a symlink loop.
868 for count in 1 2 3 4 5 6 7 8 9 ; do
869 r=`readlink "$real_javac"`
870 test -n "$r" || break
873 dnl Translate ".../bin/javac" to ".../include".
874 [rel_jnidir=`echo "$real_javac"|sed 's!/[^/]*/[^/]*$!/include!'`]
877 ${JAVA_HOME+"$JAVA_HOME/include"} \
878 ${JDK_HOME+"$JDK_HOME/include"} \
880 /System/Library/Frameworks/JavaVM.framework/Headers ; do
881 CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
882 AC_MSG_CHECKING([for jni.h in $jnidir])
883 if test -f "$jnidir/jni.h" ; then
884 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
885 if test yes = $java_ok ; then
887 JAVA_CPPFLAGS=-I$jnidir
891 dnl Sun's JDK requires the user to pass an extra -I for a
892 dnl subdirectory named after the host_os. Sadly we seem to
893 dnl need to hardcode a list of the platform names.
899 jni_host_os=solaris ;;
903 if test -n "$jni_host_os" ; then
904 CPPFLAGS="$CPPFLAGS -I$jnidir/$jni_host_os"
905 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <jni.h>]])], [java_ok=yes])
906 if test yes = $java_ok ; then
907 AC_MSG_RESULT([yes, requires additional -I$jnidir/$jni_host_os])
908 JAVA_CPPFLAGS="-I$jnidir -I$jnidir/$jni_host_os"
912 AC_MSG_RESULT([found, but not usable])
914 CPPFLAGS="$SAVE_CPPFLAGS -I$jnidir"
919 CPPFLAGS=$SAVE_CPPFLAGS
920 test noyes = $java_ok$with_java && AC_MSG_ERROR([jni.h not found])
922 AC_SUBST(JAVA_CPPFLAGS)
923 if test yes = $java_ok ; then
924 AC_MSG_CHECKING([for Java path separator])
925 [echo 'public class conftest { public static void main(String[] args) { System.out.println(System.getProperty("path.separator")); } }' > conftest.java]
926 if (exec >&5 2>&5;$JAVAC conftest.java;exit $?) ; then
927 JAVA_PATHSEP=`$JAVA conftest 2>&5`
928 AC_SUBST(JAVA_PATHSEP)
929 if test -n "$JAVA_PATHSEP" ; then
930 AC_MSG_RESULT($JAVA_PATHSEP)
931 BINDINGS="$BINDINGS java"
933 AC_MSG_RESULT([failed to run test program])
937 AC_MSG_RESULT([failed to compile test program])
940 if test no = "$java_ok" ; then
941 test yes = "$with_java" && AC_MSG_ERROR([Couldn't compile and run a simple Java test program])
945 if test yes = "$with_java" ; then
946 if test -z "$JAVA" ; then
947 AC_MSG_ERROR([java not found])
948 elif test -z "$JAVAC" ; then
949 AC_MSG_ERROR([javac not found])
950 elif test -z "$JAR" ; then
951 AC_MSG_ERROR([jar not found])
957 if test no != "$with_ruby" ; then
958 dnl See comment for AC_PATH_PROGS(SWIG, ...).
959 if test -n "$RUBY" ; then
960 AC_PATH_PROGS(RUBY, ["$RUBY"], [])
962 AC_PATH_PROGS(RUBY, [ruby], [])
964 AC_ARG_VAR(RUBY, [Ruby interpreter])
965 if test -n "$RUBY" ; then
966 dnl Require Ruby 1.8 or newer. Paul says:
967 dnl I'm using 1.8.4. I imagine anything in the 1.8.x series will be fine,
968 dnl not sure about 1.6 but hardly anyone uses <1.8.
970 dnl Brief testing with Ruby 1.6.8 show the bindings probably work there,
971 dnl but smoketest.rb doesn't because the test/unit module isn't available.
972 AC_MSG_CHECKING([$RUBY version])
973 dnl RUBY_VERSION works with 1.6. Once we've checked we have at least 1.8
974 dnl we can safely use RbConfig below (RbConfig requires Ruby 1.8; Config
975 dnl gives a deprecation warning with Ruby 1.9.3).
976 version=`$RUBY -e 'print RUBY_VERSION' 2>/dev/null`
979 AC_MSG_RESULT([\$RUBY -e 'print RUBY_VERSION' didn't work])
980 if test yes = "$with_ruby" ; then
981 AC_MSG_ERROR([Working Ruby interpreter not found])
985 [0.*|1.[0-7]|1.[0-7].*])
986 AC_MSG_RESULT([$version (too old)])
987 if test yes = "$with_ruby" ; then
988 AC_MSG_ERROR([Only Ruby 1.8 or newer is supported ($RUBY is $version)])
993 if test -n "$RUBY" ; then
994 AC_MSG_RESULT([$version])
995 AC_ARG_VAR(RUBY_INC, [Directory where ruby.h can be found])
996 if test -z "$RUBY_INC" ; then
997 dnl Ruby 1.9 added rubyhdrdir; for older Ruby we use archdir.
998 [RUBY_INC=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyhdrdir"] || RbConfig::CONFIG["archdir"]'`]
1001 dnl Check that ruby.h is there, which is a good way to check that
1002 dnl the appropriate ruby-dev package has been installed.
1003 AC_MSG_CHECKING([for $RUBY_INC/ruby.h])
1004 if test -f "$RUBY_INC/ruby.h" ; then
1007 AC_MSG_CHECKING([for ruby/io.h])
1009 if test -f "$RUBY_INC/ruby/io.h" ; then
1012 dnl In a VPATH build, the ruby subdirectory won't exist the first
1016 dnl Newer Ruby has ruby/io.h - older has rubyio.h. Ruby doesn't
1017 dnl seem to provide any way to generate code which works with
1018 dnl both (and even the version number isn't a discriminator as
1019 dnl Debian etch has 1.9 without ruby/io.h). The SWIG version
1020 dnl we're currently using assumes rubyio.h exists and luckily
1021 dnl it includes it with "", so we can just drop a rubyio.h
1022 dnl wrapper alongside ruby/xapian_wrap.cc.
1023 echo '#include <ruby/io.h>' > ruby/rubyio.h
1028 AC_ARG_VAR(RUBY_INC_ARCH, [Directory where ruby/config.h can be found (needed from Ruby 1.9)])
1029 if test -z "$RUBY_INC_ARCH" ; then
1030 dnl Ruby 2.0 and later Ruby 1.9 have rubyarchhdrdir; for early 1.9,
1031 dnl use rubyhdrdir+"/"+arch.
1032 [RUBY_INC_ARCH=`$RUBY -rrbconfig -e 'd = RbConfig::CONFIG["rubyhdrdir"]; print RbConfig::CONFIG["rubyarchhdrdir"] || (d ? d + "/" + RbConfig::CONFIG["arch"] : "")'`]
1033 dnl Ruby 1.8 has no rubyhdrdir, so set RUBY_INC_ARCH=RUBY_INC.
1034 test x"$RUBY_INC_ARCH" != x || RUBY_INC_ARCH=$RUBY_INC
1036 AC_SUBST(RUBY_INC_ARCH)
1038 AC_ARG_VAR(RUBY_LIB, [Directory to install ruby files into])
1039 if test -z "$RUBY_LIB" ; then
1040 [RUBY_LIB=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitelibdir"]'`]
1044 AC_ARG_VAR(RUBY_LIB_ARCH, [Directory to install ruby binary modules into])
1045 if test -z "$RUBY_LIB_ARCH" ; then
1046 [RUBY_LIB_ARCH=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitearchdir"]'`]
1048 AC_SUBST(RUBY_LIB_ARCH)
1051 if test unsupported = "$allow_undefined_flag" ; then
1052 dnl For Microsoft Windows and a few other platforms.
1053 [RUBY_LIBS=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG["LIBRUBYARG"]'`]
1057 dnl rdoc is included as part of the Ruby core distribution, so run it
1058 dnl at build time rather shipping the rather large generated output in
1059 dnl our source tarball.
1060 if test -n "$RDOC" ; then
1061 AC_PATH_PROGS(RDOC, ["$RDOC"], [])
1063 dnl Try replace the *last* 'ruby' with 'rdoc'.
1064 rdoc_best_guess=`echo "$RUBY"|sed 's,\(.*\)ruby,\1rdoc,'`
1065 AC_PATH_PROGS(RDOC, ["$rdoc_best_guess"], [])
1066 if test -z "$RDOC"; then
1067 AC_PATH_PROGS(RDOC, [rdoc], [])
1070 if test -n "$RDOC"; then
1071 BINDINGS="$BINDINGS ruby"
1074 AC_MSG_RESULT([no (install ruby-dev or ruby-devel package or similar)])
1075 if test yes = "$with_ruby" ; then
1076 AC_MSG_ERROR([ruby.h not found])
1079 RUBY_DLEXT=`$RUBY -rrbconfig -e 'print RbConfig::CONFIG[["DLEXT"]]'`
1080 AC_SUBST(RUBY_DLEXT)
1085 if test no != "$with_perl" ; then
1086 AC_PATH_PROGS(PERL, ["${PERL-perl}"], [])
1087 AC_ARG_VAR(PERL, [perl interpreter])
1088 if test -n "$PERL" ; then
1089 AC_PATH_PROGS(PROVE, ["${PROVE-prove}"], [])
1090 AC_ARG_VAR(PROVE, [Perl Test::Harness test runner])
1091 if test x"$PROVE" = x ; then
1092 AC_MSG_WARN([Perl 'prove' tool not found - Perl bindings tests will be skipped])
1093 dnl The skiptest script just returns exit code 77.
1094 PROVE='$(top_srcdir)/skiptest'
1097 if test -z "$PERL_INC" ; then
1098 PERL_INC=`$PERL -MConfig -e 'print $Config{archlibexp}, "/CORE"'`
1102 AC_ARG_VAR(PERL_ARCH, [Directory to install architecture-dependent perl files into])
1103 if test -z "$PERL_ARCH" ; then
1104 PERL_ARCH=`$PERL -MConfig -e 'print $Config{installsitearch}'`
1108 AC_ARG_VAR(PERL_LIB, [Directory to install architecture-independent perl files into])
1109 if test -z "$PERL_LIB" ; then
1110 PERL_LIB=`$PERL -MConfig -e 'print $Config{installsitelib}'`
1114 AC_ARG_VAR(PERL_SO, [Extension for compiled Perl modules])
1115 if test -z "$PERL_SO" ; then
1116 PERL_SO=`$PERL -MConfig -e 'print ".", $Config{dlext}'`
1120 if test -z "$PERL_XAPIAN_VERSION" ; then
1121 dnl snapshot versions look like 1.2.3_git123 or 1.2.3_svn14971
1122 case $PACKAGE_VERSION in
1124 PERL_XAPIAN_VERSION=`echo "$PACKAGE_VERSION"|sed 's/_git/./'` ;;
1126 PERL_XAPIAN_VERSION=`echo "$PACKAGE_VERSION"|sed 's/_svn/./'` ;;
1128 PERL_XAPIAN_VERSION=$PACKAGE_VERSION.0 ;;
1131 AC_SUBST(PERL_XAPIAN_VERSION)
1133 BINDINGS="$BINDINGS perl"
1135 if test yes = "$with_perl" ; then
1136 AC_MSG_ERROR([perl not found])
1141 if test no != "$with_lua" ; then
1142 AC_PATH_PROGS(LUA, ["${LUA-lua}"], [])
1143 AC_ARG_VAR(LUA, [lua interpreter])
1144 if test -n "$LUA" ; then
1145 dnl We need Lua 5.1 or later.
1146 AC_MSG_CHECKING([$LUA version])
1147 lua_version=`$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' 2>&AS_MESSAGE_LOG_FD`
1149 case $lua_version in
1150 [[01234]].*|5.0|5.0.*)
1151 AC_MSG_RESULT([$lua_version < 5.1 (too old)])
1152 if test yes = "$with_lua" ; then
1153 AC_MSG_ERROR([$LUA too old (Lua 5.1 or newer required)])
1158 AC_MSG_RESULT([\$LUA -e 'print(_VERSION)' | cut -f 2 -d ' ' didn't work])
1160 if test yes = "$with_lua" ; then
1161 AC_MSG_ERROR([Working Lua interpreter not found])
1167 if test -n "$LUA" ; then
1168 AC_MSG_RESULT([$lua_version])
1170 AC_ARG_VAR([LUA_LIB], [Directory to install compiled Lua modules into])
1171 AC_ARG_VAR([LUA_SO], [Extension for compiled Lua modules (e.g. LUA_SO=.so)])
1172 AC_MSG_CHECKING([for directory to install compiled Lua modules into])
1173 if test -z "$LUA_LIB" -o -z "$LUA_SO" ; then
1174 lua_cpath=`$LUA -e 'require("package") print(package.cpath)'`
1175 dnl Look for the first absolute path in lua_cpath which has leaf
1176 dnl "?.<ext>" and put the directory part into lua_lib and <ext> into
1177 dnl lua_so. If LUA_SO was specified by the user, only consider
1178 dnl entries where <ext> matches LUA_SO.
1183 [lua_so_pat='[a-zA-Z][a-zA-Z]*'] ;;
1185 dnl If LUA_SO has a leading '.', remove it.
1186 lua_so_pat=`AS_ECHO("$LUA_SO")|sed 's/^\.//'` ;;
1188 dnl If LUA_SO was specified without a leading '.', add one to the
1189 dnl value substituted into Makefile.in.
1194 while test x"$lua_cpath" != x ; do
1195 [lua_lib=`expr X"$lua_cpath" : X'\([^;]*\)'`]
1196 lua_so=.`expr X"$lua_lib" : X'/.*/?\.\('"$lua_so_pat"'\)$'`
1199 dnl If someone has foolishly put ?.lua in cpath, ignore them.
1203 lua_lib=`expr X"$lua_lib" : X'\(/.*\)/?\.'"$lua_so_pat"'$'`
1206 [lua_cpath=`expr X"$lua_cpath" : X'[^;]*;*\(.*\)'`]
1208 test -n "$LUA_LIB" || LUA_LIB=$lua_lib
1209 test -n "$LUA_SO" || LUA_SO=$lua_so
1211 if test -z "$LUA_LIB"; then
1212 AC_MSG_RESULT([not found])
1214 AC_MSG_RESULT([$LUA_LIB])
1218 AC_MSG_CHECKING([for extension to use for compiled Lua modules])
1219 if test -z "$LUA_SO"; then
1220 AC_MSG_RESULT([not found])
1222 AC_MSG_RESULT([$LUA_SO])
1226 AC_MSG_CHECKING([for Lua header files])
1227 AC_ARG_VAR([LUA_INC], [Directory to include for lua headers])
1228 if test -z "$LUA_INC" ; then
1229 dirs="/usr/include/lua$lua_version /usr/local/include/lua$lua_version"
1231 if test -r "$i/lua.h"; then
1238 if test -z "$LUA_INC" ; then
1239 AC_MSG_RESULT([not found])
1241 AC_MSG_RESULT([$LUA_INC])
1242 BINDINGS="$BINDINGS lua"
1243 LUA_CPPFLAGS="-I$LUA_INC"
1245 AC_SUBST([LUA_CPPFLAGS])
1248 if test yes = "$with_lua" ; then
1249 AC_MSG_ERROR([lua not found])
1257 *python*) dnl Matches python and/or python3
1258 dnl C++11 has thread_local
1259 dnl GCC and some others have __thread
1260 dnl MSVC and some others have __declspec(thread)
1261 AC_MSG_CHECKING([for thread-local storage qualifier])
1262 AC_ARG_VAR([THREAD_LOCAL], [thread-local storage qualifier])
1263 if test -z "$THREAD_LOCAL" ; then
1264 for t in thread_local __thread '__declspec(thread)' ; do
1265 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[static $t void * p;]])],
1266 [THREAD_LOCAL=$t; break])
1269 if test -z "$THREAD_LOCAL" ; then
1270 AC_MSG_RESULT([unknown, disabling thread-local support])
1272 AC_MSG_RESULT([$THREAD_LOCAL])
1273 AC_DEFINE_UNQUOTED([THREAD_LOCAL], [$THREAD_LOCAL], [Thread local storage qualifier (undefined if no TLS)])
1278 dnl Set flags to control warnings (enable more, or disable annoying ones)
1279 dnl and other compiler specific flags.
1281 if test yes = "$GXX" ; then
1282 dnl Python itself is compiled with -fno-strict-aliasing, and it appears
1283 dnl it's safest to follow this lead when compiling the SWIG generated
1284 dnl interface code. E.g.:
1285 dnl http://article.gmane.org/gmane.comp.gcc.devel/74692
1286 dnl The code SWIG generates for other languages seems to have similar
1287 dnl issues too, so just turn this on for all of them.
1289 dnl There's no need to check -fno-strict-aliasing is supported as it works
1290 dnl with GCC 2.95 and we don't support anything older.
1291 SWIG_CXXFLAGS="-fno-strict-aliasing"
1293 dnl We need to explicitly link against -lstdc++ on OpenBSD (discovered
1294 dnl on OpenBSD 3.7 with GCC 3.3.5 but this appears to be due to a
1295 dnl deliberate decision on the part of OpenBSD developers). Luckily
1296 dnl we can just always specify -lstdc++ explicitly if GCC is the
1297 dnl compiler and libtool will eliminate the duplicate on other
1299 XAPIAN_LIBS="$XAPIAN_LIBS -lstdc++"
1301 dnl Intel's C++ compiler is identified as "GXX" by autoconf's test - check
1302 dnl which we actually have.
1304 [#ifdef __INTEL_COMPILER
1309 dnl Intel's compiler:
1311 dnl -w1 stops the avalanche of uninteresting "remark" messages.
1312 dnl -wd... disables warnings which don't have good code workarounds.
1314 dnl Swig generated code gives lots of unused and uninitialized warnings.
1315 dnl They're non-harmful, so suppress them.
1316 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -Wall -w1 -wd177,1572"
1321 dnl Swig generated code gives lots of unused and uninitialized warnings.
1322 dnl They're non-harmful, so suppress them.
1323 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -fshow-column -Wall -Wno-unused -Wno-uninitialized"
1326 if test no != "$enable_visibility"; then
1327 dnl GCC doesn't support symbol visibility on all platforms (e.g. it isn't
1329 AC_MSG_CHECKING([if $CXX -fvisibility=hidden works])
1330 if echo 'int bar() __attribute__((visibility("default"))); int foo() {return 42;}'|$CXX -Werror -fvisibility=hidden -c -oconftest.o -xc++ - >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
1331 AC_MSG_RESULT([yes])
1332 SWIG_CXXFLAGS="$SWIG_CXXFLAGS -fvisibility=hidden"
1338 AC_SUBST(SWIG_CXXFLAGS)
1340 dnl Restore CXXFLAGS to those the user specified or autoconf defaulted to.
1341 CXXFLAGS=$save_CXXFLAGS
1343 dnl Required for auto regeneration to work in a combined maintainer-mode tree.
1344 : ${AUTOM4TE=autom4te}
1345 AC_SUBST([AUTOM4TE])
1347 AC_CONFIG_FILES([Makefile
1350 python/Makefile python/docs/conf.py python/version.i
1351 python3/Makefile python3/docs/conf.py python3/version.i
1354 tcl8/Makefile tcl8/pkgIndex.tcl
1355 csharp/Makefile csharp/AssemblyInfo.cs
1357 perl/Makefile perl/util.i
1359 xapian-bindings.spec
1364 if test -z "$BINDINGS" ; then
1365 echo "*** Not found the required tools for building bindings for any"
1366 echo "*** supported language!"
1368 echo "*** You may need to install -dev or -devel packages for the languages"
1369 echo "*** you want to build bindings for."
1371 echo "*** For details of how to point configure at tools not on PATH, see:"
1372 echo "*** ./configure --help"
1374 echo "*** Building bindings for languages:" $BINDINGS
1377 if test "$COMPAT_VERSION" != "$XAPIAN_VERSION" ; then
1378 release_series=[`echo "$COMPAT_VERSION"|sed 's/[0-9][0-9]*$//'`]
1379 case $XAPIAN_VERSION in
1380 $release_series*) ;;
1382 AC_MSG_ERROR([Xapian library is version ${XAPIAN_VERSION-<0.8.2} which is from a different release series to bindings $PACKAGE_VERSION, so they aren't compatible.])
1385 dnl 0.8.2 was the first version which set XAPIAN_VERSION
1386 AC_MSG_WARN([Xapian library is version ${XAPIAN_VERSION-<0.8.2} but the bindings are version $PACKAGE_VERSION - we strongly recommend using matching versions.])