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
81 Usage: ./configure [options]...
83 This script configures notmuch to build on your system.
85 It verifies that dependencies are available, determines flags needed
86 to compile and link against various required libraries, and identifies
87 whether various system functions can be used or if locally-provided
88 replacements will be built instead.
90 Finally, it allows you to control various aspects of the build and
93 First, some common variables can specified via environment variables:
95 CC The C compiler to use
96 CFLAGS Flags to pass to the C compiler
97 CPPFLAGS Flags to pass to the C preprocessor
98 CXX The C++ compiler to use
99 CXXFLAGS Flags to pass to the C compiler
100 LDFLAGS Flags to pass when linking
102 Each of these values can further be controlled by specifying them
103 later on the "make" command line.
105 Other environment variables can be used to control configure itself,
106 (and for which there is no equivalent build-time control):
108 XAPIAN_CONFIG The program to use to determine flags for
109 compiling and linking against the Xapian
110 library. [$XAPIAN_CONFIG]
111 PYTHON Name of python command to use in
112 configure and the test suite.
114 Additionally, various options can be specified on the configure
117 --prefix=PREFIX Install files in PREFIX [$PREFIX]
119 By default, "make install" will install the resulting program to
120 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
121 specify an installation prefix other than $PREFIX using
122 --prefix, for instance:
124 ./configure --prefix=\$HOME
126 Fine tuning of some installation directories is available:
128 --libdir=DIR Install libraries to DIR [PREFIX/lib]
129 --includedir=DIR Install header files to DIR [PREFIX/include]
130 --mandir=DIR Install man pages to DIR [PREFIX/share/man]
131 --sysconfdir=DIR Read-only single-machine data [PREFIX/etc]
132 --emacslispdir=DIR Emacs code [PREFIX/share/emacs/site-lisp]
133 --emacsetcdir=DIR Emacs miscellaneous files [PREFIX/share/emacs/site-lisp]
134 --bashcompletiondir=DIR Bash completions files [SYSCONFDIR/bash_completion.d]
135 --zshcompletiondir=DIR Zsh completions files [PREFIX/share/zsh/functions/Completion/Unix]
137 Some features can be disabled (--with-feature=no is equivalent to
140 --without-bash-completion Do not install bash completions files
141 --without-docs Do not install documentation
142 --without-api-docs Do not install API man page
143 --without-emacs Do not install lisp file
144 --without-ruby Do not install ruby bindings
145 --without-zsh-completion Do not install zsh completions files
146 --without-retry-lock Do not use blocking xapian opens, even if available
148 Additional options are accepted for compatibility with other
149 configure-script calling conventions, but don't do anything yet:
151 --build=<cpu>-<vendor>-<os> Currently ignored
152 --host=<cpu>-<vendor>-<os> Currently ignored
153 --infodir=DIR Currently ignored
154 --datadir=DIR Currently ignored
155 --localstatedir=DIR Currently ignored
156 --libexecdir=DIR Currently ignored
157 --disable-maintainer-mode Currently ignored
158 --disable-dependency-tracking Currently ignored
163 # Parse command-line options
165 if [ "${option}" = '--help' ] ; then
168 elif [ "${option%%=*}" = '--prefix' ] ; then
169 PREFIX="${option#*=}"
170 elif [ "${option%%=*}" = '--libdir' ] ; then
171 LIBDIR="${option#*=}"
172 elif [ "${option%%=*}" = '--includedir' ] ; then
173 INCLUDEDIR="${option#*=}"
174 elif [ "${option%%=*}" = '--mandir' ] ; then
175 MANDIR="${option#*=}"
176 elif [ "${option%%=*}" = '--sysconfdir' ] ; then
177 SYSCONFDIR="${option#*=}"
178 elif [ "${option%%=*}" = '--emacslispdir' ] ; then
179 EMACSLISPDIR="${option#*=}"
180 elif [ "${option%%=*}" = '--emacsetcdir' ] ; then
181 EMACSETCDIR="${option#*=}"
182 elif [ "${option%%=*}" = '--bashcompletiondir' ] ; then
183 BASHCOMPLETIONDIR="${option#*=}"
184 elif [ "${option%%=*}" = '--zshcompletiondir' ] ; then
185 ZSHCOMLETIONDIR="${option#*=}"
186 elif [ "${option%%=*}" = '--with-docs' ]; then
187 if [ "${option#*=}" = 'no' ]; then
193 elif [ "${option}" = '--without-docs' ] ; then
196 elif [ "${option%%=*}" = '--with-api-docs' ]; then
197 if [ "${option#*=}" = 'no' ]; then
202 elif [ "${option}" = '--without-api-docs' ] ; then
204 elif [ "${option%%=*}" = '--with-emacs' ]; then
205 if [ "${option#*=}" = 'no' ]; then
210 elif [ "${option}" = '--without-emacs' ] ; then
212 elif [ "${option%%=*}" = '--with-bash-completion' ]; then
213 if [ "${option#*=}" = 'no' ]; then
218 elif [ "${option}" = '--without-bash-completion' ] ; then
220 elif [ "${option%%=*}" = '--with-ruby' ]; then
221 if [ "${option#*=}" = 'no' ]; then
226 elif [ "${option}" = '--without-ruby' ] ; then
228 elif [ "${option%%=*}" = '--with-retry-lock' ]; then
229 if [ "${option#*=}" = 'no' ]; then
234 elif [ "${option}" = '--without-retry-lock' ] ; then
236 elif [ "${option%%=*}" = '--with-zsh-completion' ]; then
237 if [ "${option#*=}" = 'no' ]; then
242 elif [ "${option}" = '--without-zsh-completion' ] ; then
244 elif [ "${option%%=*}" = '--build' ] ; then
246 elif [ "${option%%=*}" = '--host' ] ; then
248 elif [ "${option%%=*}" = '--infodir' ] ; then
250 elif [ "${option%%=*}" = '--datadir' ] ; then
252 elif [ "${option%%=*}" = '--localstatedir' ] ; then
254 elif [ "${option%%=*}" = '--libexecdir' ] ; then
256 elif [ "${option}" = '--disable-maintainer-mode' ] ; then
258 elif [ "${option}" = '--disable-dependency-tracking' ] ; then
261 echo "Unrecognized option: ${option}"
269 # We set this value early, (rather than just while printing the
270 # Makefile.config file later like most values), because we need to
271 # actually investigate this value compared to the ldconfig_paths value
273 if [ -z "$LIBDIR" ] ; then
274 libdir_expanded="${PREFIX}/lib"
276 # very non-general variable expansion
277 libdir_expanded=$(echo "$LIBDIR" | sed "s|\\${prefix}|${PREFIX}|g; s|\\$prefix/|${PREFIX}/|; s|//*|/|g")
281 Welcome to Notmuch, a system for indexing, searching and tagging your email.
283 We hope that the process of building and installing notmuch is quick
284 and smooth so that you can soon be reading and processing your email
285 more efficiently than ever.
287 If anything goes wrong in the configure process, you can override any
288 decisions it makes by manually editing the Makefile.config file that
289 it creates. Also please do as much as you can to figure out what could
290 be different on your machine compared to those of the notmuch
291 developers. Then, please email those details to the Notmuch list
292 (notmuch@notmuchmail.org) so that we can hopefully make future
293 versions of notmuch easier for you to use.
295 We'll now investigate your system to verify that all required
296 dependencies are available:
301 printf "int main(void){return 0;}\n" > minimal.c
303 printf "Sanity checking C compilation environment... "
304 if ${CC} ${CFLAGS} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal > /dev/null 2>&1
309 errors=$((errors + 1))
312 printf "Sanity checking C++ compilation environment... "
313 if ${CXX} ${CXXFLAGS_for_sh} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal > /dev/null 2>&1
318 errors=$((errors + 1))
321 if [ $errors -gt 0 ]; then
323 *** Error: Initial sanity checking of environment failed. Please try
324 running configure in a clean environment, and if the problem persists,
327 rm -f minimal minimal.c
331 printf "Reading libnotmuch version from source... "
332 cat > _libversion.c <<EOF
334 #include "lib/notmuch.h"
336 printf("libnotmuch_version_major=%d\n",
337 LIBNOTMUCH_MAJOR_VERSION);
338 printf("libnotmuch_version_minor=%d\n",
339 LIBNOTMUCH_MINOR_VERSION);
340 printf("libnotmuch_version_release=%d\n",
341 LIBNOTMUCH_MICRO_VERSION);
345 if ${CC} ${CFLAGS} _libversion.c -o _libversion > /dev/null 2>&1 && \
346 ./_libversion > _libversion.sh && . ./_libversion.sh
352 *** Error: Reading lib/notmuch.h failed.
353 Please try running configure again in a clean environment, and if the
354 problem persists, report a bug.
356 rm -f _libversion _libversion.c _libversion.sh
360 if pkg-config --version > /dev/null 2>&1; then
366 printf "Checking for Xapian development files... "
368 for xapian_config in ${XAPIAN_CONFIG} xapian-config xapian-config-1.3; do
369 if ${xapian_config} --version > /dev/null 2>&1; then
370 xapian_version=$(${xapian_config} --version | sed -e 's/.* //')
371 printf "Yes (%s).\n" ${xapian_version}
373 xapian_cxxflags=$(${xapian_config} --cxxflags)
374 xapian_ldflags=$(${xapian_config} --libs)
378 if [ ${have_xapian} = "0" ]; then
380 errors=$((errors + 1))
383 have_xapian_compact=0
384 have_xapian_field_processor=0
385 if [ ${have_xapian} = "1" ]; then
386 printf "Checking for Xapian compaction support... "
389 class TestCompactor : public Xapian::Compactor { };
391 if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _compact.cc -o _compact.o > /dev/null 2>&1
393 have_xapian_compact=1
399 rm -f _compact.o _compact.cc
401 printf "Checking for Xapian FieldProcessor API... "
402 cat>_field_processor.cc<<EOF
404 class TitleFieldProcessor : public Xapian::FieldProcessor { };
406 if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _field_processor.cc -o _field_processor.o > /dev/null 2>&1
408 have_xapian_field_processor=1
411 printf "No. (optional)\n"
414 rm -f _field_processor.o _field_processor.cc
416 default_xapian_backend=""
417 # DB_RETRY_LOCK is only supported on Xapian > 1.3.2
418 have_xapian_db_retry_lock=0
419 if [ $WITH_RETRY_LOCK = "1" ]; then
420 printf "Checking for Xapian lock retry support... "
423 int flag = Xapian::DB_RETRY_LOCK;
425 if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _retry.cc -o _retry.o > /dev/null 2>&1
427 have_xapian_db_retry_lock=1
430 printf "No. (optional)\n"
432 rm -f _retry.o _retry.cc
435 printf "Testing default Xapian backend... "
436 cat >_default_backend.cc <<EOF
438 int main(int argc, char** argv) {
439 Xapian::WritableDatabase db("test.db",Xapian::DB_CREATE_OR_OPEN);
442 ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} _default_backend.cc -o _default_backend ${xapian_ldflags}
444 if [ -f test.db/iamglass ]; then
445 default_xapian_backend=glass
447 default_xapian_backend=chert
449 printf "%s\n" "${default_xapian_backend}";
450 rm -rf test.db _default_backend _default_backend.cc
453 # we need to have a version >= 2.6.5 to avoid a crypto bug. We need
454 # 2.6.7 for permissive "From " header handling.
457 printf "Checking for GMime development files... "
458 if pkg-config --exists "gmime-2.6 >= $GMIME_MINVER"; then
461 gmime_cflags=$(pkg-config --cflags gmime-2.6)
462 gmime_ldflags=$(pkg-config --libs gmime-2.6)
466 errors=$((errors + 1))
469 # GMime already depends on Glib >= 2.12, but we use at least one Glib
470 # function that only exists as of 2.22, (g_array_unref)
471 printf "Checking for Glib development files (>= 2.22)... "
473 if pkg-config --exists 'glib-2.0 >= 2.22'; then
476 # these are included in gmime cflags and ldflags
477 # glib_cflags=$(pkg-config --cflags glib-2.0)
478 # glib_ldflags=$(pkg-config --libs glib-2.0)
481 errors=$((errors + 1))
484 if ! pkg-config --exists zlib; then
485 ${CC} ${zlib_cflags} -o compat/gen_zlib_pc \
486 "$srcdir"/compat/gen_zlib_pc.c ${zlib_ldflags} > /dev/null 2>&1 &&
487 compat/gen_zlib_pc > compat/zlib.pc &&
488 PKG_CONFIG_PATH="$PKG_CONFIG_PATH":compat &&
489 export PKG_CONFIG_PATH
490 rm -f compat/gen_zlib_pc
493 printf "Checking for zlib (>= 1.2.5.2)... "
495 if pkg-config --atleast-version=1.2.5.2 zlib; then
498 zlib_cflags=$(pkg-config --cflags zlib)
499 zlib_ldflags=$(pkg-config --libs zlib)
502 errors=$((errors + 1))
505 printf "Checking for talloc development files... "
506 if pkg-config --exists talloc; then
509 talloc_cflags=$(pkg-config --cflags talloc)
510 talloc_ldflags=$(pkg-config --libs talloc)
515 errors=$((errors + 1))
518 printf "Checking for python... "
521 for name in ${PYTHON} python python2 python3; do
522 if command -v $name > /dev/null; then
525 printf "Yes (%s).\n" "$name"
530 if [ $have_python -eq 0 ]; then
532 errors=$((errors + 1))
535 printf "Checking for valgrind development files... "
536 if pkg-config --exists valgrind; then
539 valgrind_cflags=$(pkg-config --cflags valgrind)
541 printf "No (but that's fine).\n"
546 printf "Checking for bash-completion (>= 1.90)... "
547 if pkg-config --atleast-version=1.90 bash-completion; then
550 printf "No (will not install bash completion).\n"
554 if [ -z "${EMACSLISPDIR-}" ]; then
555 EMACSLISPDIR="\$(prefix)/share/emacs/site-lisp"
558 if [ -z "${EMACSETCDIR-}" ]; then
559 EMACSETCDIR="\$(prefix)/share/emacs/site-lisp"
562 printf "Checking if emacs is available... "
563 if emacs --quick --batch > /dev/null 2>&1; then
567 printf "No (so will not byte-compile emacs code)\n"
572 if [ $WITH_API_DOCS = "1" ] ; then
573 printf "Checking if doxygen is available... "
574 if command -v doxygen > /dev/null; then
578 printf "No (so will not install api docs)\n"
583 if [ $WITH_RUBY = "1" ] ; then
584 printf "Checking for ruby development files... "
585 if ruby -e "require 'mkmf'"> /dev/null 2>&1; then
589 printf "No (skipping ruby bindings)\n"
594 if [ $WITH_DOCS = "1" ] ; then
595 printf "Checking if sphinx is available and supports nroff output... "
596 if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then
600 printf "No (so will not install man pages).\n"
606 printf "Checking which platform we are on... "
608 if [ $uname = "Darwin" ] ; then
611 linker_resolves_library_dependencies=0
612 elif [ $uname = "SunOS" ] ; then
615 linker_resolves_library_dependencies=0
616 elif [ $uname = "FreeBSD" ] ; then
619 linker_resolves_library_dependencies=0
620 elif [ $uname = "OpenBSD" ] ; then
623 linker_resolves_library_dependencies=0
624 elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
625 printf "%s\n" "$uname"
627 linker_resolves_library_dependencies=1
629 printf "Checking for %s in ldconfig... " "$libdir_expanded"
630 ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
631 # Separate ldconfig_paths only on newline (not on any potential
632 # embedded space characters in any filenames). Note, we use a
633 # literal newline in the source here rather than something like:
637 # because the shell's command substitution deletes any trailing newlines.
640 for path in $ldconfig_paths; do
641 if [ "$path" = "$libdir_expanded" ]; then
646 if [ "$libdir_in_ldconfig" = '0' ]; then
647 printf "No (will set RPATH)\n"
654 linker_resolves_library_dependencies=0
657 *** Warning: Unknown platform. Notmuch might or might not build correctly.
662 printf "Checking byte order... "
663 cat> _byteorder.c <<EOF
666 uint32_t test = 0x34333231;
667 int main() { printf("%.4s\n", (const char*)&test); return 0; }
669 ${CC} ${CFLAGS} _byteorder.c -o _byteorder > /dev/null 2>&1
670 util_byte_order=$(./_byteorder)
671 echo $util_byte_order
673 rm -f _byteorder _byteorder.c
675 if [ $errors -gt 0 ]; then
678 *** Error: The dependencies of notmuch could not be satisfied. You will
679 need to install the following packages before being able to compile
683 if [ $have_python -eq 0 ]; then
684 echo " python interpreter"
686 if [ $have_xapian -eq 0 ]; then
687 echo " Xapian library (including development files such as headers)"
688 echo " https://xapian.org/"
690 if [ $have_zlib -eq 0 ]; then
691 echo " zlib library (>= version 1.2.5.2, including development files such as headers)"
692 echo " http://zlib.net/"
695 if [ $have_gmime -eq 0 ]; then
696 echo " GMime 2.6 library >= $GMIME_MINVER"
697 echo " (including development files such as headers)"
698 echo " http://spruce.sourceforge.net/gmime/"
701 if [ $have_glib -eq 0 ]; then
702 echo " Glib library >= 2.22 (including development files such as headers)"
703 echo " http://ftp.gnome.org/pub/gnome/sources/glib/"
706 if [ $have_talloc -eq 0 ]; then
707 echo " The talloc library (including development files such as headers)"
708 echo " https://talloc.samba.org/"
712 With any luck, you're using a modern, package-based operating system
713 that has all of these packages available in the distribution. In that
714 case a simple command will install everything you need. For example:
716 On Debian and similar systems:
718 sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
720 Or on Fedora and similar systems:
722 sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
724 On other systems, similar commands can be used, but the details of the
725 package names may be different.
728 if [ $have_pkg_config -eq 0 ]; then
730 Note: the pkg-config program is not available. This configure script
731 uses pkg-config to find the compilation flags required to link against
732 the various libraries needed by notmuch. It's possible you simply need
733 to install pkg-config with a command such as:
735 sudo apt-get install pkg-config
737 sudo yum install pkgconfig
739 But if pkg-config is not available for your system, then you will need
740 to modify the configure script to manually set the cflags and ldflags
741 variables to the correct values to link against each library in each
742 case that pkg-config could not be used to determine those values.
747 When you have installed the necessary dependencies, you can run
748 configure again to ensure the packages can be found, or simply run
749 "make" to compile notmuch.
755 printf "Checking for canonicalize_file_name... "
756 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
759 have_canonicalize_file_name=1
761 printf "No (will use our own instead).\n"
762 have_canonicalize_file_name=0
764 rm -f compat/have_canonicalize_file_name
767 printf "Checking for getline... "
768 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
773 printf "No (will use our own instead).\n"
776 rm -f compat/have_getline
778 printf "Checking for strcasestr... "
779 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
784 printf "No (will use our own instead).\n"
787 rm -f compat/have_strcasestr
789 printf "Checking for strsep... "
790 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
795 printf "No (will use our own instead).\n"
798 rm -f compat/have_strsep
800 printf "Checking for timegm... "
801 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
806 printf "No (will use our own instead).\n"
809 rm -f compat/have_timegm
811 printf "Checking for dirent.d_type... "
812 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
817 printf "No (will use stat instead).\n"
820 rm -f compat/have_d_type
822 printf "Checking for standard version of getpwuid_r... "
823 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
828 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
831 rm -f compat/check_getpwuid
833 printf "Checking for standard version of asctime_r... "
834 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
839 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
842 rm -f compat/check_asctime
844 printf "Checking for rpath support... "
845 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
848 rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
850 printf "No (nothing to worry about).\n"
854 printf "Checking for -Wl,--as-needed... "
855 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
858 as_needed_ldflags="-Wl,--as-needed"
860 printf "No (nothing to worry about).\n"
864 printf "Checking for -Wl,--no-undefined... "
865 if ${CC} -Wl,--no-undefined -o minimal minimal.c >/dev/null 2>&1
868 no_undefined_ldflags="-Wl,--no-undefined"
870 printf "No (nothing to worry about).\n"
871 no_undefined_ldflags=""
875 printf "Checking for available C++ compiler warning flags... "
876 for flag in -Wall -Wextra -Wwrite-strings; do
877 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
879 WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
882 printf "\n\t%s\n" "${WARN_CXXFLAGS}"
884 WARN_CFLAGS="${WARN_CXXFLAGS}"
885 printf "Checking for available C compiler warning flags... "
886 for flag in -Wmissing-declarations; do
887 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
889 WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
892 printf "\n\t%s\n" "${WARN_CFLAGS}"
894 rm -f minimal minimal.c _libversion.c _libversion _libversion.sh
896 # construct the Makefile.config
897 cat > Makefile.config <<EOF
898 # This Makefile.config was automatically generated by the ./configure
899 # script of notmuch. If the configure script identified anything
900 # incorrectly, then you can edit this file to try to correct things,
901 # but be warned that if configure is run again it will destroy your
902 # changes, (and this could happen by simply calling "make" if the
903 # configure script is updated).
905 # The top-level directory for the source, (the directory containing
906 # the configure script). This may be different than the build
907 # directory (the current directory at the time configure was run).
910 # subdirectories to build
913 configure_options = $@
915 # We use vpath directives (rather than the VPATH variable) since the
916 # VPATH variable matches targets as well as prerequisites, (which is
917 # not useful since then a target left-over from a srcdir build would
918 # cause a target to not be built in the non-srcdir build).
920 # Also, we don't use a single "vpath % \$(srcdir)" here because we
921 # don't want the vpath to trigger for our emacs lisp compilation,
922 # (unless we first find a way to convince emacs to build the .elc
923 # target in a directory other than the directory of the .el
924 # prerequisite). In the meantime, we're actually copying in the .el
925 # files, (which is quite ugly).
927 vpath %.cc \$(srcdir)
928 vpath Makefile.% \$(srcdir)
929 vpath %.py \$(srcdir)
930 vpath %.rst \$(srcdir)
932 # Library versions (used to make SONAME)
933 # The major version of the library interface. This will control the soname.
934 # As such, this number must be incremented for any incompatible change to
935 # the library interface, (such as the deletion of an API or a major
936 # semantic change that breaks formerly functioning code).
938 LIBNOTMUCH_VERSION_MAJOR = ${libnotmuch_version_major}
940 # The minor version of the library interface. This should be incremented at
941 # the time of release for any additions to the library interface,
942 # (and when it is incremented, the release version of the library should
944 LIBNOTMUCH_VERSION_MINOR = ${libnotmuch_version_minor}
946 # The release version the library interface. This should be incremented at
947 # the time of release if there have been no changes to the interface, (but
948 # simply compatible changes to the implementation).
949 LIBNOTMUCH_VERSION_RELEASE = ${libnotmuch_version_release}
951 # These are derived from the VERSION macros in lib/notmuch.h so
952 # if you have to change them, something is wrong.
954 # The C compiler to use
957 # The C++ compiler to use
960 # Command to execute emacs from Makefiles
961 EMACS = emacs --quick
963 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
966 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
967 CPPFLAGS = ${CPPFLAGS}
969 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
970 CXXFLAGS = ${CXXFLAGS}
972 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
975 # Flags to enable warnings when using the C++ compiler
976 WARN_CXXFLAGS=${WARN_CXXFLAGS}
978 # Flags to enable warnings when using the C compiler
979 WARN_CFLAGS=${WARN_CFLAGS}
981 # Name of python interpreter
984 # The prefix to which notmuch should be installed
985 # Note: If you change this value here, be sure to ensure that the
986 # LIBDIR_IN_LDCONFIG value below is still set correctly.
989 # The directory to which libraries should be installed
990 # Note: If you change this value here, be sure to ensure that the
991 # LIBDIR_IN_LDCONFIG value below is still set correctly.
992 libdir = ${LIBDIR:=\$(prefix)/lib}
994 # byte order within a 32 bit word. 1234 = little, 4321 = big, 0 = guess
995 UTIL_BYTE_ORDER = ${util_byte_order}
997 # Whether libdir is in a path configured into ldconfig
998 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
1000 # The directory to which header files should be installed
1001 includedir = ${INCLUDEDIR:=\$(prefix)/include}
1003 # The directory to which man pages should be installed
1004 mandir = ${MANDIR:=\$(prefix)/share/man}
1006 # The directory to which read-only (configuration) files should be installed
1007 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
1009 # The directory to which emacs lisp files should be installed
1010 emacslispdir=${EMACSLISPDIR}
1012 # The directory to which emacs miscellaneous (machine-independent) files should
1014 emacsetcdir=${EMACSETCDIR}
1016 # Whether there's an emacs binary available for byte-compiling
1017 HAVE_EMACS = ${have_emacs}
1019 # Whether there's a sphinx-build binary available for building documentation
1020 HAVE_SPHINX=${have_sphinx}
1022 # Whether there's a doxygen binary available for building api documentation
1023 HAVE_DOXYGEN=${have_doxygen}
1025 # The directory to which desktop files should be installed
1026 desktop_dir = \$(prefix)/share/applications
1028 # The directory to which bash completions files should be installed
1029 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(sysconfdir)/bash_completion.d}
1031 # The directory to which zsh completions files should be installed
1032 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
1034 # Whether the canonicalize_file_name function is available (if not, then notmuch will
1035 # build its own version)
1036 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
1038 # Whether the getline function is available (if not, then notmuch will
1039 # build its own version)
1040 HAVE_GETLINE = ${have_getline}
1042 # Are the ruby development files (and ruby) available? If not skip
1043 # building/testing ruby bindings.
1044 HAVE_RUBY_DEV = ${have_ruby_dev}
1046 # Whether the strcasestr function is available (if not, then notmuch will
1047 # build its own version)
1048 HAVE_STRCASESTR = ${have_strcasestr}
1050 # Whether the strsep function is available (if not, then notmuch will
1051 # build its own version)
1052 HAVE_STRSEP = ${have_strsep}
1054 # Whether the timegm function is available (if not, then notmuch will
1055 # build its own version)
1056 HAVE_TIMEGM = ${have_timegm}
1058 # Whether struct dirent has d_type (if not, then notmuch will use stat)
1059 HAVE_D_TYPE = ${have_d_type}
1061 # Whether the Xapian version in use supports compaction
1062 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
1064 # Whether the Xapian version in use supports field processors
1065 HAVE_XAPIAN_FIELD_PROCESSOR = ${have_xapian_field_processor}
1067 # Whether the Xapian version in use supports DB_RETRY_LOCK
1068 HAVE_XAPIAN_DB_RETRY_LOCK = ${have_xapian_db_retry_lock}
1070 # Whether the getpwuid_r function is standards-compliant
1071 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1072 # to enable the standards-compliant version -- needed for Solaris)
1073 STD_GETPWUID = ${std_getpwuid}
1075 # Whether the asctime_r function is standards-compliant
1076 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1077 # to enable the standards-compliant version -- needed for Solaris)
1078 STD_ASCTIME = ${std_asctime}
1080 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
1081 PLATFORM = ${platform}
1083 # Whether the linker will automatically resolve the dependency of one
1084 # library on another (if not, then linking a binary requires linking
1085 # directly against both)
1086 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
1088 # Flags needed to compile and link against Xapian
1089 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
1090 XAPIAN_LDFLAGS = ${xapian_ldflags}
1092 # Which backend will Xapian use by default?
1093 DEFAULT_XAPIAN_BACKEND = ${default_xapian_backend}
1095 # Flags needed to compile and link against GMime
1096 GMIME_CFLAGS = ${gmime_cflags}
1097 GMIME_LDFLAGS = ${gmime_ldflags}
1099 # Flags needed to compile and link against zlib
1100 ZLIB_CFLAGS = ${zlib_cflags}
1101 ZLIB_LDFLAGS = ${zlib_ldflags}
1103 # Flags needed to compile and link against talloc
1104 TALLOC_CFLAGS = ${talloc_cflags}
1105 TALLOC_LDFLAGS = ${talloc_ldflags}
1107 # Flags needed to have linker set rpath attribute
1108 RPATH_LDFLAGS = ${rpath_ldflags}
1110 # Flags needed to have linker link only to necessary libraries
1111 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
1113 # Flags to have the linker flag undefined symbols in object files
1114 NO_UNDEFINED_LDFLAGS = ${no_undefined_ldflags}
1116 # Whether valgrind header files are available
1117 HAVE_VALGRIND = ${have_valgrind}
1119 # And if so, flags needed at compile time for valgrind macros
1120 VALGRIND_CFLAGS = ${valgrind_cflags}
1123 WITH_EMACS = ${WITH_EMACS}
1125 # Support for bash completion
1126 WITH_BASH = ${WITH_BASH}
1128 # Support for zsh completion
1129 WITH_ZSH = ${WITH_ZSH}
1131 # Combined flags for compiling and linking against all of the above
1132 COMMON_CONFIGURE_CFLAGS = \\
1133 \$(GMIME_CFLAGS) \$(TALLOC_CFLAGS) \$(ZLIB_CFLAGS) \\
1134 -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \$(VALGRIND_CFLAGS) \\
1135 -DHAVE_GETLINE=\$(HAVE_GETLINE) \\
1136 -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1137 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR) \\
1138 -DHAVE_STRSEP=\$(HAVE_STRSEP) \\
1139 -DHAVE_TIMEGM=\$(HAVE_TIMEGM) \\
1140 -DHAVE_D_TYPE=\$(HAVE_D_TYPE) \\
1141 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1142 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1143 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1144 -DHAVE_XAPIAN_FIELD_PROCESSOR=\$(HAVE_XAPIAN_FIELD_PROCESSOR) \\
1145 -DHAVE_XAPIAN_DB_RETRY_LOCK=\$(HAVE_XAPIAN_DB_RETRY_LOCK) \\
1146 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1148 CONFIGURE_CFLAGS = \$(COMMON_CONFIGURE_CFLAGS)
1150 CONFIGURE_CXXFLAGS = \$(COMMON_CONFIGURE_CFLAGS) \$(XAPIAN_CXXFLAGS)
1152 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
1155 # construct the sh.config
1156 cat > sh.config <<EOF
1157 # This sh.config was automatically generated by the ./configure
1158 # script of notmuch.
1160 # Whether the Xapian version in use supports compaction
1161 NOTMUCH_HAVE_XAPIAN_COMPACT=${have_xapian_compact}
1163 # Whether the Xapian version in use supports field processors
1164 NOTMUCH_HAVE_XAPIAN_FIELD_PROCESSOR=${have_xapian_field_processor}
1166 # Whether the Xapian version in use supports lock retry
1167 NOTMUCH_HAVE_XAPIAN_DB_RETRY_LOCK=${have_xapian_db_retry_lock}
1169 # Which backend will Xapian use by default?
1170 NOTMUCH_DEFAULT_XAPIAN_BACKEND=${default_xapian_backend}
1172 # do we have man pages?
1173 NOTMUCH_HAVE_MAN=$((have_sphinx))
1175 # Name of python interpreter
1176 NOTMUCH_PYTHON=${python}
1178 # Are the ruby development files (and ruby) available? If not skip
1179 # building/testing ruby bindings.
1180 NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
1183 # Finally, after everything configured, inform the user how to continue.
1186 All required packages were found. You may now run the following
1187 commands to compile and install notmuch: