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