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