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