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