5 # Test whether this shell is capable of parameter substring processing.
6 ( option='a/b'; : ${option#*/} ) 2>/dev/null || {
8 The shell interpreting '$0' is lacking some required features.
10 To work around this problem you may try to execute:
19 # Store original IFS value so it can be changed (and restored) in many places.
20 readonly DEFAULT_IFS="$IFS"
22 srcdir=$(dirname "$0")
24 subdirs="util compat lib parse-time-string completion doc emacs"
25 subdirs="${subdirs} performance-test test test/test-databases"
26 subdirs="${subdirs} bindings"
28 # For a non-srcdir configure invocation (such as ../configure), create
29 # the directory structure and copy Makefiles.
30 if [ "$srcdir" != "." ]; then
32 for dir in . ${subdirs}; do
34 cp "$srcdir"/"$dir"/Makefile.local "$dir"
35 cp "$srcdir"/"$dir"/Makefile "$dir"
38 # Easiest way to get the test suite to work is to just copy the
39 # whole thing into the build directory.
40 cp -a "$srcdir"/test/* test
42 # Emacs only likes to generate compiled files next to the .el files
43 # by default so copy these as well (which is not ideal).
44 cp -a "$srcdir"/emacs/*.el emacs
47 # Set several defaults (optionally specified by the user in
48 # environment variables)
51 CFLAGS=${CFLAGS:--g -O2}
52 CPPFLAGS=${CPPFLAGS:-}
53 CXXFLAGS_for_sh=${CXXFLAGS:-${CFLAGS}}
54 CXXFLAGS=${CXXFLAGS:-\$(CFLAGS)}
56 XAPIAN_CONFIG=${XAPIAN_CONFIG:-}
59 # We don't allow the EMACS or GZIP Makefile variables inherit values
60 # from the environment as we do with CC and CXX above. The reason is
61 # that these names as environment variables have existing uses other
62 # than the program name that we want. (EMACS is set to 't' when a
63 # shell is running within emacs and GZIP specifies arguments to pass
64 # on the gzip command line).
66 # Set the defaults for values the user can specify with command-line
79 Usage: ./configure [options]...
81 This script configures notmuch to build on your system.
83 It verifies that dependencies are available, determines flags needed
84 to compile and link against various required libraries, and identifies
85 whether various system functions can be used or if locally-provided
86 replacements will be built instead.
88 Finally, it allows you to control various aspects of the build and
91 First, some common variables can specified via environment variables:
93 CC The C compiler to use
94 CFLAGS Flags to pass to the C compiler
95 CPPFLAGS Flags to pass to the C preprocessor
96 CXX The C++ compiler to use
97 CXXFLAGS Flags to pass to the C compiler
98 LDFLAGS Flags to pass when linking
100 Each of these values can further be controlled by specifying them
101 later on the "make" command line.
103 Other environment variables can be used to control configure itself,
104 (and for which there is no equivalent build-time control):
106 XAPIAN_CONFIG The program to use to determine flags for
107 compiling and linking against the Xapian
108 library. [$XAPIAN_CONFIG]
109 PYTHON Name of python command to use in
110 configure and the test suite.
112 Additionally, various options can be specified on the configure
115 --prefix=PREFIX Install files in PREFIX [$PREFIX]
117 By default, "make install" will install the resulting program to
118 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
119 specify an installation prefix other than $PREFIX using
120 --prefix, for instance:
122 ./configure --prefix=\$HOME
124 Fine tuning of some installation directories is available:
126 --libdir=DIR Install libraries to DIR [PREFIX/lib]
127 --includedir=DIR Install header files to DIR [PREFIX/include]
128 --mandir=DIR Install man pages to DIR [PREFIX/share/man]
129 --sysconfdir=DIR Read-only single-machine data [PREFIX/etc]
130 --emacslispdir=DIR Emacs code [PREFIX/share/emacs/site-lisp]
131 --emacsetcdir=DIR Emacs miscellaneous files [PREFIX/share/emacs/site-lisp]
132 --bashcompletiondir=DIR Bash completions files [SYSCONFDIR/bash_completion.d]
133 --zshcompletiondir=DIR Zsh completions files [PREFIX/share/zsh/functions/Completion/Unix]
135 Some features can be disabled (--with-feature=no is equivalent to
138 --without-bash-completion Do not install bash completions files
139 --without-docs Do not install documentation and man pages
140 --without-emacs Do not install lisp file
141 --without-ruby Do not install ruby bindings
142 --without-zsh-completion Do not install zsh completions files
144 Additional options are accepted for compatibility with other
145 configure-script calling conventions, but don't do anything yet:
147 --build=<cpu>-<vendor>-<os> Currently ignored
148 --host=<cpu>-<vendor>-<os> Currently ignored
149 --infodir=DIR Currently ignored
150 --datadir=DIR Currently ignored
151 --localstatedir=DIR Currently ignored
152 --libexecdir=DIR Currently ignored
153 --disable-maintainer-mode Currently ignored
154 --disable-dependency-tracking Currently ignored
159 # Parse command-line options
161 if [ "${option}" = '--help' ] ; then
164 elif [ "${option%%=*}" = '--prefix' ] ; then
165 PREFIX="${option#*=}"
166 elif [ "${option%%=*}" = '--libdir' ] ; then
167 LIBDIR="${option#*=}"
168 elif [ "${option%%=*}" = '--includedir' ] ; then
169 INCLUDEDIR="${option#*=}"
170 elif [ "${option%%=*}" = '--mandir' ] ; then
171 MANDIR="${option#*=}"
172 elif [ "${option%%=*}" = '--sysconfdir' ] ; then
173 SYSCONFDIR="${option#*=}"
174 elif [ "${option%%=*}" = '--emacslispdir' ] ; then
175 EMACSLISPDIR="${option#*=}"
176 elif [ "${option%%=*}" = '--emacsetcdir' ] ; then
177 EMACSETCDIR="${option#*=}"
178 elif [ "${option%%=*}" = '--bashcompletiondir' ] ; then
179 BASHCOMPLETIONDIR="${option#*=}"
180 elif [ "${option%%=*}" = '--zshcompletiondir' ] ; then
181 ZSHCOMLETIONDIR="${option#*=}"
182 elif [ "${option%%=*}" = '--with-docs' ]; then
183 if [ "${option#*=}" = 'no' ]; then
188 elif [ "${option}" = '--without-docs' ] ; then
190 elif [ "${option%%=*}" = '--with-emacs' ]; then
191 if [ "${option#*=}" = 'no' ]; then
196 elif [ "${option}" = '--without-emacs' ] ; then
198 elif [ "${option%%=*}" = '--with-bash-completion' ]; then
199 if [ "${option#*=}" = 'no' ]; then
204 elif [ "${option}" = '--without-bash-completion' ] ; then
206 elif [ "${option%%=*}" = '--with-ruby' ]; then
207 if [ "${option#*=}" = 'no' ]; then
212 elif [ "${option}" = '--without-ruby' ] ; then
214 elif [ "${option%%=*}" = '--with-zsh-completion' ]; then
215 if [ "${option#*=}" = 'no' ]; then
220 elif [ "${option}" = '--without-zsh-completion' ] ; then
222 elif [ "${option%%=*}" = '--build' ] ; then
224 elif [ "${option%%=*}" = '--host' ] ; then
226 elif [ "${option%%=*}" = '--infodir' ] ; then
228 elif [ "${option%%=*}" = '--datadir' ] ; then
230 elif [ "${option%%=*}" = '--localstatedir' ] ; then
232 elif [ "${option%%=*}" = '--libexecdir' ] ; then
234 elif [ "${option}" = '--disable-maintainer-mode' ] ; then
236 elif [ "${option}" = '--disable-dependency-tracking' ] ; then
239 echo "Unrecognized option: ${option}"
247 # We set this value early, (rather than just while printing the
248 # Makefile.config file later like most values), because we need to
249 # actually investigate this value compared to the ldconfig_paths value
251 if [ -z "$LIBDIR" ] ; then
252 libdir_expanded="${PREFIX}/lib"
254 # very non-general variable expansion
255 libdir_expanded=$(echo "$LIBDIR" | sed "s|\\${prefix}|${PREFIX}|g; s|\\$prefix/|${PREFIX}/|; s|//*|/|g")
259 Welcome to Notmuch, a system for indexing, searching and tagging your email.
261 We hope that the process of building and installing notmuch is quick
262 and smooth so that you can soon be reading and processing your email
263 more efficiently than ever.
265 If anything goes wrong in the configure process, you can override any
266 decisions it makes by manually editing the Makefile.config file that
267 it creates. Also please do as much as you can to figure out what could
268 be different on your machine compared to those of the notmuch
269 developers. Then, please email those details to the Notmuch list
270 (notmuch@notmuchmail.org) so that we can hopefully make future
271 versions of notmuch easier for you to use.
273 We'll now investigate your system to verify that all required
274 dependencies are available:
279 printf "int main(void){return 0;}\n" > minimal.c
281 printf "Sanity checking C compilation environment... "
282 if ${CC} ${CFLAGS} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal > /dev/null 2>&1
287 errors=$((errors + 1))
290 printf "Sanity checking C++ compilation environment... "
291 if ${CXX} ${CXXFLAGS_for_sh} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal > /dev/null 2>&1
296 errors=$((errors + 1))
299 if [ $errors -gt 0 ]; then
301 *** Error: Initial sanity checking of environment failed. Please try
302 running configure in a clean environment, and if the problem persists,
305 rm -f minimal minimal.c
309 printf "Reading libnotmuch version from source... "
310 cat > _libversion.c <<EOF
312 #include "lib/notmuch.h"
314 printf("libnotmuch_version_major=%d\n",
315 LIBNOTMUCH_MAJOR_VERSION);
316 printf("libnotmuch_version_minor=%d\n",
317 LIBNOTMUCH_MINOR_VERSION);
318 printf("libnotmuch_version_release=%d\n",
319 LIBNOTMUCH_MICRO_VERSION);
323 if ${CC} ${CFLAGS} _libversion.c -o _libversion > /dev/null 2>&1 && \
324 ./_libversion > _libversion.sh && . ./_libversion.sh
330 *** Error: Reading lib/notmuch.h failed.
331 Please try running configure again in a clean environment, and if the
332 problem persists, report a bug.
334 rm -f _libversion _libversion.c _libversion.sh
338 if pkg-config --version > /dev/null 2>&1; then
344 printf "Checking for Xapian development files... "
346 for xapian_config in ${XAPIAN_CONFIG} xapian-config xapian-config-1.3; do
347 if ${xapian_config} --version > /dev/null 2>&1; then
348 xapian_version=$(${xapian_config} --version | sed -e 's/.* //')
349 printf "Yes (%s).\n" ${xapian_version}
351 xapian_cxxflags=$(${xapian_config} --cxxflags)
352 xapian_ldflags=$(${xapian_config} --libs)
356 if [ ${have_xapian} = "0" ]; then
358 errors=$((errors + 1))
361 # Compaction is only supported on Xapian > 1.2.6
362 have_xapian_compact=0
363 if [ ${have_xapian} = "1" ]; then
364 printf "Checking for Xapian compaction support... "
365 case "${xapian_version}" in
366 0.*|1.[01].*|1.2.[0-5])
367 printf "No (only available with Xapian > 1.2.6).\n" ;;
368 [1-9]*.[0-9]*.[0-9]*)
369 have_xapian_compact=1
372 printf "Unknown version.\n" ;;
376 default_xapian_backend=""
377 if [ ${have_xapian} = "1" ]; then
378 printf "Testing default Xapian backend... "
379 cat >_default_backend.cc <<EOF
381 int main(int argc, char** argv) {
382 Xapian::WritableDatabase db("test.db",Xapian::DB_CREATE_OR_OPEN);
385 ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} _default_backend.cc -o _default_backend ${xapian_ldflags}
387 if [ -f test.db/iamglass ]; then
388 default_xapian_backend=glass
390 default_xapian_backend=chert
392 printf "%s\n" "${default_xapian_backend}";
393 rm -rf test.db _default_backend _default_backend.cc
395 # we need to have a version >= 2.6.5 to avoid a crypto bug. We need
396 # 2.6.7 for permissive "From " header handling.
399 printf "Checking for GMime development files... "
400 if pkg-config --exists "gmime-2.6 >= $GMIME_MINVER"; then
403 gmime_cflags=$(pkg-config --cflags gmime-2.6)
404 gmime_ldflags=$(pkg-config --libs gmime-2.6)
408 errors=$((errors + 1))
411 # GMime already depends on Glib >= 2.12, but we use at least one Glib
412 # function that only exists as of 2.22, (g_array_unref)
413 printf "Checking for Glib development files (>= 2.22)... "
415 if pkg-config --exists 'glib-2.0 >= 2.22'; then
418 # these are included in gmime cflags and ldflags
419 # glib_cflags=$(pkg-config --cflags glib-2.0)
420 # glib_ldflags=$(pkg-config --libs glib-2.0)
423 errors=$((errors + 1))
426 if ! pkg-config --exists zlib; then
427 ${CC} ${zlib_cflags} -o compat/gen_zlib_pc \
428 "$srcdir"/compat/gen_zlib_pc.c ${zlib_ldflags} > /dev/null 2>&1 &&
429 compat/gen_zlib_pc > compat/zlib.pc &&
430 PKG_CONFIG_PATH="$PKG_CONFIG_PATH":compat &&
431 export PKG_CONFIG_PATH
432 rm -f compat/gen_zlib_pc
435 printf "Checking for zlib (>= 1.2.5.2)... "
437 if pkg-config --atleast-version=1.2.5.2 zlib; then
440 zlib_cflags=$(pkg-config --cflags zlib)
441 zlib_ldflags=$(pkg-config --libs zlib)
444 errors=$((errors + 1))
447 printf "Checking for talloc development files... "
448 if pkg-config --exists talloc; then
451 talloc_cflags=$(pkg-config --cflags talloc)
452 talloc_ldflags=$(pkg-config --libs talloc)
457 errors=$((errors + 1))
460 printf "Checking for python... "
463 for name in ${PYTHON} python python2 python3; do
464 if command -v $name > /dev/null; then
467 printf "Yes (%s).\n" "$name"
472 if [ $have_python -eq 0 ]; then
474 errors=$((errors + 1))
477 printf "Checking for valgrind development files... "
478 if pkg-config --exists valgrind; then
481 valgrind_cflags=$(pkg-config --cflags valgrind)
483 printf "No (but that's fine).\n"
488 printf "Checking for bash-completion (>= 1.90)... "
489 if pkg-config --atleast-version=1.90 bash-completion; then
492 printf "No (will not install bash completion).\n"
496 if [ -z "${EMACSLISPDIR-}" ]; then
497 EMACSLISPDIR="\$(prefix)/share/emacs/site-lisp"
500 if [ -z "${EMACSETCDIR-}" ]; then
501 EMACSETCDIR="\$(prefix)/share/emacs/site-lisp"
504 printf "Checking if emacs is available... "
505 if emacs --quick --batch > /dev/null 2>&1; then
509 printf "No (so will not byte-compile emacs code)\n"
514 if [ $WITH_DOCS = "1" ] ; then
515 printf "Checking if doxygen is available... "
516 if command -v doxygen > /dev/null; then
520 printf "No (so will not install api docs)\n"
525 if [ $WITH_RUBY = "1" ] ; then
526 printf "Checking for ruby development files... "
527 if ruby -e "require 'mkmf'"> /dev/null 2>&1; then
531 printf "No (skipping ruby bindings)\n"
536 if [ $WITH_DOCS = "1" ] ; then
537 printf "Checking if sphinx is available and supports nroff output... "
538 if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then
542 printf "No (so will not install man pages).\n"
548 printf "Checking which platform we are on... "
550 if [ $uname = "Darwin" ] ; then
553 linker_resolves_library_dependencies=0
554 elif [ $uname = "SunOS" ] ; then
557 linker_resolves_library_dependencies=0
558 elif [ $uname = "FreeBSD" ] ; then
561 linker_resolves_library_dependencies=0
562 elif [ $uname = "OpenBSD" ] ; then
565 linker_resolves_library_dependencies=0
566 elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
567 printf "%s\n" "$uname"
569 linker_resolves_library_dependencies=1
571 printf "Checking for %s in ldconfig... " "$libdir_expanded"
572 ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
573 # Separate ldconfig_paths only on newline (not on any potential
574 # embedded space characters in any filenames). Note, we use a
575 # literal newline in the source here rather than something like:
579 # because the shell's command substitution deletes any trailing newlines.
582 for path in $ldconfig_paths; do
583 if [ "$path" = "$libdir_expanded" ]; then
588 if [ "$libdir_in_ldconfig" = '0' ]; then
589 printf "No (will set RPATH)\n"
597 *** Warning: Unknown platform. Notmuch might or might not build correctly.
602 printf "Checking byte order... "
603 cat> _byteorder.c <<EOF
606 uint32_t test = 0x34333231;
607 int main() { printf("%.4s\n", (const char*)&test); return 0; }
609 ${CC} ${CFLAGS} _byteorder.c -o _byteorder > /dev/null 2>&1
610 util_byte_order=$(./_byteorder)
611 echo $util_byte_order
613 rm -f _byteorder _byteorder.c
615 if [ $errors -gt 0 ]; then
618 *** Error: The dependencies of notmuch could not be satisfied. You will
619 need to install the following packages before being able to compile
623 if [ $have_python -eq 0 ]; then
624 echo " python interpreter"
626 if [ $have_xapian -eq 0 ]; then
627 echo " Xapian library (including development files such as headers)"
628 echo " http://xapian.org/"
630 if [ $have_zlib -eq 0 ]; then
631 echo " zlib library (>= version 1.2.5.2, including development files such as headers)"
632 echo " http://zlib.net/"
635 if [ $have_gmime -eq 0 ]; then
636 echo " GMime 2.6 library >= $GMIME_MINVER"
637 echo " (including development files such as headers)"
638 echo " http://spruce.sourceforge.net/gmime/"
641 if [ $have_glib -eq 0 ]; then
642 echo " Glib library >= 2.22 (including development files such as headers)"
643 echo " http://ftp.gnome.org/pub/gnome/sources/glib/"
646 if [ $have_talloc -eq 0 ]; then
647 echo " The talloc library (including development files such as headers)"
648 echo " http://talloc.samba.org/"
652 With any luck, you're using a modern, package-based operating system
653 that has all of these packages available in the distribution. In that
654 case a simple command will install everything you need. For example:
656 On Debian and similar systems:
658 sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
660 Or on Fedora and similar systems:
662 sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
664 On other systems, similar commands can be used, but the details of the
665 package names may be different.
668 if [ $have_pkg_config -eq 0 ]; then
670 Note: the pkg-config program is not available. This configure script
671 uses pkg-config to find the compilation flags required to link against
672 the various libraries needed by notmuch. It's possible you simply need
673 to install pkg-config with a command such as:
675 sudo apt-get install pkg-config
677 sudo yum install pkgconfig
679 But if pkg-config is not available for your system, then you will need
680 to modify the configure script to manually set the cflags and ldflags
681 variables to the correct values to link against each library in each
682 case that pkg-config could not be used to determine those values.
687 When you have installed the necessary dependencies, you can run
688 configure again to ensure the packages can be found, or simply run
689 "make" to compile notmuch.
695 printf "Checking for canonicalize_file_name... "
696 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
699 have_canonicalize_file_name=1
701 printf "No (will use our own instead).\n"
702 have_canonicalize_file_name=0
704 rm -f compat/have_canonicalize_file_name
707 printf "Checking for getline... "
708 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
713 printf "No (will use our own instead).\n"
716 rm -f compat/have_getline
718 printf "Checking for strcasestr... "
719 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
724 printf "No (will use our own instead).\n"
727 rm -f compat/have_strcasestr
729 printf "Checking for strsep... "
730 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
735 printf "No (will use our own instead).\n"
738 rm -f compat/have_strsep
740 printf "Checking for timegm... "
741 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
746 printf "No (will use our own instead).\n"
749 rm -f compat/have_timegm
751 printf "Checking for dirent.d_type... "
752 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
757 printf "No (will use stat instead).\n"
760 rm -f compat/have_d_type
762 printf "Checking for standard version of getpwuid_r... "
763 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
768 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
771 rm -f compat/check_getpwuid
773 printf "Checking for standard version of asctime_r... "
774 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
779 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
782 rm -f compat/check_asctime
784 printf "Checking for rpath support... "
785 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
788 rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
790 printf "No (nothing to worry about).\n"
794 printf "Checking for -Wl,--as-needed... "
795 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
798 as_needed_ldflags="-Wl,--as-needed"
800 printf "No (nothing to worry about).\n"
804 printf "Checking for -Wl,--no-undefined... "
805 if ${CC} -Wl,--no-undefined -o minimal minimal.c >/dev/null 2>&1
808 no_undefined_ldflags="-Wl,--no-undefined"
810 printf "No (nothing to worry about).\n"
811 no_undefined_ldflags=""
815 printf "Checking for available C++ compiler warning flags... "
816 for flag in -Wall -Wextra -Wwrite-strings; do
817 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
819 WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
822 printf "\n\t%s\n" "${WARN_CXXFLAGS}"
824 WARN_CFLAGS="${WARN_CXXFLAGS}"
825 printf "Checking for available C compiler warning flags... "
826 for flag in -Wmissing-declarations; do
827 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
829 WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
832 printf "\n\t%s\n" "${WARN_CFLAGS}"
834 rm -f minimal minimal.c _libversion.c _libversion _libversion.sh
836 # construct the Makefile.config
837 cat > Makefile.config <<EOF
838 # This Makefile.config was automatically generated by the ./configure
839 # script of notmuch. If the configure script identified anything
840 # incorrectly, then you can edit this file to try to correct things,
841 # but be warned that if configure is run again it will destroy your
842 # changes, (and this could happen by simply calling "make" if the
843 # configure script is updated).
845 # The top-level directory for the source, (the directory containing
846 # the configure script). This may be different than the build
847 # directory (the current directory at the time configure was run).
850 # subdirectories to build
853 configure_options = $@
855 # We use vpath directives (rather than the VPATH variable) since the
856 # VPATH variable matches targets as well as prerequisites, (which is
857 # not useful since then a target left-over from a srcdir build would
858 # cause a target to not be built in the non-srcdir build).
860 # Also, we don't use a single "vpath % \$(srcdir)" here because we
861 # don't want the vpath to trigger for our emacs lisp compilation,
862 # (unless we first find a way to convince emacs to build the .elc
863 # target in a directory other than the directory of the .el
864 # prerequisite). In the meantime, we're actually copying in the .el
865 # files, (which is quite ugly).
867 vpath %.cc \$(srcdir)
868 vpath Makefile.% \$(srcdir)
869 vpath %.py \$(srcdir)
870 vpath %.rst \$(srcdir)
872 # Library versions (used to make SONAME)
873 # The major version of the library interface. This will control the soname.
874 # As such, this number must be incremented for any incompatible change to
875 # the library interface, (such as the deletion of an API or a major
876 # semantic change that breaks formerly functioning code).
878 LIBNOTMUCH_VERSION_MAJOR = ${libnotmuch_version_major}
880 # The minor version of the library interface. This should be incremented at
881 # the time of release for any additions to the library interface,
882 # (and when it is incremented, the release version of the library should
884 LIBNOTMUCH_VERSION_MINOR = ${libnotmuch_version_minor}
886 # The release version the library interface. This should be incremented at
887 # the time of release if there have been no changes to the interface, (but
888 # simply compatible changes to the implementation).
889 LIBNOTMUCH_VERSION_RELEASE = ${libnotmuch_version_release}
891 # These are derived from the VERSION macros in lib/notmuch.h so
892 # if you have to change them, something is wrong.
894 # The C compiler to use
897 # The C++ compiler to use
900 # Command to execute emacs from Makefiles
901 EMACS = emacs --quick
903 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
906 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
907 CPPFLAGS = ${CPPFLAGS}
909 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
910 CXXFLAGS = ${CXXFLAGS}
912 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
915 # Flags to enable warnings when using the C++ compiler
916 WARN_CXXFLAGS=${WARN_CXXFLAGS}
918 # Flags to enable warnings when using the C compiler
919 WARN_CFLAGS=${WARN_CFLAGS}
921 # Name of python interpreter
924 # The prefix to which notmuch should be installed
925 # Note: If you change this value here, be sure to ensure that the
926 # LIBDIR_IN_LDCONFIG value below is still set correctly.
929 # The directory to which libraries should be installed
930 # Note: If you change this value here, be sure to ensure that the
931 # LIBDIR_IN_LDCONFIG value below is still set correctly.
932 libdir = ${LIBDIR:=\$(prefix)/lib}
934 # byte order within a 32 bit word. 1234 = little, 4321 = big, 0 = guess
935 UTIL_BYTE_ORDER = ${util_byte_order}
937 # Whether libdir is in a path configured into ldconfig
938 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
940 # The directory to which header files should be installed
941 includedir = ${INCLUDEDIR:=\$(prefix)/include}
943 # The directory to which man pages should be installed
944 mandir = ${MANDIR:=\$(prefix)/share/man}
946 # The directory to which read-only (configuration) files should be installed
947 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
949 # The directory to which emacs lisp files should be installed
950 emacslispdir=${EMACSLISPDIR}
952 # The directory to which emacs miscellaneous (machine-independent) files should
954 emacsetcdir=${EMACSETCDIR}
956 # Whether there's an emacs binary available for byte-compiling
957 HAVE_EMACS = ${have_emacs}
959 # Whether there's a sphinx-build binary available for building documentation
960 HAVE_SPHINX=${have_sphinx}
962 # Whether there's a doxygen binary available for building api documentation
963 HAVE_DOXYGEN=${have_doxygen}
965 # The directory to which desktop files should be installed
966 desktop_dir = \$(prefix)/share/applications
968 # The directory to which bash completions files should be installed
969 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(sysconfdir)/bash_completion.d}
971 # The directory to which zsh completions files should be installed
972 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
974 # Whether the canonicalize_file_name function is available (if not, then notmuch will
975 # build its own version)
976 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
978 # Whether the getline function is available (if not, then notmuch will
979 # build its own version)
980 HAVE_GETLINE = ${have_getline}
982 # Are the ruby development files (and ruby) available? If not skip
983 # building/testing ruby bindings.
984 HAVE_RUBY_DEV = ${have_ruby_dev}
986 # Whether the strcasestr function is available (if not, then notmuch will
987 # build its own version)
988 HAVE_STRCASESTR = ${have_strcasestr}
990 # Whether the strsep function is available (if not, then notmuch will
991 # build its own version)
992 HAVE_STRSEP = ${have_strsep}
994 # Whether the timegm function is available (if not, then notmuch will
995 # build its own version)
996 HAVE_TIMEGM = ${have_timegm}
998 # Whether struct dirent has d_type (if not, then notmuch will use stat)
999 HAVE_D_TYPE = ${have_d_type}
1001 # Whether the Xapian version in use supports compaction
1002 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
1004 # Whether the getpwuid_r function is standards-compliant
1005 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1006 # to enable the standards-compliant version -- needed for Solaris)
1007 STD_GETPWUID = ${std_getpwuid}
1009 # Whether the asctime_r function is standards-compliant
1010 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1011 # to enable the standards-compliant version -- needed for Solaris)
1012 STD_ASCTIME = ${std_asctime}
1014 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
1015 PLATFORM = ${platform}
1017 # Whether the linker will automatically resolve the dependency of one
1018 # library on another (if not, then linking a binary requires linking
1019 # directly against both)
1020 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
1022 # Flags needed to compile and link against Xapian
1023 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
1024 XAPIAN_LDFLAGS = ${xapian_ldflags}
1026 # Which backend will Xapian use by default?
1027 DEFAULT_XAPIAN_BACKEND = ${default_xapian_backend}
1029 # Flags needed to compile and link against GMime
1030 GMIME_CFLAGS = ${gmime_cflags}
1031 GMIME_LDFLAGS = ${gmime_ldflags}
1033 # Flags needed to compile and link against zlib
1034 ZLIB_CFLAGS = ${zlib_cflags}
1035 ZLIB_LDFLAGS = ${zlib_ldflags}
1037 # Flags needed to compile and link against talloc
1038 TALLOC_CFLAGS = ${talloc_cflags}
1039 TALLOC_LDFLAGS = ${talloc_ldflags}
1041 # Flags needed to have linker set rpath attribute
1042 RPATH_LDFLAGS = ${rpath_ldflags}
1044 # Flags needed to have linker link only to necessary libraries
1045 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
1047 # Flags to have the linker flag undefined symbols in object files
1048 NO_UNDEFINED_LDFLAGS = ${no_undefined_ldflags}
1050 # Whether valgrind header files are available
1051 HAVE_VALGRIND = ${have_valgrind}
1053 # And if so, flags needed at compile time for valgrind macros
1054 VALGRIND_CFLAGS = ${valgrind_cflags}
1057 WITH_EMACS = ${WITH_EMACS}
1059 # Support for bash completion
1060 WITH_BASH = ${WITH_BASH}
1062 # Support for zsh completion
1063 WITH_ZSH = ${WITH_ZSH}
1065 # Combined flags for compiling and linking against all of the above
1066 CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
1067 -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1069 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
1070 \$(VALGRIND_CFLAGS) \\
1071 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR) \\
1072 -DHAVE_STRSEP=\$(HAVE_STRSEP) \\
1073 -DHAVE_TIMEGM=\$(HAVE_TIMEGM) \\
1074 -DHAVE_D_TYPE=\$(HAVE_D_TYPE) \\
1075 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1076 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1077 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1078 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1080 CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
1081 -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1083 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
1084 \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS) \\
1085 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR) \\
1086 -DHAVE_STRSEP=\$(HAVE_STRSEP) \\
1087 -DHAVE_TIMEGM=\$(HAVE_TIMEGM) \\
1088 -DHAVE_D_TYPE=\$(HAVE_D_TYPE) \\
1089 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1090 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1091 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1092 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1094 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
1097 # construct the sh.config
1098 cat > sh.config <<EOF
1099 # This sh.config was automatically generated by the ./configure
1100 # script of notmuch.
1102 # Whether the Xapian version in use supports compaction
1103 NOTMUCH_HAVE_XAPIAN_COMPACT=${have_xapian_compact}
1105 # Which backend will Xapian use by default?
1106 NOTMUCH_DEFAULT_XAPIAN_BACKEND=${default_xapian_backend}
1108 # do we have man pages?
1109 NOTMUCH_HAVE_MAN=$((have_sphinx))
1111 # Name of python interpreter
1112 NOTMUCH_PYTHON=${python}
1114 # Are the ruby development files (and ruby) available? If not skip
1115 # building/testing ruby bindings.
1116 NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
1119 # Finally, after everything configured, inform the user how to continue.
1122 All required packages were found. You may now run the following
1123 commands to compile and install notmuch: