]> git.notmuchmail.org Git - notmuch/blob - configure
debian: add changelog stanza for 0.18.2-1
[notmuch] / configure
1 #! /bin/sh
2
3 # Test whether this shell is capable of parameter substring processing.
4 ( option='a/b'; : ${option#*/} ) 2>/dev/null || {
5     echo "
6 The shell interpreting '$0' is lacking some required features.
7
8 To work around this problem you may try to execute:
9
10     ksh $0 $*
11  or
12     bash $0 $*
13 "
14     exit 1
15 }
16
17 # Store original IFS value so it can be changed (and restored) in many places.
18 readonly DEFAULT_IFS="$IFS"
19
20 srcdir=$(dirname "$0")
21
22 subdirs="util compat lib parse-time-string completion doc emacs"
23 subdirs="${subdirs} performance-test test test/test-databases"
24
25 # For a non-srcdir configure invocation (such as ../configure), create
26 # the directory structure and copy Makefiles.
27 if [ "$srcdir" != "." ]; then
28
29     for dir in . ${subdirs}; do
30         mkdir -p "$dir"
31         cp "$srcdir"/"$dir"/Makefile.local "$dir"
32         cp "$srcdir"/"$dir"/Makefile "$dir"
33     done
34
35     # Easiest way to get the test suite to work is to just copy the
36     # whole thing into the build directory.
37     cp -a "$srcdir"/test/* test
38
39     # Emacs only likes to generate compiled files next to the .el files
40     # by default so copy these as well (which is not ideal0.
41     cp -a "$srcdir"/emacs/*.el emacs
42 fi
43
44 # Set several defaults (optionally specified by the user in
45 # environment variables)
46 CC=${CC:-gcc}
47 CXX=${CXX:-g++}
48 CFLAGS=${CFLAGS:--O2}
49 CPPFLAGS=${CPPFLAGS:-}
50 CXXFLAGS=${CXXFLAGS:-\$(CFLAGS)}
51 LDFLAGS=${LDFLAGS:-}
52 XAPIAN_CONFIG=${XAPIAN_CONFIG:-xapian-config}
53
54 # We don't allow the EMACS or GZIP Makefile variables inherit values
55 # from the environment as we do with CC and CXX above. The reason is
56 # that these names as environment variables have existing uses other
57 # than the program name that we want. (EMACS is set to 't' when a
58 # shell is running within emacs and GZIP specifies arguments to pass
59 # on the gzip command line).
60
61 # Set the defaults for values the user can specify with command-line
62 # options.
63 PREFIX=/usr/local
64 LIBDIR=
65 WITH_EMACS=1
66 WITH_BASH=1
67 WITH_ZSH=1
68
69 # Compatible GMime versions (with constraints).
70 # If using GMime 2.6, we need to have a version >= 2.6.5 to avoid a
71 # crypto bug. We need 2.6.7 for permissive "From " header handling.
72 GMIME_24_VERSION_CTR=''
73 GMIME_24_VERSION="gmime-2.4 $GMIME_24_VERSION_CTR"
74 GMIME_26_VERSION_CTR='>= 2.6.7'
75 GMIME_26_VERSION="gmime-2.6 $GMIME_26_VERSION_CTR"
76
77 WITH_GMIME_VERSIONS="$GMIME_26_VERSION;$GMIME_24_VERSION"
78
79 usage ()
80 {
81     cat <<EOF
82 Usage: ./configure [options]...
83
84 This script configures notmuch to build on your system.
85
86 It verifies that dependencies are available, determines flags needed
87 to compile and link against various required libraries, and identifies
88 whether various system functions can be used or if locally-provided
89 replacements will be built instead.
90
91 Finally, it allows you to control various aspects of the build and
92 installation process.
93
94 First, some common variables can specified via environment variables:
95
96         CC              The C compiler to use
97         CFLAGS          Flags to pass to the C compiler
98         CPPFLAGS        Flags to pass to the C preprocessor
99         CXX             The C++ compiler to use
100         CXXFLAGS        Flags to pass to the C compiler
101         LDFLAGS         Flags to pass when linking
102
103 Each of these values can further be controlled by specifying them
104 later on the "make" command line.
105
106 Other environment variables can be used to control configure itself,
107 (and for which there is no equivalent build-time control):
108
109         XAPIAN_CONFIG   The program to use to determine flags for
110                         compiling and linking against the Xapian
111                         library. [$XAPIAN_CONFIG]
112
113 Additionally, various options can be specified on the configure
114 command line.
115
116         --prefix=PREFIX Install files in PREFIX [$PREFIX]
117
118 By default, "make install" will install the resulting program to
119 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
120 specify an installation prefix other than $PREFIX using
121 --prefix, for instance:
122
123         ./configure --prefix=\$HOME
124
125 Fine tuning of some installation directories is available:
126
127         --libdir=DIR            Install libraries to DIR [PREFIX/lib]
128         --includedir=DIR        Install header files to DIR [PREFIX/include]
129         --mandir=DIR            Install man pages to DIR [PREFIX/share/man]
130         --sysconfdir=DIR        Read-only single-machine data [PREFIX/etc]
131         --emacslispdir=DIR      Emacs code [PREFIX/share/emacs/site-lisp]
132         --emacsetcdir=DIR       Emacs miscellaneous files [PREFIX/share/emacs/site-lisp]
133         --bashcompletiondir=DIR Bash completions files [SYSCONFDIR/bash_completion.d]
134         --zshcompletiondir=DIR  Zsh completions files [PREFIX/share/zsh/functions/Completion/Unix]
135
136 Some specific library versions can be specified (auto-detected otherwise):
137
138         --with-gmime-version=VERS       Specify GMIME version (2.4 or 2.6)
139
140 Some features can be disabled (--with-feature=no is equivalent to
141 --without-feature) :
142
143         --without-emacs                 Do not install lisp file
144         --without-bash-completion       Do not install bash completions files
145         --without-zsh-completion        Do not install zsh completions files
146
147 Additional options are accepted for compatibility with other
148 configure-script calling conventions, but don't do anything yet:
149
150         --build=<cpu>-<vendor>-<os>     Currently ignored
151         --host=<cpu>-<vendor>-<os>      Currently ignored
152         --infodir=DIR                   Currently ignored
153         --datadir=DIR                   Currently ignored
154         --localstatedir=DIR             Currently ignored
155         --libexecdir=DIR                Currently ignored
156         --disable-maintainer-mode       Currently ignored
157         --disable-dependency-tracking   Currently ignored
158
159 EOF
160 }
161
162 # Parse command-line options
163 for option; do
164     if [ "${option}" = '--help' ] ; then
165         usage
166         exit 0
167     elif [ "${option%%=*}" = '--prefix' ] ; then
168         PREFIX="${option#*=}"
169     elif [ "${option%%=*}" = '--libdir' ] ; then
170         LIBDIR="${option#*=}"
171     elif [ "${option%%=*}" = '--includedir' ] ; then
172         INCLUDEDIR="${option#*=}"
173     elif [ "${option%%=*}" = '--mandir' ] ; then
174         MANDIR="${option#*=}"
175     elif [ "${option%%=*}" = '--sysconfdir' ] ; then
176         SYSCONFDIR="${option#*=}"
177     elif [ "${option%%=*}" = '--emacslispdir' ] ; then
178         EMACSLISPDIR="${option#*=}"
179     elif [ "${option%%=*}" = '--emacsetcdir' ] ; then
180         EMACSETCDIR="${option#*=}"
181     elif [ "${option%%=*}" = '--bashcompletiondir' ] ; then
182         BASHCOMPLETIONDIR="${option#*=}"
183     elif [ "${option%%=*}" = '--zshcompletiondir' ] ; then
184         ZSHCOMLETIONDIR="${option#*=}"
185     elif [ "${option%%=*}" = '--with-emacs' ]; then
186         if [ "${option#*=}" = 'no' ]; then
187             WITH_EMACS=0
188         else
189             WITH_EMACS=1
190         fi
191     elif [ "${option}" = '--without-emacs' ] ; then
192         WITH_EMACS=0
193     elif [ "${option%%=*}" = '--with-bash-completion' ]; then
194         if [ "${option#*=}" = 'no' ]; then
195             WITH_BASH=0
196         else
197             WITH_BASH=1
198         fi
199     elif [ "${option}" = '--without-bash-completion' ] ; then
200         WITH_BASH=0
201     elif [ "${option%%=*}" = '--with-zsh-completion' ]; then
202         if [ "${option#*=}" = 'no' ]; then
203             WITH_ZSH=0
204         else
205             WITH_ZSH=1
206         fi
207     elif [ "${option}" = '--without-zsh-completion' ] ; then
208         WITH_ZSH=0
209     elif [ "${option%%=*}" = '--with-gmime-version' ] ; then
210         if [ "${option#*=}" = '2.4' ]; then
211              WITH_GMIME_VERSIONS=$GMIME_24_VERSION
212          elif [ "${option#*=}" = '2.6' ]; then
213              WITH_GMIME_VERSIONS=$GMIME_26_VERSION
214         fi
215     elif [ "${option%%=*}" = '--build' ] ; then
216         true
217     elif [ "${option%%=*}" = '--host' ] ; then
218         true
219     elif [ "${option%%=*}" = '--infodir' ] ; then
220         true
221     elif [ "${option%%=*}" = '--datadir' ] ; then
222         true
223     elif [ "${option%%=*}" = '--localstatedir' ] ; then
224         true
225     elif [ "${option%%=*}" = '--libexecdir' ] ; then
226         true
227     elif [ "${option}" = '--disable-maintainer-mode' ] ; then
228         true
229     elif [ "${option}" = '--disable-dependency-tracking' ] ; then
230         true
231     else
232         echo "Unrecognized option: ${option}"
233         echo "See:"
234         echo "  $0 --help"
235         echo ""
236         exit 1
237     fi
238 done
239
240 # We set this value early, (rather than just while printing the
241 # Makefile.config file later like most values), because we need to
242 # actually investigate this value compared to the ldconfig_paths value
243 # below.
244 if [ -z "$LIBDIR" ] ; then
245     libdir_expanded="${PREFIX}/lib"
246 else
247     # very non-general variable expansion
248     libdir_expanded=`echo "$LIBDIR" | sed "s|\\${prefix}|${PREFIX}|g; s|\\$prefix/|${PREFIX}/|; s|//*|/|g"`
249 fi
250
251 cat <<EOF
252 Welcome to Notmuch, a system for indexing, searching and tagging your email.
253
254 We hope that the process of building and installing notmuch is quick
255 and smooth so that you can soon be reading and processing your email
256 more efficiently than ever.
257
258 If anything goes wrong in the configure process, you can override any
259 decisions it makes by manually editing the Makefile.config file that
260 it creates. Also please do as much as you can to figure out what could
261 be different on your machine compared to those of the notmuch
262 developers. Then, please email those details to the Notmuch list
263 (notmuch@notmuchmail.org) so that we can hopefully make future
264 versions of notmuch easier for you to use.
265
266 We'll now investigate your system to verify that all required
267 dependencies are available:
268
269 EOF
270
271 errors=0
272
273 if pkg-config --version > /dev/null 2>&1; then
274     have_pkg_config=1
275 else
276     have_pkg_config=0
277 fi
278
279 printf "Checking for Xapian development files... "
280 have_xapian=0
281 for xapian_config in ${XAPIAN_CONFIG}; do
282     if ${xapian_config} --version > /dev/null 2>&1; then
283         xapian_version=$(${xapian_config} --version | sed -e 's/.* //')
284         printf "Yes (%s).\n" ${xapian_version}
285         have_xapian=1
286         xapian_cxxflags=$(${xapian_config} --cxxflags)
287         xapian_ldflags=$(${xapian_config} --libs)
288         break
289     fi
290 done
291 if [ ${have_xapian} = "0" ]; then
292     printf "No.\n"
293     errors=$((errors + 1))
294 fi
295
296 # Compaction is only supported on Xapian > 1.2.6
297 have_xapian_compact=0
298 if [ ${have_xapian} = "1" ]; then
299     printf "Checking for Xapian compaction support... "
300     case "${xapian_version}" in
301         0.*|1.[01].*|1.2.[0-5])
302             printf "No (only available with Xapian > 1.2.6).\n" ;;
303         [1-9]*.[0-9]*.[0-9]*)
304             have_xapian_compact=1
305             printf "Yes.\n" ;;
306         *)
307             printf "Unknown version.\n" ;;
308     esac
309 fi
310
311 printf "Checking for GMime development files... "
312 have_gmime=0
313 IFS=';'
314 for gmimepc in $WITH_GMIME_VERSIONS; do
315     if pkg-config --exists $gmimepc; then
316         printf "Yes ($gmimepc).\n"
317         have_gmime=1
318         gmime_cflags=$(pkg-config --cflags $gmimepc)
319         gmime_ldflags=$(pkg-config --libs $gmimepc)
320         break
321     fi
322 done
323 IFS=$DEFAULT_IFS
324 if [ "$have_gmime" = "0" ]; then
325     printf "No.\n"
326     errors=$((errors + 1))
327 fi
328
329 # GMime already depends on Glib >= 2.12, but we use at least one Glib
330 # function that only exists as of 2.22, (g_array_unref)
331 printf "Checking for Glib development files (>= 2.22)... "
332 have_glib=0
333 if pkg-config --exists 'glib-2.0 >= 2.22'; then
334     printf "Yes.\n"
335     have_glib=1
336     glib_cflags=$(pkg-config --cflags glib-2.0)
337     glib_ldflags=$(pkg-config --libs glib-2.0)
338 else
339     printf "No.\n"
340     errors=$((errors + 1))
341 fi
342
343 if ! pkg-config --exists zlib; then
344   ${CC} ${zlib_cflags} -o compat/gen_zlib_pc \
345           "$srcdir"/compat/gen_zlib_pc.c ${zlib_ldflags} > /dev/null 2>&1 &&
346   compat/gen_zlib_pc > compat/zlib.pc &&
347   PKG_CONFIG_PATH="$PKG_CONFIG_PATH":compat &&
348   export PKG_CONFIG_PATH
349   rm -f compat/gen_zlib_pc
350 fi
351
352 printf "Checking for zlib (>= 1.2.5.2)... "
353 have_zlib=0
354 if pkg-config --atleast-version=1.2.5.2 zlib; then
355     printf "Yes.\n"
356     have_zlib=1
357     zlib_cflags=$(pkg-config --cflags zlib)
358     zlib_ldflags=$(pkg-config --libs zlib)
359 else
360     printf "No.\n"
361     errors=$((errors + 1))
362 fi
363
364 printf "Checking for talloc development files... "
365 if pkg-config --exists talloc; then
366     printf "Yes.\n"
367     have_talloc=1
368     talloc_cflags=$(pkg-config --cflags talloc)
369     talloc_ldflags=$(pkg-config --libs talloc)
370 else
371     printf "No.\n"
372     have_talloc=0
373     talloc_cflags=
374     errors=$((errors + 1))
375 fi
376
377 printf "Checking for valgrind development files... "
378 if pkg-config --exists valgrind; then
379     printf "Yes.\n"
380     have_valgrind=1
381     valgrind_cflags=$(pkg-config --cflags valgrind)
382 else
383     printf "No (but that's fine).\n"
384     have_valgrind=0
385 fi
386
387 printf "Checking for bash-completion (>= 1.90)... "
388 if pkg-config --atleast-version=1.90 bash-completion; then
389     printf "Yes.\n"
390 else
391     printf "No (will not install bash completion).\n"
392     WITH_BASH=0
393 fi
394
395 if [ -z "${EMACSLISPDIR}" ]; then
396     if pkg-config --exists emacs; then
397         EMACSLISPDIR=$(pkg-config emacs --variable sitepkglispdir)
398     else
399         EMACSLISPDIR='$(prefix)/share/emacs/site-lisp'
400     fi
401 fi
402
403 if [ -z "${EMACSETCDIR}" ]; then
404     if pkg-config --exists emacs; then
405         EMACSETCDIR=$(pkg-config emacs --variable sitepkglispdir)
406     else
407         EMACSETCDIR='$(prefix)/share/emacs/site-lisp'
408     fi
409 fi
410
411 printf "Checking if emacs is available... "
412 if emacs --quick --batch > /dev/null 2>&1; then
413     printf "Yes.\n"
414     have_emacs=1
415 else
416     printf "No (so will not byte-compile emacs code)\n"
417     have_emacs=0
418 fi
419
420 printf "Checking if sphinx is available and supports nroff output... "
421 if hash sphinx-build > /dev/null 2>&1 && python -m sphinx.writers.manpage > /dev/null 2>&1 ; then
422     printf "Yes.\n"
423     have_sphinx=1
424     have_rst2man=0
425 else
426     printf "No (falling back to rst2man).\n"
427     have_sphinx=0
428
429     printf "Checking if rst2man is available... "
430     if rst2man -V > /dev/null 2>&1; then
431        printf "Yes.\n"
432        have_rst2man=1
433     else
434        printf "No (so will not install man pages).\n"
435        have_rst2man=0
436     fi
437 fi
438
439 libdir_in_ldconfig=0
440
441 printf "Checking which platform we are on... "
442 uname=`uname`
443 if [ $uname = "Darwin" ] ; then
444     printf "Mac OS X.\n"
445     platform=MACOSX
446     linker_resolves_library_dependencies=0
447 elif [ $uname = "SunOS" ] ; then
448     printf "Solaris.\n"
449     platform=SOLARIS
450     linker_resolves_library_dependencies=0
451 elif [ $uname = "FreeBSD" ] ; then
452     printf "FreeBSD.\n"
453     platform=FREEBSD
454     linker_resolves_library_dependencies=0
455 elif [ $uname = "OpenBSD" ] ; then
456     printf "OpenBSD.\n"
457     platform=OPENBSD
458     linker_resolves_library_dependencies=0
459 elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
460     printf "$uname\n"
461     platform="$uname"
462     linker_resolves_library_dependencies=1
463
464     printf "Checking for $libdir_expanded in ldconfig... "
465     ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
466     # Separate ldconfig_paths only on newline (not on any potential
467     # embedded space characters in any filenames). Note, we use a
468     # literal newline in the source here rather than something like:
469     #
470     #   IFS=$(printf '\n')
471     #
472     # because the shell's command substitution deletes any trailing newlines.
473     IFS="
474 "
475     for path in $ldconfig_paths; do
476         if [ "$path" = "$libdir_expanded" ]; then
477             libdir_in_ldconfig=1
478         fi
479     done
480     IFS=$DEFAULT_IFS
481     if [ "$libdir_in_ldconfig" = '0' ]; then
482         printf "No (will set RPATH)\n"
483     else
484         printf "Yes\n"
485     fi
486 else
487     printf "Unknown.\n"
488     cat <<EOF
489
490 *** Warning: Unknown platform. Notmuch might or might not build correctly.
491
492 EOF
493 fi
494
495 printf "Checking byte order... "
496 cat> _byteorder.c <<EOF
497 #include <stdio.h>
498 #include <stdint.h>
499 uint32_t test = 0x34333231;
500 int main() { printf("%.4s\n", (const char*)&test); return 0; }
501 EOF
502 ${CC} ${CFLAGS} _byteorder.c -o _byteorder > /dev/null 2>&1
503 util_byte_order=$(./_byteorder)
504 echo $util_byte_order
505
506 rm -f _byteorder _byteorder.c
507
508 if [ $errors -gt 0 ]; then
509     cat <<EOF
510
511 *** Error: The dependencies of notmuch could not be satisfied. You will
512 need to install the following packages before being able to compile
513 notmuch:
514
515 EOF
516     if [ $have_xapian -eq 0 ]; then
517         echo "  Xapian library (including development files such as headers)"
518         echo "  http://xapian.org/"
519     fi
520     if [ $have_zlib -eq 0 ]; then
521         echo "  zlib library (>= version 1.2.5.2, including development files such as headers)"
522         echo "  http://zlib.net/"
523         echo
524     fi
525     if [ $have_gmime -eq 0 ]; then
526         echo "  Either GMime 2.4 library" $GMIME_24_VERSION_CTR "or GMime 2.6 library" $GMIME_26_VERSION_CTR
527         echo "  (including development files such as headers)"
528         echo "  http://spruce.sourceforge.net/gmime/"
529         echo
530     fi
531     if [ $have_glib -eq 0 ]; then
532         echo "  Glib library >= 2.22 (including development files such as headers)"
533         echo "  http://ftp.gnome.org/pub/gnome/sources/glib/"
534         echo
535     fi
536     if [ $have_talloc -eq 0 ]; then
537         echo "  The talloc library (including development files such as headers)"
538         echo "  http://talloc.samba.org/"
539         echo
540     fi
541     cat <<EOF
542 With any luck, you're using a modern, package-based operating system
543 that has all of these packages available in the distribution. In that
544 case a simple command will install everything you need. For example:
545
546 On Debian and similar systems:
547
548         sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
549
550 Or on Fedora and similar systems:
551
552         sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
553
554 On other systems, similar commands can be used, but the details of the
555 package names may be different.
556
557 EOF
558     if [ $have_pkg_config -eq 0 ]; then
559 cat <<EOF
560 Note: the pkg-config program is not available. This configure script
561 uses pkg-config to find the compilation flags required to link against
562 the various libraries needed by notmuch. It's possible you simply need
563 to install pkg-config with a command such as:
564
565         sudo apt-get install pkg-config
566 Or:
567         sudo yum install pkgconfig
568
569 But if pkg-config is not available for your system, then you will need
570 to modify the configure script to manually set the cflags and ldflags
571 variables to the correct values to link against each library in each
572 case that pkg-config could not be used to determine those values.
573
574 EOF
575     fi
576 cat <<EOF
577 When you have installed the necessary dependencies, you can run
578 configure again to ensure the packages can be found, or simply run
579 "make" to compile notmuch.
580
581 EOF
582     exit 1
583 fi
584
585 printf "Checking for canonicalize_file_name... "
586 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
587 then
588     printf "Yes.\n"
589     have_canonicalize_file_name=1
590 else
591     printf "No (will use our own instead).\n"
592     have_canonicalize_file_name=0
593 fi
594 rm -f compat/have_canonicalize_file_name
595
596
597 printf "Checking for getline... "
598 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
599 then
600     printf "Yes.\n"
601     have_getline=1
602 else
603     printf "No (will use our own instead).\n"
604     have_getline=0
605 fi
606 rm -f compat/have_getline
607
608 printf "Checking for strcasestr... "
609 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
610 then
611     printf "Yes.\n"
612     have_strcasestr=1
613 else
614     printf "No (will use our own instead).\n"
615     have_strcasestr=0
616 fi
617 rm -f compat/have_strcasestr
618
619 printf "Checking for strsep... "
620 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
621 then
622     printf "Yes.\n"
623     have_strsep="1"
624 else
625     printf "No (will use our own instead).\n"
626     have_strsep="0"
627 fi
628 rm -f compat/have_strsep
629
630 printf "Checking for timegm... "
631 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
632 then
633     printf "Yes.\n"
634     have_timegm="1"
635 else
636     printf "No (will use our own instead).\n"
637     have_timegm="0"
638 fi
639 rm -f compat/have_timegm
640
641 printf "Checking for dirent.d_type... "
642 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
643 then
644     printf "Yes.\n"
645     have_d_type="1"
646 else
647     printf "No (will use stat instead).\n"
648     have_d_type="0"
649 fi
650 rm -f compat/have_d_type
651
652 printf "Checking for standard version of getpwuid_r... "
653 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
654 then
655     printf "Yes.\n"
656     std_getpwuid=1
657 else
658     printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
659     std_getpwuid=0
660 fi
661 rm -f compat/check_getpwuid
662
663 printf "Checking for standard version of asctime_r... "
664 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
665 then
666     printf "Yes.\n"
667     std_asctime=1
668 else
669     printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
670     std_asctime=0
671 fi
672 rm -f compat/check_asctime
673
674 printf "int main(void){return 0;}\n" > minimal.c
675
676 printf "Checking for rpath support... "
677 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
678 then
679     printf "Yes.\n"
680     rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
681 else
682     printf "No (nothing to worry about).\n"
683     rpath_ldflags=""
684 fi
685
686 printf "Checking for -Wl,--as-needed... "
687 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
688 then
689     printf "Yes.\n"
690     as_needed_ldflags="-Wl,--as-needed"
691 else
692     printf "No (nothing to worry about).\n"
693     as_needed_ldflags=""
694 fi
695
696 WARN_CXXFLAGS=""
697 printf "Checking for available C++ compiler warning flags... "
698 for flag in -Wall -Wextra -Wwrite-strings; do
699     if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
700     then
701         WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
702     fi
703 done
704 printf "\n\t${WARN_CXXFLAGS}\n"
705
706 WARN_CFLAGS="${WARN_CXXFLAGS}"
707 printf "Checking for available C compiler warning flags... "
708 for flag in -Wmissing-declarations; do
709     if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
710     then
711         WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
712     fi
713 done
714 printf "\n\t${WARN_CFLAGS}\n"
715
716 rm -f minimal minimal.c
717
718 cat <<EOF
719
720 All required packages were found. You may now run the following
721 commands to compile and install notmuch:
722
723         make
724         sudo make install
725
726 EOF
727
728 # construct the Makefile.config
729 cat > Makefile.config <<EOF
730 # This Makefile.config was automatically generated by the ./configure
731 # script of notmuch. If the configure script identified anything
732 # incorrectly, then you can edit this file to try to correct things,
733 # but be warned that if configure is run again it will destroy your
734 # changes, (and this could happen by simply calling "make" if the
735 # configure script is updated).
736
737 # The top-level directory for the source, (the directory containing
738 # the configure script). This may be different than the build
739 # directory (the current directory at the time configure was run).
740 srcdir = ${srcdir}
741
742 # subdirectories to build
743 subdirs = ${subdirs}
744
745 configure_options = $@
746
747 # We use vpath directives (rather than the VPATH variable) since the
748 # VPATH variable matches targets as well as prerequisites, (which is
749 # not useful since then a target left-over from a srcdir build would
750 # cause a target to not be built in the non-srcdir build).
751 #
752 # Also, we don't use a single "vpath % \$(srcdir)" here because we
753 # don't want the vpath to trigger for our emacs lisp compilation,
754 # (unless we first find a way to convince emacs to build the .elc
755 # target in a directory other than the directory of the .el
756 # prerequisite). In the meantime, we're actually copying in the .el
757 # files, (which is quite ugly).
758 vpath %.c \$(srcdir)
759 vpath %.cc \$(srcdir)
760 vpath Makefile.% \$(srcdir)
761 vpath %.py \$(srcdir)
762 vpath %.rst \$(srcdir)
763
764 # The C compiler to use
765 CC = ${CC}
766
767 # The C++ compiler to use
768 CXX = ${CXX}
769
770 # Command to execute emacs from Makefiles
771 EMACS = emacs --quick
772
773 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
774 CFLAGS = ${CFLAGS}
775
776 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
777 CPPFLAGS = ${CPPFLAGS}
778
779 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
780 CXXFLAGS = ${CXXFLAGS}
781
782 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
783 LDFLAGS = ${LDFLAGS}
784
785 # Flags to enable warnings when using the C++ compiler
786 WARN_CXXFLAGS=${WARN_CXXFLAGS}
787
788 # Flags to enable warnings when using the C compiler
789 WARN_CFLAGS=${WARN_CFLAGS}
790
791 # The prefix to which notmuch should be installed
792 # Note: If you change this value here, be sure to ensure that the
793 # LIBDIR_IN_LDCONFIG value below is still set correctly.
794 prefix = ${PREFIX}
795
796 # The directory to which libraries should be installed
797 # Note: If you change this value here, be sure to ensure that the
798 # LIBDIR_IN_LDCONFIG value below is still set correctly.
799 libdir = ${LIBDIR:=\$(prefix)/lib}
800
801 # byte order within a 32 bit word. 1234 = little, 4321 = big, 0 = guess
802 UTIL_BYTE_ORDER = ${util_byte_order}
803
804 # Whether libdir is in a path configured into ldconfig
805 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
806
807 # The directory to which header files should be installed
808 includedir = ${INCLUDEDIR:=\$(prefix)/include}
809
810 # The directory to which man pages should be installed
811 mandir = ${MANDIR:=\$(prefix)/share/man}
812
813 # The directory to which read-only (configuration) files should be installed
814 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
815
816 # The directory to which emacs lisp files should be installed
817 emacslispdir=${EMACSLISPDIR}
818
819 # The directory to which emacs miscellaneous (machine-independent) files should
820 # be installed
821 emacsetcdir=${EMACSETCDIR}
822
823 # Whether there's an emacs binary available for byte-compiling
824 HAVE_EMACS = ${have_emacs}
825
826 # Whether there's a sphinx-build binary available for building documentation
827 HAVE_SPHINX=${have_sphinx}
828
829 # Whether there's a rst2man binary available for building documentation
830 HAVE_RST2MAN=${have_rst2man}
831
832 # The directory to which desktop files should be installed
833 desktop_dir = \$(prefix)/share/applications
834
835 # The directory to which bash completions files should be installed
836 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(sysconfdir)/bash_completion.d}
837
838 # The directory to which zsh completions files should be installed
839 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
840
841 # Whether the canonicalize_file_name function is available (if not, then notmuch will
842 # build its own version)
843 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
844
845 # Whether the getline function is available (if not, then notmuch will
846 # build its own version)
847 HAVE_GETLINE = ${have_getline}
848
849 # Whether the strcasestr function is available (if not, then notmuch will
850 # build its own version)
851 HAVE_STRCASESTR = ${have_strcasestr}
852
853 # Whether the strsep function is available (if not, then notmuch will
854 # build its own version)
855 HAVE_STRSEP = ${have_strsep}
856
857 # Whether struct dirent has d_type (if not, then notmuch will use stat)
858 HAVE_D_TYPE = ${have_d_type}
859
860 # Whether the Xapian version in use supports compaction
861 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
862
863 # Whether the getpwuid_r function is standards-compliant
864 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
865 # to enable the standards-compliant version -- needed for Solaris)
866 STD_GETPWUID = ${std_getpwuid}
867
868 # Whether the asctime_r function is standards-compliant
869 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
870 # to enable the standards-compliant version -- needed for Solaris)
871 STD_ASCTIME = ${std_asctime}
872
873 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
874 PLATFORM = ${platform}
875
876 # Whether the linker will automatically resolve the dependency of one
877 # library on another (if not, then linking a binary requires linking
878 # directly against both)
879 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
880
881 # Flags needed to compile and link against Xapian
882 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
883 XAPIAN_LDFLAGS = ${xapian_ldflags}
884
885 # Flags needed to compile and link against GMime-2.4
886 GMIME_CFLAGS = ${gmime_cflags}
887 GMIME_LDFLAGS = ${gmime_ldflags}
888
889 # Flags needed to compile and link against zlib
890 ZLIB_CFLAGS = ${zlib_cflags}
891 ZLIB_LDFLAGS = ${zlib_ldflags}
892
893 # Flags needed to compile and link against talloc
894 TALLOC_CFLAGS = ${talloc_cflags}
895 TALLOC_LDFLAGS = ${talloc_ldflags}
896
897 # Flags needed to have linker set rpath attribute
898 RPATH_LDFLAGS = ${rpath_ldflags}
899
900 # Flags needed to have linker link only to necessary libraries
901 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
902
903 # Whether valgrind header files are available
904 HAVE_VALGRIND = ${have_valgrind}
905
906 # And if so, flags needed at compile time for valgrind macros
907 VALGRIND_CFLAGS = ${valgrind_cflags}
908
909 # Support for emacs
910 WITH_EMACS = ${WITH_EMACS}
911
912 # Support for bash completion
913 WITH_BASH = ${WITH_BASH}
914
915 # Support for zsh completion
916 WITH_ZSH = ${WITH_ZSH}
917
918 # Combined flags for compiling and linking against all of the above
919 CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS)      \\
920                    -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
921                    \$(ZLIB_CFLAGS)                                       \\
922                    \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND)   \\
923                    \$(VALGRIND_CFLAGS)                                   \\
924                    -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)                 \\
925                    -DHAVE_STRSEP=\$(HAVE_STRSEP)                         \\
926                    -DHAVE_D_TYPE=\$(HAVE_D_TYPE)                         \\
927                    -DSTD_GETPWUID=\$(STD_GETPWUID)                       \\
928                    -DSTD_ASCTIME=\$(STD_ASCTIME)                         \\
929                    -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT)         \\
930                    -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
931
932 CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS)    \\
933                      -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
934                      \$(ZLIB_CFLAGS)                                     \\
935                      \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
936                      \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS)             \\
937                      -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)               \\
938                      -DHAVE_STRSEP=\$(HAVE_STRSEP)                       \\
939                      -DHAVE_D_TYPE=\$(HAVE_D_TYPE)                       \\
940                      -DSTD_GETPWUID=\$(STD_GETPWUID)                     \\
941                      -DSTD_ASCTIME=\$(STD_ASCTIME)                       \\
942                      -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT)       \\
943                      -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
944
945 CONFIGURE_LDFLAGS =  \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
946 EOF