]> git.notmuchmail.org Git - notmuch/blob - configure
1bf523192d31c90b943075660ffeb480f6906c05
[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
482 printf "Checking for GMime development files... "
483 if pkg-config --exists "gmime-3.0"; then
484     printf "Yes (3.0).\n"
485     have_gmime=1
486     gmime_cflags=$(pkg-config --cflags gmime-3.0)
487     gmime_ldflags=$(pkg-config --libs gmime-3.0)
488     gmime_major=3
489     have_gmime_session_keys=1
490 elif pkg-config --exists "gmime-2.6 >= $GMIME_MINVER"; then
491     printf "Yes (2.6).\n"
492     have_gmime=1
493     gmime_cflags=$(pkg-config --cflags gmime-2.6)
494     gmime_ldflags=$(pkg-config --libs gmime-2.6)
495     gmime_major=2
496     if pkg-config --exists "gmime-2.6 >= 2.6.21"; then
497         have_gmime_session_keys=1
498     else
499         have_gmime_session_keys=0
500     fi
501 else
502     have_gmime=0
503     have_gmime_session_keys=0
504     printf "No.\n"
505     errors=$((errors + 1))
506 fi
507
508 # GMime already depends on Glib >= 2.12, but we use at least one Glib
509 # function that only exists as of 2.22, (g_array_unref)
510 printf "Checking for Glib development files (>= 2.22)... "
511 have_glib=0
512 if pkg-config --exists 'glib-2.0 >= 2.22'; then
513     printf "Yes.\n"
514     have_glib=1
515     # these are included in gmime cflags and ldflags
516     # glib_cflags=$(pkg-config --cflags glib-2.0)
517     # glib_ldflags=$(pkg-config --libs glib-2.0)
518 else
519     printf "No.\n"
520     errors=$((errors + 1))
521 fi
522
523 if ! pkg-config --exists zlib; then
524   ${CC} -o compat/gen_zlib_pc "$srcdir"/compat/gen_zlib_pc.c >/dev/null 2>&1 &&
525   compat/gen_zlib_pc > compat/zlib.pc &&
526   PKG_CONFIG_PATH="$PKG_CONFIG_PATH":compat &&
527   export PKG_CONFIG_PATH
528   rm -f compat/gen_zlib_pc
529 fi
530
531 printf "Checking for zlib (>= 1.2.5.2)... "
532 have_zlib=0
533 if pkg-config --atleast-version=1.2.5.2 zlib; then
534     printf "Yes.\n"
535     have_zlib=1
536     zlib_cflags=$(pkg-config --cflags zlib)
537     zlib_ldflags=$(pkg-config --libs zlib)
538 else
539     printf "No.\n"
540     errors=$((errors + 1))
541 fi
542
543 printf "Checking for talloc development files... "
544 if pkg-config --exists talloc; then
545     printf "Yes.\n"
546     have_talloc=1
547     talloc_cflags=$(pkg-config --cflags talloc)
548     talloc_ldflags=$(pkg-config --libs talloc)
549 else
550     printf "No.\n"
551     have_talloc=0
552     talloc_cflags=
553     errors=$((errors + 1))
554 fi
555
556 printf "Checking for python... "
557 have_python=0
558
559 for name in ${PYTHON} python python2 python3; do
560     if command -v $name > /dev/null; then
561         have_python=1
562         python=$name
563         printf "Yes (%s).\n" "$name"
564         break
565     fi
566 done
567
568 if [ $have_python -eq 0 ]; then
569     printf "No.\n"
570     errors=$((errors + 1))
571 fi
572
573 printf "Checking for valgrind development files... "
574 if pkg-config --exists valgrind; then
575     printf "Yes.\n"
576     have_valgrind=1
577     valgrind_cflags=$(pkg-config --cflags valgrind)
578 else
579     printf "No (but that's fine).\n"
580     have_valgrind=0
581     valgrind_cflags=
582 fi
583
584 printf "Checking for bash-completion (>= 1.90)... "
585 if pkg-config --atleast-version=1.90 bash-completion; then
586     printf "Yes.\n"
587 else
588     printf "No (will not install bash completion).\n"
589     WITH_BASH=0
590 fi
591
592 if [ -z "${EMACSLISPDIR-}" ]; then
593     EMACSLISPDIR="\$(prefix)/share/emacs/site-lisp"
594 fi
595
596 if [ -z "${EMACSETCDIR-}" ]; then
597     EMACSETCDIR="\$(prefix)/share/emacs/site-lisp"
598 fi
599
600 printf "Checking if emacs is available... "
601 if emacs --quick --batch > /dev/null 2>&1; then
602     printf "Yes.\n"
603     have_emacs=1
604 else
605     printf "No (so will not byte-compile emacs code)\n"
606     have_emacs=0
607 fi
608
609 have_doxygen=0
610 if [ $WITH_API_DOCS = "1" ] ; then
611     printf "Checking if doxygen is available... "
612     if command -v doxygen > /dev/null; then
613         printf "Yes.\n"
614         have_doxygen=1
615     else
616         printf "No (so will not install api docs)\n"
617     fi
618 fi
619
620 have_ruby_dev=0
621 if [ $WITH_RUBY = "1" ] ; then
622     printf "Checking for ruby development files... "
623     if ruby -e "require 'mkmf'"> /dev/null 2>&1; then
624         printf "Yes.\n"
625         have_ruby_dev=1
626     else
627         printf "No (skipping ruby bindings)\n"
628     fi
629 fi
630
631 have_sphinx=0
632 if [ $WITH_DOCS = "1" ] ; then
633     printf "Checking if sphinx is available and supports nroff output... "
634     if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then
635         printf "Yes.\n"
636         have_sphinx=1
637     else
638         printf "No (so will not install man pages).\n"
639     fi
640 fi
641
642 if [ $WITH_DESKTOP = "1" ]; then
643     printf "Checking if desktop-file-install is available... "
644     if command -v desktop-file-install > /dev/null; then
645         printf "Yes.\n"
646     else
647         printf "No (so will not install .desktop file).\n"
648         WITH_DESKTOP=0
649     fi
650 fi
651
652 printf "Checking for cppcheck... "
653 if command -v cppcheck > /dev/null; then
654     have_cppcheck=1
655     printf "Yes.\n"
656 else
657     have_cppcheck=0
658     printf "No.\n"
659 fi
660
661 libdir_in_ldconfig=0
662
663 printf "Checking which platform we are on... "
664 uname=$(uname)
665 if [ $uname = "Darwin" ] ; then
666     printf "Mac OS X.\n"
667     platform=MACOSX
668     linker_resolves_library_dependencies=0
669 elif [ $uname = "SunOS" ] ; then
670     printf "Solaris.\n"
671     platform=SOLARIS
672     linker_resolves_library_dependencies=0
673 elif [ $uname = "FreeBSD" ] ; then
674     printf "FreeBSD.\n"
675     platform=FREEBSD
676     linker_resolves_library_dependencies=0
677 elif [ $uname = "OpenBSD" ] ; then
678     printf "OpenBSD.\n"
679     platform=OPENBSD
680     linker_resolves_library_dependencies=0
681 elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
682     printf "%s\n" "$uname"
683     platform="$uname"
684     linker_resolves_library_dependencies=1
685
686     printf "Checking for %s in ldconfig... " "$libdir_expanded"
687     ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
688     # Separate ldconfig_paths only on newline (not on any potential
689     # embedded space characters in any filenames). Note, we use a
690     # literal newline in the source here rather than something like:
691     #
692     #   IFS=$(printf '\n')
693     #
694     # because the shell's command substitution deletes any trailing newlines.
695     IFS="
696 "
697     for path in $ldconfig_paths; do
698         if [ "$path" = "$libdir_expanded" ]; then
699             libdir_in_ldconfig=1
700         fi
701     done
702     IFS=$DEFAULT_IFS
703     if [ "$libdir_in_ldconfig" = '0' ]; then
704         printf "No (will set RPATH)\n"
705     else
706         printf "Yes\n"
707     fi
708 else
709     printf "Unknown.\n"
710     platform="$uname"
711     linker_resolves_library_dependencies=0
712     cat <<EOF
713
714 *** Warning: Unknown platform. Notmuch might or might not build correctly.
715
716 EOF
717 fi
718
719 if [ $errors -gt 0 ]; then
720     cat <<EOF
721
722 *** Error: The dependencies of notmuch could not be satisfied. You will
723 need to install the following packages before being able to compile
724 notmuch:
725
726 EOF
727     if [ $have_python -eq 0 ]; then
728         echo "  python interpreter"
729     fi
730     if [ $have_xapian -eq 0 -o $have_xapian_compact -eq 0 ]; then
731         echo "  Xapian library (>= version 1.2.6, including development files such as headers)"
732         echo "  https://xapian.org/"
733     fi
734     if [ $have_zlib -eq 0 ]; then
735         echo "  zlib library (>= version 1.2.5.2, including development files such as headers)"
736         echo "  http://zlib.net/"
737         echo
738     fi
739     if [ $have_gmime -eq 0 ]; then
740         echo "  GMime 2.6 library >= $GMIME_MINVER"
741         echo "  (including development files such as headers)"
742         echo "  http://spruce.sourceforge.net/gmime/"
743         echo
744     fi
745     if [ $have_glib -eq 0 ]; then
746         echo "  Glib library >= 2.22 (including development files such as headers)"
747         echo "  http://ftp.gnome.org/pub/gnome/sources/glib/"
748         echo
749     fi
750     if [ $have_talloc -eq 0 ]; then
751         echo "  The talloc library (including development files such as headers)"
752         echo "  https://talloc.samba.org/"
753         echo
754     fi
755     cat <<EOF
756 With any luck, you're using a modern, package-based operating system
757 that has all of these packages available in the distribution. In that
758 case a simple command will install everything you need. For example:
759
760 On Debian and similar systems:
761
762         sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
763
764 Or on Fedora and similar systems:
765
766         sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
767
768 On other systems, similar commands can be used, but the details of the
769 package names may be different.
770
771 EOF
772     if [ $have_pkg_config -eq 0 ]; then
773 cat <<EOF
774 Note: the pkg-config program is not available. This configure script
775 uses pkg-config to find the compilation flags required to link against
776 the various libraries needed by notmuch. It's possible you simply need
777 to install pkg-config with a command such as:
778
779         sudo apt-get install pkg-config
780 Or:
781         sudo yum install pkgconfig
782
783 But if pkg-config is not available for your system, then you will need
784 to modify the configure script to manually set the cflags and ldflags
785 variables to the correct values to link against each library in each
786 case that pkg-config could not be used to determine those values.
787
788 EOF
789     fi
790 cat <<EOF
791 When you have installed the necessary dependencies, you can run
792 configure again to ensure the packages can be found, or simply run
793 "make" to compile notmuch.
794
795 EOF
796     exit 1
797 fi
798
799 printf "Checking for canonicalize_file_name... "
800 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
801 then
802     printf "Yes.\n"
803     have_canonicalize_file_name=1
804 else
805     printf "No (will use our own instead).\n"
806     have_canonicalize_file_name=0
807 fi
808 rm -f compat/have_canonicalize_file_name
809
810
811 printf "Checking for getline... "
812 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
813 then
814     printf "Yes.\n"
815     have_getline=1
816 else
817     printf "No (will use our own instead).\n"
818     have_getline=0
819 fi
820 rm -f compat/have_getline
821
822 printf "Checking for strcasestr... "
823 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
824 then
825     printf "Yes.\n"
826     have_strcasestr=1
827 else
828     printf "No (will use our own instead).\n"
829     have_strcasestr=0
830 fi
831 rm -f compat/have_strcasestr
832
833 printf "Checking for strsep... "
834 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
835 then
836     printf "Yes.\n"
837     have_strsep="1"
838 else
839     printf "No (will use our own instead).\n"
840     have_strsep="0"
841 fi
842 rm -f compat/have_strsep
843
844 printf "Checking for timegm... "
845 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
846 then
847     printf "Yes.\n"
848     have_timegm="1"
849 else
850     printf "No (will use our own instead).\n"
851     have_timegm="0"
852 fi
853 rm -f compat/have_timegm
854
855 printf "Checking for dirent.d_type... "
856 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
857 then
858     printf "Yes.\n"
859     have_d_type="1"
860 else
861     printf "No (will use stat instead).\n"
862     have_d_type="0"
863 fi
864 rm -f compat/have_d_type
865
866 printf "Checking for standard version of getpwuid_r... "
867 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
868 then
869     printf "Yes.\n"
870     std_getpwuid=1
871 else
872     printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
873     std_getpwuid=0
874 fi
875 rm -f compat/check_getpwuid
876
877 printf "Checking for standard version of asctime_r... "
878 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
879 then
880     printf "Yes.\n"
881     std_asctime=1
882 else
883     printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
884     std_asctime=0
885 fi
886 rm -f compat/check_asctime
887
888 printf "Checking for rpath support... "
889 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
890 then
891     printf "Yes.\n"
892     rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
893 else
894     printf "No (nothing to worry about).\n"
895     rpath_ldflags=""
896 fi
897
898 printf "Checking for -Wl,--as-needed... "
899 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
900 then
901     printf "Yes.\n"
902     as_needed_ldflags="-Wl,--as-needed"
903 else
904     printf "No (nothing to worry about).\n"
905     as_needed_ldflags=""
906 fi
907
908 printf "Checking for -Wl,--no-undefined... "
909 if ${CC} -Wl,--no-undefined -o minimal minimal.c >/dev/null 2>&1
910 then
911     printf "Yes.\n"
912     no_undefined_ldflags="-Wl,--no-undefined"
913 else
914     printf "No (nothing to worry about).\n"
915     no_undefined_ldflags=""
916 fi
917
918 WARN_CXXFLAGS=""
919 printf "Checking for available C++ compiler warning flags... "
920 for flag in -Wall -Wextra -Wwrite-strings; do
921     if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
922     then
923         WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
924     fi
925 done
926 printf "\n\t%s\n" "${WARN_CXXFLAGS}"
927
928 WARN_CFLAGS="${WARN_CXXFLAGS}"
929 printf "Checking for available C compiler warning flags... "
930 for flag in -Wmissing-declarations; do
931     if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
932     then
933         WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
934     fi
935 done
936 printf "\n\t%s\n" "${WARN_CFLAGS}"
937
938 rm -f minimal minimal.c _libversion.c _libversion _libversion.sh
939
940 # construct the Makefile.config
941 cat > Makefile.config <<EOF
942 # This Makefile.config was automatically generated by the ./configure
943 # script of notmuch. If the configure script identified anything
944 # incorrectly, then you can edit this file to try to correct things,
945 # but be warned that if configure is run again it will destroy your
946 # changes, (and this could happen by simply calling "make" if the
947 # configure script is updated).
948
949 # The top-level directory for the source, (the directory containing
950 # the configure script). This may be different than the build
951 # directory (the current directory at the time configure was run).
952 srcdir = ${srcdir}
953 NOTMUCH_SRCDIR = ${NOTMUCH_SRCDIR}
954
955 # subdirectories to build
956 subdirs = ${subdirs}
957
958 configure_options = $@
959
960 # We use vpath directives (rather than the VPATH variable) since the
961 # VPATH variable matches targets as well as prerequisites, (which is
962 # not useful since then a target left-over from a srcdir build would
963 # cause a target to not be built in the non-srcdir build).
964 #
965 # Also, we don't use a single "vpath % \$(srcdir)" here because we
966 # don't want the vpath to trigger for our emacs lisp compilation,
967 # (unless we first find a way to convince emacs to build the .elc
968 # target in a directory other than the directory of the .el
969 # prerequisite). In the meantime, we're actually copying in the .el
970 # files, (which is quite ugly).
971 vpath %.c \$(srcdir)
972 vpath %.cc \$(srcdir)
973 vpath Makefile.% \$(srcdir)
974 vpath %.py \$(srcdir)
975 vpath %.rst \$(srcdir)
976
977 # Library versions (used to make SONAME)
978 # The major version of the library interface. This will control the soname.
979 # As such, this number must be incremented for any incompatible change to
980 # the library interface, (such as the deletion of an API or a major
981 # semantic change that breaks formerly functioning code).
982 #
983 LIBNOTMUCH_VERSION_MAJOR = ${libnotmuch_version_major}
984
985 # The minor version of the library interface. This should be incremented at
986 # the time of release for any additions to the library interface,
987 # (and when it is incremented, the release version of the library should
988 #  be reset to 0).
989 LIBNOTMUCH_VERSION_MINOR = ${libnotmuch_version_minor}
990
991 # The release version the library interface. This should be incremented at
992 # the time of release if there have been no changes to the interface, (but
993 # simply compatible changes to the implementation).
994 LIBNOTMUCH_VERSION_RELEASE = ${libnotmuch_version_release}
995
996 # These are derived from the VERSION macros in lib/notmuch.h so
997 # if you have to change them, something is wrong.
998
999 # The C compiler to use
1000 CC = ${CC}
1001
1002 # The C++ compiler to use
1003 CXX = ${CXX}
1004
1005 # Command to execute emacs from Makefiles
1006 EMACS = emacs --quick
1007
1008 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
1009 CFLAGS = ${CFLAGS}
1010
1011 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
1012 CPPFLAGS = ${CPPFLAGS}
1013
1014 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
1015 CXXFLAGS = ${CXXFLAGS}
1016
1017 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
1018 LDFLAGS = ${LDFLAGS}
1019
1020 # Flags to enable warnings when using the C++ compiler
1021 WARN_CXXFLAGS=${WARN_CXXFLAGS}
1022
1023 # Flags to enable warnings when using the C compiler
1024 WARN_CFLAGS=${WARN_CFLAGS}
1025
1026 # Name of python interpreter
1027 PYTHON = ${python}
1028
1029 # The prefix to which notmuch should be installed
1030 # Note: If you change this value here, be sure to ensure that the
1031 # LIBDIR_IN_LDCONFIG value below is still set correctly.
1032 prefix = ${PREFIX}
1033
1034 # The directory to which libraries should be installed
1035 # Note: If you change this value here, be sure to ensure that the
1036 # LIBDIR_IN_LDCONFIG value below is still set correctly.
1037 libdir = ${LIBDIR:=\$(prefix)/lib}
1038
1039 # Whether libdir is in a path configured into ldconfig
1040 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
1041
1042 # The directory to which header files should be installed
1043 includedir = ${INCLUDEDIR:=\$(prefix)/include}
1044
1045 # The directory to which man pages should be installed
1046 mandir = ${MANDIR:=\$(prefix)/share/man}
1047
1048 # The directory to which read-only (configuration) files should be installed
1049 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
1050
1051 # The directory to which emacs lisp files should be installed
1052 emacslispdir=${EMACSLISPDIR}
1053
1054 # The directory to which emacs miscellaneous (machine-independent) files should
1055 # be installed
1056 emacsetcdir=${EMACSETCDIR}
1057
1058 # Whether there's an emacs binary available for byte-compiling
1059 HAVE_EMACS = ${have_emacs}
1060
1061 # Whether there's a sphinx-build binary available for building documentation
1062 HAVE_SPHINX=${have_sphinx}
1063
1064 # Whether there's a doxygen binary available for building api documentation
1065 HAVE_DOXYGEN=${have_doxygen}
1066
1067 # The directory to which desktop files should be installed
1068 desktop_dir = \$(prefix)/share/applications
1069
1070 # The directory to which bash completions files should be installed
1071 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(prefix)/share/bash-completion/completions}
1072
1073 # The directory to which zsh completions files should be installed
1074 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
1075
1076 # Whether the canonicalize_file_name function is available (if not, then notmuch will
1077 # build its own version)
1078 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
1079
1080 # Whether the cppcheck static checker is available
1081 HAVE_CPPCHECK = ${have_cppcheck}
1082
1083 # Whether the getline function is available (if not, then notmuch will
1084 # build its own version)
1085 HAVE_GETLINE = ${have_getline}
1086
1087 # Are the ruby development files (and ruby) available? If not skip
1088 # building/testing ruby bindings.
1089 HAVE_RUBY_DEV = ${have_ruby_dev}
1090
1091 # Whether the strcasestr function is available (if not, then notmuch will
1092 # build its own version)
1093 HAVE_STRCASESTR = ${have_strcasestr}
1094
1095 # Whether the strsep function is available (if not, then notmuch will
1096 # build its own version)
1097 HAVE_STRSEP = ${have_strsep}
1098
1099 # Whether the timegm function is available (if not, then notmuch will
1100 # build its own version)
1101 HAVE_TIMEGM = ${have_timegm}
1102
1103 # Whether struct dirent has d_type (if not, then notmuch will use stat)
1104 HAVE_D_TYPE = ${have_d_type}
1105
1106 # Whether the GMime version can handle extraction and reuse of session keys
1107 HAVE_GMIME_SESSION_KEYS = ${have_gmime_session_keys}
1108
1109 # Whether the Xapian version in use supports compaction
1110 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
1111
1112 # Whether the Xapian version in use supports field processors
1113 HAVE_XAPIAN_FIELD_PROCESSOR = ${have_xapian_field_processor}
1114
1115 # Whether the Xapian version in use supports DB_RETRY_LOCK
1116 HAVE_XAPIAN_DB_RETRY_LOCK = ${have_xapian_db_retry_lock}
1117
1118 # Whether the getpwuid_r function is standards-compliant
1119 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1120 # to enable the standards-compliant version -- needed for Solaris)
1121 STD_GETPWUID = ${std_getpwuid}
1122
1123 # Whether the asctime_r function is standards-compliant
1124 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1125 # to enable the standards-compliant version -- needed for Solaris)
1126 STD_ASCTIME = ${std_asctime}
1127
1128 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
1129 PLATFORM = ${platform}
1130
1131 # Whether the linker will automatically resolve the dependency of one
1132 # library on another (if not, then linking a binary requires linking
1133 # directly against both)
1134 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
1135
1136 # Flags needed to compile and link against Xapian
1137 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
1138 XAPIAN_LDFLAGS = ${xapian_ldflags}
1139
1140 # Which backend will Xapian use by default?
1141 DEFAULT_XAPIAN_BACKEND = ${default_xapian_backend}
1142
1143 # Flags needed to compile and link against GMime
1144 GMIME_CFLAGS = ${gmime_cflags}
1145 GMIME_LDFLAGS = ${gmime_ldflags}
1146
1147 # Flags needed to compile and link against zlib
1148 ZLIB_CFLAGS = ${zlib_cflags}
1149 ZLIB_LDFLAGS = ${zlib_ldflags}
1150
1151 # Flags needed to compile and link against talloc
1152 TALLOC_CFLAGS = ${talloc_cflags}
1153 TALLOC_LDFLAGS = ${talloc_ldflags}
1154
1155 # Flags needed to have linker set rpath attribute
1156 RPATH_LDFLAGS = ${rpath_ldflags}
1157
1158 # Flags needed to have linker link only to necessary libraries
1159 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
1160
1161 # Flags to have the linker flag undefined symbols in object files
1162 NO_UNDEFINED_LDFLAGS = ${no_undefined_ldflags}
1163
1164 # Whether valgrind header files are available
1165 HAVE_VALGRIND = ${have_valgrind}
1166
1167 # And if so, flags needed at compile time for valgrind macros
1168 VALGRIND_CFLAGS = ${valgrind_cflags}
1169
1170 # Support for emacs
1171 WITH_EMACS = ${WITH_EMACS}
1172
1173 # Support for desktop file
1174 WITH_DESKTOP = ${WITH_DESKTOP}
1175
1176 # Support for bash completion
1177 WITH_BASH = ${WITH_BASH}
1178
1179 # Support for zsh completion
1180 WITH_ZSH = ${WITH_ZSH}
1181
1182 # Combined flags for compiling and linking against all of the above
1183 COMMON_CONFIGURE_CFLAGS = \\
1184         \$(GMIME_CFLAGS) \$(TALLOC_CFLAGS) \$(ZLIB_CFLAGS)      \\
1185         -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \$(VALGRIND_CFLAGS)   \\
1186         -DHAVE_GETLINE=\$(HAVE_GETLINE)                         \\
1187         -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1188         -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)                   \\
1189         -DHAVE_STRSEP=\$(HAVE_STRSEP)                           \\
1190         -DHAVE_TIMEGM=\$(HAVE_TIMEGM)                           \\
1191         -DHAVE_D_TYPE=\$(HAVE_D_TYPE)                           \\
1192         -DSTD_GETPWUID=\$(STD_GETPWUID)                         \\
1193         -DSTD_ASCTIME=\$(STD_ASCTIME)                           \\
1194         -DHAVE_GMIME_SESSION_KEYS=\$(HAVE_GMIME_SESSION_KEYS)   \\
1195         -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT)           \\
1196         -DSILENCE_XAPIAN_DEPRECATION_WARNINGS                   \\
1197         -DHAVE_XAPIAN_FIELD_PROCESSOR=\$(HAVE_XAPIAN_FIELD_PROCESSOR) \\
1198         -DHAVE_XAPIAN_DB_RETRY_LOCK=\$(HAVE_XAPIAN_DB_RETRY_LOCK)
1199
1200 CONFIGURE_CFLAGS = \$(COMMON_CONFIGURE_CFLAGS)
1201
1202 CONFIGURE_CXXFLAGS = \$(COMMON_CONFIGURE_CFLAGS) \$(XAPIAN_CXXFLAGS)
1203
1204 CONFIGURE_LDFLAGS =  \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
1205 EOF
1206
1207 # construct the sh.config
1208 cat > sh.config <<EOF
1209 # This sh.config was automatically generated by the ./configure
1210 # script of notmuch.
1211
1212 NOTMUCH_SRCDIR='${NOTMUCH_SRCDIR}'
1213
1214 # Whether the Xapian version in use supports compaction
1215 NOTMUCH_HAVE_XAPIAN_COMPACT=${have_xapian_compact}
1216
1217 # Whether the Xapian version in use supports field processors
1218 NOTMUCH_HAVE_XAPIAN_FIELD_PROCESSOR=${have_xapian_field_processor}
1219
1220 # Whether the Xapian version in use supports lock retry
1221 NOTMUCH_HAVE_XAPIAN_DB_RETRY_LOCK=${have_xapian_db_retry_lock}
1222
1223 # Whether the GMime version can handle extraction and reuse of session keys
1224 NOTMUCH_HAVE_GMIME_SESSION_KEYS=${have_gmime_session_keys}
1225
1226 # Which backend will Xapian use by default?
1227 NOTMUCH_DEFAULT_XAPIAN_BACKEND=${default_xapian_backend}
1228
1229 # do we have man pages?
1230 NOTMUCH_HAVE_MAN=$((have_sphinx))
1231
1232 # Name of python interpreter
1233 NOTMUCH_PYTHON=${python}
1234
1235 # Are the ruby development files (and ruby) available? If not skip
1236 # building/testing ruby bindings.
1237 NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
1238
1239 # Major version of gmime
1240 NOTMUCH_GMIME_MAJOR=${gmime_major}
1241
1242 # Platform we are run on
1243 PLATFORM=${platform}
1244 EOF
1245
1246 # Finally, after everything configured, inform the user how to continue.
1247 cat <<EOF
1248
1249 All required packages were found. You may now run the following
1250 commands to compile and install notmuch:
1251
1252         make
1253         sudo make install
1254
1255 EOF