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 printf "Checking for Xapian compaction support... "
367 class TestCompactor : public Xapian::Compactor { };
369 if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _compact.cc -o _compact.o > /dev/null 2>&1
371 have_xapian_compact=1
377 rm -f _compact.o _compact.cc
379 printf "Checking for Xapian FieldProcessor API... "
380 cat>_field_processor.cc<<EOF
382 class TitleFieldProcessor : public Xapian::FieldProcessor { };
384 if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _field_processor.cc -o _field_processor.o > /dev/null 2>&1
386 have_xapian_field_processor=1
389 printf "No. (optional)\n"
392 rm -f _field_processor.o _field_processor.cc
394 default_xapian_backend=""
395 printf "Testing default Xapian backend... "
396 cat >_default_backend.cc <<EOF
398 int main(int argc, char** argv) {
399 Xapian::WritableDatabase db("test.db",Xapian::DB_CREATE_OR_OPEN);
402 ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} _default_backend.cc -o _default_backend ${xapian_ldflags}
404 if [ -f test.db/iamglass ]; then
405 default_xapian_backend=glass
407 default_xapian_backend=chert
409 printf "%s\n" "${default_xapian_backend}";
410 rm -rf test.db _default_backend _default_backend.cc
413 # we need to have a version >= 2.6.5 to avoid a crypto bug. We need
414 # 2.6.7 for permissive "From " header handling.
417 printf "Checking for GMime development files... "
418 if pkg-config --exists "gmime-2.6 >= $GMIME_MINVER"; then
421 gmime_cflags=$(pkg-config --cflags gmime-2.6)
422 gmime_ldflags=$(pkg-config --libs gmime-2.6)
426 errors=$((errors + 1))
429 # GMime already depends on Glib >= 2.12, but we use at least one Glib
430 # function that only exists as of 2.22, (g_array_unref)
431 printf "Checking for Glib development files (>= 2.22)... "
433 if pkg-config --exists 'glib-2.0 >= 2.22'; then
436 # these are included in gmime cflags and ldflags
437 # glib_cflags=$(pkg-config --cflags glib-2.0)
438 # glib_ldflags=$(pkg-config --libs glib-2.0)
441 errors=$((errors + 1))
444 if ! pkg-config --exists zlib; then
445 ${CC} ${zlib_cflags} -o compat/gen_zlib_pc \
446 "$srcdir"/compat/gen_zlib_pc.c ${zlib_ldflags} > /dev/null 2>&1 &&
447 compat/gen_zlib_pc > compat/zlib.pc &&
448 PKG_CONFIG_PATH="$PKG_CONFIG_PATH":compat &&
449 export PKG_CONFIG_PATH
450 rm -f compat/gen_zlib_pc
453 printf "Checking for zlib (>= 1.2.5.2)... "
455 if pkg-config --atleast-version=1.2.5.2 zlib; then
458 zlib_cflags=$(pkg-config --cflags zlib)
459 zlib_ldflags=$(pkg-config --libs zlib)
462 errors=$((errors + 1))
465 printf "Checking for talloc development files... "
466 if pkg-config --exists talloc; then
469 talloc_cflags=$(pkg-config --cflags talloc)
470 talloc_ldflags=$(pkg-config --libs talloc)
475 errors=$((errors + 1))
478 printf "Checking for python... "
481 for name in ${PYTHON} python python2 python3; do
482 if command -v $name > /dev/null; then
485 printf "Yes (%s).\n" "$name"
490 if [ $have_python -eq 0 ]; then
492 errors=$((errors + 1))
495 printf "Checking for valgrind development files... "
496 if pkg-config --exists valgrind; then
499 valgrind_cflags=$(pkg-config --cflags valgrind)
501 printf "No (but that's fine).\n"
506 printf "Checking for bash-completion (>= 1.90)... "
507 if pkg-config --atleast-version=1.90 bash-completion; then
510 printf "No (will not install bash completion).\n"
514 if [ -z "${EMACSLISPDIR-}" ]; then
515 EMACSLISPDIR="\$(prefix)/share/emacs/site-lisp"
518 if [ -z "${EMACSETCDIR-}" ]; then
519 EMACSETCDIR="\$(prefix)/share/emacs/site-lisp"
522 printf "Checking if emacs is available... "
523 if emacs --quick --batch > /dev/null 2>&1; then
527 printf "No (so will not byte-compile emacs code)\n"
532 if [ $WITH_DOCS = "1" ] ; then
533 printf "Checking if doxygen is available... "
534 if command -v doxygen > /dev/null; then
538 printf "No (so will not install api docs)\n"
543 if [ $WITH_RUBY = "1" ] ; then
544 printf "Checking for ruby development files... "
545 if ruby -e "require 'mkmf'"> /dev/null 2>&1; then
549 printf "No (skipping ruby bindings)\n"
554 if [ $WITH_DOCS = "1" ] ; then
555 printf "Checking if sphinx is available and supports nroff output... "
556 if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then
560 printf "No (so will not install man pages).\n"
566 printf "Checking which platform we are on... "
568 if [ $uname = "Darwin" ] ; then
571 linker_resolves_library_dependencies=0
572 elif [ $uname = "SunOS" ] ; then
575 linker_resolves_library_dependencies=0
576 elif [ $uname = "FreeBSD" ] ; then
579 linker_resolves_library_dependencies=0
580 elif [ $uname = "OpenBSD" ] ; then
583 linker_resolves_library_dependencies=0
584 elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
585 printf "%s\n" "$uname"
587 linker_resolves_library_dependencies=1
589 printf "Checking for %s in ldconfig... " "$libdir_expanded"
590 ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
591 # Separate ldconfig_paths only on newline (not on any potential
592 # embedded space characters in any filenames). Note, we use a
593 # literal newline in the source here rather than something like:
597 # because the shell's command substitution deletes any trailing newlines.
600 for path in $ldconfig_paths; do
601 if [ "$path" = "$libdir_expanded" ]; then
606 if [ "$libdir_in_ldconfig" = '0' ]; then
607 printf "No (will set RPATH)\n"
615 *** Warning: Unknown platform. Notmuch might or might not build correctly.
620 printf "Checking byte order... "
621 cat> _byteorder.c <<EOF
624 uint32_t test = 0x34333231;
625 int main() { printf("%.4s\n", (const char*)&test); return 0; }
627 ${CC} ${CFLAGS} _byteorder.c -o _byteorder > /dev/null 2>&1
628 util_byte_order=$(./_byteorder)
629 echo $util_byte_order
631 rm -f _byteorder _byteorder.c
633 if [ $errors -gt 0 ]; then
636 *** Error: The dependencies of notmuch could not be satisfied. You will
637 need to install the following packages before being able to compile
641 if [ $have_python -eq 0 ]; then
642 echo " python interpreter"
644 if [ $have_xapian -eq 0 ]; then
645 echo " Xapian library (including development files such as headers)"
646 echo " http://xapian.org/"
648 if [ $have_zlib -eq 0 ]; then
649 echo " zlib library (>= version 1.2.5.2, including development files such as headers)"
650 echo " http://zlib.net/"
653 if [ $have_gmime -eq 0 ]; then
654 echo " GMime 2.6 library >= $GMIME_MINVER"
655 echo " (including development files such as headers)"
656 echo " http://spruce.sourceforge.net/gmime/"
659 if [ $have_glib -eq 0 ]; then
660 echo " Glib library >= 2.22 (including development files such as headers)"
661 echo " http://ftp.gnome.org/pub/gnome/sources/glib/"
664 if [ $have_talloc -eq 0 ]; then
665 echo " The talloc library (including development files such as headers)"
666 echo " http://talloc.samba.org/"
670 With any luck, you're using a modern, package-based operating system
671 that has all of these packages available in the distribution. In that
672 case a simple command will install everything you need. For example:
674 On Debian and similar systems:
676 sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
678 Or on Fedora and similar systems:
680 sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
682 On other systems, similar commands can be used, but the details of the
683 package names may be different.
686 if [ $have_pkg_config -eq 0 ]; then
688 Note: the pkg-config program is not available. This configure script
689 uses pkg-config to find the compilation flags required to link against
690 the various libraries needed by notmuch. It's possible you simply need
691 to install pkg-config with a command such as:
693 sudo apt-get install pkg-config
695 sudo yum install pkgconfig
697 But if pkg-config is not available for your system, then you will need
698 to modify the configure script to manually set the cflags and ldflags
699 variables to the correct values to link against each library in each
700 case that pkg-config could not be used to determine those values.
705 When you have installed the necessary dependencies, you can run
706 configure again to ensure the packages can be found, or simply run
707 "make" to compile notmuch.
713 printf "Checking for canonicalize_file_name... "
714 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
717 have_canonicalize_file_name=1
719 printf "No (will use our own instead).\n"
720 have_canonicalize_file_name=0
722 rm -f compat/have_canonicalize_file_name
725 printf "Checking for getline... "
726 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
731 printf "No (will use our own instead).\n"
734 rm -f compat/have_getline
736 printf "Checking for strcasestr... "
737 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
742 printf "No (will use our own instead).\n"
745 rm -f compat/have_strcasestr
747 printf "Checking for strsep... "
748 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
753 printf "No (will use our own instead).\n"
756 rm -f compat/have_strsep
758 printf "Checking for timegm... "
759 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
764 printf "No (will use our own instead).\n"
767 rm -f compat/have_timegm
769 printf "Checking for dirent.d_type... "
770 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
775 printf "No (will use stat instead).\n"
778 rm -f compat/have_d_type
780 printf "Checking for standard version of getpwuid_r... "
781 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
786 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
789 rm -f compat/check_getpwuid
791 printf "Checking for standard version of asctime_r... "
792 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
797 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
800 rm -f compat/check_asctime
802 printf "Checking for rpath support... "
803 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
806 rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
808 printf "No (nothing to worry about).\n"
812 printf "Checking for -Wl,--as-needed... "
813 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
816 as_needed_ldflags="-Wl,--as-needed"
818 printf "No (nothing to worry about).\n"
822 printf "Checking for -Wl,--no-undefined... "
823 if ${CC} -Wl,--no-undefined -o minimal minimal.c >/dev/null 2>&1
826 no_undefined_ldflags="-Wl,--no-undefined"
828 printf "No (nothing to worry about).\n"
829 no_undefined_ldflags=""
833 printf "Checking for available C++ compiler warning flags... "
834 for flag in -Wall -Wextra -Wwrite-strings; do
835 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
837 WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
840 printf "\n\t%s\n" "${WARN_CXXFLAGS}"
842 WARN_CFLAGS="${WARN_CXXFLAGS}"
843 printf "Checking for available C compiler warning flags... "
844 for flag in -Wmissing-declarations; do
845 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
847 WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
850 printf "\n\t%s\n" "${WARN_CFLAGS}"
852 rm -f minimal minimal.c _libversion.c _libversion _libversion.sh
854 # construct the Makefile.config
855 cat > Makefile.config <<EOF
856 # This Makefile.config was automatically generated by the ./configure
857 # script of notmuch. If the configure script identified anything
858 # incorrectly, then you can edit this file to try to correct things,
859 # but be warned that if configure is run again it will destroy your
860 # changes, (and this could happen by simply calling "make" if the
861 # configure script is updated).
863 # The top-level directory for the source, (the directory containing
864 # the configure script). This may be different than the build
865 # directory (the current directory at the time configure was run).
868 # subdirectories to build
871 configure_options = $@
873 # We use vpath directives (rather than the VPATH variable) since the
874 # VPATH variable matches targets as well as prerequisites, (which is
875 # not useful since then a target left-over from a srcdir build would
876 # cause a target to not be built in the non-srcdir build).
878 # Also, we don't use a single "vpath % \$(srcdir)" here because we
879 # don't want the vpath to trigger for our emacs lisp compilation,
880 # (unless we first find a way to convince emacs to build the .elc
881 # target in a directory other than the directory of the .el
882 # prerequisite). In the meantime, we're actually copying in the .el
883 # files, (which is quite ugly).
885 vpath %.cc \$(srcdir)
886 vpath Makefile.% \$(srcdir)
887 vpath %.py \$(srcdir)
888 vpath %.rst \$(srcdir)
890 # Library versions (used to make SONAME)
891 # The major version of the library interface. This will control the soname.
892 # As such, this number must be incremented for any incompatible change to
893 # the library interface, (such as the deletion of an API or a major
894 # semantic change that breaks formerly functioning code).
896 LIBNOTMUCH_VERSION_MAJOR = ${libnotmuch_version_major}
898 # The minor version of the library interface. This should be incremented at
899 # the time of release for any additions to the library interface,
900 # (and when it is incremented, the release version of the library should
902 LIBNOTMUCH_VERSION_MINOR = ${libnotmuch_version_minor}
904 # The release version the library interface. This should be incremented at
905 # the time of release if there have been no changes to the interface, (but
906 # simply compatible changes to the implementation).
907 LIBNOTMUCH_VERSION_RELEASE = ${libnotmuch_version_release}
909 # These are derived from the VERSION macros in lib/notmuch.h so
910 # if you have to change them, something is wrong.
912 # The C compiler to use
915 # The C++ compiler to use
918 # Command to execute emacs from Makefiles
919 EMACS = emacs --quick
921 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
924 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
925 CPPFLAGS = ${CPPFLAGS}
927 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
928 CXXFLAGS = ${CXXFLAGS}
930 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
933 # Flags to enable warnings when using the C++ compiler
934 WARN_CXXFLAGS=${WARN_CXXFLAGS}
936 # Flags to enable warnings when using the C compiler
937 WARN_CFLAGS=${WARN_CFLAGS}
939 # Name of python interpreter
942 # The prefix to which notmuch should be installed
943 # Note: If you change this value here, be sure to ensure that the
944 # LIBDIR_IN_LDCONFIG value below is still set correctly.
947 # The directory to which libraries should be installed
948 # Note: If you change this value here, be sure to ensure that the
949 # LIBDIR_IN_LDCONFIG value below is still set correctly.
950 libdir = ${LIBDIR:=\$(prefix)/lib}
952 # byte order within a 32 bit word. 1234 = little, 4321 = big, 0 = guess
953 UTIL_BYTE_ORDER = ${util_byte_order}
955 # Whether libdir is in a path configured into ldconfig
956 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
958 # The directory to which header files should be installed
959 includedir = ${INCLUDEDIR:=\$(prefix)/include}
961 # The directory to which man pages should be installed
962 mandir = ${MANDIR:=\$(prefix)/share/man}
964 # The directory to which read-only (configuration) files should be installed
965 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
967 # The directory to which emacs lisp files should be installed
968 emacslispdir=${EMACSLISPDIR}
970 # The directory to which emacs miscellaneous (machine-independent) files should
972 emacsetcdir=${EMACSETCDIR}
974 # Whether there's an emacs binary available for byte-compiling
975 HAVE_EMACS = ${have_emacs}
977 # Whether there's a sphinx-build binary available for building documentation
978 HAVE_SPHINX=${have_sphinx}
980 # Whether there's a doxygen binary available for building api documentation
981 HAVE_DOXYGEN=${have_doxygen}
983 # The directory to which desktop files should be installed
984 desktop_dir = \$(prefix)/share/applications
986 # The directory to which bash completions files should be installed
987 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(sysconfdir)/bash_completion.d}
989 # The directory to which zsh completions files should be installed
990 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
992 # Whether the canonicalize_file_name function is available (if not, then notmuch will
993 # build its own version)
994 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
996 # Whether the getline function is available (if not, then notmuch will
997 # build its own version)
998 HAVE_GETLINE = ${have_getline}
1000 # Are the ruby development files (and ruby) available? If not skip
1001 # building/testing ruby bindings.
1002 HAVE_RUBY_DEV = ${have_ruby_dev}
1004 # Whether the strcasestr function is available (if not, then notmuch will
1005 # build its own version)
1006 HAVE_STRCASESTR = ${have_strcasestr}
1008 # Whether the strsep function is available (if not, then notmuch will
1009 # build its own version)
1010 HAVE_STRSEP = ${have_strsep}
1012 # Whether the timegm function is available (if not, then notmuch will
1013 # build its own version)
1014 HAVE_TIMEGM = ${have_timegm}
1016 # Whether struct dirent has d_type (if not, then notmuch will use stat)
1017 HAVE_D_TYPE = ${have_d_type}
1019 # Whether the Xapian version in use supports compaction
1020 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
1022 # Whether the Xapian version in use supports field processors
1023 HAVE_XAPIAN_FIELD_PROCESSOR = ${have_xapian_field_processor}
1025 # Whether the getpwuid_r function is standards-compliant
1026 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1027 # to enable the standards-compliant version -- needed for Solaris)
1028 STD_GETPWUID = ${std_getpwuid}
1030 # Whether the asctime_r function is standards-compliant
1031 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1032 # to enable the standards-compliant version -- needed for Solaris)
1033 STD_ASCTIME = ${std_asctime}
1035 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
1036 PLATFORM = ${platform}
1038 # Whether the linker will automatically resolve the dependency of one
1039 # library on another (if not, then linking a binary requires linking
1040 # directly against both)
1041 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
1043 # Flags needed to compile and link against Xapian
1044 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
1045 XAPIAN_LDFLAGS = ${xapian_ldflags}
1047 # Which backend will Xapian use by default?
1048 DEFAULT_XAPIAN_BACKEND = ${default_xapian_backend}
1050 # Flags needed to compile and link against GMime
1051 GMIME_CFLAGS = ${gmime_cflags}
1052 GMIME_LDFLAGS = ${gmime_ldflags}
1054 # Flags needed to compile and link against zlib
1055 ZLIB_CFLAGS = ${zlib_cflags}
1056 ZLIB_LDFLAGS = ${zlib_ldflags}
1058 # Flags needed to compile and link against talloc
1059 TALLOC_CFLAGS = ${talloc_cflags}
1060 TALLOC_LDFLAGS = ${talloc_ldflags}
1062 # Flags needed to have linker set rpath attribute
1063 RPATH_LDFLAGS = ${rpath_ldflags}
1065 # Flags needed to have linker link only to necessary libraries
1066 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
1068 # Flags to have the linker flag undefined symbols in object files
1069 NO_UNDEFINED_LDFLAGS = ${no_undefined_ldflags}
1071 # Whether valgrind header files are available
1072 HAVE_VALGRIND = ${have_valgrind}
1074 # And if so, flags needed at compile time for valgrind macros
1075 VALGRIND_CFLAGS = ${valgrind_cflags}
1078 WITH_EMACS = ${WITH_EMACS}
1080 # Support for bash completion
1081 WITH_BASH = ${WITH_BASH}
1083 # Support for zsh completion
1084 WITH_ZSH = ${WITH_ZSH}
1086 # Combined flags for compiling and linking against all of the above
1087 COMMON_CONFIGURE_CFLAGS = \\
1088 \$(GMIME_CFLAGS) \$(TALLOC_CFLAGS) \$(ZLIB_CFLAGS) \\
1089 -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \$(VALGRIND_CFLAGS) \\
1090 -DHAVE_GETLINE=\$(HAVE_GETLINE) \\
1091 -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1092 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR) \\
1093 -DHAVE_STRSEP=\$(HAVE_STRSEP) \\
1094 -DHAVE_TIMEGM=\$(HAVE_TIMEGM) \\
1095 -DHAVE_D_TYPE=\$(HAVE_D_TYPE) \\
1096 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1097 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1098 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1099 -DHAVE_XAPIAN_FIELD_PROCESSOR=\$(HAVE_XAPIAN_FIELD_PROCESSOR) \\
1100 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1102 CONFIGURE_CFLAGS = \$(COMMON_CONFIGURE_CFLAGS)
1104 CONFIGURE_CXXFLAGS = \$(COMMON_CONFIGURE_CFLAGS) \$(XAPIAN_CXXFLAGS)
1106 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
1109 # construct the sh.config
1110 cat > sh.config <<EOF
1111 # This sh.config was automatically generated by the ./configure
1112 # script of notmuch.
1114 # Whether the Xapian version in use supports compaction
1115 NOTMUCH_HAVE_XAPIAN_COMPACT=${have_xapian_compact}
1117 # Whether the Xapian version in use supports field processors
1118 NOTMUCH_HAVE_XAPIAN_FIELD_PROCESSOR=${have_xapian_field_processor}
1120 # Which backend will Xapian use by default?
1121 NOTMUCH_DEFAULT_XAPIAN_BACKEND=${default_xapian_backend}
1123 # do we have man pages?
1124 NOTMUCH_HAVE_MAN=$((have_sphinx))
1126 # Name of python interpreter
1127 NOTMUCH_PYTHON=${python}
1129 # Are the ruby development files (and ruby) available? If not skip
1130 # building/testing ruby bindings.
1131 NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
1134 # Finally, after everything configured, inform the user how to continue.
1137 All required packages were found. You may now run the following
1138 commands to compile and install notmuch: