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
80 Usage: ./configure [options]...
82 This script configures notmuch to build on your system.
84 It verifies that dependencies are available, determines flags needed
85 to compile and link against various required libraries, and identifies
86 whether various system functions can be used or if locally-provided
87 replacements will be built instead.
89 Finally, it allows you to control various aspects of the build and
92 First, some common variables can specified via environment variables:
94 CC The C compiler to use
95 CFLAGS Flags to pass to the C compiler
96 CPPFLAGS Flags to pass to the C preprocessor
97 CXX The C++ compiler to use
98 CXXFLAGS Flags to pass to the C compiler
99 LDFLAGS Flags to pass when linking
101 Each of these values can further be controlled by specifying them
102 later on the "make" command line.
104 Other environment variables can be used to control configure itself,
105 (and for which there is no equivalent build-time control):
107 XAPIAN_CONFIG The program to use to determine flags for
108 compiling and linking against the Xapian
109 library. [$XAPIAN_CONFIG]
110 PYTHON Name of python command to use in
111 configure and the test suite.
113 Additionally, various options can be specified on the configure
116 --prefix=PREFIX Install files in PREFIX [$PREFIX]
118 By default, "make install" will install the resulting program to
119 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
120 specify an installation prefix other than $PREFIX using
121 --prefix, for instance:
123 ./configure --prefix=\$HOME
125 Fine tuning of some installation directories is available:
127 --libdir=DIR Install libraries to DIR [PREFIX/lib]
128 --includedir=DIR Install header files to DIR [PREFIX/include]
129 --mandir=DIR Install man pages to DIR [PREFIX/share/man]
130 --sysconfdir=DIR Read-only single-machine data [PREFIX/etc]
131 --emacslispdir=DIR Emacs code [PREFIX/share/emacs/site-lisp]
132 --emacsetcdir=DIR Emacs miscellaneous files [PREFIX/share/emacs/site-lisp]
133 --bashcompletiondir=DIR Bash completions files [SYSCONFDIR/bash_completion.d]
134 --zshcompletiondir=DIR Zsh completions files [PREFIX/share/zsh/functions/Completion/Unix]
136 Some features can be disabled (--with-feature=no is equivalent to
139 --without-bash-completion Do not install bash completions files
140 --without-docs Do not install documentation and man pages
141 --without-emacs Do not install lisp file
142 --without-ruby Do not install ruby bindings
143 --without-zsh-completion Do not install zsh completions files
144 --without-retry-lock Do not use blocking xapian opens, even if available
146 Additional options are accepted for compatibility with other
147 configure-script calling conventions, but don't do anything yet:
149 --build=<cpu>-<vendor>-<os> Currently ignored
150 --host=<cpu>-<vendor>-<os> Currently ignored
151 --infodir=DIR Currently ignored
152 --datadir=DIR Currently ignored
153 --localstatedir=DIR Currently ignored
154 --libexecdir=DIR Currently ignored
155 --disable-maintainer-mode Currently ignored
156 --disable-dependency-tracking Currently ignored
161 # Parse command-line options
163 if [ "${option}" = '--help' ] ; then
166 elif [ "${option%%=*}" = '--prefix' ] ; then
167 PREFIX="${option#*=}"
168 elif [ "${option%%=*}" = '--libdir' ] ; then
169 LIBDIR="${option#*=}"
170 elif [ "${option%%=*}" = '--includedir' ] ; then
171 INCLUDEDIR="${option#*=}"
172 elif [ "${option%%=*}" = '--mandir' ] ; then
173 MANDIR="${option#*=}"
174 elif [ "${option%%=*}" = '--sysconfdir' ] ; then
175 SYSCONFDIR="${option#*=}"
176 elif [ "${option%%=*}" = '--emacslispdir' ] ; then
177 EMACSLISPDIR="${option#*=}"
178 elif [ "${option%%=*}" = '--emacsetcdir' ] ; then
179 EMACSETCDIR="${option#*=}"
180 elif [ "${option%%=*}" = '--bashcompletiondir' ] ; then
181 BASHCOMPLETIONDIR="${option#*=}"
182 elif [ "${option%%=*}" = '--zshcompletiondir' ] ; then
183 ZSHCOMLETIONDIR="${option#*=}"
184 elif [ "${option%%=*}" = '--with-docs' ]; then
185 if [ "${option#*=}" = 'no' ]; then
190 elif [ "${option}" = '--without-docs' ] ; then
192 elif [ "${option%%=*}" = '--with-emacs' ]; then
193 if [ "${option#*=}" = 'no' ]; then
198 elif [ "${option}" = '--without-emacs' ] ; then
200 elif [ "${option%%=*}" = '--with-bash-completion' ]; then
201 if [ "${option#*=}" = 'no' ]; then
206 elif [ "${option}" = '--without-bash-completion' ] ; then
208 elif [ "${option%%=*}" = '--with-ruby' ]; then
209 if [ "${option#*=}" = 'no' ]; then
214 elif [ "${option}" = '--without-ruby' ] ; then
216 elif [ "${option%%=*}" = '--with-retry-lock' ]; then
217 if [ "${option#*=}" = 'no' ]; then
222 elif [ "${option}" = '--without-retry-lock' ] ; then
224 elif [ "${option%%=*}" = '--with-zsh-completion' ]; then
225 if [ "${option#*=}" = 'no' ]; then
230 elif [ "${option}" = '--without-zsh-completion' ] ; then
232 elif [ "${option%%=*}" = '--build' ] ; then
234 elif [ "${option%%=*}" = '--host' ] ; then
236 elif [ "${option%%=*}" = '--infodir' ] ; then
238 elif [ "${option%%=*}" = '--datadir' ] ; then
240 elif [ "${option%%=*}" = '--localstatedir' ] ; then
242 elif [ "${option%%=*}" = '--libexecdir' ] ; then
244 elif [ "${option}" = '--disable-maintainer-mode' ] ; then
246 elif [ "${option}" = '--disable-dependency-tracking' ] ; then
249 echo "Unrecognized option: ${option}"
257 # We set this value early, (rather than just while printing the
258 # Makefile.config file later like most values), because we need to
259 # actually investigate this value compared to the ldconfig_paths value
261 if [ -z "$LIBDIR" ] ; then
262 libdir_expanded="${PREFIX}/lib"
264 # very non-general variable expansion
265 libdir_expanded=$(echo "$LIBDIR" | sed "s|\\${prefix}|${PREFIX}|g; s|\\$prefix/|${PREFIX}/|; s|//*|/|g")
269 Welcome to Notmuch, a system for indexing, searching and tagging your email.
271 We hope that the process of building and installing notmuch is quick
272 and smooth so that you can soon be reading and processing your email
273 more efficiently than ever.
275 If anything goes wrong in the configure process, you can override any
276 decisions it makes by manually editing the Makefile.config file that
277 it creates. Also please do as much as you can to figure out what could
278 be different on your machine compared to those of the notmuch
279 developers. Then, please email those details to the Notmuch list
280 (notmuch@notmuchmail.org) so that we can hopefully make future
281 versions of notmuch easier for you to use.
283 We'll now investigate your system to verify that all required
284 dependencies are available:
289 printf "int main(void){return 0;}\n" > minimal.c
291 printf "Sanity checking C compilation environment... "
292 if ${CC} ${CFLAGS} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal > /dev/null 2>&1
297 errors=$((errors + 1))
300 printf "Sanity checking C++ compilation environment... "
301 if ${CXX} ${CXXFLAGS_for_sh} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal > /dev/null 2>&1
306 errors=$((errors + 1))
309 if [ $errors -gt 0 ]; then
311 *** Error: Initial sanity checking of environment failed. Please try
312 running configure in a clean environment, and if the problem persists,
315 rm -f minimal minimal.c
319 printf "Reading libnotmuch version from source... "
320 cat > _libversion.c <<EOF
322 #include "lib/notmuch.h"
324 printf("libnotmuch_version_major=%d\n",
325 LIBNOTMUCH_MAJOR_VERSION);
326 printf("libnotmuch_version_minor=%d\n",
327 LIBNOTMUCH_MINOR_VERSION);
328 printf("libnotmuch_version_release=%d\n",
329 LIBNOTMUCH_MICRO_VERSION);
333 if ${CC} ${CFLAGS} _libversion.c -o _libversion > /dev/null 2>&1 && \
334 ./_libversion > _libversion.sh && . ./_libversion.sh
340 *** Error: Reading lib/notmuch.h failed.
341 Please try running configure again in a clean environment, and if the
342 problem persists, report a bug.
344 rm -f _libversion _libversion.c _libversion.sh
348 if pkg-config --version > /dev/null 2>&1; then
354 printf "Checking for Xapian development files... "
356 for xapian_config in ${XAPIAN_CONFIG} xapian-config xapian-config-1.3; do
357 if ${xapian_config} --version > /dev/null 2>&1; then
358 xapian_version=$(${xapian_config} --version | sed -e 's/.* //')
359 printf "Yes (%s).\n" ${xapian_version}
361 xapian_cxxflags=$(${xapian_config} --cxxflags)
362 xapian_ldflags=$(${xapian_config} --libs)
366 if [ ${have_xapian} = "0" ]; then
368 errors=$((errors + 1))
371 have_xapian_compact=0
372 have_xapian_field_processor=0
373 if [ ${have_xapian} = "1" ]; then
374 printf "Checking for Xapian compaction support... "
377 class TestCompactor : public Xapian::Compactor { };
379 if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _compact.cc -o _compact.o > /dev/null 2>&1
381 have_xapian_compact=1
387 rm -f _compact.o _compact.cc
389 printf "Checking for Xapian FieldProcessor API... "
390 cat>_field_processor.cc<<EOF
392 class TitleFieldProcessor : public Xapian::FieldProcessor { };
394 if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _field_processor.cc -o _field_processor.o > /dev/null 2>&1
396 have_xapian_field_processor=1
399 printf "No. (optional)\n"
402 rm -f _field_processor.o _field_processor.cc
404 default_xapian_backend=""
405 # DB_RETRY_LOCK is only supported on Xapian > 1.3.2
406 have_xapian_db_retry_lock=0
407 if [ $WITH_RETRY_LOCK = "1" ]; then
408 printf "Checking for Xapian lock retry support... "
411 int flag = Xapian::DB_RETRY_LOCK;
413 if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _retry.cc -o _retry.o > /dev/null 2>&1
415 have_xapian_db_retry_lock=1
418 printf "No. (optional)\n"
420 rm -f _retry.o _retry.cc
423 printf "Testing default Xapian backend... "
424 cat >_default_backend.cc <<EOF
426 int main(int argc, char** argv) {
427 Xapian::WritableDatabase db("test.db",Xapian::DB_CREATE_OR_OPEN);
430 ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} _default_backend.cc -o _default_backend ${xapian_ldflags}
432 if [ -f test.db/iamglass ]; then
433 default_xapian_backend=glass
435 default_xapian_backend=chert
437 printf "%s\n" "${default_xapian_backend}";
438 rm -rf test.db _default_backend _default_backend.cc
441 # we need to have a version >= 2.6.5 to avoid a crypto bug. We need
442 # 2.6.7 for permissive "From " header handling.
445 printf "Checking for GMime development files... "
446 if pkg-config --exists "gmime-2.6 >= $GMIME_MINVER"; then
449 gmime_cflags=$(pkg-config --cflags gmime-2.6)
450 gmime_ldflags=$(pkg-config --libs gmime-2.6)
454 errors=$((errors + 1))
457 # GMime already depends on Glib >= 2.12, but we use at least one Glib
458 # function that only exists as of 2.22, (g_array_unref)
459 printf "Checking for Glib development files (>= 2.22)... "
461 if pkg-config --exists 'glib-2.0 >= 2.22'; then
464 # these are included in gmime cflags and ldflags
465 # glib_cflags=$(pkg-config --cflags glib-2.0)
466 # glib_ldflags=$(pkg-config --libs glib-2.0)
469 errors=$((errors + 1))
472 if ! pkg-config --exists zlib; then
473 ${CC} ${zlib_cflags} -o compat/gen_zlib_pc \
474 "$srcdir"/compat/gen_zlib_pc.c ${zlib_ldflags} > /dev/null 2>&1 &&
475 compat/gen_zlib_pc > compat/zlib.pc &&
476 PKG_CONFIG_PATH="$PKG_CONFIG_PATH":compat &&
477 export PKG_CONFIG_PATH
478 rm -f compat/gen_zlib_pc
481 printf "Checking for zlib (>= 1.2.5.2)... "
483 if pkg-config --atleast-version=1.2.5.2 zlib; then
486 zlib_cflags=$(pkg-config --cflags zlib)
487 zlib_ldflags=$(pkg-config --libs zlib)
490 errors=$((errors + 1))
493 printf "Checking for talloc development files... "
494 if pkg-config --exists talloc; then
497 talloc_cflags=$(pkg-config --cflags talloc)
498 talloc_ldflags=$(pkg-config --libs talloc)
503 errors=$((errors + 1))
506 printf "Checking for python... "
509 for name in ${PYTHON} python python2 python3; do
510 if command -v $name > /dev/null; then
513 printf "Yes (%s).\n" "$name"
518 if [ $have_python -eq 0 ]; then
520 errors=$((errors + 1))
523 printf "Checking for valgrind development files... "
524 if pkg-config --exists valgrind; then
527 valgrind_cflags=$(pkg-config --cflags valgrind)
529 printf "No (but that's fine).\n"
534 printf "Checking for bash-completion (>= 1.90)... "
535 if pkg-config --atleast-version=1.90 bash-completion; then
538 printf "No (will not install bash completion).\n"
542 if [ -z "${EMACSLISPDIR-}" ]; then
543 EMACSLISPDIR="\$(prefix)/share/emacs/site-lisp"
546 if [ -z "${EMACSETCDIR-}" ]; then
547 EMACSETCDIR="\$(prefix)/share/emacs/site-lisp"
550 printf "Checking if emacs is available... "
551 if emacs --quick --batch > /dev/null 2>&1; then
555 printf "No (so will not byte-compile emacs code)\n"
560 if [ $WITH_DOCS = "1" ] ; then
561 printf "Checking if doxygen is available... "
562 if command -v doxygen > /dev/null; then
566 printf "No (so will not install api docs)\n"
571 if [ $WITH_RUBY = "1" ] ; then
572 printf "Checking for ruby development files... "
573 if ruby -e "require 'mkmf'"> /dev/null 2>&1; then
577 printf "No (skipping ruby bindings)\n"
582 if [ $WITH_DOCS = "1" ] ; then
583 printf "Checking if sphinx is available and supports nroff output... "
584 if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then
588 printf "No (so will not install man pages).\n"
594 printf "Checking which platform we are on... "
596 if [ $uname = "Darwin" ] ; then
599 linker_resolves_library_dependencies=0
600 elif [ $uname = "SunOS" ] ; then
603 linker_resolves_library_dependencies=0
604 elif [ $uname = "FreeBSD" ] ; then
607 linker_resolves_library_dependencies=0
608 elif [ $uname = "OpenBSD" ] ; then
611 linker_resolves_library_dependencies=0
612 elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
613 printf "%s\n" "$uname"
615 linker_resolves_library_dependencies=1
617 printf "Checking for %s in ldconfig... " "$libdir_expanded"
618 ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
619 # Separate ldconfig_paths only on newline (not on any potential
620 # embedded space characters in any filenames). Note, we use a
621 # literal newline in the source here rather than something like:
625 # because the shell's command substitution deletes any trailing newlines.
628 for path in $ldconfig_paths; do
629 if [ "$path" = "$libdir_expanded" ]; then
634 if [ "$libdir_in_ldconfig" = '0' ]; then
635 printf "No (will set RPATH)\n"
643 *** Warning: Unknown platform. Notmuch might or might not build correctly.
648 printf "Checking byte order... "
649 cat> _byteorder.c <<EOF
652 uint32_t test = 0x34333231;
653 int main() { printf("%.4s\n", (const char*)&test); return 0; }
655 ${CC} ${CFLAGS} _byteorder.c -o _byteorder > /dev/null 2>&1
656 util_byte_order=$(./_byteorder)
657 echo $util_byte_order
659 rm -f _byteorder _byteorder.c
661 if [ $errors -gt 0 ]; then
664 *** Error: The dependencies of notmuch could not be satisfied. You will
665 need to install the following packages before being able to compile
669 if [ $have_python -eq 0 ]; then
670 echo " python interpreter"
672 if [ $have_xapian -eq 0 ]; then
673 echo " Xapian library (including development files such as headers)"
674 echo " https://xapian.org/"
676 if [ $have_zlib -eq 0 ]; then
677 echo " zlib library (>= version 1.2.5.2, including development files such as headers)"
678 echo " http://zlib.net/"
681 if [ $have_gmime -eq 0 ]; then
682 echo " GMime 2.6 library >= $GMIME_MINVER"
683 echo " (including development files such as headers)"
684 echo " http://spruce.sourceforge.net/gmime/"
687 if [ $have_glib -eq 0 ]; then
688 echo " Glib library >= 2.22 (including development files such as headers)"
689 echo " http://ftp.gnome.org/pub/gnome/sources/glib/"
692 if [ $have_talloc -eq 0 ]; then
693 echo " The talloc library (including development files such as headers)"
694 echo " https://talloc.samba.org/"
698 With any luck, you're using a modern, package-based operating system
699 that has all of these packages available in the distribution. In that
700 case a simple command will install everything you need. For example:
702 On Debian and similar systems:
704 sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
706 Or on Fedora and similar systems:
708 sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
710 On other systems, similar commands can be used, but the details of the
711 package names may be different.
714 if [ $have_pkg_config -eq 0 ]; then
716 Note: the pkg-config program is not available. This configure script
717 uses pkg-config to find the compilation flags required to link against
718 the various libraries needed by notmuch. It's possible you simply need
719 to install pkg-config with a command such as:
721 sudo apt-get install pkg-config
723 sudo yum install pkgconfig
725 But if pkg-config is not available for your system, then you will need
726 to modify the configure script to manually set the cflags and ldflags
727 variables to the correct values to link against each library in each
728 case that pkg-config could not be used to determine those values.
733 When you have installed the necessary dependencies, you can run
734 configure again to ensure the packages can be found, or simply run
735 "make" to compile notmuch.
741 printf "Checking for canonicalize_file_name... "
742 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
745 have_canonicalize_file_name=1
747 printf "No (will use our own instead).\n"
748 have_canonicalize_file_name=0
750 rm -f compat/have_canonicalize_file_name
753 printf "Checking for getline... "
754 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
759 printf "No (will use our own instead).\n"
762 rm -f compat/have_getline
764 printf "Checking for strcasestr... "
765 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
770 printf "No (will use our own instead).\n"
773 rm -f compat/have_strcasestr
775 printf "Checking for strsep... "
776 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
781 printf "No (will use our own instead).\n"
784 rm -f compat/have_strsep
786 printf "Checking for timegm... "
787 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
792 printf "No (will use our own instead).\n"
795 rm -f compat/have_timegm
797 printf "Checking for dirent.d_type... "
798 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
803 printf "No (will use stat instead).\n"
806 rm -f compat/have_d_type
808 printf "Checking for standard version of getpwuid_r... "
809 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
814 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
817 rm -f compat/check_getpwuid
819 printf "Checking for standard version of asctime_r... "
820 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
825 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
828 rm -f compat/check_asctime
830 printf "Checking for rpath support... "
831 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
834 rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
836 printf "No (nothing to worry about).\n"
840 printf "Checking for -Wl,--as-needed... "
841 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
844 as_needed_ldflags="-Wl,--as-needed"
846 printf "No (nothing to worry about).\n"
850 printf "Checking for -Wl,--no-undefined... "
851 if ${CC} -Wl,--no-undefined -o minimal minimal.c >/dev/null 2>&1
854 no_undefined_ldflags="-Wl,--no-undefined"
856 printf "No (nothing to worry about).\n"
857 no_undefined_ldflags=""
861 printf "Checking for available C++ compiler warning flags... "
862 for flag in -Wall -Wextra -Wwrite-strings; do
863 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
865 WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
868 printf "\n\t%s\n" "${WARN_CXXFLAGS}"
870 WARN_CFLAGS="${WARN_CXXFLAGS}"
871 printf "Checking for available C compiler warning flags... "
872 for flag in -Wmissing-declarations; do
873 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
875 WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
878 printf "\n\t%s\n" "${WARN_CFLAGS}"
880 rm -f minimal minimal.c _libversion.c _libversion _libversion.sh
882 # construct the Makefile.config
883 cat > Makefile.config <<EOF
884 # This Makefile.config was automatically generated by the ./configure
885 # script of notmuch. If the configure script identified anything
886 # incorrectly, then you can edit this file to try to correct things,
887 # but be warned that if configure is run again it will destroy your
888 # changes, (and this could happen by simply calling "make" if the
889 # configure script is updated).
891 # The top-level directory for the source, (the directory containing
892 # the configure script). This may be different than the build
893 # directory (the current directory at the time configure was run).
896 # subdirectories to build
899 configure_options = $@
901 # We use vpath directives (rather than the VPATH variable) since the
902 # VPATH variable matches targets as well as prerequisites, (which is
903 # not useful since then a target left-over from a srcdir build would
904 # cause a target to not be built in the non-srcdir build).
906 # Also, we don't use a single "vpath % \$(srcdir)" here because we
907 # don't want the vpath to trigger for our emacs lisp compilation,
908 # (unless we first find a way to convince emacs to build the .elc
909 # target in a directory other than the directory of the .el
910 # prerequisite). In the meantime, we're actually copying in the .el
911 # files, (which is quite ugly).
913 vpath %.cc \$(srcdir)
914 vpath Makefile.% \$(srcdir)
915 vpath %.py \$(srcdir)
916 vpath %.rst \$(srcdir)
918 # Library versions (used to make SONAME)
919 # The major version of the library interface. This will control the soname.
920 # As such, this number must be incremented for any incompatible change to
921 # the library interface, (such as the deletion of an API or a major
922 # semantic change that breaks formerly functioning code).
924 LIBNOTMUCH_VERSION_MAJOR = ${libnotmuch_version_major}
926 # The minor version of the library interface. This should be incremented at
927 # the time of release for any additions to the library interface,
928 # (and when it is incremented, the release version of the library should
930 LIBNOTMUCH_VERSION_MINOR = ${libnotmuch_version_minor}
932 # The release version the library interface. This should be incremented at
933 # the time of release if there have been no changes to the interface, (but
934 # simply compatible changes to the implementation).
935 LIBNOTMUCH_VERSION_RELEASE = ${libnotmuch_version_release}
937 # These are derived from the VERSION macros in lib/notmuch.h so
938 # if you have to change them, something is wrong.
940 # The C compiler to use
943 # The C++ compiler to use
946 # Command to execute emacs from Makefiles
947 EMACS = emacs --quick
949 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
952 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
953 CPPFLAGS = ${CPPFLAGS}
955 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
956 CXXFLAGS = ${CXXFLAGS}
958 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
961 # Flags to enable warnings when using the C++ compiler
962 WARN_CXXFLAGS=${WARN_CXXFLAGS}
964 # Flags to enable warnings when using the C compiler
965 WARN_CFLAGS=${WARN_CFLAGS}
967 # Name of python interpreter
970 # The prefix to which notmuch should be installed
971 # Note: If you change this value here, be sure to ensure that the
972 # LIBDIR_IN_LDCONFIG value below is still set correctly.
975 # The directory to which libraries should be installed
976 # Note: If you change this value here, be sure to ensure that the
977 # LIBDIR_IN_LDCONFIG value below is still set correctly.
978 libdir = ${LIBDIR:=\$(prefix)/lib}
980 # byte order within a 32 bit word. 1234 = little, 4321 = big, 0 = guess
981 UTIL_BYTE_ORDER = ${util_byte_order}
983 # Whether libdir is in a path configured into ldconfig
984 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
986 # The directory to which header files should be installed
987 includedir = ${INCLUDEDIR:=\$(prefix)/include}
989 # The directory to which man pages should be installed
990 mandir = ${MANDIR:=\$(prefix)/share/man}
992 # The directory to which read-only (configuration) files should be installed
993 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
995 # The directory to which emacs lisp files should be installed
996 emacslispdir=${EMACSLISPDIR}
998 # The directory to which emacs miscellaneous (machine-independent) files should
1000 emacsetcdir=${EMACSETCDIR}
1002 # Whether there's an emacs binary available for byte-compiling
1003 HAVE_EMACS = ${have_emacs}
1005 # Whether there's a sphinx-build binary available for building documentation
1006 HAVE_SPHINX=${have_sphinx}
1008 # Whether there's a doxygen binary available for building api documentation
1009 HAVE_DOXYGEN=${have_doxygen}
1011 # The directory to which desktop files should be installed
1012 desktop_dir = \$(prefix)/share/applications
1014 # The directory to which bash completions files should be installed
1015 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(sysconfdir)/bash_completion.d}
1017 # The directory to which zsh completions files should be installed
1018 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
1020 # Whether the canonicalize_file_name function is available (if not, then notmuch will
1021 # build its own version)
1022 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
1024 # Whether the getline function is available (if not, then notmuch will
1025 # build its own version)
1026 HAVE_GETLINE = ${have_getline}
1028 # Are the ruby development files (and ruby) available? If not skip
1029 # building/testing ruby bindings.
1030 HAVE_RUBY_DEV = ${have_ruby_dev}
1032 # Whether the strcasestr function is available (if not, then notmuch will
1033 # build its own version)
1034 HAVE_STRCASESTR = ${have_strcasestr}
1036 # Whether the strsep function is available (if not, then notmuch will
1037 # build its own version)
1038 HAVE_STRSEP = ${have_strsep}
1040 # Whether the timegm function is available (if not, then notmuch will
1041 # build its own version)
1042 HAVE_TIMEGM = ${have_timegm}
1044 # Whether struct dirent has d_type (if not, then notmuch will use stat)
1045 HAVE_D_TYPE = ${have_d_type}
1047 # Whether the Xapian version in use supports compaction
1048 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
1050 # Whether the Xapian version in use supports field processors
1051 HAVE_XAPIAN_FIELD_PROCESSOR = ${have_xapian_field_processor}
1053 # Whether the Xapian version in use supports DB_RETRY_LOCK
1054 HAVE_XAPIAN_DB_RETRY_LOCK = ${have_xapian_db_retry_lock}
1056 # Whether the getpwuid_r function is standards-compliant
1057 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1058 # to enable the standards-compliant version -- needed for Solaris)
1059 STD_GETPWUID = ${std_getpwuid}
1061 # Whether the asctime_r function is standards-compliant
1062 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1063 # to enable the standards-compliant version -- needed for Solaris)
1064 STD_ASCTIME = ${std_asctime}
1066 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
1067 PLATFORM = ${platform}
1069 # Whether the linker will automatically resolve the dependency of one
1070 # library on another (if not, then linking a binary requires linking
1071 # directly against both)
1072 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
1074 # Flags needed to compile and link against Xapian
1075 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
1076 XAPIAN_LDFLAGS = ${xapian_ldflags}
1078 # Which backend will Xapian use by default?
1079 DEFAULT_XAPIAN_BACKEND = ${default_xapian_backend}
1081 # Flags needed to compile and link against GMime
1082 GMIME_CFLAGS = ${gmime_cflags}
1083 GMIME_LDFLAGS = ${gmime_ldflags}
1085 # Flags needed to compile and link against zlib
1086 ZLIB_CFLAGS = ${zlib_cflags}
1087 ZLIB_LDFLAGS = ${zlib_ldflags}
1089 # Flags needed to compile and link against talloc
1090 TALLOC_CFLAGS = ${talloc_cflags}
1091 TALLOC_LDFLAGS = ${talloc_ldflags}
1093 # Flags needed to have linker set rpath attribute
1094 RPATH_LDFLAGS = ${rpath_ldflags}
1096 # Flags needed to have linker link only to necessary libraries
1097 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
1099 # Flags to have the linker flag undefined symbols in object files
1100 NO_UNDEFINED_LDFLAGS = ${no_undefined_ldflags}
1102 # Whether valgrind header files are available
1103 HAVE_VALGRIND = ${have_valgrind}
1105 # And if so, flags needed at compile time for valgrind macros
1106 VALGRIND_CFLAGS = ${valgrind_cflags}
1109 WITH_EMACS = ${WITH_EMACS}
1111 # Support for bash completion
1112 WITH_BASH = ${WITH_BASH}
1114 # Support for zsh completion
1115 WITH_ZSH = ${WITH_ZSH}
1117 # Combined flags for compiling and linking against all of the above
1118 COMMON_CONFIGURE_CFLAGS = \\
1119 \$(GMIME_CFLAGS) \$(TALLOC_CFLAGS) \$(ZLIB_CFLAGS) \\
1120 -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \$(VALGRIND_CFLAGS) \\
1121 -DHAVE_GETLINE=\$(HAVE_GETLINE) \\
1122 -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1123 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR) \\
1124 -DHAVE_STRSEP=\$(HAVE_STRSEP) \\
1125 -DHAVE_TIMEGM=\$(HAVE_TIMEGM) \\
1126 -DHAVE_D_TYPE=\$(HAVE_D_TYPE) \\
1127 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1128 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1129 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1130 -DHAVE_XAPIAN_FIELD_PROCESSOR=\$(HAVE_XAPIAN_FIELD_PROCESSOR) \\
1131 -DHAVE_XAPIAN_DB_RETRY_LOCK=\$(HAVE_XAPIAN_DB_RETRY_LOCK) \\
1132 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1134 CONFIGURE_CFLAGS = \$(COMMON_CONFIGURE_CFLAGS)
1136 CONFIGURE_CXXFLAGS = \$(COMMON_CONFIGURE_CFLAGS) \$(XAPIAN_CXXFLAGS)
1138 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
1141 # construct the sh.config
1142 cat > sh.config <<EOF
1143 # This sh.config was automatically generated by the ./configure
1144 # script of notmuch.
1146 # Whether the Xapian version in use supports compaction
1147 NOTMUCH_HAVE_XAPIAN_COMPACT=${have_xapian_compact}
1149 # Whether the Xapian version in use supports field processors
1150 NOTMUCH_HAVE_XAPIAN_FIELD_PROCESSOR=${have_xapian_field_processor}
1152 # Whether the Xapian version in use supports lock retry
1153 NOTMUCH_HAVE_XAPIAN_DB_RETRY_LOCK=${have_xapian_db_retry_lock}
1155 # Which backend will Xapian use by default?
1156 NOTMUCH_DEFAULT_XAPIAN_BACKEND=${default_xapian_backend}
1158 # do we have man pages?
1159 NOTMUCH_HAVE_MAN=$((have_sphinx))
1161 # Name of python interpreter
1162 NOTMUCH_PYTHON=${python}
1164 # Are the ruby development files (and ruby) available? If not skip
1165 # building/testing ruby bindings.
1166 NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
1169 # Finally, after everything configured, inform the user how to continue.
1172 All required packages were found. You may now run the following
1173 commands to compile and install notmuch: