]> git.notmuchmail.org Git - notmuch/blob - configure
build: Allow user to specify ruby executable
[notmuch] / 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         --sysconfdir=DIR        Read-only single-machine data [PREFIX/etc]
143         --emacslispdir=DIR      Emacs code [PREFIX/share/emacs/site-lisp]
144         --emacsetcdir=DIR       Emacs miscellaneous files [PREFIX/share/emacs/site-lisp]
145         --bashcompletiondir=DIR Bash completions files [PREFIX/share/bash-completion/completions]
146         --zshcompletiondir=DIR  Zsh completions files [PREFIX/share/zsh/functions/Completion/Unix]
147
148 Some features can be disabled (--with-feature=no is equivalent to
149 --without-feature) :
150
151         --without-bash-completion       Do not install bash completions files
152         --without-docs                  Do not install documentation
153         --without-api-docs              Do not install API man page
154         --without-emacs                 Do not install lisp file
155         --without-desktop               Do not install desktop file
156         --without-ruby                  Do not install ruby bindings
157         --without-zsh-completion        Do not install zsh completions files
158         --without-retry-lock            Do not use blocking xapian opens, even if available
159
160 Additional options are accepted for compatibility with other
161 configure-script calling conventions, but don't do anything yet:
162
163         --build=<cpu>-<vendor>-<os>     Currently ignored
164         --host=<cpu>-<vendor>-<os>      Currently ignored
165         --infodir=DIR                   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%%=*}" = '--sysconfdir' ] ; then
189         SYSCONFDIR="${option#*=}"
190     elif [ "${option%%=*}" = '--emacslispdir' ] ; then
191         EMACSLISPDIR="${option#*=}"
192     elif [ "${option%%=*}" = '--emacsetcdir' ] ; then
193         EMACSETCDIR="${option#*=}"
194     elif [ "${option%%=*}" = '--bashcompletiondir' ] ; then
195         BASHCOMPLETIONDIR="${option#*=}"
196     elif [ "${option%%=*}" = '--zshcompletiondir' ] ; then
197         ZSHCOMLETIONDIR="${option#*=}"
198     elif [ "${option%%=*}" = '--with-docs' ]; then
199         if [ "${option#*=}" = 'no' ]; then
200             WITH_DOCS=0
201             WITH_API_DOCS=0
202         else
203             WITH_DOCS=1
204         fi
205     elif [ "${option}" = '--without-docs' ] ; then
206         WITH_DOCS=0
207         WITH_API_DOCS=0
208     elif [ "${option%%=*}" = '--with-api-docs' ]; then
209         if [ "${option#*=}" = 'no' ]; then
210             WITH_API_DOCS=0
211         else
212             WITH_API_DOCS=1
213         fi
214     elif [ "${option}" = '--without-api-docs' ] ; then
215         WITH_API_DOCS=0
216     elif [ "${option%%=*}" = '--with-emacs' ]; then
217         if [ "${option#*=}" = 'no' ]; then
218             WITH_EMACS=0
219         else
220             WITH_EMACS=1
221         fi
222     elif [ "${option}" = '--without-emacs' ] ; then
223         WITH_EMACS=0
224     elif [ "${option%%=*}" = '--with-desktop' ]; then
225         if [ "${option#*=}" = 'no' ]; then
226             WITH_DESKTOP=0
227         else
228             WITH_DESKTOP=1
229         fi
230     elif [ "${option}" = '--without-desktop' ] ; then
231         WITH_DESKTOP=0
232     elif [ "${option%%=*}" = '--with-bash-completion' ]; then
233         if [ "${option#*=}" = 'no' ]; then
234             WITH_BASH=0
235         else
236             WITH_BASH=1
237         fi
238     elif [ "${option}" = '--without-bash-completion' ] ; then
239         WITH_BASH=0
240     elif [ "${option%%=*}" = '--with-ruby' ]; then
241         if [ "${option#*=}" = 'no' ]; then
242             WITH_RUBY=0
243         else
244             WITH_RUBY=1
245         fi
246     elif [ "${option}" = '--without-ruby' ] ; then
247         WITH_RUBY=0
248     elif [ "${option%%=*}" = '--with-retry-lock' ]; then
249         if [ "${option#*=}" = 'no' ]; then
250             WITH_RETRY_LOCK=0
251         else
252             WITH_RETRY_LOCK=1
253         fi
254     elif [ "${option}" = '--without-retry-lock' ] ; then
255         WITH_RETRY_LOCK=0
256     elif [ "${option%%=*}" = '--with-zsh-completion' ]; then
257         if [ "${option#*=}" = 'no' ]; then
258             WITH_ZSH=0
259         else
260             WITH_ZSH=1
261         fi
262     elif [ "${option}" = '--without-zsh-completion' ] ; then
263         WITH_ZSH=0
264     elif [ "${option%%=*}" = '--build' ] ; then
265         true
266     elif [ "${option%%=*}" = '--host' ] ; then
267         true
268     elif [ "${option%%=*}" = '--infodir' ] ; 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 if [ $WITH_DOCS = "1" ] ; then
637     printf "Checking if sphinx is available and supports nroff output... "
638     if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then
639         printf "Yes.\n"
640         have_sphinx=1
641     else
642         printf "No (so will not install man pages).\n"
643     fi
644 fi
645
646 if [ $WITH_DESKTOP = "1" ]; then
647     printf "Checking if desktop-file-install is available... "
648     if command -v desktop-file-install > /dev/null; then
649         printf "Yes.\n"
650     else
651         printf "No (so will not install .desktop file).\n"
652         WITH_DESKTOP=0
653     fi
654 fi
655
656 printf "Checking for cppcheck... "
657 if command -v cppcheck > /dev/null; then
658     have_cppcheck=1
659     printf "Yes.\n"
660 else
661     have_cppcheck=0
662     printf "No.\n"
663 fi
664
665 libdir_in_ldconfig=0
666
667 printf "Checking which platform we are on... "
668 uname=$(uname)
669 if [ $uname = "Darwin" ] ; then
670     printf "Mac OS X.\n"
671     platform=MACOSX
672     linker_resolves_library_dependencies=0
673 elif [ $uname = "SunOS" ] ; then
674     printf "Solaris.\n"
675     platform=SOLARIS
676     linker_resolves_library_dependencies=0
677 elif [ $uname = "FreeBSD" ] ; then
678     printf "FreeBSD.\n"
679     platform=FREEBSD
680     linker_resolves_library_dependencies=0
681 elif [ $uname = "OpenBSD" ] ; then
682     printf "OpenBSD.\n"
683     platform=OPENBSD
684     linker_resolves_library_dependencies=0
685 elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
686     printf "%s\n" "$uname"
687     platform="$uname"
688     linker_resolves_library_dependencies=1
689
690     printf "Checking for %s in ldconfig... " "$libdir_expanded"
691     ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
692     # Separate ldconfig_paths only on newline (not on any potential
693     # embedded space characters in any filenames). Note, we use a
694     # literal newline in the source here rather than something like:
695     #
696     #   IFS=$(printf '\n')
697     #
698     # because the shell's command substitution deletes any trailing newlines.
699     IFS="
700 "
701     for path in $ldconfig_paths; do
702         if [ "$path" = "$libdir_expanded" ]; then
703             libdir_in_ldconfig=1
704         fi
705     done
706     IFS=$DEFAULT_IFS
707     if [ "$libdir_in_ldconfig" = '0' ]; then
708         printf "No (will set RPATH)\n"
709     else
710         printf "Yes\n"
711     fi
712 else
713     printf "Unknown.\n"
714     platform="$uname"
715     linker_resolves_library_dependencies=0
716     cat <<EOF
717
718 *** Warning: Unknown platform. Notmuch might or might not build correctly.
719
720 EOF
721 fi
722
723 if [ $errors -gt 0 ]; then
724     cat <<EOF
725
726 *** Error: The dependencies of notmuch could not be satisfied. You will
727 need to install the following packages before being able to compile
728 notmuch:
729
730 EOF
731     if [ $have_python -eq 0 ]; then
732         echo "  python interpreter"
733     fi
734     if [ $have_xapian -eq 0 -o $have_xapian_compact -eq 0 ]; then
735         echo "  Xapian library (>= version 1.2.6, including development files such as headers)"
736         echo "  https://xapian.org/"
737     fi
738     if [ $have_zlib -eq 0 ]; then
739         echo "  zlib library (>= version 1.2.5.2, including development files such as headers)"
740         echo "  https://zlib.net/"
741         echo
742     fi
743     if [ $have_gmime -eq 0 ]; then
744         echo "  GMime 2.6 library >= $GMIME_MINVER"
745         echo "  (including development files such as headers)"
746         echo "  https://github.com/jstedfast/gmime/"
747         echo
748     fi
749     if [ $have_glib -eq 0 ]; then
750         echo "  Glib library >= 2.22 (including development files such as headers)"
751         echo "  https://ftp.gnome.org/pub/gnome/sources/glib/"
752         echo
753     fi
754     if [ $have_talloc -eq 0 ]; then
755         echo "  The talloc library (including development files such as headers)"
756         echo "  https://talloc.samba.org/"
757         echo
758     fi
759     cat <<EOF
760 With any luck, you're using a modern, package-based operating system
761 that has all of these packages available in the distribution. In that
762 case a simple command will install everything you need. For example:
763
764 On Debian and similar systems:
765
766         sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
767
768 Or on Fedora and similar systems:
769
770         sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
771
772 On other systems, similar commands can be used, but the details of the
773 package names may be different.
774
775 EOF
776     if [ $have_pkg_config -eq 0 ]; then
777 cat <<EOF
778 Note: the pkg-config program is not available. This configure script
779 uses pkg-config to find the compilation flags required to link against
780 the various libraries needed by notmuch. It's possible you simply need
781 to install pkg-config with a command such as:
782
783         sudo apt-get install pkg-config
784 Or:
785         sudo yum install pkgconfig
786
787 But if pkg-config is not available for your system, then you will need
788 to modify the configure script to manually set the cflags and ldflags
789 variables to the correct values to link against each library in each
790 case that pkg-config could not be used to determine those values.
791
792 EOF
793     fi
794 cat <<EOF
795 When you have installed the necessary dependencies, you can run
796 configure again to ensure the packages can be found, or simply run
797 "make" to compile notmuch.
798
799 EOF
800     exit 1
801 fi
802
803 printf "Checking for canonicalize_file_name... "
804 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
805 then
806     printf "Yes.\n"
807     have_canonicalize_file_name=1
808 else
809     printf "No (will use our own instead).\n"
810     have_canonicalize_file_name=0
811 fi
812 rm -f compat/have_canonicalize_file_name
813
814
815 printf "Checking for getline... "
816 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
817 then
818     printf "Yes.\n"
819     have_getline=1
820 else
821     printf "No (will use our own instead).\n"
822     have_getline=0
823 fi
824 rm -f compat/have_getline
825
826 printf "Checking for strcasestr... "
827 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
828 then
829     printf "Yes.\n"
830     have_strcasestr=1
831 else
832     printf "No (will use our own instead).\n"
833     have_strcasestr=0
834 fi
835 rm -f compat/have_strcasestr
836
837 printf "Checking for strsep... "
838 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
839 then
840     printf "Yes.\n"
841     have_strsep="1"
842 else
843     printf "No (will use our own instead).\n"
844     have_strsep="0"
845 fi
846 rm -f compat/have_strsep
847
848 printf "Checking for timegm... "
849 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
850 then
851     printf "Yes.\n"
852     have_timegm="1"
853 else
854     printf "No (will use our own instead).\n"
855     have_timegm="0"
856 fi
857 rm -f compat/have_timegm
858
859 printf "Checking for dirent.d_type... "
860 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
861 then
862     printf "Yes.\n"
863     have_d_type="1"
864 else
865     printf "No (will use stat instead).\n"
866     have_d_type="0"
867 fi
868 rm -f compat/have_d_type
869
870 printf "Checking for standard version of getpwuid_r... "
871 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
872 then
873     printf "Yes.\n"
874     std_getpwuid=1
875 else
876     printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
877     std_getpwuid=0
878 fi
879 rm -f compat/check_getpwuid
880
881 printf "Checking for standard version of asctime_r... "
882 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
883 then
884     printf "Yes.\n"
885     std_asctime=1
886 else
887     printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
888     std_asctime=0
889 fi
890 rm -f compat/check_asctime
891
892 printf "Checking for rpath support... "
893 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
894 then
895     printf "Yes.\n"
896     rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
897 else
898     printf "No (nothing to worry about).\n"
899     rpath_ldflags=""
900 fi
901
902 printf "Checking for -Wl,--as-needed... "
903 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
904 then
905     printf "Yes.\n"
906     as_needed_ldflags="-Wl,--as-needed"
907 else
908     printf "No (nothing to worry about).\n"
909     as_needed_ldflags=""
910 fi
911
912 printf "Checking for -Wl,--no-undefined... "
913 if ${CC} -Wl,--no-undefined -o minimal minimal.c >/dev/null 2>&1
914 then
915     printf "Yes.\n"
916     no_undefined_ldflags="-Wl,--no-undefined"
917 else
918     printf "No (nothing to worry about).\n"
919     no_undefined_ldflags=""
920 fi
921
922 WARN_CXXFLAGS=""
923 printf "Checking for available C++ compiler warning flags... "
924 for flag in -Wall -Wextra -Wwrite-strings; do
925     if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
926     then
927         WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
928     fi
929 done
930 printf "\n\t%s\n" "${WARN_CXXFLAGS}"
931
932 WARN_CFLAGS="${WARN_CXXFLAGS}"
933 printf "Checking for available C compiler warning flags... "
934 for flag in -Wmissing-declarations; do
935     if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
936     then
937         WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
938     fi
939 done
940 printf "\n\t%s\n" "${WARN_CFLAGS}"
941
942 rm -f minimal minimal.c _libversion.c _libversion _libversion.sh
943
944 # construct the Makefile.config
945 cat > Makefile.config <<EOF
946 # This Makefile.config was automatically generated by the ./configure
947 # script of notmuch. If the configure script identified anything
948 # incorrectly, then you can edit this file to try to correct things,
949 # but be warned that if configure is run again it will destroy your
950 # changes, (and this could happen by simply calling "make" if the
951 # configure script is updated).
952
953 # The top-level directory for the source, (the directory containing
954 # the configure script). This may be different than the build
955 # directory (the current directory at the time configure was run).
956 srcdir = ${srcdir}
957 NOTMUCH_SRCDIR = ${NOTMUCH_SRCDIR}
958
959 # subdirectories to build
960 subdirs = ${subdirs}
961
962 configure_options = $@
963
964 # We use vpath directives (rather than the VPATH variable) since the
965 # VPATH variable matches targets as well as prerequisites, (which is
966 # not useful since then a target left-over from a srcdir build would
967 # cause a target to not be built in the non-srcdir build).
968 #
969 # Also, we don't use a single "vpath % \$(srcdir)" here because we
970 # don't want the vpath to trigger for our emacs lisp compilation,
971 # (unless we first find a way to convince emacs to build the .elc
972 # target in a directory other than the directory of the .el
973 # prerequisite). In the meantime, we're actually copying in the .el
974 # files, (which is quite ugly).
975 vpath %.c \$(srcdir)
976 vpath %.cc \$(srcdir)
977 vpath Makefile.% \$(srcdir)
978 vpath %.py \$(srcdir)
979 vpath %.rst \$(srcdir)
980
981 # Library versions (used to make SONAME)
982 # The major version of the library interface. This will control the soname.
983 # As such, this number must be incremented for any incompatible change to
984 # the library interface, (such as the deletion of an API or a major
985 # semantic change that breaks formerly functioning code).
986 #
987 LIBNOTMUCH_VERSION_MAJOR = ${libnotmuch_version_major}
988
989 # The minor version of the library interface. This should be incremented at
990 # the time of release for any additions to the library interface,
991 # (and when it is incremented, the release version of the library should
992 #  be reset to 0).
993 LIBNOTMUCH_VERSION_MINOR = ${libnotmuch_version_minor}
994
995 # The release version the library interface. This should be incremented at
996 # the time of release if there have been no changes to the interface, (but
997 # simply compatible changes to the implementation).
998 LIBNOTMUCH_VERSION_RELEASE = ${libnotmuch_version_release}
999
1000 # These are derived from the VERSION macros in lib/notmuch.h so
1001 # if you have to change them, something is wrong.
1002
1003 # The C compiler to use
1004 CC = ${CC}
1005
1006 # The C++ compiler to use
1007 CXX = ${CXX}
1008
1009 # Command to execute emacs from Makefiles
1010 EMACS = emacs --quick
1011
1012 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
1013 CFLAGS = ${CFLAGS}
1014
1015 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
1016 CPPFLAGS = ${CPPFLAGS}
1017
1018 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
1019 CXXFLAGS = ${CXXFLAGS}
1020
1021 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
1022 LDFLAGS = ${LDFLAGS}
1023
1024 # Flags to enable warnings when using the C++ compiler
1025 WARN_CXXFLAGS=${WARN_CXXFLAGS}
1026
1027 # Flags to enable warnings when using the C compiler
1028 WARN_CFLAGS=${WARN_CFLAGS}
1029
1030 # Name of python interpreter
1031 PYTHON = ${python}
1032
1033 # Name of ruby interpreter
1034 RUBY = ${RUBY}
1035
1036 # The prefix to which notmuch should be installed
1037 # Note: If you change this value here, be sure to ensure that the
1038 # LIBDIR_IN_LDCONFIG value below is still set correctly.
1039 prefix = ${PREFIX}
1040
1041 # The directory to which libraries should be installed
1042 # Note: If you change this value here, be sure to ensure that the
1043 # LIBDIR_IN_LDCONFIG value below is still set correctly.
1044 libdir = ${LIBDIR:=\$(prefix)/lib}
1045
1046 # Whether libdir is in a path configured into ldconfig
1047 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
1048
1049 # The directory to which header files should be installed
1050 includedir = ${INCLUDEDIR:=\$(prefix)/include}
1051
1052 # The directory to which man pages should be installed
1053 mandir = ${MANDIR:=\$(prefix)/share/man}
1054
1055 # The directory to which read-only (configuration) files should be installed
1056 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
1057
1058 # The directory to which emacs lisp files should be installed
1059 emacslispdir=${EMACSLISPDIR}
1060
1061 # The directory to which emacs miscellaneous (machine-independent) files should
1062 # be installed
1063 emacsetcdir=${EMACSETCDIR}
1064
1065 # Whether there's an emacs binary available for byte-compiling
1066 HAVE_EMACS = ${have_emacs}
1067
1068 # Whether there's a sphinx-build binary available for building documentation
1069 HAVE_SPHINX=${have_sphinx}
1070
1071 # Whether there's a doxygen binary available for building api documentation
1072 HAVE_DOXYGEN=${have_doxygen}
1073
1074 # The directory to which desktop files should be installed
1075 desktop_dir = \$(prefix)/share/applications
1076
1077 # The directory to which bash completions files should be installed
1078 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(prefix)/share/bash-completion/completions}
1079
1080 # The directory to which zsh completions files should be installed
1081 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
1082
1083 # Whether the canonicalize_file_name function is available (if not, then notmuch will
1084 # build its own version)
1085 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
1086
1087 # Whether the cppcheck static checker is available
1088 HAVE_CPPCHECK = ${have_cppcheck}
1089
1090 # Whether the getline function is available (if not, then notmuch will
1091 # build its own version)
1092 HAVE_GETLINE = ${have_getline}
1093
1094 # Are the ruby development files (and ruby) available? If not skip
1095 # building/testing ruby bindings.
1096 HAVE_RUBY_DEV = ${have_ruby_dev}
1097
1098 # Whether the strcasestr function is available (if not, then notmuch will
1099 # build its own version)
1100 HAVE_STRCASESTR = ${have_strcasestr}
1101
1102 # Whether the strsep function is available (if not, then notmuch will
1103 # build its own version)
1104 HAVE_STRSEP = ${have_strsep}
1105
1106 # Whether the timegm function is available (if not, then notmuch will
1107 # build its own version)
1108 HAVE_TIMEGM = ${have_timegm}
1109
1110 # Whether struct dirent has d_type (if not, then notmuch will use stat)
1111 HAVE_D_TYPE = ${have_d_type}
1112
1113 # Whether the GMime version can handle extraction and reuse of session keys
1114 HAVE_GMIME_SESSION_KEYS = ${have_gmime_session_keys}
1115
1116 # Whether the Xapian version in use supports compaction
1117 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
1118
1119 # Whether the Xapian version in use supports field processors
1120 HAVE_XAPIAN_FIELD_PROCESSOR = ${have_xapian_field_processor}
1121
1122 # Whether the Xapian version in use supports DB_RETRY_LOCK
1123 HAVE_XAPIAN_DB_RETRY_LOCK = ${have_xapian_db_retry_lock}
1124
1125 # Whether the getpwuid_r function is standards-compliant
1126 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1127 # to enable the standards-compliant version -- needed for Solaris)
1128 STD_GETPWUID = ${std_getpwuid}
1129
1130 # Whether the asctime_r function is standards-compliant
1131 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1132 # to enable the standards-compliant version -- needed for Solaris)
1133 STD_ASCTIME = ${std_asctime}
1134
1135 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
1136 PLATFORM = ${platform}
1137
1138 # Whether the linker will automatically resolve the dependency of one
1139 # library on another (if not, then linking a binary requires linking
1140 # directly against both)
1141 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
1142
1143 # Flags needed to compile and link against Xapian
1144 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
1145 XAPIAN_LDFLAGS = ${xapian_ldflags}
1146
1147 # Which backend will Xapian use by default?
1148 DEFAULT_XAPIAN_BACKEND = ${default_xapian_backend}
1149
1150 # Flags needed to compile and link against GMime
1151 GMIME_CFLAGS = ${gmime_cflags}
1152 GMIME_LDFLAGS = ${gmime_ldflags}
1153
1154 # Flags needed to compile and link against zlib
1155 ZLIB_CFLAGS = ${zlib_cflags}
1156 ZLIB_LDFLAGS = ${zlib_ldflags}
1157
1158 # Flags needed to compile and link against talloc
1159 TALLOC_CFLAGS = ${talloc_cflags}
1160 TALLOC_LDFLAGS = ${talloc_ldflags}
1161
1162 # Flags needed to have linker set rpath attribute
1163 RPATH_LDFLAGS = ${rpath_ldflags}
1164
1165 # Flags needed to have linker link only to necessary libraries
1166 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
1167
1168 # Flags to have the linker flag undefined symbols in object files
1169 NO_UNDEFINED_LDFLAGS = ${no_undefined_ldflags}
1170
1171 # Whether valgrind header files are available
1172 HAVE_VALGRIND = ${have_valgrind}
1173
1174 # And if so, flags needed at compile time for valgrind macros
1175 VALGRIND_CFLAGS = ${valgrind_cflags}
1176
1177 # Support for emacs
1178 WITH_EMACS = ${WITH_EMACS}
1179
1180 # Support for desktop file
1181 WITH_DESKTOP = ${WITH_DESKTOP}
1182
1183 # Support for bash completion
1184 WITH_BASH = ${WITH_BASH}
1185
1186 # Support for zsh completion
1187 WITH_ZSH = ${WITH_ZSH}
1188
1189 # Combined flags for compiling and linking against all of the above
1190 COMMON_CONFIGURE_CFLAGS = \\
1191         \$(GMIME_CFLAGS) \$(TALLOC_CFLAGS) \$(ZLIB_CFLAGS)      \\
1192         -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \$(VALGRIND_CFLAGS)   \\
1193         -DHAVE_GETLINE=\$(HAVE_GETLINE)                         \\
1194         -DWITH_EMACS=\$(WITH_EMACS)                             \\
1195         -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1196         -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)                   \\
1197         -DHAVE_STRSEP=\$(HAVE_STRSEP)                           \\
1198         -DHAVE_TIMEGM=\$(HAVE_TIMEGM)                           \\
1199         -DHAVE_D_TYPE=\$(HAVE_D_TYPE)                           \\
1200         -DSTD_GETPWUID=\$(STD_GETPWUID)                         \\
1201         -DSTD_ASCTIME=\$(STD_ASCTIME)                           \\
1202         -DHAVE_GMIME_SESSION_KEYS=\$(HAVE_GMIME_SESSION_KEYS)   \\
1203         -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT)           \\
1204         -DSILENCE_XAPIAN_DEPRECATION_WARNINGS                   \\
1205         -DHAVE_XAPIAN_FIELD_PROCESSOR=\$(HAVE_XAPIAN_FIELD_PROCESSOR) \\
1206         -DHAVE_XAPIAN_DB_RETRY_LOCK=\$(HAVE_XAPIAN_DB_RETRY_LOCK)
1207
1208 CONFIGURE_CFLAGS = \$(COMMON_CONFIGURE_CFLAGS)
1209
1210 CONFIGURE_CXXFLAGS = \$(COMMON_CONFIGURE_CFLAGS) \$(XAPIAN_CXXFLAGS)
1211
1212 CONFIGURE_LDFLAGS =  \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
1213 EOF
1214
1215 # construct the sh.config
1216 cat > sh.config <<EOF
1217 # This sh.config was automatically generated by the ./configure
1218 # script of notmuch.
1219
1220 NOTMUCH_SRCDIR='${NOTMUCH_SRCDIR}'
1221
1222 # Whether the Xapian version in use supports compaction
1223 NOTMUCH_HAVE_XAPIAN_COMPACT=${have_xapian_compact}
1224
1225 # Whether the Xapian version in use supports field processors
1226 NOTMUCH_HAVE_XAPIAN_FIELD_PROCESSOR=${have_xapian_field_processor}
1227
1228 # Whether the Xapian version in use supports lock retry
1229 NOTMUCH_HAVE_XAPIAN_DB_RETRY_LOCK=${have_xapian_db_retry_lock}
1230
1231 # Whether the GMime version can handle extraction and reuse of session keys
1232 NOTMUCH_HAVE_GMIME_SESSION_KEYS=${have_gmime_session_keys}
1233
1234 # Which backend will Xapian use by default?
1235 NOTMUCH_DEFAULT_XAPIAN_BACKEND=${default_xapian_backend}
1236
1237 # do we have man pages?
1238 NOTMUCH_HAVE_MAN=$((have_sphinx))
1239
1240 # Name of python interpreter
1241 NOTMUCH_PYTHON=${python}
1242
1243 # Name of ruby interpreter
1244 NOTMUCH_RUBY=${RUBY}
1245
1246 # Are the ruby development files (and ruby) available? If not skip
1247 # building/testing ruby bindings.
1248 NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
1249
1250 # Major version of gmime
1251 NOTMUCH_GMIME_MAJOR=${gmime_major}
1252
1253 # Platform we are run on
1254 PLATFORM=${platform}
1255 EOF
1256
1257 # Finally, after everything configured, inform the user how to continue.
1258 cat <<EOF
1259
1260 All required packages were found. You may now run the following
1261 commands to compile and install notmuch:
1262
1263         make
1264         sudo make install
1265
1266 EOF