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"
655 *** Warning: Unknown platform. Notmuch might or might not build correctly.
660 printf "Checking byte order... "
661 cat> _byteorder.c <<EOF
664 uint32_t test = 0x34333231;
665 int main() { printf("%.4s\n", (const char*)&test); return 0; }
667 ${CC} ${CFLAGS} _byteorder.c -o _byteorder > /dev/null 2>&1
668 util_byte_order=$(./_byteorder)
669 echo $util_byte_order
671 rm -f _byteorder _byteorder.c
673 if [ $errors -gt 0 ]; then
676 *** Error: The dependencies of notmuch could not be satisfied. You will
677 need to install the following packages before being able to compile
681 if [ $have_python -eq 0 ]; then
682 echo " python interpreter"
684 if [ $have_xapian -eq 0 ]; then
685 echo " Xapian library (including development files such as headers)"
686 echo " https://xapian.org/"
688 if [ $have_zlib -eq 0 ]; then
689 echo " zlib library (>= version 1.2.5.2, including development files such as headers)"
690 echo " http://zlib.net/"
693 if [ $have_gmime -eq 0 ]; then
694 echo " GMime 2.6 library >= $GMIME_MINVER"
695 echo " (including development files such as headers)"
696 echo " http://spruce.sourceforge.net/gmime/"
699 if [ $have_glib -eq 0 ]; then
700 echo " Glib library >= 2.22 (including development files such as headers)"
701 echo " http://ftp.gnome.org/pub/gnome/sources/glib/"
704 if [ $have_talloc -eq 0 ]; then
705 echo " The talloc library (including development files such as headers)"
706 echo " https://talloc.samba.org/"
710 With any luck, you're using a modern, package-based operating system
711 that has all of these packages available in the distribution. In that
712 case a simple command will install everything you need. For example:
714 On Debian and similar systems:
716 sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
718 Or on Fedora and similar systems:
720 sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
722 On other systems, similar commands can be used, but the details of the
723 package names may be different.
726 if [ $have_pkg_config -eq 0 ]; then
728 Note: the pkg-config program is not available. This configure script
729 uses pkg-config to find the compilation flags required to link against
730 the various libraries needed by notmuch. It's possible you simply need
731 to install pkg-config with a command such as:
733 sudo apt-get install pkg-config
735 sudo yum install pkgconfig
737 But if pkg-config is not available for your system, then you will need
738 to modify the configure script to manually set the cflags and ldflags
739 variables to the correct values to link against each library in each
740 case that pkg-config could not be used to determine those values.
745 When you have installed the necessary dependencies, you can run
746 configure again to ensure the packages can be found, or simply run
747 "make" to compile notmuch.
753 printf "Checking for canonicalize_file_name... "
754 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
757 have_canonicalize_file_name=1
759 printf "No (will use our own instead).\n"
760 have_canonicalize_file_name=0
762 rm -f compat/have_canonicalize_file_name
765 printf "Checking for getline... "
766 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
771 printf "No (will use our own instead).\n"
774 rm -f compat/have_getline
776 printf "Checking for strcasestr... "
777 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
782 printf "No (will use our own instead).\n"
785 rm -f compat/have_strcasestr
787 printf "Checking for strsep... "
788 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
793 printf "No (will use our own instead).\n"
796 rm -f compat/have_strsep
798 printf "Checking for timegm... "
799 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
804 printf "No (will use our own instead).\n"
807 rm -f compat/have_timegm
809 printf "Checking for dirent.d_type... "
810 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
815 printf "No (will use stat instead).\n"
818 rm -f compat/have_d_type
820 printf "Checking for standard version of getpwuid_r... "
821 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
826 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
829 rm -f compat/check_getpwuid
831 printf "Checking for standard version of asctime_r... "
832 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
837 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
840 rm -f compat/check_asctime
842 printf "Checking for rpath support... "
843 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
846 rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
848 printf "No (nothing to worry about).\n"
852 printf "Checking for -Wl,--as-needed... "
853 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
856 as_needed_ldflags="-Wl,--as-needed"
858 printf "No (nothing to worry about).\n"
862 printf "Checking for -Wl,--no-undefined... "
863 if ${CC} -Wl,--no-undefined -o minimal minimal.c >/dev/null 2>&1
866 no_undefined_ldflags="-Wl,--no-undefined"
868 printf "No (nothing to worry about).\n"
869 no_undefined_ldflags=""
873 printf "Checking for available C++ compiler warning flags... "
874 for flag in -Wall -Wextra -Wwrite-strings; do
875 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
877 WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
880 printf "\n\t%s\n" "${WARN_CXXFLAGS}"
882 WARN_CFLAGS="${WARN_CXXFLAGS}"
883 printf "Checking for available C compiler warning flags... "
884 for flag in -Wmissing-declarations; do
885 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
887 WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
890 printf "\n\t%s\n" "${WARN_CFLAGS}"
892 rm -f minimal minimal.c _libversion.c _libversion _libversion.sh
894 # construct the Makefile.config
895 cat > Makefile.config <<EOF
896 # This Makefile.config was automatically generated by the ./configure
897 # script of notmuch. If the configure script identified anything
898 # incorrectly, then you can edit this file to try to correct things,
899 # but be warned that if configure is run again it will destroy your
900 # changes, (and this could happen by simply calling "make" if the
901 # configure script is updated).
903 # The top-level directory for the source, (the directory containing
904 # the configure script). This may be different than the build
905 # directory (the current directory at the time configure was run).
908 # subdirectories to build
911 configure_options = $@
913 # We use vpath directives (rather than the VPATH variable) since the
914 # VPATH variable matches targets as well as prerequisites, (which is
915 # not useful since then a target left-over from a srcdir build would
916 # cause a target to not be built in the non-srcdir build).
918 # Also, we don't use a single "vpath % \$(srcdir)" here because we
919 # don't want the vpath to trigger for our emacs lisp compilation,
920 # (unless we first find a way to convince emacs to build the .elc
921 # target in a directory other than the directory of the .el
922 # prerequisite). In the meantime, we're actually copying in the .el
923 # files, (which is quite ugly).
925 vpath %.cc \$(srcdir)
926 vpath Makefile.% \$(srcdir)
927 vpath %.py \$(srcdir)
928 vpath %.rst \$(srcdir)
930 # Library versions (used to make SONAME)
931 # The major version of the library interface. This will control the soname.
932 # As such, this number must be incremented for any incompatible change to
933 # the library interface, (such as the deletion of an API or a major
934 # semantic change that breaks formerly functioning code).
936 LIBNOTMUCH_VERSION_MAJOR = ${libnotmuch_version_major}
938 # The minor version of the library interface. This should be incremented at
939 # the time of release for any additions to the library interface,
940 # (and when it is incremented, the release version of the library should
942 LIBNOTMUCH_VERSION_MINOR = ${libnotmuch_version_minor}
944 # The release version the library interface. This should be incremented at
945 # the time of release if there have been no changes to the interface, (but
946 # simply compatible changes to the implementation).
947 LIBNOTMUCH_VERSION_RELEASE = ${libnotmuch_version_release}
949 # These are derived from the VERSION macros in lib/notmuch.h so
950 # if you have to change them, something is wrong.
952 # The C compiler to use
955 # The C++ compiler to use
958 # Command to execute emacs from Makefiles
959 EMACS = emacs --quick
961 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
964 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
965 CPPFLAGS = ${CPPFLAGS}
967 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
968 CXXFLAGS = ${CXXFLAGS}
970 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
973 # Flags to enable warnings when using the C++ compiler
974 WARN_CXXFLAGS=${WARN_CXXFLAGS}
976 # Flags to enable warnings when using the C compiler
977 WARN_CFLAGS=${WARN_CFLAGS}
979 # Name of python interpreter
982 # The prefix to which notmuch should be installed
983 # Note: If you change this value here, be sure to ensure that the
984 # LIBDIR_IN_LDCONFIG value below is still set correctly.
987 # The directory to which libraries should be installed
988 # Note: If you change this value here, be sure to ensure that the
989 # LIBDIR_IN_LDCONFIG value below is still set correctly.
990 libdir = ${LIBDIR:=\$(prefix)/lib}
992 # byte order within a 32 bit word. 1234 = little, 4321 = big, 0 = guess
993 UTIL_BYTE_ORDER = ${util_byte_order}
995 # Whether libdir is in a path configured into ldconfig
996 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
998 # The directory to which header files should be installed
999 includedir = ${INCLUDEDIR:=\$(prefix)/include}
1001 # The directory to which man pages should be installed
1002 mandir = ${MANDIR:=\$(prefix)/share/man}
1004 # The directory to which read-only (configuration) files should be installed
1005 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
1007 # The directory to which emacs lisp files should be installed
1008 emacslispdir=${EMACSLISPDIR}
1010 # The directory to which emacs miscellaneous (machine-independent) files should
1012 emacsetcdir=${EMACSETCDIR}
1014 # Whether there's an emacs binary available for byte-compiling
1015 HAVE_EMACS = ${have_emacs}
1017 # Whether there's a sphinx-build binary available for building documentation
1018 HAVE_SPHINX=${have_sphinx}
1020 # Whether there's a doxygen binary available for building api documentation
1021 HAVE_DOXYGEN=${have_doxygen}
1023 # The directory to which desktop files should be installed
1024 desktop_dir = \$(prefix)/share/applications
1026 # The directory to which bash completions files should be installed
1027 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(sysconfdir)/bash_completion.d}
1029 # The directory to which zsh completions files should be installed
1030 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
1032 # Whether the canonicalize_file_name function is available (if not, then notmuch will
1033 # build its own version)
1034 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
1036 # Whether the getline function is available (if not, then notmuch will
1037 # build its own version)
1038 HAVE_GETLINE = ${have_getline}
1040 # Are the ruby development files (and ruby) available? If not skip
1041 # building/testing ruby bindings.
1042 HAVE_RUBY_DEV = ${have_ruby_dev}
1044 # Whether the strcasestr function is available (if not, then notmuch will
1045 # build its own version)
1046 HAVE_STRCASESTR = ${have_strcasestr}
1048 # Whether the strsep function is available (if not, then notmuch will
1049 # build its own version)
1050 HAVE_STRSEP = ${have_strsep}
1052 # Whether the timegm function is available (if not, then notmuch will
1053 # build its own version)
1054 HAVE_TIMEGM = ${have_timegm}
1056 # Whether struct dirent has d_type (if not, then notmuch will use stat)
1057 HAVE_D_TYPE = ${have_d_type}
1059 # Whether the Xapian version in use supports compaction
1060 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
1062 # Whether the Xapian version in use supports field processors
1063 HAVE_XAPIAN_FIELD_PROCESSOR = ${have_xapian_field_processor}
1065 # Whether the Xapian version in use supports DB_RETRY_LOCK
1066 HAVE_XAPIAN_DB_RETRY_LOCK = ${have_xapian_db_retry_lock}
1068 # Whether the getpwuid_r function is standards-compliant
1069 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1070 # to enable the standards-compliant version -- needed for Solaris)
1071 STD_GETPWUID = ${std_getpwuid}
1073 # Whether the asctime_r function is standards-compliant
1074 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1075 # to enable the standards-compliant version -- needed for Solaris)
1076 STD_ASCTIME = ${std_asctime}
1078 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
1079 PLATFORM = ${platform}
1081 # Whether the linker will automatically resolve the dependency of one
1082 # library on another (if not, then linking a binary requires linking
1083 # directly against both)
1084 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
1086 # Flags needed to compile and link against Xapian
1087 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
1088 XAPIAN_LDFLAGS = ${xapian_ldflags}
1090 # Which backend will Xapian use by default?
1091 DEFAULT_XAPIAN_BACKEND = ${default_xapian_backend}
1093 # Flags needed to compile and link against GMime
1094 GMIME_CFLAGS = ${gmime_cflags}
1095 GMIME_LDFLAGS = ${gmime_ldflags}
1097 # Flags needed to compile and link against zlib
1098 ZLIB_CFLAGS = ${zlib_cflags}
1099 ZLIB_LDFLAGS = ${zlib_ldflags}
1101 # Flags needed to compile and link against talloc
1102 TALLOC_CFLAGS = ${talloc_cflags}
1103 TALLOC_LDFLAGS = ${talloc_ldflags}
1105 # Flags needed to have linker set rpath attribute
1106 RPATH_LDFLAGS = ${rpath_ldflags}
1108 # Flags needed to have linker link only to necessary libraries
1109 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
1111 # Flags to have the linker flag undefined symbols in object files
1112 NO_UNDEFINED_LDFLAGS = ${no_undefined_ldflags}
1114 # Whether valgrind header files are available
1115 HAVE_VALGRIND = ${have_valgrind}
1117 # And if so, flags needed at compile time for valgrind macros
1118 VALGRIND_CFLAGS = ${valgrind_cflags}
1121 WITH_EMACS = ${WITH_EMACS}
1123 # Support for bash completion
1124 WITH_BASH = ${WITH_BASH}
1126 # Support for zsh completion
1127 WITH_ZSH = ${WITH_ZSH}
1129 # Combined flags for compiling and linking against all of the above
1130 COMMON_CONFIGURE_CFLAGS = \\
1131 \$(GMIME_CFLAGS) \$(TALLOC_CFLAGS) \$(ZLIB_CFLAGS) \\
1132 -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \$(VALGRIND_CFLAGS) \\
1133 -DHAVE_GETLINE=\$(HAVE_GETLINE) \\
1134 -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1135 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR) \\
1136 -DHAVE_STRSEP=\$(HAVE_STRSEP) \\
1137 -DHAVE_TIMEGM=\$(HAVE_TIMEGM) \\
1138 -DHAVE_D_TYPE=\$(HAVE_D_TYPE) \\
1139 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1140 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1141 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1142 -DHAVE_XAPIAN_FIELD_PROCESSOR=\$(HAVE_XAPIAN_FIELD_PROCESSOR) \\
1143 -DHAVE_XAPIAN_DB_RETRY_LOCK=\$(HAVE_XAPIAN_DB_RETRY_LOCK) \\
1144 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1146 CONFIGURE_CFLAGS = \$(COMMON_CONFIGURE_CFLAGS)
1148 CONFIGURE_CXXFLAGS = \$(COMMON_CONFIGURE_CFLAGS) \$(XAPIAN_CXXFLAGS)
1150 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
1153 # construct the sh.config
1154 cat > sh.config <<EOF
1155 # This sh.config was automatically generated by the ./configure
1156 # script of notmuch.
1158 # Whether the Xapian version in use supports compaction
1159 NOTMUCH_HAVE_XAPIAN_COMPACT=${have_xapian_compact}
1161 # Whether the Xapian version in use supports field processors
1162 NOTMUCH_HAVE_XAPIAN_FIELD_PROCESSOR=${have_xapian_field_processor}
1164 # Whether the Xapian version in use supports lock retry
1165 NOTMUCH_HAVE_XAPIAN_DB_RETRY_LOCK=${have_xapian_db_retry_lock}
1167 # Which backend will Xapian use by default?
1168 NOTMUCH_DEFAULT_XAPIAN_BACKEND=${default_xapian_backend}
1170 # do we have man pages?
1171 NOTMUCH_HAVE_MAN=$((have_sphinx))
1173 # Name of python interpreter
1174 NOTMUCH_PYTHON=${python}
1176 # Are the ruby development files (and ruby) available? If not skip
1177 # building/testing ruby bindings.
1178 NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
1181 # Finally, after everything configured, inform the user how to continue.
1184 All required packages were found. You may now run the following
1185 commands to compile and install notmuch: