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