xapian-check-patch: Catch another typo
[xapian.git] / xapian-core / configure.ac
blobc9b3403a0f85ec14234084a2585679defa6af9f3
1 dnl Process this file with autoconf to produce a configure script.
3 dnl NB When updating the version for a release, update LIBRARY_VERSION_INFO
4 dnl below too.
5 AC_INIT([xapian-core], [1.5.0], [https://xapian.org/bugs])
6 dnl See HACKING document for details of the reasons for required versions.
7 AC_PREREQ([2.64])
8 dnl Extract from the libtool info manual:
9 dnl
10 dnl Here are a set of rules to help you update your library version information:
11 dnl
12 dnl 1. Start with version information of '0:0:0' for each libtool library.
13 dnl
14 dnl 2. Update the version information only immediately before a public
15 dnl    release of your software.  More frequent updates are unnecessary,
16 dnl    and only guarantee that the current interface number gets larger
17 dnl    faster.
18 dnl
19 dnl 3. If the library source code has changed at all since the last
20 dnl    update, then increment REVISION ('C:R:A' becomes 'C:r+1:A').
21 dnl
22 dnl 4. If any interfaces have been added, removed, or changed since the
23 dnl    last update, increment CURRENT, and set REVISION to 0.
24 dnl
25 dnl 5. If any interfaces have been added since the last public release,
26 dnl    then increment AGE.
27 dnl
28 dnl 6. If any interfaces have been removed since the last public release
29 dnl    then set AGE to 0.
30 dnl
31 dnl LIBRARY_VERSION_INFO for libxapian1.5
32 dnl 0:0:0 1.5.0 Reset as library renamed
33 LIBRARY_VERSION_INFO=0:0:0
34 AC_SUBST([LIBRARY_VERSION_INFO])
36 LIBRARY_VERSION_SUFFIX=
37 dnl Where xapian.h, etc go.
38 incdir=$includedir
39 case $PACKAGE_VERSION in
40   [*.*[13579].*])
41     dnl Development release series:
42     [dev_series=`echo "$PACKAGE_VERSION"|sed 's/\.[^.]*$//'`]
44     dnl Append version installed programs by default.  To specify no suffix,
45     dnl configure with: --program-suffix=
46     test x"$program_suffix" != xNONE || program_suffix=-$dev_series
48     incdir=$incdir/xapian-$dev_series
50     LIBRARY_VERSION_SUFFIX=-$dev_series
51     ;;
52 esac
54 AC_SUBST([LIBRARY_VERSION_SUFFIX])
55 AC_SUBST([incdir])
57 dnl Check the build directory doesn't contain a space, so we die early with
58 dnl a helpful error.
59 case `pwd` in
60 *' '*)
61    AC_MSG_ERROR([You can't build in a directory whose path contains a space])
62    ;;
63 esac
65 dnl Check the source directory doesn't contain a space, so we die early with
66 dnl a helpful error.  FIXME: Unfortunately, configure seems to choke before
67 dnl it gets to us so this code doesn't get a chance to fire.
68 case $0 in
69 *' '*)
70    dnl Note: for in-tree builds, the build directory test above will fire
71    dnl before this can.
72    AC_MSG_ERROR([You can't build with sources in a directory whose path contains a space])
73    ;;
74 esac
76 dnl Check the prefix to install in doesn't contain a space, so we die early with
77 dnl a helpful error.
78 case $prefix in
79 *' '*)
80    AC_MSG_ERROR([You can't install in a directory whose path contains a space])
81    ;;
82 esac
84 dnl Note if the user specified a particular C++ compiler so we can give a more
85 dnl appropriate error message if we can't link a simple C++ program.
86 original_CXX=
87 if test -n "$CXX" ; then
88   original_CXX="CXX=$CXX"
89 elif test -n "$CCC" ; then
90   original_CXX="CCC=$CCC"
93 dnl See HACKING document for details of the reasons for required versions.
94 AM_INIT_AUTOMAKE([1.13 -Wportability tar-ustar no-dist-gzip dist-xz std-options])
95 AC_CONFIG_SRCDIR([matcher/multiandpostlist.cc])
97 AC_CONFIG_HEADERS([config.h])
99 AC_CONFIG_MACRO_DIRS([m4])
101 AM_PROG_AR
103 dnl Use libtool to manage our libraries.
104 LT_PREREQ([2.2.8])
105 dnl Default to only building shared libraries.
107 dnl Building both shared and static means having to compile the files which
108 dnl make up the library twice on most platforms.  Shared libraries are the
109 dnl better option for most users, and if anyone really wants static libraries,
110 dnl they can configure with --enable-static (or --enable-static=xapian-core if
111 dnl configuring a combined tree with the bindings).
113 dnl We don't export any data items from the library, so it should be safe to
114 dnl enable win32-dll without decorating any declarations specially.
115 LT_INIT([disable-static win32-dll])
117 dnl -no-undefined causes problems on Solaris with Sun CC in C++11 mode, so only
118 dnl pass -no-undefined on platforms where it is required in order to link a
119 dnl shared library at all (Windows is the main one).
120 NO_UNDEFINED=
121 if test unsupported = "$allow_undefined_flag" ; then
122   NO_UNDEFINED=-no-undefined
124 AC_SUBST(NO_UNDEFINED)
126 AM_CXXFLAGS=
128 dnl A standard "gotcha" for mingw and cygwin users is to not set up their
129 dnl PATH correctly, so that MSDOS FIND.EXE is found before Unix find.  Help
130 dnl them out by checking for this condition, rather than letting libtool
131 dnl fail in obscure ways.  NB check the *BUILD* OS, not the host one!
132 case $build_os in
133   *mingw* | *cygwin* | pw32*)
134     find /dirunlikelytoexist >/dev/null 2>&1
135     if test $? = 2 ; then
136         dnl Unix find will return 1 if the directory didn't exist, or 0 if
137         dnl it did.
138         AC_MSG_ERROR([
139 *** You appear to have an MSDOS-like FIND.EXE in your PATH ahead of any
140 *** UNIX-like find.  This misconfiguration will confuse libtool - you'll need
141 *** to make sure you have a UNIX-like find installed and fix your PATH, then
142 *** rerun configure.  For more information, see:
144 ***   https://www.cygwin.com/faq/faq.html#faq.using.find
146     fi
147   ;;
148 esac
150 dnl Add parameters for aclocal
151 dnl (This must come after AM_INIT_AUTOMAKE, since it modifies ACLOCAL)
152 ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
154 dnl disable "maintainer only" rules by default
155 AM_MAINTAINER_MODE
157 dnl Checks for programs.
158 AC_PROG_CXX
160 AC_CANONICAL_HOST
162 # Checked: freebsd8.0 openbsd4.6 solaris2.9 solaris2.10
163 case $host_os in
164   linux* | k*bsd*-gnu | freebsd* | openbsd* | solaris*)
165     dnl Vanilla libtool sets this to "unknown" which it then handles as "yes".
166     link_all_deplibs_CXX=no
167     ;;
168 esac
170 case $host_os in
171   linux*)
172     dnl Extract search path from ldconfig which is more reliable than the way
173     dnl vanilla libtool extracts them from ld.so.conf.
174     d=`/sbin/ldconfig -N -X -v 2>&AS_MESSAGE_LOG_FD|$SED 's,^\(/.*\):\( (.*)\)\?$,\1,p;d'|tr '\n' ' '`
175     test -z "$d" || sys_lib_dlsearch_path_spec=$d
176     ;;
177 esac
179 case $host in
180   *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
181     dnl On these platforms, libtool emits a warning if -no-install is passed,
182     dnl and uses -no-fast-install instead - the least ugly way to avoid that
183     dnl warnings seems to be to duplicate the above list of platforms from
184     dnl libtool and use -no-fast-install on them directly.
185     NO_INSTALL=-no-fast-install ;;
186   *)
187     NO_INSTALL=-no-install ;;
188 esac
189 AC_SUBST([NO_INSTALL])
191 dnl For reasons which are beyond me, if autoconf can't find a C++ compiler
192 dnl it will set CXX to g++ (which obviously won't work) rather than actually
193 dnl telling the user that it couldn't find a C++ compiler and telling them
194 dnl to either install one or set CXX if there's one configure failed to find.
195 dnl It's probably worthwhile checking that the C++ compiler actually works
196 dnl anyway!
197 if test -n "$CXX" ; then
198   AC_LANG_CPLUSPLUS
199   AC_MSG_CHECKING([whether $CXX is a working C++ compiler])
200   AC_CACHE_VAL([xo_cv_cxx_works],
201     [
202     AC_TRY_RUN([int main() {}],
203                xo_cv_cxx_works=yes,
204                xo_cv_cxx_works=no,
205                AC_TRY_LINK([], [], xo_cv_cxx_works=yes, xo_cv_cxx_works=no))
206     ])
207   AC_MSG_RESULT([$xo_cv_cxx_works])
208 else
209   xo_cv_cxx_works=no
211 if test no = "$xo_cv_cxx_works" ; then
212   case $original_CXX in
213   CCC=*)
214     dnl CCC is handled in a slightly odd way - if its value isn't an
215     dnl executable (taking PATH into account) then it is ignored!
216     test "$original_CXX" = "CCC=$CXX" || original_CXX=
217     ;;
218   esac
219   if test -z "$original_CXX" ; then
220   AC_MSG_ERROR([
221 *** You need a working C++ compiler to compile Xapian, but configure failed to
222 *** find one.  If you have a working C++ compiler, you can tell configure where
223 *** to find it by invoking it like so:
225 ***   ./configure CXX=/opt/bin/c++
227   else
228   AC_MSG_ERROR([
229 *** You need a working C++ compiler to compile Xapian, but the compiler you
230 *** specified (with '$original_CXX') doesn't appear to be able to successfully
231 *** compile and link a simple program.
233   fi
236 dnl Probe for any options needed to enable C++11 support.
237 AX_CXX_COMPILE_STDCXX_11
239 dnl We don't use a C compiler to compile Xapian's code, but on some platforms
240 dnl (e.g. mingw) libtool uses $LTCC which defaults to $CC, and it's also use to
241 dnl build auxiliary tools like snowball and lemon.
242 AC_PROG_CC
244 dnl Check endianness.
245 AC_C_BIGENDIAN
247 dnl We want a non-cross-compiling C compiler for building lemon with.
248 if test -z "$CC_FOR_BUILD" ; then
249   if test yes = "$cross_compiling"; then
250     CC_FOR_BUILD=cc
251   else
252     CC_FOR_BUILD="$CC"
253   fi
255 AC_ARG_VAR([CC_FOR_BUILD], [C compiler command for native compilation (needed to compile build tools during cross-builds)])
257 dnl Run tests using the C++ compiler.
258 AC_LANG_CPLUSPLUS
260 dnl Enable large file support if possible.
261 AC_SYS_LARGEFILE
262 dnl With xlC on AIX, -D_LARGE_FILES changes the ABI of std::string, so it
263 dnl also needs to be used when compiling user code.
264 abi_affecting_cxxflags=
265 if $GREP '^#define _LARGE_FILES 1$' confdefs.h > /dev/null 2>&1 ; then
266   abi_affecting_cxxflags=-D_LARGE_FILES
268 AC_SUBST([abi_affecting_cxxflags])
270 AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
271 #if defined __WIN32__ || defined _WIN32
272 #error WIN32
273 #endif
274 ]])], [win32=no], [win32=yes])
276 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
277 #ifdef _MSC_VER
278 #error MSVC
279 #endif
280 ]])], [msvc=no], [msvc=yes])
282 XAPIAN_LDFLAGS=
283 XAPIAN_LIBS=
284 AC_SUBST([XAPIAN_LDFLAGS])
285 AC_SUBST([XAPIAN_LIBS])
287 AC_DEFUN([XAPIAN_TEST_LINKER_FLAG],
288   [
289   AC_MSG_CHECKING([for $CXX -Wl,$1])
290   AC_CACHE_VAL([xo_cv_ldflag_$2],
291     [
292     save_LDFLAGS=$LDFLAGS
293     LDFLAGS="$LDFLAGS -Wl,$1"
294     flag=$1
295     AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
296       [xo_cv_ldflag_$2=yes
297       $3],
298       [xo_cv_ldflag_$2=no
299       $4])
300     LDFLAGS=$save_LDFLAGS
301     ])
302   AC_MSG_RESULT([$xo_cv_ldflag_$2])
303   ])
305 dnl Test if the compiler works with $1 added to CXXFLAGS; if it does, add $1 to
306 dnl variable $2.  If the test passes, also do $3; if it fails, also do $4.
307 AC_DEFUN([XAPIAN_TEST_CXXFLAGS],
308   [
309   XTC_save_CXXFLAGS=$CXXFLAGS
310   CXXFLAGS="$CXXFLAGS $1"
311   AC_TRY_COMPILE([], [],
312                  [CXXFLAGS=$XTC_save_CXXFLAGS
313                   $2="${$2} $1"
314                   $3],
315                  [CXXFLAGS=$XTC_save_CXXFLAGS
316                   $4])
317   ])
319 ldflags=
320 if test yesyes = "$GXX$enable_shared" ; then
321   case $host_os in
322     *mingw* | *cygwin*)
323       XAPIAN_TEST_LINKER_FLAG([--enable-runtime-pseudo-reloc], [enable_runtime_pseudo_reloc],
324         [ldflags="-Wl,$flag"],
325         [
326         dnl Can't use AC_DISABLE_SHARED after AC_PROG_LIBTOOL, but
327         dnl this test needs to be after AC_PROG_LIBTOOL, so we can't
328         dnl just disable the shared build automatically...
329         AC_MSG_ERROR([ld version too old to support a shared build - configure with --disable-shared, or install binutils 2.13.90-20030111-1 or later])
330         ])
331     ;;
332   esac
334 dnl Only works for ldflags which can be specified anywhere on the link line.
335 AC_SUBST([ldflags])
337 dnl Preserve the default CXXFLAGS.
338 save_CXXFLAGS=$CXXFLAGS
340 dnl x86 has excess precision issues with 387 FP instructions, which are
341 dnl avoided by using SSE instructions instead.  This is also faster (~6% in
342 dnl a CPU bound testcase).
343 AC_ARG_ENABLE([sse],
344 [AS_HELP_STRING([--disable-sse],
345                 [disable use of SSE FP instructions on x86])]
346 [AS_HELP_STRING([[--enable-sse[=sse|sse2]]],
347                 [set which SSE FP instructions to use on x86 (default: sse2)])],
348   [case ${enableval} in
349     sse|sse2|yes|no) ;;
350     *) AC_MSG_ERROR([bad value ${enableval} for --enable-sse or --disable-sse]) ;;
351   esac],
352   [enable_sse=yes])
354 dnl Some versions of Sun's C++ compiler reportedly need an explicit -lm.
355 dnl The maths functions we use include: exp log ceil fabs sqrt
356 AC_MSG_CHECKING([if -lm is required for maths functions])
357 dnl Don't use constant arguments as the compiler might simply evaluate the
358 dnl whole expression at compile time, and it might inline certain functions
359 dnl so test several functions.  Also write results using printf() so that
360 dnl the compiler can't optimise away the computations.
361 AC_TRY_LINK([#ifdef __SUNPRO_CC
362 #error Need -lm for Sun C++ 5.9 under libtool 2.2.10
363 #endif
364 #include <cmath>
365 #include <cstdio>
366 #include <ctime>
367 using namespace std;], [
368   double a = log(ceil(time(NULL)/7.0));
369   printf("%f %f %f\n", a, sqrt(a), exp(fabs(a - 12345.6)));
370   ], [AC_MSG_RESULT([no])], [
371     LIBS="-lm $LIBS"
372     AC_TRY_LINK([#include <cmath>
373 #include <cstdio>
374 #include <ctime>
375 using namespace std;], [
376   double a = log(ceil(time(NULL)/7.0));
377   printf("%f %f %f\n", a, sqrt(a), exp(fabs(a - 12345.6)));],
378         [AC_MSG_RESULT([yes])],
379         [AC_MSG_ERROR([Failed to link a C++ program using <cmath>])
380     ])
383 dnl C++11 should have log2(double), but keep this check for now to allow for
384 dnl compilers with incomplete library support for C++11.
385 AC_CHECK_DECLS([log2(double)], [], [],
386 [#include <cmath>
387 using namespace std;])
389 dnl exp10() is a GNU libc extension.
390 AC_CHECK_DECLS([exp10(double)], [], [],
391 [#include <cmath>
392 using namespace std;])
394 dnl Darwin provides __exp10().
395 AC_CHECK_DECLS([__exp10(double)], [], [],
396 [#include <cmath>
397 using namespace std;])
399 dnl GCC provides __builtin_exp10() (but notably clang doesn't currently).
400 dnl On mingw, __builtin_exp10() causes GCC to generate a call to exp10() which
401 dnl then fails to link, so perform a link check here to catch that.
402 AC_CACHE_CHECK([for __builtin_exp10], ac_cv_link___builtin_exp10, [
403   AC_LINK_IFELSE([AC_LANG_PROGRAM([[
404 #include <cstdio>
405 #include <ctime>
406 using namespace std;]],
407     [[printf("%f", __builtin_exp10(double(time(NULL)*1e-8)));]])],
408     [ac_cv_link___builtin_exp10=yes],
409     [ac_cv_link___builtin_exp10=no])
411 if test $ac_cv_link___builtin_exp10 = yes ; then
412   AC_DEFINE([HAVE___BUILTIN_EXP10], [1], [Define to 1 if you have the '__builtin_exp10' function.])
415 dnl See if <typeinfo> can be used in the testsuite - at least for GCC and xlC,
416 dnl compilation of the test code below fails if RTTI isn't being generated
417 dnl (g++ -fno-rtti, or by default with xlC).
418 AC_MSG_CHECKING([if RTTI is supported])
419 save_CXXFLAGS=$CXXFLAGS
420 dnl xlC issues a warning for typeid() being used without RTTI being enabled,
421 dnl so for this test we pass the xlC option to make that warning into an error.
422 XAPIAN_TEST_CXXFLAGS([-qhaltonmsg=1540-2412], [CXXFLAGS])
423 AC_TRY_COMPILE([
424 #include <exception>
425 #include <typeinfo>],
426         [
427         int f();
428         try {
429             return f();
430         } catch (std::exception & e) {
431             return typeid(e).name()[0];
432         }],
433     AC_MSG_RESULT([yes])
434     AC_DEFINE([USE_RTTI], [1], [Define if the testsuite can use RTTI]),
435     AC_MSG_RESULT([no]))
436 CXXFLAGS=$save_CXXFLAGS
438 AC_MSG_CHECKING([if std::is_trivially_copyable<> is supported])
439 AC_TRY_COMPILE([#include <type_traits>],
440         [return std::is_trivially_copyable<int>::value ? 1 : 0;],
441     AC_MSG_RESULT([yes])
442     AC_DEFINE([HAVE_STD_IS_TRIVIALLY_COPYABLE], [1], [Define to 1 if you have 'std::is_trivially_copyable<>'.]),
443     AC_MSG_RESULT([no]))
445 dnl We need to specify the argument types for builtin functions, or else
446 dnl AC_CHECK_DECLS fails to detect them when the compiler is clang.
447 AC_CHECK_DECLS([__builtin_add_overflow(int, int, int*),
448                 __builtin_mul_overflow(int, int, int*)], [], [], [ ])
449 AC_CHECK_DECLS([__builtin_bswap16(uint16_t),
450                 __builtin_bswap32(uint32_t)], [], [],
451                [#include <stdint.h>])
452 AC_CHECK_DECLS([_byteswap_ushort, _byteswap_ulong], [], [],
453                [#include <stdlib.h>])
454 AC_CHECK_DECLS([__builtin_clz(unsigned),
455                 __builtin_clzl(unsigned long),
456                 __builtin_clzll(unsigned long long)], [], [], [ ])
457 AC_CHECK_DECLS([__builtin_ctz(unsigned),
458                 __builtin_ctzl(unsigned long),
459                 __builtin_ctzll(unsigned long long)], [], [], [ ])
460 AC_CHECK_DECLS([__builtin_expect(long, long)], [], [], [ ])
461 AC_CHECK_DECLS([__builtin_popcount(unsigned),
462                 __builtin_popcountl(unsigned long),
463                 __builtin_popcountll(unsigned long long)], [], [], [ ])
464 AC_CHECK_DECLS([__popcnt, __popcnt64], [], [], [#include <intrin.h>])
466 dnl Check for time functions.
467 AC_CHECK_FUNCS([clock_gettime sleep nanosleep gettimeofday ftime])
469 case $host_os in
470   *mingw*)
471     dnl For _ftime64() on mingw we need to tell it we're happy to require
472     dnl MSVCRT 6.10 or higher, which isn't too onerous a requirement it seems.
473     AC_DEFINE([__MSVCRT_VERSION__], [0x0601], [Define on mingw to the minimum msvcrt version to assume])
474     AC_DEFINE([MINGW_HAS_SECURE_API], [1], [Define on mingw to get _s suffixed "secure" functions declared in headers])
475     ;;
476 esac
478 dnl We use timer_create() if available to implement a search time limit.
479 SAVE_LIBS=$LIBS
480 AC_SEARCH_LIBS([timer_create], [rt],
481                [
482     AC_MSG_CHECKING([for timer_create() usability])
483     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
484 [[#if defined _AIX || defined __GNU__
485 #error timer_create known not to work
486 #endif]])],
487         [AC_MSG_RESULT([yes])
488         XAPIAN_LIBS="$LIBS $XAPIAN_LIBS"
489         AC_DEFINE([HAVE_TIMER_CREATE], [1], [Define to 1 if you have the 'timer_create' function.])]
490         ,
491         [AC_MSG_RESULT([no])
492     ])
494 LIBS=$SAVE_LIBS
496 dnl Used by tests/soaktest/soaktest.cc
497 AC_CHECK_FUNCS([srandom random])
499 dnl Used by tests/harness/testsuite.cc
500 AC_CHECK_FUNCS([sigaction])
501 AC_MSG_CHECKING([for sigsetjmp and siglongjmp])
502 AC_TRY_COMPILE([#include <setjmp.h>],
503   [sigjmp_buf jb; if (sigsetjmp(jb, 1)) { siglongjmp(jb, 1);  }],
504   AC_DEFINE([HAVE_SIGSETJMP], [1], [Define to 1 if you have the 'sigsetjmp' function])
505   AC_MSG_RESULT([yes]),
506   AC_MSG_RESULT([no]))
508 dnl Used by tests/harness/cputimer.cc:
509 AC_CHECK_FUNCS([getrusage times sysconf])
511 dnl Used by tests/harness/unixcmd.cc
512 AC_CHECK_FUNCS([nftw])
514 dnl Used by tests/api_replicate.cc.
516 dnl Solaris < 10 only has putenv().
518 dnl Microsoft have marked putenv() as deprecated, so we use _putenv_s() under
519 dnl MSVC to avoid deprecation warnings.  We probe here since mingw doesn't
520 dnl currently (v3.20) provide _putenv_s(), so we can't just use it conditional
521 dnl on __WIN32__ being defined.  We need to check for a declaration rather
522 dnl than just seeing if the symbol exists, as the symbol will exist in the C
523 dnl runtime DLL even if mingw doesn't declare it in its headers.
524 AC_CHECK_FUNCS([setenv])
525 AC_CHECK_DECLS([_putenv_s(const char *,const char *)], [], [],
526 [#include <stdlib.h>])
528 dnl See if we have closefrom(), or some functions that are useful to implement
529 dnl closefrom() on platforms which don't provide it.
530 AC_CHECK_FUNCS([closefrom getdirentries getrlimit])
532 dnl See if ftime returns void (as it does on mingw)
533 AC_MSG_CHECKING([return type of ftime])
534 if test $ac_cv_func_ftime = yes ; then
535   AC_TRY_COMPILE([#include <sys/timeb.h>],
536     [struct timeb tp; int i = ftime(&tp);],
537     AC_MSG_RESULT([int]),
538     AC_MSG_RESULT([void])
539     AC_DEFINE([FTIME_RETURNS_VOID], [1], [Define if ftime returns void]))
542 dnl Check how to find the hostname: uname() in sys/utsname.h, or gethostname()
543 dnl Don't use default includes as inttypes.h is found by Compaq C but not C++
544 dnl so it causes all header probes to fail.
545 AC_CHECK_HEADERS([sys/utsname.h], [], [], [ ])
546 AC_CHECK_FUNCS([gethostname])
548 dnl mingw (for instance) lacks ssize_t
549 AC_TYPE_SSIZE_T
551 AC_TYPE_PID_T
553 AC_TYPE_MODE_T
555 AC_CHECK_SIZEOF([short])
556 AC_CHECK_SIZEOF([int])
557 AC_CHECK_SIZEOF([long])
558 AC_CHECK_SIZEOF([long long])
560 AC_CHECK_HEADERS([sys/types.h])
562 AC_MSG_CHECKING([for 32 bit integer type])
563 case 4 in
564     "$ac_cv_sizeof_int")   INT32_T=int ;;
565     "$ac_cv_sizeof_long")  INT32_T=long ;;
566     "$ac_cv_sizeof_short") INT32_T=short ;;
567     *)
568       AC_MSG_RESULT([none found])
569       AC_MSG_ERROR([No 32 bit integer type found])
570 esac
571 AC_MSG_RESULT([$INT32_T])
573 AC_MSG_CHECKING([for 64 bit integer type])
574 case 8 in
575     "$ac_cv_sizeof_int")       INT64_T=int ;;
576     "$ac_cv_sizeof_long")      INT64_T=long ;;
577     "$ac_cv_sizeof_long_long") INT64_T='long long' ;;
578     *)
579       AC_MSG_RESULT([none found])
580       AC_MSG_ERROR([No 64 bit integer type found])
581 esac
582 AC_MSG_RESULT([$INT64_T])
584 dnl Check for perl (needed to generate some sources and documentation).
585 AC_PATH_PROG([PERL], [perl], [])
586 if test x$USE_MAINTAINER_MODE = xyes; then
587   test -z "$PERL" && AC_MSG_ERROR([perl is required in maintainer mode])
590 AC_ARG_ENABLE([64bit_docid],
591   [AS_HELP_STRING([--enable-64bit-docid], [enable 64bit docid [default=no]])],
592   [case ${enableval} in
593     yes|no) ;;
594   *) AC_MSG_ERROR([bad value ${enableval} for --enable-64bit-docid]) ;;
595   esac],
596   [enable_64bit_docid=no])
598 AC_ARG_ENABLE([64bit_termcount],
599   [AS_HELP_STRING([--enable-64bit-termcount], [enable 64bit termcount [default=no]])],
600   [case ${enableval} in
601     yes|no) ;;
602   *) AC_MSG_ERROR([bad value ${enableval} for --enable-64bit-termcount]) ;;
603   esac],
604   [enable_64bit_termcount=no])
606 AC_ARG_ENABLE([64bit_termpos],
607   [AS_HELP_STRING([--enable-64bit-termpos], [enable 64bit termpos [default=no]])],
608   [case ${enableval} in
609     yes|no) ;;
610   *) AC_MSG_ERROR([bad value ${enableval} for --enable-64bit-termpos]) ;;
611   esac],
612   [enable_64bit_termpos=no])
614 AC_ARG_ENABLE([documentation],
615   [AS_HELP_STRING([--enable-documentation], [enable make rules to rebuild documentation [default=maintainer-mode]])],
616   [case ${enableval} in
617     yes|no) ;;
618     *) AC_MSG_ERROR([bad value ${enableval} for --enable-documentation]) ;;
619   esac],
620   [enable_documentation=$USE_MAINTAINER_MODE])
621 AM_CONDITIONAL([DOCUMENTATION_RULES], [test x"$enable_documentation" = xyes])
622 AM_CONDITIONAL([MAINTAINER_NO_DOCS], [test x"$USE_MAINTAINER_MODE$enable_documentation" = xyesno])
624 if test x"$enable_documentation" = xyes ; then
625   dnl Checks for dot.  (Diagrams in the documentation)
626   AC_PATH_PROG([DOT], [dot])
627   test -z "$DOT" && AC_MSG_ERROR([dot (part of the graphviz package) is required to build documentation])
628   DOXYGEN_DOT_PATH=`echo "$DOT" | sed 's!/dot$!!'`
629   AC_SUBST([DOXYGEN_DOT_PATH])
631   dnl Check for doxygen. (Needed to make some more of the documentation)
632   AC_PATH_PROG([DOXYGEN], [doxygen], [])
633   test -z "$DOXYGEN" && AC_MSG_ERROR([doxygen is required to build documentation])
635   dnl Check for help2man. (Needed to make man pages from "--help" output).
636   AC_PATH_PROG([HELP2MAN], [help2man], [])
637   test -z "$HELP2MAN" && AC_MSG_ERROR([help2man is required to build documentation])
639   dnl Check for rst2html. (Needed to make HTML from reStructuredText format)
640   dnl Also look for rst2html.py, which archlinux reportedly installs it as.
641   AC_PATH_PROGS([RST2HTML], [rst2html rst2html.py], [])
642   test -z "$RST2HTML" && AC_MSG_ERROR([rst2html is required to build documentation (try package python-docutils)])
644   dnl Check for pngcrush, which we optionally use to reduce the size of the
645   dnl PNG files which doxygen generates.  We can get by without it, so don't
646   dnl fail here if it's not found.
647   AC_PATH_PROG([PNGCRUSH], [pngcrush], [])
650 dnl Checks for header files.
651 AC_CHECK_HEADERS([fcntl.h limits.h sys/errno.h sys/select.h sys/uio.h], [], [], [ ])
652 AC_CHECK_HEADERS([sys/resource.h],
653                  [], [], [#include <sys/types.h>])
655 dnl cxxabi.h was added in GCC 3.1, but clang lies and defines __GNUC__ yet
656 dnl doesn't seem to reliably provide this header, so probe for it.
657 AC_CHECK_HEADERS([cxxabi.h], [], [], [ ])
659 dnl If valgrind is installed and new enough, we use it for leak checking in the
660 dnl testsuite.  If VALGRIND is set to an empty value, then skip the check and
661 dnl don't use valgrind.
662 if test -n "${VALGRIND-unset}" ; then
663   AC_PATH_PROG([VALGRIND], [valgrind], [])
664   if test -n "$VALGRIND" ; then
665     dnl Check that the installed valgrind version works, and supports the
666     dnl options we use.  This means we won't try to use valgrind < 3.3.0
667     dnl (released 7/12/2007) since before that --log-file didn't expand
668     dnl %p (and appended the process id).
669     dnl
670     dnl No need to check for VALGRIND_COUNT_LEAKS now - that was added before
671     dnl 2.0.0.
672     AC_MSG_CHECKING([if valgrind supports --log-file with %p and --child-silent-after-fork=yes])
673     vglog=config.vglog.%p.tmp
674     vglogwild="config.vglog.*.tmp*"
675     rm -f $vglogwild
676     if $VALGRIND --log-file="$vglog" --child-silent-after-fork=yes -q true 2>&AS_MESSAGE_LOG_FD ; then
677       for f in $vglogwild ; do
678         case $f in
679         $vglog*) VALGRIND= ;;
680         esac
681       done
682       if test x"$VALGRIND" = x ; then
683         AC_MSG_RESULT([no])
684       else
685         AC_MSG_RESULT([yes])
686         AC_CHECK_HEADERS([valgrind/memcheck.h], [], [VALGRIND=], [ ])
687       fi
688     else
689       dnl The valgrind detected doesn't seem to work!  Perhaps this is an
690       dnl x86_64 box with a 32 bit valgrind.
691       AC_MSG_RESULT([$VALGRIND doesn't work])
692       VALGRIND=
693     fi
694     rm -f $vglogwild
695   fi
698 if test -n "$VALGRIND" ; then
699   AC_DEFINE([HAVE_VALGRIND], [1], [Define if a suitable valgrind is installed])
702 dnl If eatmydata is installed, we run the testsuite under it to speed it up.
703 dnl If EATMYDATA is set to an empty value, then skip this check and don't use
704 dnl eatmydata.
705 if test -n "${EATMYDATA-unset}" ; then
706   AC_PATH_PROG([EATMYDATA], [eatmydata], [])
709 dnl Checks for library functions.
710 AC_FUNC_MEMCMP
711 AC_FUNC_STRERROR_R
713 AC_CACHE_CHECK([for sys_errlist and sys_nerr], ac_cv_sys_errlist_and_sys_nerr, [
714   AC_LINK_IFELSE([AC_LANG_PROGRAM(
715 dnl On Linux, sys_errlist and sys_nerr need <stdio.h>, though the man page
716 dnl says <errno.h>.  The man page seems to match other platforms such as
717 dnl NetBSD, so include both headers to ensure we get them.
718 [[#include <errno.h>
719 #include <stdio.h>]],
720 [[  printf("%s", sys_errlist[sys_nerr - 1]);]])],
721   [ ac_cv_sys_errlist_and_sys_nerr=yes ],
722   [ ac_cv_sys_errlist_and_sys_nerr=no ])
724 if test "x$ac_cv_sys_errlist_and_sys_nerr" = "xyes" ; then
725   AC_DEFINE([HAVE_SYS_ERRLIST_AND_SYS_NERR], [1],[Define if you have 'sys_errlist' and 'sys_nerr'])
728 AC_CACHE_CHECK([for _sys_errlist and _sys_nerr], ac_cv__sys_errlist_and__sys_nerr, [
729   AC_LINK_IFELSE([AC_LANG_PROGRAM(
730 [[#include <errno.h>
731 #include <stdio.h>]],
732 [[  printf("%s", _sys_errlist[_sys_nerr - 1]);]])],
733   [ ac_cv__sys_errlist_and__sys_nerr=yes ],
734   [ ac_cv__sys_errlist_and__sys_nerr=no
735   ])
737 if test "x$ac_cv__sys_errlist_and__sys_nerr" = "xyes" ; then
738   AC_DEFINE([HAVE__SYS_ERRLIST_AND__SYS_NERR], [1],[Define if you have '_sys_errlist' and '_sys_nerr'])
741 dnl Check that snprintf actually works as it's meant to.
743 dnl Linux 'man snprintf' warns:
744 dnl  Linux libc4.[45] does not have a snprintf, but provides a libbsd that
745 dnl  contains an snprintf equivalent to sprintf, i.e., one that ignores the
746 dnl  size argument.  Thus, the use of snprintf with early libc4 leads to
747 dnl  serious security problems.
749 dnl It also warns that glibc < 2.0.6 (and presumably other pre-C99
750 dnl implementations) return -1 when truncating so check that we get the
751 dnl ISO C99 semantics for the returned length when truncating.  If we
752 dnl have a working snprintf but with non-ISO return semantics, handle
753 dnl that case separately as it may still be useful in many cases.
755 dnl mingw has _snprintf so check for that too.
756 AC_MSG_CHECKING([for working ISO C99 conforming snprintf])
757 ac_cv_func_snprintf_noniso=no
758 for func in snprintf _snprintf ; do
759   AC_RUN_IFELSE([
760     AC_LANG_PROGRAM(
761       [[
762 #include <cstdio>
763 #include <cstring>
764 using namespace std;
765       ]],
766       dnl Return different exit status for each error so we can see which
767       dnl check failed by consulting config.log.
768       [[
769         char buffer[4] = "abc";
770         int res1 = $func(buffer, 2, "%s", "XYZ");
771         if (memcmp(buffer, "X\0c", 4) != 0) return 2;
772         int res2 = $func(buffer, 2, "%x", 0x12);
773         if (memcmp(buffer, "1\0c", 4) != 0) return 3;
774         if (res1 == -1 && res2 == -1) return 15; /* Pre-ISO semantics. */
775         if (res1 != 3) return 4;
776         if (res2 != 2) return 5;
777       ]]
778     )],
779     [ac_cv_func_snprintf=$func;break],
780     [
781     if test 15no = "$?$ac_cv_func_snprintf_noniso" ; then
782       ac_cv_func_snprintf_noniso=$func
783     fi
784     ac_cv_func_snprintf=no
785     ],
786     [ac_cv_func_snprintf=unknown;break]
787   )
788 done
789 AC_MSG_RESULT([$ac_cv_func_snprintf])
790 case $ac_cv_func_snprintf in
791   no)
792     AC_MSG_CHECKING([for working non-ISO C99 conforming snprintf])
793     AC_MSG_RESULT([$ac_cv_func_snprintf_noniso])
794     if test no != "$ac_cv_func_snprintf_noniso" ; then
795       AC_DEFINE_UNQUOTED([SNPRINTF], [$ac_cv_func_snprintf_noniso],
796         [Define to the name of a function implementing snprintf but not caring about ISO C99 return value semantics (if one exists)])
797     fi
798     ;;
799   unknown)
800     dnl be conservative when crosscompiling
801     ;;
802   *)
803     AC_DEFINE_UNQUOTED([SNPRINTF_ISO], [$ac_cv_func_snprintf],
804        [Define to the name of a function implementing snprintf with ISO C99 semantics (if one exists)])
805     AC_DEFINE_UNQUOTED([SNPRINTF], [$ac_cv_func_snprintf],
806        [Define to the name of a function implementing snprintf but not caring about ISO C99 return value semantics (if one exists)])
807     ;;
808 esac
810 dnl ***************************
811 dnl * Select modules to build *
812 dnl ***************************
814 dnl Check if a non-GPL library build is specified.
816 AC_ARG_ENABLE([gpl-libxapian],
817   [AS_HELP_STRING([--disable-gpl-libxapian], [disable use of GPL code which we won't be able to relicense in libxapian (NB currently the resulting build still contains GPL code, but GPL code which it will be possible to relicense eventually)])],
818   [case ${enableval} in
819     yes) ;;
820     no)
821       AC_DEFINE([DISABLE_GPL_LIBXAPIAN], 1, [Define to error out if we try to include GPL code in libxapian])
822       ;;
823     *) AC_MSG_ERROR([bad value ${enableval} for --disable-gpl-libxapian]) ;;
824   esac],
825   [enable_gpl_libxapian=yes])
827 dnl Check which database backends should be built.
829 AC_DEFUN([_XAPIAN_BACKEND_ENABLE],
830   [AC_ARG_ENABLE([backend_$1],
831     [AS_HELP_STRING([--enable-backend-$1], [build the $1 database backend [default=$3]])],
832     [case $enableval in
833       yes|no) ;;
834       *) AC_MSG_ERROR([Invalid option: '--enable-backend-$1=$enableval']) ;;
835     esac], [enable_backend_$1=$2])
836   ])
838 AC_DEFUN([XAPIAN_BACKEND_ENABLE],
839   [_XAPIAN_BACKEND_ENABLE([$1],
840     m4_default([$2], [yes]),
841     m4_default([$3], [yes]))
842   ])
844 dnl When adding a new backend, update INSTALL too.
845 XAPIAN_BACKEND_ENABLE([glass], [$enable_gpl_libxapian], [yes (unless --disable-gpl-libxapian)])
846 XAPIAN_BACKEND_ENABLE([honey])
847 XAPIAN_BACKEND_ENABLE([inmemory], [$enable_gpl_libxapian], [yes (unless --disable-gpl-libxapian)])
848 default_enable_backend_remote=$enable_gpl_libxapian
849 case $host_os in
850   *djgpp* | *msdos* )
851     dnl We don't currently support the remote backend on this platform so
852     dnl disable it by default.
853     default_enable_backend_remote=no
854     ;;
855 esac
856 XAPIAN_BACKEND_ENABLE([remote], [$default_enable_backend_remote], [yes (except for MSDOS; unless --disable-gpl-libxapian)])
858 use_proc_for_uuid=0
859 use_win32_uuid_api=0
860 win32_need_lws2_32=0
861 case $enable_backend_glass$enable_backend_honey in
862 *yes*)
863   dnl We use zlib for compressing tags in glass and honey.  We could
864   dnl automatically disable support if zlib isn't found, but overall that
865   dnl probably does more harm than good - it's most likely that someone just
866   dnl forgot to install the -dev package for zlib.
867   dnl
868   dnl Similarly for uuid support.
870   dnl Check for zlib.h.
871   AC_CHECK_HEADERS([zlib.h], [], [
872     AC_MSG_ERROR([zlib.h not found - required for glass (you may need to install the zlib1g-dev or zlib-devel package)])
873     ], [ ])
875   dnl Check for zlibVersion in -lz.
876   SAVE_LIBS=$LIBS
877   dnl mingw build needs -lzlib or -lzdll.
878   AC_SEARCH_LIBS([zlibVersion], [z zlib zdll], [], [
879     AC_MSG_ERROR([zlibVersion() not found in -lz, -lzlib, or -lzdll - required for glass (you may need to install the zlib1g-dev or zlib-devel package)])
880     ])
881   if test x != x"$LIBS" ; then
882     XAPIAN_LIBS="$XAPIAN_LIBS $LIBS"
883   fi
884   LIBS=$SAVE_LIBS
886   dnl Find the UUID library (from e2fsprogs/util-linux-ng, not the OSSP one).
888   case $host_os-$win32 in
889     *-yes | *cygwin*) dnl Use built-in win32 API.
890       use_win32_uuid_api=1
891       AC_DEFINE([USE_WIN32_UUID_API], [1],
892                 [Define to 1 to use UuidCreate(), etc])
893       if test $win32 = yes ; then
894         dnl We need -lws2_32 for htonl(), etc, but not for Cygwin which
895         dnl provides these functions in its libc.
896         win32_need_lws2_32=1
897       fi
898       XAPIAN_LIBS="$XAPIAN_LIBS -lrpcrt4"
899       ;;
900     *)
901       dnl Check for uuid/uuid.h (e2fsprogs/util-linux-ng) or uuid.h
902       dnl (FreeBSD/NetBSD).
903       AC_CHECK_HEADERS([uuid/uuid.h], [
904         dnl util-linux-ng's uuid/uuid.h found - check for uuid_generate in
905         dnl -luuid.
906         SAVE_LIBS=$LIBS
907         AC_SEARCH_LIBS([uuid_generate], [uuid], [], [
908           AC_MSG_ERROR([uuid_generate() not found in -luuid - required for glass and honey backends (you may need to install the uuid-dev, libuuid-devel or e2fsprogs-devel package)])
909           ])
910         if test x != x"$LIBS" ; then
911           XAPIAN_LIBS="$XAPIAN_LIBS $LIBS"
912         fi
913       ], [
914         dnl Try uuid.h as found on FreeBSD/NetBSD, with associated code in libc.
915         AC_CHECK_HEADERS([uuid.h], [
916           dnl Check for uuid_create with no extra libraries required.
917           AC_CHECK_FUNC([uuid_create], [], [
918             AC_MSG_ERROR([uuid.h found, but uuid_create() not found.  You probably wants to install libuuid from util-linux-ng or e2fsprogs (you may need to install the uuid-dev, libuuid-devel or e2fsprogs-devel package)])
919           ])
920         ], [
921           dnl Especially useful for Android.
922           AC_MSG_CHECKING([if host platform supports /proc/sys/kernel/random/uuid])
923           case $host_os in
924             linux*)
925               use_proc_for_uuid=1
926               AC_DEFINE([USE_PROC_FOR_UUID], [1],
927                         [Define to 1 to read UUID from '/proc/sys/kernel/random/uuid'])
928               AC_MSG_RESULT([yes])
929               ;;
930             *)
931               AC_MSG_RESULT([no])
932               AC_MSG_ERROR([Failed to find a way to generate UUIDs, required for glass and honey backends (you may need to install the uuid-dev, libuuid-devel or e2fsprogs-devel package)])
933               ;;
934           esac
935         ], [ ])
936       ], [ ])
937       ;;
938   esac
940   dnl Older versions of libuuid (such as that on CentOS 4.7) don't have
941   dnl uuid_unparse_lower(), only uuid_unparse().
942   AC_LINK_IFELSE([AC_LANG_CALL([], [uuid_unparse_lower])],
943     [
944     AC_DEFINE([HAVE_UUID_UNPARSE_LOWER], [1],
945               [Define to 1 if you have the 'uuid_unparse_lower' function.])
946     ])
947   LIBS=$SAVE_LIBS
949   case $host_os in
950     *djgpp* | *msdos* )
951       dnl DJGPP has a dummy implementation of fork which always fails.
952       dnl
953       dnl For disk-based backends, use flock() for locking, which doesn't need
954       dnl fork() or socketpair().
955       AC_DEFINE([FLINTLOCK_USE_FLOCK], 1, [Define to use flock() for flint-compatible locking])
956       ;;
957   esac
958   ;;
959 esac
960 AM_CONDITIONAL([USE_PROC_FOR_UUID], [test "$use_proc_for_uuid" = 1])
961 AM_CONDITIONAL([USE_WIN32_UUID_API], [test "$use_win32_uuid_api" = 1])
963 if test "$enable_backend_remote" = yes ; then
964   case $host_os-$win32 in
965     *-yes )
966       dnl For mingw and msvc we have an alternative implementation which
967       dnl doesn't need fork() or socketpair().
968       dnl
969       dnl We need -lws2_32 for getaddrinfo(), etc.
970       win32_need_lws2_32=1
971       dnl Vista is needed for the AI_ADDRCONFIG flag to getaddrinfo().
972       AC_DEFINE([WINVER], [0x600],
973                 [Version of Windows to assume (0x600 => Vista).])
974       AC_DEFINE([_WIN32_WINNT], [WINVER],
975                 [Version of Windows to assume.])
976       ;;
977     *djgpp* | *msdos* )
978       dnl DJGPP has a dummy implementation of fork which always fails.  If
979       dnl someone actually wanted remote backend support, then DJGPP has a
980       dnl pthreads port, so using threads like we do on Windows would make more
981       dnl sense.
982       AC_MSG_ERROR([The remote backend is not currently supported on this platform.])
983       ;;
984     *)
985       dnl On Unix, we need fork and socketpair for the remotebackend.
986       SAVE_LIBS=$LIBS
987       AC_CHECK_FUNCS([fork], [], [
988         AC_MSG_ERROR([fork() required for the remote backend - if an extra library is needed, pass LIBS=-lfoo to configure.  Or --disable-backend-remote to disable it.)])
989       ])
990       dnl Check if -lsocket is required for socketpair (Solaris needs it).
991       dnl And on Haiku it's in -lnetwork.
992       AC_SEARCH_LIBS([socketpair], [socket network], [], [
993         AC_MSG_ERROR([socketpair() required for the remote backend - if an extra library is needed, pass LIBS=-lfoo to configure.  Or --disable-backend-remote to disable it.)])
994       ])
995       AC_DEFINE([HAVE_SOCKETPAIR], [1],
996                 [Define to 1 if you have the 'socketpair' function.])
997       dnl Check if extra libraries are needed for getaddrinfo or inet_ntop()
998       dnl (e.g. on Solaris).
999       dnl
1000       dnl We're currently assuming that any system that is worth trying to
1001       dnl support has getaddrinfo() and inet_ntop(), since these are the
1002       dnl standard route for supporting IPv6, and that's pretty much essential
1003       dnl for platforms to support now.
1004       AC_SEARCH_LIBS([getaddrinfo], [nsl socket], [], [
1005         AC_MSG_ERROR([getaddrinfo() required for the remote backend - if an extra library is needed, pass LIBS=-lfoo to configure.  Or --disable-backend-remote to disable it.)])
1006       ])
1007       AC_SEARCH_LIBS([inet_ntop], [nsl socket], [], [
1008         AC_MSG_ERROR([inet_ntop() required for the remote backend - if an extra library is needed, pass LIBS=-lfoo to configure.  Or --disable-backend-remote to disable it.)])
1009       ])
1010       XAPIAN_LIBS="$XAPIAN_LIBS $LIBS"
1011       LIBS=$SAVE_LIBS
1012       ;;
1013   esac
1015   TYPE_SOCKLEN_T
1018 if test "$win32_need_lws2_32" = 1 ; then
1019   XAPIAN_LIBS="$XAPIAN_LIBS -lws2_32"
1022 AC_ARG_ENABLE([visibility],
1023   [AS_HELP_STRING([--disable-visibility], [disable use of GCC visibility])],
1024   [case ${enableval} in
1025     yes|no) ;;
1026     *) AC_MSG_ERROR([bad value ${enableval} for --disable-visibility]) ;;
1027   esac])
1029 vpath_build=no
1030 if test "`pwd`" != "`cd $srcdir;pwd`" ; then
1031   vpath_build=yes
1033 AM_CONDITIONAL([VPATH_BUILD], [test yes = "$vpath_build"])
1035 dnl Turn off compilation of anything that we don't have the requirements for
1037 dnl Set conditionals to specify what we compile
1039 AM_CONDITIONAL([BUILD_BACKEND_GLASS], [test yes = "$enable_backend_glass"])
1040 AM_CONDITIONAL([BUILD_BACKEND_HONEY], [test yes = "$enable_backend_honey"])
1041 AM_CONDITIONAL([BUILD_BACKEND_INMEMORY], [test yes = "$enable_backend_inmemory"])
1042 AM_CONDITIONAL([BUILD_BACKEND_REMOTE], [test yes = "$enable_backend_remote"])
1043 AM_CONDITIONAL([BUILD_BACKEND_TOOLS],
1044   [test nono != "$enable_backend_glass$enable_backend_honey"])
1046 dnl Decide if we should use the zlib-vg.so LD_PRELOAD hack.
1047 use_zlib_vg=no
1048 if test -n "$VALGRIND" ; then
1049   case $host_os in
1050     linux*) use_zlib_vg=yes ;;
1051   esac
1053 AM_CONDITIONAL([USE_ZLIB_VG], [test yes = "$use_zlib_vg"])
1055 dnl See if we have fdatasync, and what libraries are needed for it.
1056 dnl We need to actually check for a declaration as OS X has a dummy
1057 dnl implementation in the library which is not prototyped in any header.
1058 AC_CHECK_DECL([fdatasync(int)], [
1059   SAVE_LIBS=$LIBS
1060   AC_SEARCH_LIBS([fdatasync], [rt], [XAPIAN_LIBS="$LIBS $XAPIAN_LIBS"])
1061   LIBS=$SAVE_LIBS
1062   AC_CHECK_FUNCS([fdatasync])
1063   ],
1064   [ac_cv_func_fdatasync=no],
1065   [#include <unistd.h>]
1068 AC_CHECK_FUNCS([fsync writev])
1069 AC_CHECK_FUNCS([posix_fadvise])
1070 if test "$win32" = no ; then
1071   dnl ftruncate() under Wine seems to be buggy and sometimes fails, though
1072   dnl a cut-down reproducer seems fine.  For now just avoid ftruncate()
1073   dnl entirely on this platform - we'll fallback to lseek() + write() of a
1074   dnl single zero byte, which is pretty efficient.
1075   AC_CHECK_FUNCS([ftruncate])
1078 dnl HP-UX has pread and pwrite, but they don't work!  Apparently this problem
1079 dnl manifests when largefile support is enabled, and we definitely want that
1080 dnl so don't use pread or pwrite on HP-UX.
1081 case $host_os in
1082   hpux*)
1083     AC_MSG_CHECKING([for pread])
1084     AC_MSG_RESULT([present but broken on $host_os])
1085     AC_MSG_CHECKING([for pwrite])
1086     AC_MSG_RESULT([present but broken on $host_os])
1087     ;;
1088   *)
1089     AC_CHECK_FUNC([pread],
1090        [AC_DEFINE([HAVE_PREAD], [1],
1091             [Define if pread is available on this system])
1092         AC_MSG_CHECKING([for any prototype needed for pread])
1093         AC_CACHE_VAL([xo_cv_pread_prototype],
1094           [
1095             for p in ' ' \
1096               'extern "C" ssize_t pread(int, void *, size_t, off_t) throw ();' \
1097               'extern "C" ssize_t pread(int, void *, size_t, off_t);' ; do
1098               AC_TRY_COMPILE([
1099 #include <sys/types.h>
1100 #include <unistd.h>
1102               ],[
1103                 char b[256];
1104                 pread(1, b, 256, 20);
1105               ],[
1106                 xo_cv_pread_prototype="$p"
1107                 break
1108               ])
1109             done
1110             if test -z "$xo_cv_pread_prototype"; then
1111               AC_MSG_RESULT([not found])
1112               AC_MSG_ERROR([Failed to find working prototype for pread])
1113             fi
1114           ])
1115           if test " " = "$xo_cv_pread_prototype" ; then
1116             AC_MSG_RESULT([none required])
1117           else
1118             AC_MSG_RESULT([$xo_cv_pread_prototype])
1119             AC_DEFINE_UNQUOTED([PREAD_PROTOTYPE], [$xo_cv_pread_prototype],
1120                                [explicit prototype needed for pread (if any)])
1121           fi
1122         ])
1123     AC_CHECK_FUNC([pwrite],
1124        [AC_DEFINE([HAVE_PWRITE], [1],
1125             [Define if pwrite is available on this system])
1126         AC_MSG_CHECKING([for any prototype needed for pwrite])
1127         AC_CACHE_VAL([xo_cv_pwrite_prototype],
1128           [
1129             for p in ' ' \
1130               'extern "C" ssize_t pwrite(int, const void *, size_t, off_t) throw ();' \
1131               'extern "C" ssize_t pwrite(int, const void *, size_t, off_t);' ; do
1132               AC_TRY_COMPILE([
1133 #include <sys/types.h>
1134 #include <unistd.h>
1136               ],[
1137                 const char *p = "hello";
1138                 pwrite(1, p, 5, 20);
1139               ],[
1140                 xo_cv_pwrite_prototype="$p"
1141                 break
1142               ])
1143             done
1144             if test -z "$xo_cv_pwrite_prototype"; then
1145               AC_MSG_RESULT([not found])
1146               AC_MSG_ERROR([Failed to find working prototype for pwrite])
1147             fi
1148           ])
1149           if test " " = "$xo_cv_pwrite_prototype" ; then
1150             AC_MSG_RESULT([none required])
1151           else
1152             AC_MSG_RESULT([$xo_cv_pwrite_prototype])
1153             AC_DEFINE_UNQUOTED([PWRITE_PROTOTYPE], [$xo_cv_pwrite_prototype],
1154                                [explicit prototype needed for pwrite (if any)])
1155           fi
1156         ])
1157     ;;
1158 esac
1160 AC_MSG_CHECKING([for directory separator(s)])
1161 case $host_os-$win32 in
1162   *-yes | cygwin* | os2* | *djgpp* | *msdos* )
1163     AC_MSG_RESULT([/ and \\])
1164     AC_DEFINE([DIR_SEPS], ["/\\"], [directory separator(s) as a character or string literal])
1165     AC_DEFINE([DIR_SEPS_LIST], [{ '/', '\\' }], [directory separator(s) as an initialiser list])
1166     ;;
1167   *)
1168     AC_MSG_RESULT([/])
1169     AC_DEFINE([DIR_SEPS], ['/'], [directory separator(s) as a character or string literal])
1170     AC_DEFINE([DIR_SEPS_LIST], [{ '/' }], [directory separator(s) as an initialiser list])
1171     ;;
1172 esac
1174 AC_CHECK_FUNCS([link])
1176 dnl *************************
1177 dnl * Set debugging options *
1178 dnl *************************
1180 dnl Which assertion types to enable in the code.
1182 AC_ARG_ENABLE([assertions],
1183   [AS_HELP_STRING([--enable-assertions], [enable debug assertions (no|partial|yes) [default=no]])],
1184   [case $enableval in
1185     yes|partial|no) ;;
1186     *)
1187       AC_MSG_ERROR([Invalid option: '--enable-assertions=$enableval']) ;;
1188   esac])
1190 AC_ARG_ENABLE([log],
1191   [AS_HELP_STRING([--enable-log], [generate a log of methods called, etc (no|yes|profile) [default=no]])],
1192   [case $enableval in
1193     yes|no) ;;
1194     profile)
1195       AC_MSG_ERROR(['--enable-log=profile' is no longer supported - see https://trac.xapian.org/wiki/ProfilingXapian for alternatives.]) ;;
1196     *)
1197       AC_MSG_ERROR([Invalid option: '--enable-log=$enableval']) ;;
1198   esac])
1200 dnl Set defines according to the --enable-assertions and --enable-log options
1201 dnl given.
1203 if test yes = "$enable_assertions" || test partial = "$enable_assertions" ; then
1204   AC_DEFINE([XAPIAN_ASSERTIONS],,
1205     [Define if you want assertions (causes some slow-down)])
1208 if test yes = "$enable_assertions"; then
1209   AC_DEFINE([XAPIAN_ASSERTIONS_PARANOID],,
1210     [Define if you want paranoid assertions (causes significant slow-down)])
1213 if test yes = "$enable_log"; then
1214   AC_DEFINE([XAPIAN_DEBUG_LOG],,
1215     [Define if you want a log of methods called and other debug messages])
1218 dnl ******************************
1219 dnl * Set special compiler flags *
1220 dnl ******************************
1222 dnl Set flags to control warnings (enable more, or disable annoying ones).
1223 dash_d_visibility=
1224 if test yes = "$GXX"; then
1225   dnl Intel's C++ compiler and clang both lie and define __GNUC__, so check which
1226   dnl we actually have, as neither is really 100% compatible.
1227   case `echo __INTEL_COMPILER __clang__|$CXX -E - 2>&AS_MESSAGE_LOG_FD|grep -v '^#'` in
1228     *__INTEL_COMPILER*__clang__*)
1229       dnl GCC (since neither substituted):
1231       dnl The exact format of g++ --version seems to change with almost every
1232       dnl minor release so use the preprocessor macros which should be more
1233       dnl robust.
1234       AC_MSG_CHECKING([for version of $CXX])
1235       gxx_version=`echo __GNUC__.__GNUC_MINOR__.__GNUC_PATCHLEVEL__|$CXX -E -|sed '/^#/d;s/ //g'`
1236       AC_MSG_RESULT([GCC $gxx_version])
1238       case $gxx_version in
1239       [[0123]].*|4.[[0-7]].*)
1240         AC_MSG_ERROR([Xapian requires GCC 4.8 or later])
1241         ;;
1242       esac
1244       dnl -Wundef was supported by g++ 3.0.
1245       dnl
1246       dnl -Wlogical-op and -Wmissing-declarations (for C++) were added in
1247       dnl GCC 4.3.
1248       dnl
1249       dnl -Wdouble-promotion was added in GCC 4.6.
1250       dnl
1251       dnl -Winit-self was added in GCC 3.4, but for GCC < 4.7 g++ always
1252       dnl warns for this case with -Wuninitialized (implied by -W).  We
1253       dnl don't intend to use this idiom, so any instances are bugs we'd
1254       dnl like to know about.
1255       dnl
1256       dnl All the other options were supported by g++ 2.95.
1257       AM_CXXFLAGS="$AM_CXXFLAGS -Wall -W -Wredundant-decls -Wpointer-arith -Wcast-qual -Wcast-align -Wformat-security -fno-gnu-keywords -Wundef -Woverloaded-virtual -Wstrict-null-sentinel -Wshadow -Wstrict-overflow=1 -Wlogical-op -Wmissing-declarations -Wdouble-promotion -Winit-self"
1259       dnl FIXME:
1260       dnl -Wconversion in older GCC versions is intended to help migration
1261       dnl from K&R to ISO C, and isn't useful for us.  In 4.3 it was renamed
1262       dnl to -Wtraditional-conversion and a new -Wconversion added which
1263       dnl sounds useful but is a bit buggy currently.  So we should consider
1264       dnl enabling -Wconversion once it is stabilised (GCC 4.4 or ...)
1265       dnl
1266       dnl -Wold-style-cast is interesting, but triggers for macros from
1267       dnl system headers (e.g. FD_SET).  GCC 4.8 improved this by making
1268       dnl -ftrack-macro-expansion=2 the default, but we still see such
1269       dnl warnings on some platforms for some reason (e.g. Cygwin with GCC
1270       dnl 5.4.0 warns about FD_SET, and on Debian with GCC 4.9.2 we see
1271       dnl warnings from zlib.h).
1273       dnl Automatically add -Werror if maintainer mode is enabled.
1274       if test x$USE_MAINTAINER_MODE = xyes; then
1275         AM_CXXFLAGS="$AM_CXXFLAGS -Werror"
1276       fi
1277       ;;
1278     *__clang__*)
1279       dnl Intel's compiler (since __clang__ not substituted):
1280       dnl
1281       dnl -w1 stops the avalanche of uninteresting "remark" messages.
1282       dnl -wd... disables warnings which don't have good code workarounds.
1283       AM_CXXFLAGS="$AM_CXXFLAGS -Wall -w1 -wd177,1572"
1285       dnl Automatically add -Werror if maintainer mode is enabled.
1286       if test x$USE_MAINTAINER_MODE = xyes; then
1287         AM_CXXFLAGS="$AM_CXXFLAGS -Werror"
1288       fi
1289       ;;
1290     *__INTEL_COMPILER*)
1291       dnl clang (since __INTEL_COMPILER not substituted):
1293       dnl These options all work at least as far back as clang++ 3.0:
1294       AM_CXXFLAGS="$AM_CXXFLAGS -Wall -W -Wredundant-decls -Wpointer-arith -Wcast-qual -Wcast-align -Wformat-security -fno-gnu-keywords -Wundef -Woverloaded-virtual -Wshadow -Wstrict-overflow=1 -Wmissing-declarations -Winit-self"
1296       dnl Automatically add -Werror if maintainer mode is enabled.
1297       if test x$USE_MAINTAINER_MODE = xyes; then
1298         AM_CXXFLAGS="$AM_CXXFLAGS -Werror"
1299       fi
1300       ;;
1301   esac
1303   if test no != "$enable_visibility"; then
1304     dnl GCC doesn't support symbol visibility on all platforms (e.g. it isn't
1305     dnl supported on mingw and visibility attributes result in warnings).
1306     AC_MSG_CHECKING([if $CXX -fvisibility=hidden -fvisibility-inlines-hidden works])
1307     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
1308       AC_MSG_RESULT([yes])
1309       AM_CXXFLAGS="$AM_CXXFLAGS -fvisibility=hidden -fvisibility-inlines-hidden"
1310       dash_d_visibility=-DXAPIAN_ENABLE_VISIBILITY
1311     else
1312       AC_MSG_RESULT([no])
1313     fi
1314   fi
1315 else
1316   dnl Not GCC, nor a compiler masquerading as GCC.
1317   case /$CXX in
1318   */aCC)
1319     dnl +w turns on more warnings.
1320     dnl +wlint turns on "lint-like" warnings.
1321     dnl +W<n1>,<n2>,... suppresses warnings n1, n2, ...
1322     dnl 2340 (remark) "value copied to temporary, reference to temporary
1323     dnl use", in: throw Xapian::UnimplementedError("...");
1324     dnl 2401 "destructor for base class ... is non-virtual" (we don't need a
1325     dnl virtual destructor for intrusive_base, since we never delete
1326     dnl       its subclasses by a intrusive_base *).
1327     dnl 3348 "declaration hides constant ..." which seems to misfire!
1328     dnl 4255 (remark) "padding size of struct "..." with ... bytes to
1329     dnl alignment boundary".
1330     dnl 4273 "floating-point equality and inequality comparisons may be
1331     dnl inappropriate due to roundoff common in floating-point computation"
1332     dnl No obvious workaround for when you really do want == or !=.
1333     dnl 20201 "Memory leak is detected" which triggers for "return new Foo;"!
1334     AM_CXXFLAGS="$AM_CXXFLAGS +w +wlint +W2340,2401,3348,4255,4273,20201" ;;
1335   */sunCC|*/CC)
1336     dnl Sun's C++ compiler warns about functions failing to return a value even
1337     dnl when the function ends with a "throw" statement.  That's just unhelpful
1338     dnl noise, and adding a dummy "return" after "throw" seems a worse solution
1339     dnl than simply disabling this warning - any genuinely missing return
1340     dnl statements will get reported by compilers with superior warning
1341     dnl machinery.
1342     XAPIAN_TEST_CXXFLAGS([-erroff=voidretw], [AM_CXXFLAGS])
1343     ;;
1344   esac
1347 XAPIAN_TEST_LINKER_FLAG([-Bsymbolic-functions], [symbolic_functions],
1348   [XAPIAN_LDFLAGS="$XAPIAN_LDFLAGS $flag"])
1350 FP_EXCESS_PRECISION=no
1351 AC_MSG_CHECKING([whether to use SSE instructions on x86])
1352 case $host_cpu in
1353   i*86)
1354     if test "$enable_sse" = no ; then
1355       AC_MSG_RESULT([no])
1356       FP_EXCESS_PRECISION=yes
1357       if test yes = "$msvc"; then
1358         dnl MSVC defaults to SSE2.
1359         AM_CXXFLAGS="$AM_CXXFLAGS -arch:IA32"
1360       fi
1361     else
1362       dnl Default to sse2.
1363       test "$enable_sse" != yes || enable_sse=sse2
1364       if test yes = "$GXX"; then
1365         AC_MSG_RESULT([yes (configure with --disable-sse to disable)])
1366         dnl We can unconditionally use -mtune=generic as it was added in GCC
1367         dnl 4.2, and supported at least as far back as clang 3.0.
1368         AM_CXXFLAGS="$AM_CXXFLAGS -mfpmath=sse -m$enable_sse -mtune=generic"
1369       elif test yes = "$msvc"; then
1370         AC_MSG_RESULT([yes (configure with --disable-sse to disable)])
1371         if test sse = "$enable_sse"; then
1372           dnl MSVC defaults to SSE2.
1373           AM_CXXFLAGS="$AM_CXXFLAGS -arch:SSE"
1374         fi
1375       else
1376         AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1377 [[#ifndef __SUNPRO_CC
1378 #error Not Sun compiler
1379 #endif]])],
1380           [AC_MSG_RESULT([yes (configure with --disable-sse to disable)])
1381           AM_CXXFLAGS="$AM_CXXFLAGS -xarch=$enable_sse"]
1382           ,
1383           [AC_MSG_RESULT([don't know how to for compiler $CXX])
1384           FP_EXCESS_PRECISION=yes]
1385         )
1386       fi
1387     fi
1388     ;;
1389   *)
1390     AC_MSG_RESULT([non-x86 arch ($host_cpu)]) ;;
1391 esac
1392 AC_SUBST([FP_EXCESS_PRECISION])
1394 AH_BOTTOM(
1395 [/* Disable stupid MSVC warnings. */
1396 #ifdef _MSC_VER
1397 /* Passing an empty parameter to a single parameter macro. */
1398 # pragma warning(disable:4003)
1399 /* A "performance" warning for converting int to bool. */
1400 # pragma warning(disable:4800)
1402 /* Tell MSVC we want M_PI, etc defined. */
1403 # define _USE_MATH_DEFINES
1405 /* Tell MSVC we don't want max() and min() macros defined. */
1406 # define NOMINMAX
1407 #endif
1409 /* Make the POSIX-like functions support large files.  MSVC needs this;
1410  * current mingw32 does too; mingw64 supports _FILE_OFFSET_BITS, which
1411  * AC_SYS_LARGEFILE should discover and enable automatically.
1412  */
1413 #if defined _MSC_VER || \
1414     (defined __MINGW32__ && !defined _FILE_OFFSET_BITS)
1416 # include <sys/stat.h>
1417 # include <sys/types.h>
1418 # include <io.h>
1419 /* zlib.h uses off_t so we need to include it before we redefine off_t. */
1420 # include <zlib.h>
1422 // MSVC needs to call _stat64() instead of stat() and the struct which holds
1423 // the information is "struct _stat64" instead of "struct stat" so we just
1424 // use #define to replace both in one go.  We also want to use _fstat64()
1425 // instead of fstat() but in this case we can use a function-like macro.
1427 // Mingw has _stat64() but unhelpfully for our purposes, it has an extra
1428 // underscore prefix on the struct name ("struct __stat64") so there we
1429 // target _stati64 instead.  This has 64-bit file size but the time_t size
1430 // is switchable.  We don't really care about file timestamps in the
1431 // library, so this should be fine.
1433 // This hack is a problem is we ever want a method called "stat", or one called
1434 // fstat which takes 2 parameters, but we can probably live with these
1435 // limitations.
1437 # ifdef stat
1438 #  undef stat
1439 # endif
1441 # ifdef fstat
1442 #  undef fstat
1443 # endif
1445 # ifdef _MSC_VER
1446 #  define stat _stat64
1447 #  define fstat(FD, BUF) _fstat64(FD, BUF)
1448 # else
1449 #  define stat _stati64
1450 #  define fstat(FD, BUF) _fstati64(FD, BUF)
1451 # endif
1453 # ifdef lseek
1454 #  undef lseek
1455 # endif
1457 # ifdef off_t
1458 #  undef off_t
1459 # endif
1461 # define lseek(FD, OFF, WHENCE) _lseeki64(FD, OFF, WHENCE)
1462 /* Redefine via a typedef so C++ code off_t(-1) works - it wouldn't if we did:
1463  * #define off_t long long
1464  */
1465 typedef long long off_t_redefinition_typedef;
1466 # define off_t off_t_redefinition_typedef
1468 #endif
1470 /* MSVC defines _WIN32 but not __WIN32__. */
1471 #if !defined __WIN32__ && defined _WIN32
1472 # define __WIN32__
1473 #endif
1475 /* MSVC defines _WIN64 but not __WIN64__. */
1476 #if !defined __WIN64__ && defined _WIN64
1477 # define __WIN64__
1478 #endif
1480 /* _FORTIFY_SOURCE is only supported by GCC >= 4.1 and glibc >= 2.3.4, but it
1481  * shouldn't cause a problem to define it where it's not supported and some
1482  * distros may have backported support, so hardcoding version checks is
1483  * counter-productive.
1485  * Check if _FORTIFY_SOURCE is already defined to allow the user to override
1486  * our choice with "./configure CPPFLAGS=-D_FORTIFY_SOURCE=0" or "...=1".
1487  */
1488 #if defined __GNUC__ && !defined _FORTIFY_SOURCE
1489 # define _FORTIFY_SOURCE 2
1490 #endif
1492 /* For compilers which support it (such as GCC, clang, Intel's C++ compiler)
1493  * we can use __builtin_expect to give the compiler hints about branch
1494  * prediction.  See HACKING for how to use these.
1495  */
1496 #if HAVE_DECL___BUILTIN_EXPECT
1497 /* The arguments of __builtin_expect() are both long, so use !! to ensure that
1498  * the first argument is always an integer expression, and always 0 or 1, but
1499  * still has the same truth value for the if or while it is used in.
1500  */
1501 # define rare(COND) __builtin_expect(!!(COND), 0)
1502 # define usual(COND) __builtin_expect(!!(COND), 1)
1503 #else
1504 # define rare(COND) (COND)
1505 # define usual(COND) (COND)
1506 #endif
1508 /* Signal we're building the library so it's OK to include headers such as
1509  * xapian/query.h directly.
1510  */
1511 #define XAPIAN_LIB_BUILD 1
1513 /* With Sun CC 5.13 (Studio 12.4) on Solaris 11.2, <math.h> seems to get
1514  * implicitly included somehow before <cmath>, and compilation fails due
1515  * to 'std::exception' colliding with 'struct exception'.  It's not clear
1516  * how to avoid this, so just define the same magic macro which <cmath> does
1517  * before it includes <math.h>.
1518  */
1519 #ifdef __SUNPRO_CC
1520 # define __MATHERR_RENAME_EXCEPTION
1521 #endif
1524 AC_SUBST([AM_CXXFLAGS])
1526 dnl Restore CXXFLAGS to those the user specified or autoconf defaulted to.
1527 CXXFLAGS=$save_CXXFLAGS
1529 dnl Required for auto regeneration to work in a combined maintainer-mode tree.
1530 : ${AUTOM4TE=autom4te}
1531 AC_SUBST([AUTOM4TE])
1533 dnl Libtool sets this (to yes|no|unknown) and we use it in xapian-config.
1534 AC_SUBST([link_all_deplibs_CXX])
1536 dnl Shared library extension.
1537 module=no
1538 eval "SHLIBEXT=$shrext_cmds"
1539 AC_SUBST([SHLIBEXT])
1541 dnl We want to be able to use GNU make % pattern rules in maintainer targets
1542 dnl but automake warns these aren't portable, so we substitute the % to avoid
1543 dnl this warning.
1544 PERCENT='%'
1545 AC_SUBST([PERCENT])
1547 dnl Split up the version number into "MAJOR.MINOR.REVISION".
1548 MAJOR_VERSION=`echo "$VERSION"|sed 's/\..*//'`
1549 [MINOR_VERSION=`echo "$VERSION"|sed 's/[^.]*\.//;s/\..*//'`]
1550 [REVISION=`echo "$VERSION"|sed 's/.*\.//;s/_.*$//'`]
1552 dnl **************************
1553 dnl * Build the output files *
1554 dnl **************************
1556 AC_CONFIG_FILES([
1557  Makefile
1558  tests/Makefile
1559  docs/Makefile
1560  docs/doxygen_api.conf
1561  docs/doxygen_source.conf
1562  xapian-core.spec
1563  cmake/xapian-config.cmake
1564  cmake/xapian-config-version.cmake
1565  pkgconfig/xapian-core"$LIBRARY_VERSION_SUFFIX".pc:pkgconfig/xapian-core.pc.in
1566  ])
1567 AC_CONFIG_FILES([tests/runtest], [chmod +x tests/runtest])
1568 AC_CONFIG_FILES([tests/runsrv], [chmod +x tests/runsrv])
1569 AC_CONFIG_FILES([tests/submitperftest], [chmod +x tests/submitperftest])
1570 AC_CONFIG_FILES([tests/perftest/get_machine_info], [chmod +x tests/perftest/get_machine_info])
1571 AC_CONFIG_FILES([xapian-config], [chmod +x xapian-config])
1572 AC_CONFIG_FILES([makemanpage], [chmod +x makemanpage])
1573 AC_OUTPUT
1575 dnl There are no files generated by AC_OUTPUT in the following directories
1576 dnl and we need to ensure they exist so that the rest of configure or make
1577 dnl won't fail because they don't exist when srcdir != builddir.
1578 if test yes = "$vpath_build" ; then
1579   for dir in include/xapian languages queryparser ; do
1580     AS_MKDIR_P(["$dir"])
1581   done
1584 dnl Generate include/xapian/version.h:
1586 dnl MAIN_VERSION is VERSION without any _git123 suffix.
1587 MAIN_VERSION="$MAJOR_VERSION.$MINOR_VERSION.$REVISION"
1588 cxxcpp_flags=-I.
1589 for backend in GLASS HONEY INMEMORY REMOTE ; do
1590   val=`eval echo "\\\$BUILD_BACKEND_${backend}_TRUE"`
1591   if test -z "$val" ; then
1592     cxxcpp_flags="$cxxcpp_flags -DXAPIAN_HAS_${backend}_BACKEND"
1593   fi
1594 done
1596 if test yes = "$enable_64bit_docid" ; then
1597   cxxcpp_flags="$cxxcpp_flags -DXAPIAN_DOCID_BASE_TYPE="`echo "$INT64_T"|sed 's/ /____/g'`
1598 else
1599   cxxcpp_flags="$cxxcpp_flags -DXAPIAN_DOCID_BASE_TYPE="`echo "$INT32_T"|sed 's/ /____/g'`
1602 if test yes = "$enable_64bit_termcount" ; then
1603   cxxcpp_flags="$cxxcpp_flags -DXAPIAN_TERMCOUNT_BASE_TYPE="`echo "$INT64_T"|sed 's/ /____/g'`
1604 else
1605   cxxcpp_flags="$cxxcpp_flags -DXAPIAN_TERMCOUNT_BASE_TYPE="`echo "$INT32_T"|sed 's/ /____/g'`
1608 if test yes = "$enable_64bit_termpos" ; then
1609   cxxcpp_flags="$cxxcpp_flags -DXAPIAN_TERMPOS_BASE_TYPE="`echo "$INT64_T"|sed 's/ /____/g'`
1610 else
1611   cxxcpp_flags="$cxxcpp_flags -DXAPIAN_TERMPOS_BASE_TYPE="`echo "$INT32_T"|sed 's/ /____/g'`
1614 dnl Always ought to be 64 bit.
1615 cxxcpp_flags="$cxxcpp_flags -DXAPIAN_TOTALLENGTH_TYPE="`echo "unsigned $INT64_T"|sed 's/ /____/g'`
1617 dnl Make revision numbers in the API 64 bit for future-proofing.
1618 cxxcpp_flags="$cxxcpp_flags -DXAPIAN_REVISION_TYPE="`echo "unsigned $INT64_T"|sed 's/ /____/g'`
1620 dnl For GCC (and compilers which pretend to be GCC) and MSVC, we create some
1621 dnl ABI checks in the generated version.h, and $CXXFLAGS may contain options
1622 dnl which affect the ABI (e.g. -fabi-version for GCC) so we want to use these
1623 dnl options when generating version.h.  For these compilers, CXXCPP="$CXX -E"
1624 dnl so it should understand all compiler options.
1626 dnl For other compilers, we only pass $CPPFLAGS to $CXXCPP in case it's an
1627 dnl external cpp which doesn't understand flags which might be in $CXXFLAGS.
1628 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[#ifndef __GNUC__
1629 #ifndef _MSC_VER
1630        choke me
1631 #endif
1632 #endif
1633 ]])],
1634         [cxxcpp_flags="$cxxcpp_flags $CPPFLAGS $CXXFLAGS"],
1635         [cxxcpp_flags="$cxxcpp_flags $CPPFLAGS"])
1636 rm -f include/xapian/version.h.tmp
1637 dnl "\r" in sed is a GNUism, but we only need to remove it on MS Windows
1638 dnl where we'll always have GNU sed, and other sed's will just interpret
1639 dnl it as "r" (Solaris sed) or maybe literal "\r" which won't match.
1641 dnl Use @@ around $MAIN_VERSION so we get " in the final output.
1642 $CXXCPP $cxxcpp_flags\
1643         -DSTRING_VERSION="\"@@$MAIN_VERSION@@\""\
1644         -DMAJOR_VERSION="\"$MAJOR_VERSION\""\
1645         -DMINOR_VERSION="\"$MINOR_VERSION\""\
1646         -DREVISION="\"$REVISION\""\
1647         $dash_d_visibility\
1648         $srcdir/include/xapian/version_h.cc|\
1649         ${SED-sed} '0,/const char \* dummy/d;/"/!d;s/^ *//;/^#/d;s/ *$//;s/" *,//;s/"//g;s/@@/"/g;s/  */ /g;s/ *,\r$//;s/ *,$//;s/____/ /g;s/\\\\$/\\/'\
1650         > include/xapian/version.h.tmp
1651 dnl Only update the file if it has changed, so we don't alter the timestamp
1652 dnl and cause lots of rebuilding needlessly.  However, the build system
1653 dnl needs a timestamp to know when to regenerate version.h because version_h.cc
1654 dnl has changed so we use a separate timestamp file.
1655 touch include/xapian/version.h.timestamp
1656 if cmp include/xapian/version.h.tmp include/xapian/version.h >/dev/null 2>&1
1657 then
1658   rm include/xapian/version.h.tmp
1659 else
1660   mv include/xapian/version.h.tmp include/xapian/version.h
1663 if test "$enable_gpl_libxapian" != yes ; then
1664   AC_MSG_WARN([--disable-gpl-libxapian disables use of GPL code which we won't be able to relicense in libxapian - currently the resulting build still contains GPL code, but GPL code which it will be possible to relicense eventually.])