5 # Test whether this shell is capable of parameter substring processing.
6 ( option='a/b'; : ${option#*/} ) 2>/dev/null || {
8 The shell interpreting '$0' is lacking some required features.
10 To work around this problem you may try to execute:
19 # Store original IFS value so it can be changed (and restored) in many places.
20 readonly DEFAULT_IFS="$IFS"
22 srcdir=$(dirname "$0")
24 subdirs="util compat lib parse-time-string completion doc emacs"
25 subdirs="${subdirs} performance-test test test/test-databases"
26 subdirs="${subdirs} bindings"
28 # For a non-srcdir configure invocation (such as ../configure), create
29 # the directory structure and copy Makefiles.
30 if [ "$srcdir" != "." ]; then
32 for dir in . ${subdirs}; do
34 cp "$srcdir"/"$dir"/Makefile.local "$dir"
35 cp "$srcdir"/"$dir"/Makefile "$dir"
38 # Easiest way to get the test suite to work is to just copy the
39 # whole thing into the build directory.
40 cp -a "$srcdir"/test/* test
42 # Emacs only likes to generate compiled files next to the .el files
43 # by default so copy these as well (which is not ideal).
44 cp -a "$srcdir"/emacs/*.el emacs
47 # Set several defaults (optionally specified by the user in
48 # environment variables)
51 CFLAGS=${CFLAGS:--g -O2}
52 CPPFLAGS=${CPPFLAGS:-}
53 CXXFLAGS_for_sh=${CXXFLAGS:-${CFLAGS}}
54 CXXFLAGS=${CXXFLAGS:-\$(CFLAGS)}
56 XAPIAN_CONFIG=${XAPIAN_CONFIG:-}
59 # We don't allow the EMACS or GZIP Makefile variables inherit values
60 # from the environment as we do with CC and CXX above. The reason is
61 # that these names as environment variables have existing uses other
62 # than the program name that we want. (EMACS is set to 't' when a
63 # shell is running within emacs and GZIP specifies arguments to pass
64 # on the gzip command line).
66 # Set the defaults for values the user can specify with command-line
79 Usage: ./configure [options]...
81 This script configures notmuch to build on your system.
83 It verifies that dependencies are available, determines flags needed
84 to compile and link against various required libraries, and identifies
85 whether various system functions can be used or if locally-provided
86 replacements will be built instead.
88 Finally, it allows you to control various aspects of the build and
91 First, some common variables can specified via environment variables:
93 CC The C compiler to use
94 CFLAGS Flags to pass to the C compiler
95 CPPFLAGS Flags to pass to the C preprocessor
96 CXX The C++ compiler to use
97 CXXFLAGS Flags to pass to the C compiler
98 LDFLAGS Flags to pass when linking
100 Each of these values can further be controlled by specifying them
101 later on the "make" command line.
103 Other environment variables can be used to control configure itself,
104 (and for which there is no equivalent build-time control):
106 XAPIAN_CONFIG The program to use to determine flags for
107 compiling and linking against the Xapian
108 library. [$XAPIAN_CONFIG]
109 PYTHON Name of python command to use in
110 configure and the test suite.
112 Additionally, various options can be specified on the configure
115 --prefix=PREFIX Install files in PREFIX [$PREFIX]
117 By default, "make install" will install the resulting program to
118 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
119 specify an installation prefix other than $PREFIX using
120 --prefix, for instance:
122 ./configure --prefix=\$HOME
124 Fine tuning of some installation directories is available:
126 --libdir=DIR Install libraries to DIR [PREFIX/lib]
127 --includedir=DIR Install header files to DIR [PREFIX/include]
128 --mandir=DIR Install man pages to DIR [PREFIX/share/man]
129 --sysconfdir=DIR Read-only single-machine data [PREFIX/etc]
130 --emacslispdir=DIR Emacs code [PREFIX/share/emacs/site-lisp]
131 --emacsetcdir=DIR Emacs miscellaneous files [PREFIX/share/emacs/site-lisp]
132 --bashcompletiondir=DIR Bash completions files [SYSCONFDIR/bash_completion.d]
133 --zshcompletiondir=DIR Zsh completions files [PREFIX/share/zsh/functions/Completion/Unix]
135 Some features can be disabled (--with-feature=no is equivalent to
138 --without-bash-completion Do not install bash completions files
139 --without-docs Do not install documentation and man pages
140 --without-emacs Do not install lisp file
141 --without-ruby Do not install ruby bindings
142 --without-zsh-completion Do not install zsh completions files
144 Additional options are accepted for compatibility with other
145 configure-script calling conventions, but don't do anything yet:
147 --build=<cpu>-<vendor>-<os> Currently ignored
148 --host=<cpu>-<vendor>-<os> Currently ignored
149 --infodir=DIR Currently ignored
150 --datadir=DIR Currently ignored
151 --localstatedir=DIR Currently ignored
152 --libexecdir=DIR Currently ignored
153 --disable-maintainer-mode Currently ignored
154 --disable-dependency-tracking Currently ignored
159 # Parse command-line options
161 if [ "${option}" = '--help' ] ; then
164 elif [ "${option%%=*}" = '--prefix' ] ; then
165 PREFIX="${option#*=}"
166 elif [ "${option%%=*}" = '--libdir' ] ; then
167 LIBDIR="${option#*=}"
168 elif [ "${option%%=*}" = '--includedir' ] ; then
169 INCLUDEDIR="${option#*=}"
170 elif [ "${option%%=*}" = '--mandir' ] ; then
171 MANDIR="${option#*=}"
172 elif [ "${option%%=*}" = '--sysconfdir' ] ; then
173 SYSCONFDIR="${option#*=}"
174 elif [ "${option%%=*}" = '--emacslispdir' ] ; then
175 EMACSLISPDIR="${option#*=}"
176 elif [ "${option%%=*}" = '--emacsetcdir' ] ; then
177 EMACSETCDIR="${option#*=}"
178 elif [ "${option%%=*}" = '--bashcompletiondir' ] ; then
179 BASHCOMPLETIONDIR="${option#*=}"
180 elif [ "${option%%=*}" = '--zshcompletiondir' ] ; then
181 ZSHCOMLETIONDIR="${option#*=}"
182 elif [ "${option%%=*}" = '--with-docs' ]; then
183 if [ "${option#*=}" = 'no' ]; then
188 elif [ "${option}" = '--without-docs' ] ; then
190 elif [ "${option%%=*}" = '--with-emacs' ]; then
191 if [ "${option#*=}" = 'no' ]; then
196 elif [ "${option}" = '--without-emacs' ] ; then
198 elif [ "${option%%=*}" = '--with-bash-completion' ]; then
199 if [ "${option#*=}" = 'no' ]; then
204 elif [ "${option}" = '--without-bash-completion' ] ; then
206 elif [ "${option%%=*}" = '--with-ruby' ]; then
207 if [ "${option#*=}" = 'no' ]; then
212 elif [ "${option}" = '--without-ruby' ] ; then
214 elif [ "${option%%=*}" = '--with-zsh-completion' ]; then
215 if [ "${option#*=}" = 'no' ]; then
220 elif [ "${option}" = '--without-zsh-completion' ] ; then
222 elif [ "${option%%=*}" = '--build' ] ; then
224 elif [ "${option%%=*}" = '--host' ] ; then
226 elif [ "${option%%=*}" = '--infodir' ] ; then
228 elif [ "${option%%=*}" = '--datadir' ] ; then
230 elif [ "${option%%=*}" = '--localstatedir' ] ; then
232 elif [ "${option%%=*}" = '--libexecdir' ] ; then
234 elif [ "${option}" = '--disable-maintainer-mode' ] ; then
236 elif [ "${option}" = '--disable-dependency-tracking' ] ; then
239 echo "Unrecognized option: ${option}"
247 # We set this value early, (rather than just while printing the
248 # Makefile.config file later like most values), because we need to
249 # actually investigate this value compared to the ldconfig_paths value
251 if [ -z "$LIBDIR" ] ; then
252 libdir_expanded="${PREFIX}/lib"
254 # very non-general variable expansion
255 libdir_expanded=$(echo "$LIBDIR" | sed "s|\\${prefix}|${PREFIX}|g; s|\\$prefix/|${PREFIX}/|; s|//*|/|g")
259 Welcome to Notmuch, a system for indexing, searching and tagging your email.
261 We hope that the process of building and installing notmuch is quick
262 and smooth so that you can soon be reading and processing your email
263 more efficiently than ever.
265 If anything goes wrong in the configure process, you can override any
266 decisions it makes by manually editing the Makefile.config file that
267 it creates. Also please do as much as you can to figure out what could
268 be different on your machine compared to those of the notmuch
269 developers. Then, please email those details to the Notmuch list
270 (notmuch@notmuchmail.org) so that we can hopefully make future
271 versions of notmuch easier for you to use.
273 We'll now investigate your system to verify that all required
274 dependencies are available:
279 printf "int main(void){return 0;}\n" > minimal.c
281 printf "Sanity checking C compilation environment... "
282 if ${CC} ${CFLAGS} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal > /dev/null 2>&1
287 errors=$((errors + 1))
290 printf "Sanity checking C++ compilation environment... "
291 if ${CXX} ${CXXFLAGS_for_sh} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal > /dev/null 2>&1
296 errors=$((errors + 1))
299 if [ $errors -gt 0 ]; then
301 *** Error: Initial sanity checking of environment failed. Please try
302 running configure in a clean environment, and if the problem persists,
305 rm -f minimal minimal.c
309 printf "Reading libnotmuch version from source... "
310 cat > _libversion.c <<EOF
312 #include "lib/notmuch.h"
314 printf("libnotmuch_version_major=%d\n",
315 LIBNOTMUCH_MAJOR_VERSION);
316 printf("libnotmuch_version_minor=%d\n",
317 LIBNOTMUCH_MINOR_VERSION);
318 printf("libnotmuch_version_release=%d\n",
319 LIBNOTMUCH_MICRO_VERSION);
323 if ${CC} ${CFLAGS} _libversion.c -o _libversion > /dev/null 2>&1 && \
324 ./_libversion > _libversion.sh && . ./_libversion.sh
330 *** Error: Reading lib/notmuch.h failed.
331 Please try running configure again in a clean environment, and if the
332 problem persists, report a bug.
334 rm -f _libversion _libversion.c _libversion.sh
338 if pkg-config --version > /dev/null 2>&1; then
344 printf "Checking for Xapian development files... "
346 for xapian_config in ${XAPIAN_CONFIG} xapian-config xapian-config-1.3; do
347 if ${xapian_config} --version > /dev/null 2>&1; then
348 xapian_version=$(${xapian_config} --version | sed -e 's/.* //')
349 printf "Yes (%s).\n" ${xapian_version}
351 xapian_cxxflags=$(${xapian_config} --cxxflags)
352 xapian_ldflags=$(${xapian_config} --libs)
356 if [ ${have_xapian} = "0" ]; then
358 errors=$((errors + 1))
361 have_xapian_compact=0
362 have_xapian_field_processor=0
363 if [ ${have_xapian} = "1" ]; then
364 # Compaction is only supported on Xapian > 1.2.6
365 printf "Checking for Xapian compaction support... "
366 case "${xapian_version}" in
367 0.*|1.[01].*|1.2.[0-5])
368 printf "No (only available with Xapian > 1.2.6).\n" ;;
369 [1-9]*.[0-9]*.[0-9]*)
370 have_xapian_compact=1
373 printf "Unknown version.\n" ;;
376 printf "Checking for Xapian FieldProcessor API... "
377 cat>_field_processor.cc<<EOF
379 class TitleFieldProcessor : public Xapian::FieldProcessor { };
381 if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _field_processor.cc -o _field_processor.o > /dev/null 2>&1
383 have_xapian_field_processor=1
386 printf "No. (optional)\n"
389 rm -f _field_processor.o _field_processor.cc
391 default_xapian_backend=""
392 printf "Testing default Xapian backend... "
393 cat >_default_backend.cc <<EOF
395 int main(int argc, char** argv) {
396 Xapian::WritableDatabase db("test.db",Xapian::DB_CREATE_OR_OPEN);
399 ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} _default_backend.cc -o _default_backend ${xapian_ldflags}
401 if [ -f test.db/iamglass ]; then
402 default_xapian_backend=glass
404 default_xapian_backend=chert
406 printf "%s\n" "${default_xapian_backend}";
407 rm -rf test.db _default_backend _default_backend.cc
410 # we need to have a version >= 2.6.5 to avoid a crypto bug. We need
411 # 2.6.7 for permissive "From " header handling.
414 printf "Checking for GMime development files... "
415 if pkg-config --exists "gmime-2.6 >= $GMIME_MINVER"; then
418 gmime_cflags=$(pkg-config --cflags gmime-2.6)
419 gmime_ldflags=$(pkg-config --libs gmime-2.6)
423 errors=$((errors + 1))
426 # GMime already depends on Glib >= 2.12, but we use at least one Glib
427 # function that only exists as of 2.22, (g_array_unref)
428 printf "Checking for Glib development files (>= 2.22)... "
430 if pkg-config --exists 'glib-2.0 >= 2.22'; then
433 # these are included in gmime cflags and ldflags
434 # glib_cflags=$(pkg-config --cflags glib-2.0)
435 # glib_ldflags=$(pkg-config --libs glib-2.0)
438 errors=$((errors + 1))
441 if ! pkg-config --exists zlib; then
442 ${CC} ${zlib_cflags} -o compat/gen_zlib_pc \
443 "$srcdir"/compat/gen_zlib_pc.c ${zlib_ldflags} > /dev/null 2>&1 &&
444 compat/gen_zlib_pc > compat/zlib.pc &&
445 PKG_CONFIG_PATH="$PKG_CONFIG_PATH":compat &&
446 export PKG_CONFIG_PATH
447 rm -f compat/gen_zlib_pc
450 printf "Checking for zlib (>= 1.2.5.2)... "
452 if pkg-config --atleast-version=1.2.5.2 zlib; then
455 zlib_cflags=$(pkg-config --cflags zlib)
456 zlib_ldflags=$(pkg-config --libs zlib)
459 errors=$((errors + 1))
462 printf "Checking for talloc development files... "
463 if pkg-config --exists talloc; then
466 talloc_cflags=$(pkg-config --cflags talloc)
467 talloc_ldflags=$(pkg-config --libs talloc)
472 errors=$((errors + 1))
475 printf "Checking for python... "
478 for name in ${PYTHON} python python2 python3; do
479 if command -v $name > /dev/null; then
482 printf "Yes (%s).\n" "$name"
487 if [ $have_python -eq 0 ]; then
489 errors=$((errors + 1))
492 printf "Checking for valgrind development files... "
493 if pkg-config --exists valgrind; then
496 valgrind_cflags=$(pkg-config --cflags valgrind)
498 printf "No (but that's fine).\n"
503 printf "Checking for bash-completion (>= 1.90)... "
504 if pkg-config --atleast-version=1.90 bash-completion; then
507 printf "No (will not install bash completion).\n"
511 if [ -z "${EMACSLISPDIR-}" ]; then
512 EMACSLISPDIR="\$(prefix)/share/emacs/site-lisp"
515 if [ -z "${EMACSETCDIR-}" ]; then
516 EMACSETCDIR="\$(prefix)/share/emacs/site-lisp"
519 printf "Checking if emacs is available... "
520 if emacs --quick --batch > /dev/null 2>&1; then
524 printf "No (so will not byte-compile emacs code)\n"
529 if [ $WITH_DOCS = "1" ] ; then
530 printf "Checking if doxygen is available... "
531 if command -v doxygen > /dev/null; then
535 printf "No (so will not install api docs)\n"
540 if [ $WITH_RUBY = "1" ] ; then
541 printf "Checking for ruby development files... "
542 if ruby -e "require 'mkmf'"> /dev/null 2>&1; then
546 printf "No (skipping ruby bindings)\n"
551 if [ $WITH_DOCS = "1" ] ; then
552 printf "Checking if sphinx is available and supports nroff output... "
553 if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then
557 printf "No (so will not install man pages).\n"
563 printf "Checking which platform we are on... "
565 if [ $uname = "Darwin" ] ; then
568 linker_resolves_library_dependencies=0
569 elif [ $uname = "SunOS" ] ; then
572 linker_resolves_library_dependencies=0
573 elif [ $uname = "FreeBSD" ] ; then
576 linker_resolves_library_dependencies=0
577 elif [ $uname = "OpenBSD" ] ; then
580 linker_resolves_library_dependencies=0
581 elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
582 printf "%s\n" "$uname"
584 linker_resolves_library_dependencies=1
586 printf "Checking for %s in ldconfig... " "$libdir_expanded"
587 ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
588 # Separate ldconfig_paths only on newline (not on any potential
589 # embedded space characters in any filenames). Note, we use a
590 # literal newline in the source here rather than something like:
594 # because the shell's command substitution deletes any trailing newlines.
597 for path in $ldconfig_paths; do
598 if [ "$path" = "$libdir_expanded" ]; then
603 if [ "$libdir_in_ldconfig" = '0' ]; then
604 printf "No (will set RPATH)\n"
612 *** Warning: Unknown platform. Notmuch might or might not build correctly.
617 printf "Checking byte order... "
618 cat> _byteorder.c <<EOF
621 uint32_t test = 0x34333231;
622 int main() { printf("%.4s\n", (const char*)&test); return 0; }
624 ${CC} ${CFLAGS} _byteorder.c -o _byteorder > /dev/null 2>&1
625 util_byte_order=$(./_byteorder)
626 echo $util_byte_order
628 rm -f _byteorder _byteorder.c
630 if [ $errors -gt 0 ]; then
633 *** Error: The dependencies of notmuch could not be satisfied. You will
634 need to install the following packages before being able to compile
638 if [ $have_python -eq 0 ]; then
639 echo " python interpreter"
641 if [ $have_xapian -eq 0 ]; then
642 echo " Xapian library (including development files such as headers)"
643 echo " http://xapian.org/"
645 if [ $have_zlib -eq 0 ]; then
646 echo " zlib library (>= version 1.2.5.2, including development files such as headers)"
647 echo " http://zlib.net/"
650 if [ $have_gmime -eq 0 ]; then
651 echo " GMime 2.6 library >= $GMIME_MINVER"
652 echo " (including development files such as headers)"
653 echo " http://spruce.sourceforge.net/gmime/"
656 if [ $have_glib -eq 0 ]; then
657 echo " Glib library >= 2.22 (including development files such as headers)"
658 echo " http://ftp.gnome.org/pub/gnome/sources/glib/"
661 if [ $have_talloc -eq 0 ]; then
662 echo " The talloc library (including development files such as headers)"
663 echo " http://talloc.samba.org/"
667 With any luck, you're using a modern, package-based operating system
668 that has all of these packages available in the distribution. In that
669 case a simple command will install everything you need. For example:
671 On Debian and similar systems:
673 sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
675 Or on Fedora and similar systems:
677 sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
679 On other systems, similar commands can be used, but the details of the
680 package names may be different.
683 if [ $have_pkg_config -eq 0 ]; then
685 Note: the pkg-config program is not available. This configure script
686 uses pkg-config to find the compilation flags required to link against
687 the various libraries needed by notmuch. It's possible you simply need
688 to install pkg-config with a command such as:
690 sudo apt-get install pkg-config
692 sudo yum install pkgconfig
694 But if pkg-config is not available for your system, then you will need
695 to modify the configure script to manually set the cflags and ldflags
696 variables to the correct values to link against each library in each
697 case that pkg-config could not be used to determine those values.
702 When you have installed the necessary dependencies, you can run
703 configure again to ensure the packages can be found, or simply run
704 "make" to compile notmuch.
710 printf "Checking for canonicalize_file_name... "
711 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
714 have_canonicalize_file_name=1
716 printf "No (will use our own instead).\n"
717 have_canonicalize_file_name=0
719 rm -f compat/have_canonicalize_file_name
722 printf "Checking for getline... "
723 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
728 printf "No (will use our own instead).\n"
731 rm -f compat/have_getline
733 printf "Checking for strcasestr... "
734 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
739 printf "No (will use our own instead).\n"
742 rm -f compat/have_strcasestr
744 printf "Checking for strsep... "
745 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
750 printf "No (will use our own instead).\n"
753 rm -f compat/have_strsep
755 printf "Checking for timegm... "
756 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
761 printf "No (will use our own instead).\n"
764 rm -f compat/have_timegm
766 printf "Checking for dirent.d_type... "
767 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
772 printf "No (will use stat instead).\n"
775 rm -f compat/have_d_type
777 printf "Checking for standard version of getpwuid_r... "
778 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
783 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
786 rm -f compat/check_getpwuid
788 printf "Checking for standard version of asctime_r... "
789 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
794 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
797 rm -f compat/check_asctime
799 printf "Checking for rpath support... "
800 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
803 rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
805 printf "No (nothing to worry about).\n"
809 printf "Checking for -Wl,--as-needed... "
810 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
813 as_needed_ldflags="-Wl,--as-needed"
815 printf "No (nothing to worry about).\n"
819 printf "Checking for -Wl,--no-undefined... "
820 if ${CC} -Wl,--no-undefined -o minimal minimal.c >/dev/null 2>&1
823 no_undefined_ldflags="-Wl,--no-undefined"
825 printf "No (nothing to worry about).\n"
826 no_undefined_ldflags=""
830 printf "Checking for available C++ compiler warning flags... "
831 for flag in -Wall -Wextra -Wwrite-strings; do
832 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
834 WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
837 printf "\n\t%s\n" "${WARN_CXXFLAGS}"
839 WARN_CFLAGS="${WARN_CXXFLAGS}"
840 printf "Checking for available C compiler warning flags... "
841 for flag in -Wmissing-declarations; do
842 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
844 WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
847 printf "\n\t%s\n" "${WARN_CFLAGS}"
849 rm -f minimal minimal.c _libversion.c _libversion _libversion.sh
851 # construct the Makefile.config
852 cat > Makefile.config <<EOF
853 # This Makefile.config was automatically generated by the ./configure
854 # script of notmuch. If the configure script identified anything
855 # incorrectly, then you can edit this file to try to correct things,
856 # but be warned that if configure is run again it will destroy your
857 # changes, (and this could happen by simply calling "make" if the
858 # configure script is updated).
860 # The top-level directory for the source, (the directory containing
861 # the configure script). This may be different than the build
862 # directory (the current directory at the time configure was run).
865 # subdirectories to build
868 configure_options = $@
870 # We use vpath directives (rather than the VPATH variable) since the
871 # VPATH variable matches targets as well as prerequisites, (which is
872 # not useful since then a target left-over from a srcdir build would
873 # cause a target to not be built in the non-srcdir build).
875 # Also, we don't use a single "vpath % \$(srcdir)" here because we
876 # don't want the vpath to trigger for our emacs lisp compilation,
877 # (unless we first find a way to convince emacs to build the .elc
878 # target in a directory other than the directory of the .el
879 # prerequisite). In the meantime, we're actually copying in the .el
880 # files, (which is quite ugly).
882 vpath %.cc \$(srcdir)
883 vpath Makefile.% \$(srcdir)
884 vpath %.py \$(srcdir)
885 vpath %.rst \$(srcdir)
887 # Library versions (used to make SONAME)
888 # The major version of the library interface. This will control the soname.
889 # As such, this number must be incremented for any incompatible change to
890 # the library interface, (such as the deletion of an API or a major
891 # semantic change that breaks formerly functioning code).
893 LIBNOTMUCH_VERSION_MAJOR = ${libnotmuch_version_major}
895 # The minor version of the library interface. This should be incremented at
896 # the time of release for any additions to the library interface,
897 # (and when it is incremented, the release version of the library should
899 LIBNOTMUCH_VERSION_MINOR = ${libnotmuch_version_minor}
901 # The release version the library interface. This should be incremented at
902 # the time of release if there have been no changes to the interface, (but
903 # simply compatible changes to the implementation).
904 LIBNOTMUCH_VERSION_RELEASE = ${libnotmuch_version_release}
906 # These are derived from the VERSION macros in lib/notmuch.h so
907 # if you have to change them, something is wrong.
909 # The C compiler to use
912 # The C++ compiler to use
915 # Command to execute emacs from Makefiles
916 EMACS = emacs --quick
918 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
921 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
922 CPPFLAGS = ${CPPFLAGS}
924 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
925 CXXFLAGS = ${CXXFLAGS}
927 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
930 # Flags to enable warnings when using the C++ compiler
931 WARN_CXXFLAGS=${WARN_CXXFLAGS}
933 # Flags to enable warnings when using the C compiler
934 WARN_CFLAGS=${WARN_CFLAGS}
936 # Name of python interpreter
939 # The prefix to which notmuch should be installed
940 # Note: If you change this value here, be sure to ensure that the
941 # LIBDIR_IN_LDCONFIG value below is still set correctly.
944 # The directory to which libraries should be installed
945 # Note: If you change this value here, be sure to ensure that the
946 # LIBDIR_IN_LDCONFIG value below is still set correctly.
947 libdir = ${LIBDIR:=\$(prefix)/lib}
949 # byte order within a 32 bit word. 1234 = little, 4321 = big, 0 = guess
950 UTIL_BYTE_ORDER = ${util_byte_order}
952 # Whether libdir is in a path configured into ldconfig
953 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
955 # The directory to which header files should be installed
956 includedir = ${INCLUDEDIR:=\$(prefix)/include}
958 # The directory to which man pages should be installed
959 mandir = ${MANDIR:=\$(prefix)/share/man}
961 # The directory to which read-only (configuration) files should be installed
962 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
964 # The directory to which emacs lisp files should be installed
965 emacslispdir=${EMACSLISPDIR}
967 # The directory to which emacs miscellaneous (machine-independent) files should
969 emacsetcdir=${EMACSETCDIR}
971 # Whether there's an emacs binary available for byte-compiling
972 HAVE_EMACS = ${have_emacs}
974 # Whether there's a sphinx-build binary available for building documentation
975 HAVE_SPHINX=${have_sphinx}
977 # Whether there's a doxygen binary available for building api documentation
978 HAVE_DOXYGEN=${have_doxygen}
980 # The directory to which desktop files should be installed
981 desktop_dir = \$(prefix)/share/applications
983 # The directory to which bash completions files should be installed
984 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(sysconfdir)/bash_completion.d}
986 # The directory to which zsh completions files should be installed
987 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
989 # Whether the canonicalize_file_name function is available (if not, then notmuch will
990 # build its own version)
991 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
993 # Whether the getline function is available (if not, then notmuch will
994 # build its own version)
995 HAVE_GETLINE = ${have_getline}
997 # Are the ruby development files (and ruby) available? If not skip
998 # building/testing ruby bindings.
999 HAVE_RUBY_DEV = ${have_ruby_dev}
1001 # Whether the strcasestr function is available (if not, then notmuch will
1002 # build its own version)
1003 HAVE_STRCASESTR = ${have_strcasestr}
1005 # Whether the strsep function is available (if not, then notmuch will
1006 # build its own version)
1007 HAVE_STRSEP = ${have_strsep}
1009 # Whether the timegm function is available (if not, then notmuch will
1010 # build its own version)
1011 HAVE_TIMEGM = ${have_timegm}
1013 # Whether struct dirent has d_type (if not, then notmuch will use stat)
1014 HAVE_D_TYPE = ${have_d_type}
1016 # Whether the Xapian version in use supports compaction
1017 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
1019 # Whether the Xapian version in use supports field processors
1020 HAVE_XAPIAN_FIELD_PROCESSOR = ${have_xapian_field_processor}
1022 # Whether the getpwuid_r function is standards-compliant
1023 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1024 # to enable the standards-compliant version -- needed for Solaris)
1025 STD_GETPWUID = ${std_getpwuid}
1027 # Whether the asctime_r function is standards-compliant
1028 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1029 # to enable the standards-compliant version -- needed for Solaris)
1030 STD_ASCTIME = ${std_asctime}
1032 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
1033 PLATFORM = ${platform}
1035 # Whether the linker will automatically resolve the dependency of one
1036 # library on another (if not, then linking a binary requires linking
1037 # directly against both)
1038 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
1040 # Flags needed to compile and link against Xapian
1041 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
1042 XAPIAN_LDFLAGS = ${xapian_ldflags}
1044 # Which backend will Xapian use by default?
1045 DEFAULT_XAPIAN_BACKEND = ${default_xapian_backend}
1047 # Flags needed to compile and link against GMime
1048 GMIME_CFLAGS = ${gmime_cflags}
1049 GMIME_LDFLAGS = ${gmime_ldflags}
1051 # Flags needed to compile and link against zlib
1052 ZLIB_CFLAGS = ${zlib_cflags}
1053 ZLIB_LDFLAGS = ${zlib_ldflags}
1055 # Flags needed to compile and link against talloc
1056 TALLOC_CFLAGS = ${talloc_cflags}
1057 TALLOC_LDFLAGS = ${talloc_ldflags}
1059 # Flags needed to have linker set rpath attribute
1060 RPATH_LDFLAGS = ${rpath_ldflags}
1062 # Flags needed to have linker link only to necessary libraries
1063 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
1065 # Flags to have the linker flag undefined symbols in object files
1066 NO_UNDEFINED_LDFLAGS = ${no_undefined_ldflags}
1068 # Whether valgrind header files are available
1069 HAVE_VALGRIND = ${have_valgrind}
1071 # And if so, flags needed at compile time for valgrind macros
1072 VALGRIND_CFLAGS = ${valgrind_cflags}
1075 WITH_EMACS = ${WITH_EMACS}
1077 # Support for bash completion
1078 WITH_BASH = ${WITH_BASH}
1080 # Support for zsh completion
1081 WITH_ZSH = ${WITH_ZSH}
1083 # Combined flags for compiling and linking against all of the above
1084 CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
1085 -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1087 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
1088 \$(VALGRIND_CFLAGS) \\
1089 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR) \\
1090 -DHAVE_STRSEP=\$(HAVE_STRSEP) \\
1091 -DHAVE_TIMEGM=\$(HAVE_TIMEGM) \\
1092 -DHAVE_D_TYPE=\$(HAVE_D_TYPE) \\
1093 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1094 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1095 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1096 -DHAVE_XAPIAN_FIELD_PROCESSOR=\$(HAVE_XAPIAN_FIELD_PROCESSOR) \\
1097 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1099 CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
1100 -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1102 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
1103 \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS) \\
1104 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR) \\
1105 -DHAVE_STRSEP=\$(HAVE_STRSEP) \\
1106 -DHAVE_TIMEGM=\$(HAVE_TIMEGM) \\
1107 -DHAVE_D_TYPE=\$(HAVE_D_TYPE) \\
1108 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1109 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1110 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1111 -DHAVE_XAPIAN_FIELD_PROCESSOR=\$(HAVE_XAPIAN_FIELD_PROCESSOR) \\
1112 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1114 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
1117 # construct the sh.config
1118 cat > sh.config <<EOF
1119 # This sh.config was automatically generated by the ./configure
1120 # script of notmuch.
1122 # Whether the Xapian version in use supports compaction
1123 NOTMUCH_HAVE_XAPIAN_COMPACT=${have_xapian_compact}
1125 # Whether the Xapian version in use supports field processors
1126 NOTMUCH_HAVE_XAPIAN_FIELD_PROCESSOR=${have_xapian_field_processor}
1128 # Which backend will Xapian use by default?
1129 NOTMUCH_DEFAULT_XAPIAN_BACKEND=${default_xapian_backend}
1131 # do we have man pages?
1132 NOTMUCH_HAVE_MAN=$((have_sphinx))
1134 # Name of python interpreter
1135 NOTMUCH_PYTHON=${python}
1137 # Are the ruby development files (and ruby) available? If not skip
1138 # building/testing ruby bindings.
1139 NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
1142 # Finally, after everything configured, inform the user how to continue.
1145 All required packages were found. You may now run the following
1146 commands to compile and install notmuch: