]> git.cworth.org Git - notmuch-old/blob - configure
test: Absolute and relative directory paths.
[notmuch-old] / configure
1 #! /bin/sh
2
3 set -u
4
5 # Test whether this shell is capable of parameter substring processing.
6 ( option='a/b'; : ${option#*/} ) 2>/dev/null || {
7     echo "
8 The shell interpreting '$0' is lacking some required features.
9
10 To work around this problem you may try to execute:
11
12     ksh $0 $*
13  or
14     bash $0 $*
15 "
16     exit 1
17 }
18
19 # Store original IFS value so it can be changed (and restored) in many places.
20 readonly DEFAULT_IFS="$IFS"
21
22 # The top-level directory for the source. This ./configure and all Makefiles
23 # are good with ${srcdir} usually being relative. Some components (e.g. tests)
24 # are executed in subdirectories and for those it is simpler to use
25 # ${NOTMUCH_SRCDIR} which holds absolute path to the source.
26 srcdir=$(dirname "$0")
27 NOTMUCH_SRCDIR=$(cd "$srcdir" && pwd)
28
29 subdirs="util compat lib parse-time-string completion doc emacs"
30 subdirs="${subdirs} performance-test test test/test-databases"
31 subdirs="${subdirs} bindings"
32
33 # For a non-srcdir configure invocation (such as ../configure), create
34 # the directory structure and copy Makefiles.
35 if [ "$srcdir" != "." ]; then
36
37     for dir in . ${subdirs}; do
38         mkdir -p "$dir"
39         cp "$srcdir"/"$dir"/Makefile.local "$dir"
40         cp "$srcdir"/"$dir"/Makefile "$dir"
41     done
42
43     # Emacs only likes to generate compiled files next to the .el files
44     # by default so copy these as well (which is not ideal).
45     cp -a "$srcdir"/emacs/*.el emacs
46
47     # We were not able to create fully working Makefile using ruby mkmf.rb
48     # so ruby bindings source files are copied as well (ditto -- not ideal).
49     mkdir bindings/ruby
50     cp -a "$srcdir"/bindings/ruby/*.[ch] bindings/ruby
51     cp -a "$srcdir"/bindings/ruby/extconf.rb bindings/ruby
52 fi
53
54 # Set several defaults (optionally specified by the user in
55 # environment variables)
56 CC=${CC:-cc}
57 CXX=${CXX:-c++}
58 CFLAGS=${CFLAGS:--g -O2}
59 CPPFLAGS=${CPPFLAGS:-}
60 CXXFLAGS_for_sh=${CXXFLAGS:-${CFLAGS}}
61 CXXFLAGS=${CXXFLAGS:-\$(CFLAGS)}
62 LDFLAGS=${LDFLAGS:-}
63 XAPIAN_CONFIG=${XAPIAN_CONFIG:-}
64 PYTHON=${PYTHON:-}
65 RUBY=${RUBY:-ruby}
66
67 # We don't allow the EMACS or GZIP Makefile variables inherit values
68 # from the environment as we do with CC and CXX above. The reason is
69 # that these names as environment variables have existing uses other
70 # than the program name that we want. (EMACS is set to 't' when a
71 # shell is running within emacs and GZIP specifies arguments to pass
72 # on the gzip command line).
73
74 # Set the defaults for values the user can specify with command-line
75 # options.
76 PREFIX=/usr/local
77 LIBDIR=
78 WITH_DOCS=1
79 WITH_API_DOCS=1
80 WITH_EMACS=1
81 WITH_DESKTOP=1
82 WITH_BASH=1
83 WITH_RUBY=1
84 WITH_ZSH=1
85 WITH_RETRY_LOCK=1
86
87 usage ()
88 {
89     cat <<EOF
90 Usage: ./configure [options]...
91
92 This script configures notmuch to build on your system.
93
94 It verifies that dependencies are available, determines flags needed
95 to compile and link against various required libraries, and identifies
96 whether various system functions can be used or if locally-provided
97 replacements will be built instead.
98
99 Finally, it allows you to control various aspects of the build and
100 installation process.
101
102 First, some common variables can specified via environment variables:
103
104         CC              The C compiler to use
105         CFLAGS          Flags to pass to the C compiler
106         CPPFLAGS        Flags to pass to the C preprocessor
107         CXX             The C++ compiler to use
108         CXXFLAGS        Flags to pass to the C compiler
109         LDFLAGS         Flags to pass when linking
110
111 Each of these values can further be controlled by specifying them
112 later on the "make" command line.
113
114 Other environment variables can be used to control configure itself,
115 (and for which there is no equivalent build-time control):
116
117         XAPIAN_CONFIG   The program to use to determine flags for
118                         compiling and linking against the Xapian
119                         library. [$XAPIAN_CONFIG]
120         PYTHON          Name of python command to use in
121                         configure and the test suite.
122         RUBY            Name of ruby command to use in
123                         configure and the test suite.
124
125 Additionally, various options can be specified on the configure
126 command line.
127
128         --prefix=PREFIX Install files in PREFIX [$PREFIX]
129
130 By default, "make install" will install the resulting program to
131 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
132 specify an installation prefix other than $PREFIX using
133 --prefix, for instance:
134
135         ./configure --prefix=\$HOME
136
137 Fine tuning of some installation directories is available:
138
139         --libdir=DIR            Install libraries to DIR [PREFIX/lib]
140         --includedir=DIR        Install header files to DIR [PREFIX/include]
141         --mandir=DIR            Install man pages to DIR [PREFIX/share/man]
142         --infodir=DIR           Install man pages to DIR [PREFIX/share/man]
143         --sysconfdir=DIR        Read-only single-machine data [PREFIX/etc]
144         --emacslispdir=DIR      Emacs code [PREFIX/share/emacs/site-lisp]
145         --emacsetcdir=DIR       Emacs miscellaneous files [PREFIX/share/emacs/site-lisp]
146         --bashcompletiondir=DIR Bash completions files [PREFIX/share/bash-completion/completions]
147         --zshcompletiondir=DIR  Zsh completions files [PREFIX/share/zsh/functions/Completion/Unix]
148
149 Some features can be disabled (--with-feature=no is equivalent to
150 --without-feature) :
151
152         --without-bash-completion       Do not install bash completions files
153         --without-docs                  Do not install documentation
154         --without-api-docs              Do not install API man page
155         --without-emacs                 Do not install lisp file
156         --without-desktop               Do not install desktop file
157         --without-ruby                  Do not install ruby bindings
158         --without-zsh-completion        Do not install zsh completions files
159         --without-retry-lock            Do not use blocking xapian opens, even if available
160
161 Additional options are accepted for compatibility with other
162 configure-script calling conventions, but don't do anything yet:
163
164         --build=<cpu>-<vendor>-<os>     Currently ignored
165         --host=<cpu>-<vendor>-<os>      Currently ignored
166         --datadir=DIR                   Currently ignored
167         --localstatedir=DIR             Currently ignored
168         --libexecdir=DIR                Currently ignored
169         --disable-maintainer-mode       Currently ignored
170         --disable-dependency-tracking   Currently ignored
171
172 EOF
173 }
174
175 # Parse command-line options
176 for option; do
177     if [ "${option}" = '--help' ] ; then
178         usage
179         exit 0
180     elif [ "${option%%=*}" = '--prefix' ] ; then
181         PREFIX="${option#*=}"
182     elif [ "${option%%=*}" = '--libdir' ] ; then
183         LIBDIR="${option#*=}"
184     elif [ "${option%%=*}" = '--includedir' ] ; then
185         INCLUDEDIR="${option#*=}"
186     elif [ "${option%%=*}" = '--mandir' ] ; then
187         MANDIR="${option#*=}"
188     elif [ "${option%%=*}" = '--infodir' ] ; then
189         INFODIR="${option#*=}"
190     elif [ "${option%%=*}" = '--sysconfdir' ] ; then
191         SYSCONFDIR="${option#*=}"
192     elif [ "${option%%=*}" = '--emacslispdir' ] ; then
193         EMACSLISPDIR="${option#*=}"
194     elif [ "${option%%=*}" = '--emacsetcdir' ] ; then
195         EMACSETCDIR="${option#*=}"
196     elif [ "${option%%=*}" = '--bashcompletiondir' ] ; then
197         BASHCOMPLETIONDIR="${option#*=}"
198     elif [ "${option%%=*}" = '--zshcompletiondir' ] ; then
199         ZSHCOMLETIONDIR="${option#*=}"
200     elif [ "${option%%=*}" = '--with-docs' ]; then
201         if [ "${option#*=}" = 'no' ]; then
202             WITH_DOCS=0
203             WITH_API_DOCS=0
204         else
205             WITH_DOCS=1
206         fi
207     elif [ "${option}" = '--without-docs' ] ; then
208         WITH_DOCS=0
209         WITH_API_DOCS=0
210     elif [ "${option%%=*}" = '--with-api-docs' ]; then
211         if [ "${option#*=}" = 'no' ]; then
212             WITH_API_DOCS=0
213         else
214             WITH_API_DOCS=1
215         fi
216     elif [ "${option}" = '--without-api-docs' ] ; then
217         WITH_API_DOCS=0
218     elif [ "${option%%=*}" = '--with-emacs' ]; then
219         if [ "${option#*=}" = 'no' ]; then
220             WITH_EMACS=0
221         else
222             WITH_EMACS=1
223         fi
224     elif [ "${option}" = '--without-emacs' ] ; then
225         WITH_EMACS=0
226     elif [ "${option%%=*}" = '--with-desktop' ]; then
227         if [ "${option#*=}" = 'no' ]; then
228             WITH_DESKTOP=0
229         else
230             WITH_DESKTOP=1
231         fi
232     elif [ "${option}" = '--without-desktop' ] ; then
233         WITH_DESKTOP=0
234     elif [ "${option%%=*}" = '--with-bash-completion' ]; then
235         if [ "${option#*=}" = 'no' ]; then
236             WITH_BASH=0
237         else
238             WITH_BASH=1
239         fi
240     elif [ "${option}" = '--without-bash-completion' ] ; then
241         WITH_BASH=0
242     elif [ "${option%%=*}" = '--with-ruby' ]; then
243         if [ "${option#*=}" = 'no' ]; then
244             WITH_RUBY=0
245         else
246             WITH_RUBY=1
247         fi
248     elif [ "${option}" = '--without-ruby' ] ; then
249         WITH_RUBY=0
250     elif [ "${option%%=*}" = '--with-retry-lock' ]; then
251         if [ "${option#*=}" = 'no' ]; then
252             WITH_RETRY_LOCK=0
253         else
254             WITH_RETRY_LOCK=1
255         fi
256     elif [ "${option}" = '--without-retry-lock' ] ; then
257         WITH_RETRY_LOCK=0
258     elif [ "${option%%=*}" = '--with-zsh-completion' ]; then
259         if [ "${option#*=}" = 'no' ]; then
260             WITH_ZSH=0
261         else
262             WITH_ZSH=1
263         fi
264     elif [ "${option}" = '--without-zsh-completion' ] ; then
265         WITH_ZSH=0
266     elif [ "${option%%=*}" = '--build' ] ; then
267         true
268     elif [ "${option%%=*}" = '--host' ] ; then
269         true
270     elif [ "${option%%=*}" = '--datadir' ] ; then
271         true
272     elif [ "${option%%=*}" = '--localstatedir' ] ; then
273         true
274     elif [ "${option%%=*}" = '--libexecdir' ] ; then
275         true
276     elif [ "${option}" = '--disable-maintainer-mode' ] ; then
277         true
278     elif [ "${option}" = '--disable-dependency-tracking' ] ; then
279         true
280     else
281         echo "Unrecognized option: ${option}"
282         echo "See:"
283         echo "  $0 --help"
284         echo ""
285         exit 1
286     fi
287 done
288
289 # We set this value early, (rather than just while printing the
290 # Makefile.config file later like most values), because we need to
291 # actually investigate this value compared to the ldconfig_paths value
292 # below.
293 if [ -z "$LIBDIR" ] ; then
294     libdir_expanded="${PREFIX}/lib"
295 else
296     # very non-general variable expansion
297     libdir_expanded=$(printf %s "$LIBDIR" | sed "s|\${prefix}|${PREFIX}|; s|\$prefix\>|${PREFIX}|; s|//*|/|g")
298 fi
299
300 cat <<EOF
301 Welcome to Notmuch, a system for indexing, searching and tagging your email.
302
303 We hope that the process of building and installing notmuch is quick
304 and smooth so that you can soon be reading and processing your email
305 more efficiently than ever.
306
307 If anything goes wrong in the configure process, you can override any
308 decisions it makes by manually editing the Makefile.config file that
309 it creates. Also please do as much as you can to figure out what could
310 be different on your machine compared to those of the notmuch
311 developers. Then, please email those details to the Notmuch list
312 (notmuch@notmuchmail.org) so that we can hopefully make future
313 versions of notmuch easier for you to use.
314
315 We'll now investigate your system to verify that all required
316 dependencies are available:
317
318 EOF
319
320 errors=0
321 printf "int main(void){return 0;}\n" > minimal.c
322
323 printf "Sanity checking C compilation environment... "
324 test_cmdline="${CC} ${CFLAGS} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal"
325 if  ${test_cmdline} > /dev/null 2>&1
326 then
327     printf "OK.\n"
328 else
329     printf "Fail.\n"
330     errors=$((errors + 1))
331     printf Executed:; printf ' %s' ${test_cmdline}; echo
332     ${test_cmdline}
333 fi
334
335 printf "Sanity checking C++ compilation environment... "
336 test_cmdline="${CXX} ${CXXFLAGS_for_sh} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal"
337 if ${test_cmdline} > /dev/null 2>&1
338 then
339     printf "OK.\n"
340 else
341     printf "Fail.\n"
342     errors=$((errors + 1))
343     printf Executed:; printf ' %s' ${test_cmdline}; echo
344     ${test_cmdline}
345 fi
346 unset test_cmdline
347
348 if [ $errors -gt 0 ]; then
349     cat <<EOF
350 *** Error: Initial sanity checking of environment failed.  Please try
351 running configure in a clean environment, and if the problem persists,
352 report a bug.
353 EOF
354     rm -f minimal minimal.c
355     exit 1
356 fi
357
358 printf "Reading libnotmuch version from source... "
359 cat > _libversion.c <<EOF
360 #include <stdio.h>
361 #include "lib/notmuch.h"
362 int main(void) {
363     printf("libnotmuch_version_major=%d\n",
364                 LIBNOTMUCH_MAJOR_VERSION);
365     printf("libnotmuch_version_minor=%d\n",
366                 LIBNOTMUCH_MINOR_VERSION);
367     printf("libnotmuch_version_release=%d\n",
368                 LIBNOTMUCH_MICRO_VERSION);
369     return 0;
370 }
371 EOF
372 if ${CC} ${CFLAGS} -I"$srcdir" _libversion.c -o _libversion > /dev/null 2>&1 \
373        && ./_libversion > _libversion.sh && . ./_libversion.sh
374 then
375     printf "OK.\n"
376 else
377     cat <<EOF
378
379 *** Error: Reading lib/notmuch.h failed.
380 Please try running configure again in a clean environment, and if the
381 problem persists, report a bug.
382 EOF
383     rm -f _libversion _libversion.c _libversion.sh
384     exit 1
385 fi
386
387 if pkg-config --version > /dev/null 2>&1; then
388     have_pkg_config=1
389 else
390     have_pkg_config=0
391 fi
392
393 printf "Checking for Xapian development files... "
394 have_xapian=0
395 for xapian_config in ${XAPIAN_CONFIG} xapian-config xapian-config-1.3; do
396     if ${xapian_config} --version > /dev/null 2>&1; then
397         xapian_version=$(${xapian_config} --version | sed -e 's/.* //')
398         printf "Yes (%s).\n" ${xapian_version}
399         have_xapian=1
400         xapian_cxxflags=$(${xapian_config} --cxxflags)
401         xapian_ldflags=$(${xapian_config} --libs)
402         break
403     fi
404 done
405 if [ ${have_xapian} = "0" ]; then
406     printf "No.\n"
407     errors=$((errors + 1))
408 fi
409
410 have_xapian_compact=0
411 have_xapian_field_processor=0
412 if [ ${have_xapian} = "1" ]; then
413     printf "Checking for Xapian compaction support... "
414     cat>_compact.cc<<EOF
415 #include <xapian.h>
416 class TestCompactor : public Xapian::Compactor { };
417 EOF
418     if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _compact.cc -o _compact.o > /dev/null 2>&1
419     then
420         have_xapian_compact=1
421         printf "Yes.\n"
422     else
423         printf "No.\n"
424         errors=$((errors + 1))
425     fi
426
427     rm -f _compact.o _compact.cc
428
429     printf "Checking for Xapian FieldProcessor API... "
430     cat>_field_processor.cc<<EOF
431 #include <xapian.h>
432 class TitleFieldProcessor : public Xapian::FieldProcessor { };
433 EOF
434     if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _field_processor.cc -o _field_processor.o > /dev/null 2>&1
435     then
436         have_xapian_field_processor=1
437         printf "Yes.\n"
438     else
439         printf "No. (optional)\n"
440     fi
441
442     rm -f _field_processor.o _field_processor.cc
443
444     default_xapian_backend=""
445     # DB_RETRY_LOCK is only supported on Xapian > 1.3.2
446     have_xapian_db_retry_lock=0
447     if [ $WITH_RETRY_LOCK = "1" ]; then
448         printf "Checking for Xapian lock retry support... "
449         cat>_retry.cc<<EOF
450 #include <xapian.h>
451 int flag = Xapian::DB_RETRY_LOCK;
452 EOF
453         if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _retry.cc -o _retry.o > /dev/null 2>&1
454         then
455             have_xapian_db_retry_lock=1
456             printf "Yes.\n"
457         else
458             printf "No. (optional)\n"
459         fi
460         rm -f _retry.o _retry.cc
461     fi
462
463     printf "Testing default Xapian backend... "
464     cat >_default_backend.cc <<EOF
465 #include <xapian.h>
466 int main(int argc, char** argv) {
467    Xapian::WritableDatabase db("test.db",Xapian::DB_CREATE_OR_OPEN);
468 }
469 EOF
470     ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} _default_backend.cc -o _default_backend ${xapian_ldflags}
471     ./_default_backend
472     if [ -f test.db/iamglass ]; then
473         default_xapian_backend=glass
474     else
475         default_xapian_backend=chert
476     fi
477     printf "%s\n" "${default_xapian_backend}";
478     rm -rf test.db _default_backend _default_backend.cc
479 fi
480
481 # we need to have a version >= 2.6.5 to avoid a crypto bug. We need
482 # 2.6.7 for permissive "From " header handling.
483 GMIME_MINVER=2.6.7
484 GMIME3_MINVER=3.0.3
485
486 printf "Checking for GMime development files... "
487 if pkg-config --exists "gmime-3.0 > $GMIME3_MINVER"; then
488     printf "Yes (3.0).\n"
489     have_gmime=1
490     gmime_cflags=$(pkg-config --cflags gmime-3.0)
491     gmime_ldflags=$(pkg-config --libs gmime-3.0)
492     gmime_major=3
493     have_gmime_session_keys=1
494 elif pkg-config --exists "gmime-2.6 >= $GMIME_MINVER"; then
495     printf "Yes (2.6).\n"
496     have_gmime=1
497     gmime_cflags=$(pkg-config --cflags gmime-2.6)
498     gmime_ldflags=$(pkg-config --libs gmime-2.6)
499     gmime_major=2
500     if pkg-config --exists "gmime-2.6 >= 2.6.21"; then
501         have_gmime_session_keys=1
502     else
503         have_gmime_session_keys=0
504     fi
505 else
506     have_gmime=0
507     have_gmime_session_keys=0
508     printf "No.\n"
509     errors=$((errors + 1))
510 fi
511
512 # GMime already depends on Glib >= 2.12, but we use at least one Glib
513 # function that only exists as of 2.22, (g_array_unref)
514 printf "Checking for Glib development files (>= 2.22)... "
515 have_glib=0
516 if pkg-config --exists 'glib-2.0 >= 2.22'; then
517     printf "Yes.\n"
518     have_glib=1
519     # these are included in gmime cflags and ldflags
520     # glib_cflags=$(pkg-config --cflags glib-2.0)
521     # glib_ldflags=$(pkg-config --libs glib-2.0)
522 else
523     printf "No.\n"
524     errors=$((errors + 1))
525 fi
526
527 if ! pkg-config --exists zlib; then
528   ${CC} -o compat/gen_zlib_pc "$srcdir"/compat/gen_zlib_pc.c >/dev/null 2>&1 &&
529   compat/gen_zlib_pc > compat/zlib.pc &&
530   PKG_CONFIG_PATH="$PKG_CONFIG_PATH":compat &&
531   export PKG_CONFIG_PATH
532   rm -f compat/gen_zlib_pc
533 fi
534
535 printf "Checking for zlib (>= 1.2.5.2)... "
536 have_zlib=0
537 if pkg-config --atleast-version=1.2.5.2 zlib; then
538     printf "Yes.\n"
539     have_zlib=1
540     zlib_cflags=$(pkg-config --cflags zlib)
541     zlib_ldflags=$(pkg-config --libs zlib)
542 else
543     printf "No.\n"
544     errors=$((errors + 1))
545 fi
546
547 printf "Checking for talloc development files... "
548 if pkg-config --exists talloc; then
549     printf "Yes.\n"
550     have_talloc=1
551     talloc_cflags=$(pkg-config --cflags talloc)
552     talloc_ldflags=$(pkg-config --libs talloc)
553 else
554     printf "No.\n"
555     have_talloc=0
556     talloc_cflags=
557     errors=$((errors + 1))
558 fi
559
560 printf "Checking for python... "
561 have_python=0
562
563 for name in ${PYTHON} python3 python python2; do
564     if command -v $name > /dev/null; then
565         have_python=1
566         python=$name
567         printf "Yes (%s).\n" "$name"
568         break
569     fi
570 done
571
572 if [ $have_python -eq 0 ]; then
573     printf "No.\n"
574     errors=$((errors + 1))
575 fi
576
577 printf "Checking for valgrind development files... "
578 if pkg-config --exists valgrind; then
579     printf "Yes.\n"
580     have_valgrind=1
581     valgrind_cflags=$(pkg-config --cflags valgrind)
582 else
583     printf "No (but that's fine).\n"
584     have_valgrind=0
585     valgrind_cflags=
586 fi
587
588 printf "Checking for bash-completion (>= 1.90)... "
589 if pkg-config --atleast-version=1.90 bash-completion; then
590     printf "Yes.\n"
591 else
592     printf "No (will not install bash completion).\n"
593     WITH_BASH=0
594 fi
595
596 if [ -z "${EMACSLISPDIR-}" ]; then
597     EMACSLISPDIR="\$(prefix)/share/emacs/site-lisp"
598 fi
599
600 if [ -z "${EMACSETCDIR-}" ]; then
601     EMACSETCDIR="\$(prefix)/share/emacs/site-lisp"
602 fi
603
604 printf "Checking if emacs is available... "
605 if emacs --quick --batch > /dev/null 2>&1; then
606     printf "Yes.\n"
607     have_emacs=1
608 else
609     printf "No (so will not byte-compile emacs code)\n"
610     have_emacs=0
611 fi
612
613 have_doxygen=0
614 if [ $WITH_API_DOCS = "1" ] ; then
615     printf "Checking if doxygen is available... "
616     if command -v doxygen > /dev/null; then
617         printf "Yes.\n"
618         have_doxygen=1
619     else
620         printf "No (so will not install api docs)\n"
621     fi
622 fi
623
624 have_ruby_dev=0
625 if [ $WITH_RUBY = "1" ] ; then
626     printf "Checking for ruby development files... "
627     if ${RUBY} -e "require 'mkmf'"> /dev/null 2>&1; then
628         printf "Yes.\n"
629         have_ruby_dev=1
630     else
631         printf "No (skipping ruby bindings)\n"
632     fi
633 fi
634
635 have_sphinx=0
636 have_makeinfo=0
637 have_install_info=0
638 if [ $WITH_DOCS = "1" ] ; then
639     printf "Checking if sphinx is available and supports nroff output... "
640     if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then
641         printf "Yes.\n"
642         have_sphinx=1
643     else
644         printf "No (so will not install man pages).\n"
645     fi
646     printf "Checking if makeinfo is available... "
647     if command -v makeinfo > /dev/null; then
648         printf "Yes.\n"
649         have_makeinfo=1
650     else
651         printf "No (so will not build info pages).\n"
652     fi
653     printf "Checking if install-info is available... "
654     if command -v install-info > /dev/null; then
655         printf "Yes.\n"
656         have_install_info=1
657     else
658         printf "No (so will not install info pages).\n"
659     fi
660 fi
661
662 if [ $WITH_DESKTOP = "1" ]; then
663     printf "Checking if desktop-file-install is available... "
664     if command -v desktop-file-install > /dev/null; then
665         printf "Yes.\n"
666     else
667         printf "No (so will not install .desktop file).\n"
668         WITH_DESKTOP=0
669     fi
670 fi
671
672 printf "Checking for cppcheck... "
673 if command -v cppcheck > /dev/null; then
674     have_cppcheck=1
675     printf "Yes.\n"
676 else
677     have_cppcheck=0
678     printf "No.\n"
679 fi
680
681 libdir_in_ldconfig=0
682
683 printf "Checking which platform we are on... "
684 uname=$(uname)
685 if [ $uname = "Darwin" ] ; then
686     printf "Mac OS X.\n"
687     platform=MACOSX
688     linker_resolves_library_dependencies=0
689 elif [ $uname = "SunOS" ] ; then
690     printf "Solaris.\n"
691     platform=SOLARIS
692     linker_resolves_library_dependencies=0
693 elif [ $uname = "FreeBSD" ] ; then
694     printf "FreeBSD.\n"
695     platform=FREEBSD
696     linker_resolves_library_dependencies=0
697 elif [ $uname = "OpenBSD" ] ; then
698     printf "OpenBSD.\n"
699     platform=OPENBSD
700     linker_resolves_library_dependencies=0
701 elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
702     printf "%s\n" "$uname"
703     platform="$uname"
704     linker_resolves_library_dependencies=1
705
706     printf "Checking for %s in ldconfig... " "$libdir_expanded"
707     ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
708     # Separate ldconfig_paths only on newline (not on any potential
709     # embedded space characters in any filenames). Note, we use a
710     # literal newline in the source here rather than something like:
711     #
712     #   IFS=$(printf '\n')
713     #
714     # because the shell's command substitution deletes any trailing newlines.
715     IFS="
716 "
717     for path in $ldconfig_paths; do
718         if [ "$path" -ef "$libdir_expanded" ]; then
719             libdir_in_ldconfig=1
720         fi
721     done
722     IFS=$DEFAULT_IFS
723     if [ "$libdir_in_ldconfig" = '0' ]; then
724         printf "No (will set RPATH)\n"
725     else
726         printf "Yes\n"
727     fi
728 else
729     printf "Unknown.\n"
730     platform="$uname"
731     linker_resolves_library_dependencies=0
732     cat <<EOF
733
734 *** Warning: Unknown platform. Notmuch might or might not build correctly.
735
736 EOF
737 fi
738
739 if [ $errors -gt 0 ]; then
740     cat <<EOF
741
742 *** Error: The dependencies of notmuch could not be satisfied. You will
743 need to install the following packages before being able to compile
744 notmuch:
745
746 EOF
747     if [ $have_python -eq 0 ]; then
748         echo "  python interpreter"
749     fi
750     if [ $have_xapian -eq 0 -o $have_xapian_compact -eq 0 ]; then
751         echo "  Xapian library (>= version 1.2.6, including development files such as headers)"
752         echo "  https://xapian.org/"
753     fi
754     if [ $have_zlib -eq 0 ]; then
755         echo "  zlib library (>= version 1.2.5.2, including development files such as headers)"
756         echo "  https://zlib.net/"
757         echo
758     fi
759     if [ $have_gmime -eq 0 ]; then
760         echo "  GMime 2.6 library >= $GMIME_MINVER"
761         echo "  (including development files such as headers)"
762         echo "  https://github.com/jstedfast/gmime/"
763         echo
764     fi
765     if [ $have_glib -eq 0 ]; then
766         echo "  Glib library >= 2.22 (including development files such as headers)"
767         echo "  https://ftp.gnome.org/pub/gnome/sources/glib/"
768         echo
769     fi
770     if [ $have_talloc -eq 0 ]; then
771         echo "  The talloc library (including development files such as headers)"
772         echo "  https://talloc.samba.org/"
773         echo
774     fi
775     cat <<EOF
776 With any luck, you're using a modern, package-based operating system
777 that has all of these packages available in the distribution. In that
778 case a simple command will install everything you need. For example:
779
780 On Debian and similar systems:
781
782         sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
783
784 Or on Fedora and similar systems:
785
786         sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
787
788 On other systems, similar commands can be used, but the details of the
789 package names may be different.
790
791 EOF
792     if [ $have_pkg_config -eq 0 ]; then
793 cat <<EOF
794 Note: the pkg-config program is not available. This configure script
795 uses pkg-config to find the compilation flags required to link against
796 the various libraries needed by notmuch. It's possible you simply need
797 to install pkg-config with a command such as:
798
799         sudo apt-get install pkg-config
800 Or:
801         sudo yum install pkgconfig
802
803 But if pkg-config is not available for your system, then you will need
804 to modify the configure script to manually set the cflags and ldflags
805 variables to the correct values to link against each library in each
806 case that pkg-config could not be used to determine those values.
807
808 EOF
809     fi
810 cat <<EOF
811 When you have installed the necessary dependencies, you can run
812 configure again to ensure the packages can be found, or simply run
813 "make" to compile notmuch.
814
815 EOF
816     exit 1
817 fi
818
819 printf "Checking for canonicalize_file_name... "
820 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
821 then
822     printf "Yes.\n"
823     have_canonicalize_file_name=1
824 else
825     printf "No (will use our own instead).\n"
826     have_canonicalize_file_name=0
827 fi
828 rm -f compat/have_canonicalize_file_name
829
830
831 printf "Checking for getline... "
832 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
833 then
834     printf "Yes.\n"
835     have_getline=1
836 else
837     printf "No (will use our own instead).\n"
838     have_getline=0
839 fi
840 rm -f compat/have_getline
841
842 printf "Checking for strcasestr... "
843 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
844 then
845     printf "Yes.\n"
846     have_strcasestr=1
847 else
848     printf "No (will use our own instead).\n"
849     have_strcasestr=0
850 fi
851 rm -f compat/have_strcasestr
852
853 printf "Checking for strsep... "
854 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
855 then
856     printf "Yes.\n"
857     have_strsep="1"
858 else
859     printf "No (will use our own instead).\n"
860     have_strsep="0"
861 fi
862 rm -f compat/have_strsep
863
864 printf "Checking for timegm... "
865 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
866 then
867     printf "Yes.\n"
868     have_timegm="1"
869 else
870     printf "No (will use our own instead).\n"
871     have_timegm="0"
872 fi
873 rm -f compat/have_timegm
874
875 printf "Checking for dirent.d_type... "
876 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
877 then
878     printf "Yes.\n"
879     have_d_type="1"
880 else
881     printf "No (will use stat instead).\n"
882     have_d_type="0"
883 fi
884 rm -f compat/have_d_type
885
886 printf "Checking for standard version of getpwuid_r... "
887 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
888 then
889     printf "Yes.\n"
890     std_getpwuid=1
891 else
892     printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
893     std_getpwuid=0
894 fi
895 rm -f compat/check_getpwuid
896
897 printf "Checking for standard version of asctime_r... "
898 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
899 then
900     printf "Yes.\n"
901     std_asctime=1
902 else
903     printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
904     std_asctime=0
905 fi
906 rm -f compat/check_asctime
907
908 printf "Checking for rpath support... "
909 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
910 then
911     printf "Yes.\n"
912     rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
913 else
914     printf "No (nothing to worry about).\n"
915     rpath_ldflags=""
916 fi
917
918 printf "Checking for -Wl,--as-needed... "
919 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
920 then
921     printf "Yes.\n"
922     as_needed_ldflags="-Wl,--as-needed"
923 else
924     printf "No (nothing to worry about).\n"
925     as_needed_ldflags=""
926 fi
927
928 printf "Checking for -Wl,--no-undefined... "
929 if ${CC} -Wl,--no-undefined -o minimal minimal.c >/dev/null 2>&1
930 then
931     printf "Yes.\n"
932     no_undefined_ldflags="-Wl,--no-undefined"
933 else
934     printf "No (nothing to worry about).\n"
935     no_undefined_ldflags=""
936 fi
937
938 WARN_CXXFLAGS=""
939 printf "Checking for available C++ compiler warning flags... "
940 for flag in -Wall -Wextra -Wwrite-strings; do
941     if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
942     then
943         WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
944     fi
945 done
946 printf "\n\t%s\n" "${WARN_CXXFLAGS}"
947
948 WARN_CFLAGS="${WARN_CXXFLAGS}"
949 printf "Checking for available C compiler warning flags... "
950 for flag in -Wmissing-declarations; do
951     if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
952     then
953         WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
954     fi
955 done
956 printf "\n\t%s\n" "${WARN_CFLAGS}"
957
958 rm -f minimal minimal.c _libversion.c _libversion _libversion.sh
959
960 # construct the Makefile.config
961 cat > Makefile.config <<EOF
962 # This Makefile.config was automatically generated by the ./configure
963 # script of notmuch. If the configure script identified anything
964 # incorrectly, then you can edit this file to try to correct things,
965 # but be warned that if configure is run again it will destroy your
966 # changes, (and this could happen by simply calling "make" if the
967 # configure script is updated).
968
969 # The top-level directory for the source, (the directory containing
970 # the configure script). This may be different than the build
971 # directory (the current directory at the time configure was run).
972 srcdir = ${srcdir}
973 NOTMUCH_SRCDIR = ${NOTMUCH_SRCDIR}
974
975 # subdirectories to build
976 subdirs = ${subdirs}
977
978 configure_options = $@
979
980 # We use vpath directives (rather than the VPATH variable) since the
981 # VPATH variable matches targets as well as prerequisites, (which is
982 # not useful since then a target left-over from a srcdir build would
983 # cause a target to not be built in the non-srcdir build).
984 #
985 # Also, we don't use a single "vpath % \$(srcdir)" here because we
986 # don't want the vpath to trigger for our emacs lisp compilation,
987 # (unless we first find a way to convince emacs to build the .elc
988 # target in a directory other than the directory of the .el
989 # prerequisite). In the meantime, we're actually copying in the .el
990 # files, (which is quite ugly).
991 vpath %.c \$(srcdir)
992 vpath %.cc \$(srcdir)
993 vpath Makefile.% \$(srcdir)
994 vpath %.py \$(srcdir)
995 vpath %.rst \$(srcdir)
996
997 # Library versions (used to make SONAME)
998 # The major version of the library interface. This will control the soname.
999 # As such, this number must be incremented for any incompatible change to
1000 # the library interface, (such as the deletion of an API or a major
1001 # semantic change that breaks formerly functioning code).
1002 #
1003 LIBNOTMUCH_VERSION_MAJOR = ${libnotmuch_version_major}
1004
1005 # The minor version of the library interface. This should be incremented at
1006 # the time of release for any additions to the library interface,
1007 # (and when it is incremented, the release version of the library should
1008 #  be reset to 0).
1009 LIBNOTMUCH_VERSION_MINOR = ${libnotmuch_version_minor}
1010
1011 # The release version the library interface. This should be incremented at
1012 # the time of release if there have been no changes to the interface, (but
1013 # simply compatible changes to the implementation).
1014 LIBNOTMUCH_VERSION_RELEASE = ${libnotmuch_version_release}
1015
1016 # These are derived from the VERSION macros in lib/notmuch.h so
1017 # if you have to change them, something is wrong.
1018
1019 # The C compiler to use
1020 CC = ${CC}
1021
1022 # The C++ compiler to use
1023 CXX = ${CXX}
1024
1025 # Command to execute emacs from Makefiles
1026 EMACS = emacs --quick
1027
1028 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
1029 CFLAGS = ${CFLAGS}
1030
1031 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
1032 CPPFLAGS = ${CPPFLAGS}
1033
1034 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
1035 CXXFLAGS = ${CXXFLAGS}
1036
1037 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
1038 LDFLAGS = ${LDFLAGS}
1039
1040 # Flags to enable warnings when using the C++ compiler
1041 WARN_CXXFLAGS=${WARN_CXXFLAGS}
1042
1043 # Flags to enable warnings when using the C compiler
1044 WARN_CFLAGS=${WARN_CFLAGS}
1045
1046 # Name of python interpreter
1047 PYTHON = ${python}
1048
1049 # Name of ruby interpreter
1050 RUBY = ${RUBY}
1051
1052 # The prefix to which notmuch should be installed
1053 # Note: If you change this value here, be sure to ensure that the
1054 # LIBDIR_IN_LDCONFIG value below is still set correctly.
1055 prefix = ${PREFIX}
1056
1057 # The directory to which libraries should be installed
1058 # Note: If you change this value here, be sure to ensure that the
1059 # LIBDIR_IN_LDCONFIG value below is still set correctly.
1060 libdir = ${LIBDIR:=\$(prefix)/lib}
1061
1062 # Whether libdir is in a path configured into ldconfig
1063 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
1064
1065 # The directory to which header files should be installed
1066 includedir = ${INCLUDEDIR:=\$(prefix)/include}
1067
1068 # The directory to which man pages should be installed
1069 mandir = ${MANDIR:=\$(prefix)/share/man}
1070
1071 # The directory to which man pages should be installed
1072 infodir = ${INFODIR:=\$(prefix)/share/info}
1073
1074 # The directory to which read-only (configuration) files should be installed
1075 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
1076
1077 # The directory to which emacs lisp files should be installed
1078 emacslispdir=${EMACSLISPDIR}
1079
1080 # The directory to which emacs miscellaneous (machine-independent) files should
1081 # be installed
1082 emacsetcdir=${EMACSETCDIR}
1083
1084 # Whether there's an emacs binary available for byte-compiling
1085 HAVE_EMACS = ${have_emacs}
1086
1087 # Whether there's a sphinx-build binary available for building documentation
1088 HAVE_SPHINX=${have_sphinx}
1089
1090 # Whether there's a makeinfo binary available for building info format documentation
1091 HAVE_MAKEINFO=${have_makeinfo}
1092
1093 # Whether there's an install-info binary available for installing info format documentation
1094 HAVE_INSTALL_INFO=${have_install_info}
1095
1096 # Whether there's a doxygen binary available for building api documentation
1097 HAVE_DOXYGEN=${have_doxygen}
1098
1099 # The directory to which desktop files should be installed
1100 desktop_dir = \$(prefix)/share/applications
1101
1102 # The directory to which bash completions files should be installed
1103 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(prefix)/share/bash-completion/completions}
1104
1105 # The directory to which zsh completions files should be installed
1106 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
1107
1108 # Whether the canonicalize_file_name function is available (if not, then notmuch will
1109 # build its own version)
1110 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
1111
1112 # Whether the cppcheck static checker is available
1113 HAVE_CPPCHECK = ${have_cppcheck}
1114
1115 # Whether the getline function is available (if not, then notmuch will
1116 # build its own version)
1117 HAVE_GETLINE = ${have_getline}
1118
1119 # Are the ruby development files (and ruby) available? If not skip
1120 # building/testing ruby bindings.
1121 HAVE_RUBY_DEV = ${have_ruby_dev}
1122
1123 # Whether the strcasestr function is available (if not, then notmuch will
1124 # build its own version)
1125 HAVE_STRCASESTR = ${have_strcasestr}
1126
1127 # Whether the strsep function is available (if not, then notmuch will
1128 # build its own version)
1129 HAVE_STRSEP = ${have_strsep}
1130
1131 # Whether the timegm function is available (if not, then notmuch will
1132 # build its own version)
1133 HAVE_TIMEGM = ${have_timegm}
1134
1135 # Whether struct dirent has d_type (if not, then notmuch will use stat)
1136 HAVE_D_TYPE = ${have_d_type}
1137
1138 # Whether the GMime version can handle extraction and reuse of session keys
1139 HAVE_GMIME_SESSION_KEYS = ${have_gmime_session_keys}
1140
1141 # Whether the Xapian version in use supports compaction
1142 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
1143
1144 # Whether the Xapian version in use supports field processors
1145 HAVE_XAPIAN_FIELD_PROCESSOR = ${have_xapian_field_processor}
1146
1147 # Whether the Xapian version in use supports DB_RETRY_LOCK
1148 HAVE_XAPIAN_DB_RETRY_LOCK = ${have_xapian_db_retry_lock}
1149
1150 # Whether the getpwuid_r function is standards-compliant
1151 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1152 # to enable the standards-compliant version -- needed for Solaris)
1153 STD_GETPWUID = ${std_getpwuid}
1154
1155 # Whether the asctime_r function is standards-compliant
1156 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1157 # to enable the standards-compliant version -- needed for Solaris)
1158 STD_ASCTIME = ${std_asctime}
1159
1160 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
1161 PLATFORM = ${platform}
1162
1163 # Whether the linker will automatically resolve the dependency of one
1164 # library on another (if not, then linking a binary requires linking
1165 # directly against both)
1166 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
1167
1168 # Flags needed to compile and link against Xapian
1169 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
1170 XAPIAN_LDFLAGS = ${xapian_ldflags}
1171
1172 # Which backend will Xapian use by default?
1173 DEFAULT_XAPIAN_BACKEND = ${default_xapian_backend}
1174
1175 # Flags needed to compile and link against GMime
1176 GMIME_CFLAGS = ${gmime_cflags}
1177 GMIME_LDFLAGS = ${gmime_ldflags}
1178
1179 # Flags needed to compile and link against zlib
1180 ZLIB_CFLAGS = ${zlib_cflags}
1181 ZLIB_LDFLAGS = ${zlib_ldflags}
1182
1183 # Flags needed to compile and link against talloc
1184 TALLOC_CFLAGS = ${talloc_cflags}
1185 TALLOC_LDFLAGS = ${talloc_ldflags}
1186
1187 # Flags needed to have linker set rpath attribute
1188 RPATH_LDFLAGS = ${rpath_ldflags}
1189
1190 # Flags needed to have linker link only to necessary libraries
1191 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
1192
1193 # Flags to have the linker flag undefined symbols in object files
1194 NO_UNDEFINED_LDFLAGS = ${no_undefined_ldflags}
1195
1196 # Whether valgrind header files are available
1197 HAVE_VALGRIND = ${have_valgrind}
1198
1199 # And if so, flags needed at compile time for valgrind macros
1200 VALGRIND_CFLAGS = ${valgrind_cflags}
1201
1202 # Support for emacs
1203 WITH_EMACS = ${WITH_EMACS}
1204
1205 # Support for desktop file
1206 WITH_DESKTOP = ${WITH_DESKTOP}
1207
1208 # Support for bash completion
1209 WITH_BASH = ${WITH_BASH}
1210
1211 # Support for zsh completion
1212 WITH_ZSH = ${WITH_ZSH}
1213
1214 # Combined flags for compiling and linking against all of the above
1215 COMMON_CONFIGURE_CFLAGS = \\
1216         \$(GMIME_CFLAGS) \$(TALLOC_CFLAGS) \$(ZLIB_CFLAGS)      \\
1217         -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \$(VALGRIND_CFLAGS)   \\
1218         -DHAVE_GETLINE=\$(HAVE_GETLINE)                         \\
1219         -DWITH_EMACS=\$(WITH_EMACS)                             \\
1220         -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1221         -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)                   \\
1222         -DHAVE_STRSEP=\$(HAVE_STRSEP)                           \\
1223         -DHAVE_TIMEGM=\$(HAVE_TIMEGM)                           \\
1224         -DHAVE_D_TYPE=\$(HAVE_D_TYPE)                           \\
1225         -DSTD_GETPWUID=\$(STD_GETPWUID)                         \\
1226         -DSTD_ASCTIME=\$(STD_ASCTIME)                           \\
1227         -DHAVE_GMIME_SESSION_KEYS=\$(HAVE_GMIME_SESSION_KEYS)   \\
1228         -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT)           \\
1229         -DSILENCE_XAPIAN_DEPRECATION_WARNINGS                   \\
1230         -DHAVE_XAPIAN_FIELD_PROCESSOR=\$(HAVE_XAPIAN_FIELD_PROCESSOR) \\
1231         -DHAVE_XAPIAN_DB_RETRY_LOCK=\$(HAVE_XAPIAN_DB_RETRY_LOCK)
1232
1233 CONFIGURE_CFLAGS = \$(COMMON_CONFIGURE_CFLAGS)
1234
1235 CONFIGURE_CXXFLAGS = \$(COMMON_CONFIGURE_CFLAGS) \$(XAPIAN_CXXFLAGS)
1236
1237 CONFIGURE_LDFLAGS =  \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
1238 EOF
1239
1240 # construct the sh.config
1241 cat > sh.config <<EOF
1242 # This sh.config was automatically generated by the ./configure
1243 # script of notmuch.
1244
1245 NOTMUCH_SRCDIR='${NOTMUCH_SRCDIR}'
1246
1247 # Whether the Xapian version in use supports compaction
1248 NOTMUCH_HAVE_XAPIAN_COMPACT=${have_xapian_compact}
1249
1250 # Whether the Xapian version in use supports field processors
1251 NOTMUCH_HAVE_XAPIAN_FIELD_PROCESSOR=${have_xapian_field_processor}
1252
1253 # Whether the Xapian version in use supports lock retry
1254 NOTMUCH_HAVE_XAPIAN_DB_RETRY_LOCK=${have_xapian_db_retry_lock}
1255
1256 # Whether the GMime version can handle extraction and reuse of session keys
1257 NOTMUCH_HAVE_GMIME_SESSION_KEYS=${have_gmime_session_keys}
1258
1259 # Which backend will Xapian use by default?
1260 NOTMUCH_DEFAULT_XAPIAN_BACKEND=${default_xapian_backend}
1261
1262 # do we have man pages?
1263 NOTMUCH_HAVE_MAN=$((have_sphinx))
1264
1265 # Name of python interpreter
1266 NOTMUCH_PYTHON=${python}
1267
1268 # Name of ruby interpreter
1269 NOTMUCH_RUBY=${RUBY}
1270
1271 # Are the ruby development files (and ruby) available? If not skip
1272 # building/testing ruby bindings.
1273 NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
1274
1275 # Major version of gmime
1276 NOTMUCH_GMIME_MAJOR=${gmime_major}
1277
1278 # Platform we are run on
1279 PLATFORM=${platform}
1280 EOF
1281
1282 # Finally, after everything configured, inform the user how to continue.
1283 cat <<EOF
1284
1285 All required packages were found. You may now run the following
1286 commands to compile and install notmuch:
1287
1288         make
1289         sudo make install
1290
1291 EOF