3 # Test whether this shell is capable of parameter substring processing.
4 ( option='a/b'; : ${option#*/} ) 2>/dev/null || {
6 The shell interpreting '$0' is lacking some required features.
8 To work around this problem you may try to execute:
17 # Store original IFS value so it can be changed (and restored) in many places.
18 readonly DEFAULT_IFS="$IFS"
20 srcdir=$(dirname "$0")
22 subdirs="util compat lib parse-time-string completion doc emacs"
23 subdirs="${subdirs} performance-test test test/test-databases"
24 subdirs="${subdirs} bindings"
26 # For a non-srcdir configure invocation (such as ../configure), create
27 # the directory structure and copy Makefiles.
28 if [ "$srcdir" != "." ]; then
30 for dir in . ${subdirs}; do
32 cp "$srcdir"/"$dir"/Makefile.local "$dir"
33 cp "$srcdir"/"$dir"/Makefile "$dir"
36 # Easiest way to get the test suite to work is to just copy the
37 # whole thing into the build directory.
38 cp -a "$srcdir"/test/* test
40 # Emacs only likes to generate compiled files next to the .el files
41 # by default so copy these as well (which is not ideal).
42 cp -a "$srcdir"/emacs/*.el emacs
45 # Set several defaults (optionally specified by the user in
46 # environment variables)
49 CFLAGS=${CFLAGS:--g -O2}
50 CPPFLAGS=${CPPFLAGS:-}
51 CXXFLAGS_for_sh=${CXXFLAGS:-${CFLAGS}}
52 CXXFLAGS=${CXXFLAGS:-\$(CFLAGS)}
54 XAPIAN_CONFIG=${XAPIAN_CONFIG:-xapian-config}
57 # We don't allow the EMACS or GZIP Makefile variables inherit values
58 # from the environment as we do with CC and CXX above. The reason is
59 # that these names as environment variables have existing uses other
60 # than the program name that we want. (EMACS is set to 't' when a
61 # shell is running within emacs and GZIP specifies arguments to pass
62 # on the gzip command line).
64 # Set the defaults for values the user can specify with command-line
74 # Compatible GMime versions (with constraints).
75 # If using GMime 2.6, we need to have a version >= 2.6.5 to avoid a
76 # crypto bug. We need 2.6.7 for permissive "From " header handling.
77 GMIME_24_VERSION_CTR=''
78 GMIME_24_VERSION="gmime-2.4 $GMIME_24_VERSION_CTR"
79 GMIME_26_VERSION_CTR='>= 2.6.7'
80 GMIME_26_VERSION="gmime-2.6 $GMIME_26_VERSION_CTR"
82 WITH_GMIME_VERSIONS="$GMIME_26_VERSION;$GMIME_24_VERSION"
87 Usage: ./configure [options]...
89 This script configures notmuch to build on your system.
91 It verifies that dependencies are available, determines flags needed
92 to compile and link against various required libraries, and identifies
93 whether various system functions can be used or if locally-provided
94 replacements will be built instead.
96 Finally, it allows you to control various aspects of the build and
99 First, some common variables can specified via environment variables:
101 CC The C compiler to use
102 CFLAGS Flags to pass to the C compiler
103 CPPFLAGS Flags to pass to the C preprocessor
104 CXX The C++ compiler to use
105 CXXFLAGS Flags to pass to the C compiler
106 LDFLAGS Flags to pass when linking
108 Each of these values can further be controlled by specifying them
109 later on the "make" command line.
111 Other environment variables can be used to control configure itself,
112 (and for which there is no equivalent build-time control):
114 XAPIAN_CONFIG The program to use to determine flags for
115 compiling and linking against the Xapian
116 library. [$XAPIAN_CONFIG]
117 PYTHON Name of python command to use in
118 configure and the test suite.
120 Additionally, various options can be specified on the configure
123 --prefix=PREFIX Install files in PREFIX [$PREFIX]
125 By default, "make install" will install the resulting program to
126 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
127 specify an installation prefix other than $PREFIX using
128 --prefix, for instance:
130 ./configure --prefix=\$HOME
132 Fine tuning of some installation directories is available:
134 --libdir=DIR Install libraries to DIR [PREFIX/lib]
135 --includedir=DIR Install header files to DIR [PREFIX/include]
136 --mandir=DIR Install man pages to DIR [PREFIX/share/man]
137 --sysconfdir=DIR Read-only single-machine data [PREFIX/etc]
138 --emacslispdir=DIR Emacs code [PREFIX/share/emacs/site-lisp]
139 --emacsetcdir=DIR Emacs miscellaneous files [PREFIX/share/emacs/site-lisp]
140 --bashcompletiondir=DIR Bash completions files [SYSCONFDIR/bash_completion.d]
141 --zshcompletiondir=DIR Zsh completions files [PREFIX/share/zsh/functions/Completion/Unix]
143 Some specific library versions can be specified (auto-detected otherwise):
145 --with-gmime-version=VERS Specify GMIME version (2.4 or 2.6)
147 Some features can be disabled (--with-feature=no is equivalent to
150 --without-bash-completion Do not install bash completions files
151 --without-docs Do not install documentation and man pages
152 --without-emacs Do not install lisp file
153 --without-ruby Do not install ruby bindings
154 --without-zsh-completion Do not install zsh completions files
156 Additional options are accepted for compatibility with other
157 configure-script calling conventions, but don't do anything yet:
159 --build=<cpu>-<vendor>-<os> Currently ignored
160 --host=<cpu>-<vendor>-<os> Currently ignored
161 --infodir=DIR Currently ignored
162 --datadir=DIR Currently ignored
163 --localstatedir=DIR Currently ignored
164 --libexecdir=DIR Currently ignored
165 --disable-maintainer-mode Currently ignored
166 --disable-dependency-tracking Currently ignored
171 # Parse command-line options
173 if [ "${option}" = '--help' ] ; then
176 elif [ "${option%%=*}" = '--prefix' ] ; then
177 PREFIX="${option#*=}"
178 elif [ "${option%%=*}" = '--libdir' ] ; then
179 LIBDIR="${option#*=}"
180 elif [ "${option%%=*}" = '--includedir' ] ; then
181 INCLUDEDIR="${option#*=}"
182 elif [ "${option%%=*}" = '--mandir' ] ; then
183 MANDIR="${option#*=}"
184 elif [ "${option%%=*}" = '--sysconfdir' ] ; then
185 SYSCONFDIR="${option#*=}"
186 elif [ "${option%%=*}" = '--emacslispdir' ] ; then
187 EMACSLISPDIR="${option#*=}"
188 elif [ "${option%%=*}" = '--emacsetcdir' ] ; then
189 EMACSETCDIR="${option#*=}"
190 elif [ "${option%%=*}" = '--bashcompletiondir' ] ; then
191 BASHCOMPLETIONDIR="${option#*=}"
192 elif [ "${option%%=*}" = '--zshcompletiondir' ] ; then
193 ZSHCOMLETIONDIR="${option#*=}"
194 elif [ "${option%%=*}" = '--with-docs' ]; then
195 if [ "${option#*=}" = 'no' ]; then
200 elif [ "${option}" = '--without-docs' ] ; then
202 elif [ "${option%%=*}" = '--with-emacs' ]; then
203 if [ "${option#*=}" = 'no' ]; then
208 elif [ "${option}" = '--without-emacs' ] ; then
210 elif [ "${option%%=*}" = '--with-bash-completion' ]; then
211 if [ "${option#*=}" = 'no' ]; then
216 elif [ "${option}" = '--without-bash-completion' ] ; then
218 elif [ "${option%%=*}" = '--with-ruby' ]; then
219 if [ "${option#*=}" = 'no' ]; then
224 elif [ "${option}" = '--without-ruby' ] ; then
226 elif [ "${option%%=*}" = '--with-zsh-completion' ]; then
227 if [ "${option#*=}" = 'no' ]; then
232 elif [ "${option}" = '--without-zsh-completion' ] ; then
234 elif [ "${option%%=*}" = '--with-gmime-version' ] ; then
235 if [ "${option#*=}" = '2.4' ]; then
236 WITH_GMIME_VERSIONS=$GMIME_24_VERSION
237 elif [ "${option#*=}" = '2.6' ]; then
238 WITH_GMIME_VERSIONS=$GMIME_26_VERSION
240 elif [ "${option%%=*}" = '--build' ] ; then
242 elif [ "${option%%=*}" = '--host' ] ; then
244 elif [ "${option%%=*}" = '--infodir' ] ; then
246 elif [ "${option%%=*}" = '--datadir' ] ; then
248 elif [ "${option%%=*}" = '--localstatedir' ] ; then
250 elif [ "${option%%=*}" = '--libexecdir' ] ; then
252 elif [ "${option}" = '--disable-maintainer-mode' ] ; then
254 elif [ "${option}" = '--disable-dependency-tracking' ] ; then
257 echo "Unrecognized option: ${option}"
265 # We set this value early, (rather than just while printing the
266 # Makefile.config file later like most values), because we need to
267 # actually investigate this value compared to the ldconfig_paths value
269 if [ -z "$LIBDIR" ] ; then
270 libdir_expanded="${PREFIX}/lib"
272 # very non-general variable expansion
273 libdir_expanded=`echo "$LIBDIR" | sed "s|\\${prefix}|${PREFIX}|g; s|\\$prefix/|${PREFIX}/|; s|//*|/|g"`
277 Welcome to Notmuch, a system for indexing, searching and tagging your email.
279 We hope that the process of building and installing notmuch is quick
280 and smooth so that you can soon be reading and processing your email
281 more efficiently than ever.
283 If anything goes wrong in the configure process, you can override any
284 decisions it makes by manually editing the Makefile.config file that
285 it creates. Also please do as much as you can to figure out what could
286 be different on your machine compared to those of the notmuch
287 developers. Then, please email those details to the Notmuch list
288 (notmuch@notmuchmail.org) so that we can hopefully make future
289 versions of notmuch easier for you to use.
291 We'll now investigate your system to verify that all required
292 dependencies are available:
297 printf "int main(void){return 0;}\n" > minimal.c
299 printf "Sanity checking C compilation environment... "
300 if ${CC} ${CFLAGS} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal > /dev/null 2>&1
305 errors=$((errors + 1))
308 printf "Sanity checking C++ compilation environment... "
309 if ${CXX} ${CXXFLAGS_for_sh} ${CPPFLAGS} minimal.c ${LDFLAGS} -o minimal > /dev/null 2>&1
314 errors=$((errors + 1))
317 if [ $errors -gt 0 ]; then
319 *** Error: Initial sanity checking of environment failed. Please try
320 running configure in a clean environment, and if the problem persists,
323 rm -f minimal minimal.c
327 printf "Reading libnotmuch version from source... "
328 cat > _libversion.c <<EOF
330 #include "lib/notmuch.h"
332 printf("libnotmuch_version_major=%d\n",
333 LIBNOTMUCH_MAJOR_VERSION);
334 printf("libnotmuch_version_minor=%d\n",
335 LIBNOTMUCH_MINOR_VERSION);
336 printf("libnotmuch_version_release=%d\n",
337 LIBNOTMUCH_MICRO_VERSION);
341 if ${CC} ${CFLAGS} _libversion.c -o _libversion > /dev/null 2>&1 && \
342 ./_libversion > _libversion.sh && . ./_libversion.sh
348 *** Error: Reading lib/notmuch.h failed.
349 Please try running configure again in a clean environment, and if the
350 problem persists, report a bug.
352 rm -f _libversion _libversion.c _libversion.sh
356 if pkg-config --version > /dev/null 2>&1; then
362 printf "Checking for Xapian development files... "
364 for xapian_config in ${XAPIAN_CONFIG}; do
365 if ${xapian_config} --version > /dev/null 2>&1; then
366 xapian_version=$(${xapian_config} --version | sed -e 's/.* //')
367 printf "Yes (%s).\n" ${xapian_version}
369 xapian_cxxflags=$(${xapian_config} --cxxflags)
370 xapian_ldflags=$(${xapian_config} --libs)
374 if [ ${have_xapian} = "0" ]; then
376 errors=$((errors + 1))
379 # Compaction is only supported on Xapian > 1.2.6
380 have_xapian_compact=0
381 if [ ${have_xapian} = "1" ]; then
382 printf "Checking for Xapian compaction support... "
383 case "${xapian_version}" in
384 0.*|1.[01].*|1.2.[0-5])
385 printf "No (only available with Xapian > 1.2.6).\n" ;;
386 [1-9]*.[0-9]*.[0-9]*)
387 have_xapian_compact=1
390 printf "Unknown version.\n" ;;
394 printf "Checking for GMime development files... "
397 for gmimepc in $WITH_GMIME_VERSIONS; do
398 if pkg-config --exists $gmimepc; then
399 printf "Yes ($gmimepc).\n"
401 gmime_cflags=$(pkg-config --cflags $gmimepc)
402 gmime_ldflags=$(pkg-config --libs $gmimepc)
407 if [ "$have_gmime" = "0" ]; then
409 errors=$((errors + 1))
412 # GMime already depends on Glib >= 2.12, but we use at least one Glib
413 # function that only exists as of 2.22, (g_array_unref)
414 printf "Checking for Glib development files (>= 2.22)... "
416 if pkg-config --exists 'glib-2.0 >= 2.22'; then
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 ($name).\n"
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"
487 printf "Checking for bash-completion (>= 1.90)... "
488 if pkg-config --atleast-version=1.90 bash-completion; then
491 printf "No (will not install bash completion).\n"
495 if [ -z "${EMACSLISPDIR}" ]; then
496 if pkg-config --exists emacs; then
497 EMACSLISPDIR=$(pkg-config emacs --variable sitepkglispdir)
499 EMACSLISPDIR='$(prefix)/share/emacs/site-lisp'
503 if [ -z "${EMACSETCDIR}" ]; then
504 if pkg-config --exists emacs; then
505 EMACSETCDIR=$(pkg-config emacs --variable sitepkglispdir)
507 EMACSETCDIR='$(prefix)/share/emacs/site-lisp'
511 printf "Checking if emacs is available... "
512 if emacs --quick --batch > /dev/null 2>&1; then
516 printf "No (so will not byte-compile emacs code)\n"
521 if [ $WITH_DOCS = "1" ] ; then
522 printf "Checking if doxygen is available... "
523 if command -v doxygen > /dev/null; then
527 printf "No (so will not install api docs)\n"
532 if [ $WITH_RUBY = "1" ] ; then
533 printf "Checking for ruby development files... "
534 if ruby -e "require 'mkmf'"> /dev/null 2>&1; then
538 printf "No (skipping ruby bindings)\n"
543 if [ $WITH_DOCS = "1" ] ; then
544 printf "Checking if sphinx is available and supports nroff output... "
545 if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then
549 printf "No (so will not install man pages).\n"
555 printf "Checking which platform we are on... "
557 if [ $uname = "Darwin" ] ; then
560 linker_resolves_library_dependencies=0
561 elif [ $uname = "SunOS" ] ; then
564 linker_resolves_library_dependencies=0
565 elif [ $uname = "FreeBSD" ] ; then
568 linker_resolves_library_dependencies=0
569 elif [ $uname = "OpenBSD" ] ; then
572 linker_resolves_library_dependencies=0
573 elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
576 linker_resolves_library_dependencies=1
578 printf "Checking for $libdir_expanded in ldconfig... "
579 ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
580 # Separate ldconfig_paths only on newline (not on any potential
581 # embedded space characters in any filenames). Note, we use a
582 # literal newline in the source here rather than something like:
586 # because the shell's command substitution deletes any trailing newlines.
589 for path in $ldconfig_paths; do
590 if [ "$path" = "$libdir_expanded" ]; then
595 if [ "$libdir_in_ldconfig" = '0' ]; then
596 printf "No (will set RPATH)\n"
604 *** Warning: Unknown platform. Notmuch might or might not build correctly.
609 printf "Checking byte order... "
610 cat> _byteorder.c <<EOF
613 uint32_t test = 0x34333231;
614 int main() { printf("%.4s\n", (const char*)&test); return 0; }
616 ${CC} ${CFLAGS} _byteorder.c -o _byteorder > /dev/null 2>&1
617 util_byte_order=$(./_byteorder)
618 echo $util_byte_order
620 rm -f _byteorder _byteorder.c
622 if [ $errors -gt 0 ]; then
625 *** Error: The dependencies of notmuch could not be satisfied. You will
626 need to install the following packages before being able to compile
630 if [ $have_python -eq 0 ]; then
631 echo " python interpreter"
633 if [ $have_xapian -eq 0 ]; then
634 echo " Xapian library (including development files such as headers)"
635 echo " http://xapian.org/"
637 if [ $have_zlib -eq 0 ]; then
638 echo " zlib library (>= version 1.2.5.2, including development files such as headers)"
639 echo " http://zlib.net/"
642 if [ $have_gmime -eq 0 ]; then
643 echo " Either GMime 2.4 library" $GMIME_24_VERSION_CTR "or GMime 2.6 library" $GMIME_26_VERSION_CTR
644 echo " (including development files such as headers)"
645 echo " http://spruce.sourceforge.net/gmime/"
648 if [ $have_glib -eq 0 ]; then
649 echo " Glib library >= 2.22 (including development files such as headers)"
650 echo " http://ftp.gnome.org/pub/gnome/sources/glib/"
653 if [ $have_talloc -eq 0 ]; then
654 echo " The talloc library (including development files such as headers)"
655 echo " http://talloc.samba.org/"
659 With any luck, you're using a modern, package-based operating system
660 that has all of these packages available in the distribution. In that
661 case a simple command will install everything you need. For example:
663 On Debian and similar systems:
665 sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
667 Or on Fedora and similar systems:
669 sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
671 On other systems, similar commands can be used, but the details of the
672 package names may be different.
675 if [ $have_pkg_config -eq 0 ]; then
677 Note: the pkg-config program is not available. This configure script
678 uses pkg-config to find the compilation flags required to link against
679 the various libraries needed by notmuch. It's possible you simply need
680 to install pkg-config with a command such as:
682 sudo apt-get install pkg-config
684 sudo yum install pkgconfig
686 But if pkg-config is not available for your system, then you will need
687 to modify the configure script to manually set the cflags and ldflags
688 variables to the correct values to link against each library in each
689 case that pkg-config could not be used to determine those values.
694 When you have installed the necessary dependencies, you can run
695 configure again to ensure the packages can be found, or simply run
696 "make" to compile notmuch.
702 printf "Checking for canonicalize_file_name... "
703 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
706 have_canonicalize_file_name=1
708 printf "No (will use our own instead).\n"
709 have_canonicalize_file_name=0
711 rm -f compat/have_canonicalize_file_name
714 printf "Checking for getline... "
715 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
720 printf "No (will use our own instead).\n"
723 rm -f compat/have_getline
725 printf "Checking for strcasestr... "
726 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
731 printf "No (will use our own instead).\n"
734 rm -f compat/have_strcasestr
736 printf "Checking for strsep... "
737 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
742 printf "No (will use our own instead).\n"
745 rm -f compat/have_strsep
747 printf "Checking for timegm... "
748 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
753 printf "No (will use our own instead).\n"
756 rm -f compat/have_timegm
758 printf "Checking for dirent.d_type... "
759 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
764 printf "No (will use stat instead).\n"
767 rm -f compat/have_d_type
769 printf "Checking for standard version of getpwuid_r... "
770 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
775 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
778 rm -f compat/check_getpwuid
780 printf "Checking for standard version of asctime_r... "
781 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
786 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
789 rm -f compat/check_asctime
791 printf "Checking for rpath support... "
792 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
795 rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
797 printf "No (nothing to worry about).\n"
801 printf "Checking for -Wl,--as-needed... "
802 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
805 as_needed_ldflags="-Wl,--as-needed"
807 printf "No (nothing to worry about).\n"
811 printf "Checking for -Wl,--no-undefined... "
812 if ${CC} -Wl,--no-undefined -o minimal minimal.c >/dev/null 2>&1
815 no_undefined_ldflags="-Wl,--no-undefined"
817 printf "No (nothing to worry about).\n"
818 no_undefined_ldflags=""
822 printf "Checking for available C++ compiler warning flags... "
823 for flag in -Wall -Wextra -Wwrite-strings; do
824 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
826 WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
829 printf "\n\t${WARN_CXXFLAGS}\n"
831 WARN_CFLAGS="${WARN_CXXFLAGS}"
832 printf "Checking for available C compiler warning flags... "
833 for flag in -Wmissing-declarations; do
834 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
836 WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
839 printf "\n\t${WARN_CFLAGS}\n"
841 rm -f minimal minimal.c _libversion.c _libversion _libversion.sh
843 # construct the Makefile.config
844 cat > Makefile.config <<EOF
845 # This Makefile.config was automatically generated by the ./configure
846 # script of notmuch. If the configure script identified anything
847 # incorrectly, then you can edit this file to try to correct things,
848 # but be warned that if configure is run again it will destroy your
849 # changes, (and this could happen by simply calling "make" if the
850 # configure script is updated).
852 # The top-level directory for the source, (the directory containing
853 # the configure script). This may be different than the build
854 # directory (the current directory at the time configure was run).
857 # subdirectories to build
860 configure_options = $@
862 # We use vpath directives (rather than the VPATH variable) since the
863 # VPATH variable matches targets as well as prerequisites, (which is
864 # not useful since then a target left-over from a srcdir build would
865 # cause a target to not be built in the non-srcdir build).
867 # Also, we don't use a single "vpath % \$(srcdir)" here because we
868 # don't want the vpath to trigger for our emacs lisp compilation,
869 # (unless we first find a way to convince emacs to build the .elc
870 # target in a directory other than the directory of the .el
871 # prerequisite). In the meantime, we're actually copying in the .el
872 # files, (which is quite ugly).
874 vpath %.cc \$(srcdir)
875 vpath Makefile.% \$(srcdir)
876 vpath %.py \$(srcdir)
877 vpath %.rst \$(srcdir)
879 # Library versions (used to make SONAME)
880 # The major version of the library interface. This will control the soname.
881 # As such, this number must be incremented for any incompatible change to
882 # the library interface, (such as the deletion of an API or a major
883 # semantic change that breaks formerly functioning code).
885 LIBNOTMUCH_VERSION_MAJOR = ${libnotmuch_version_major}
887 # The minor version of the library interface. This should be incremented at
888 # the time of release for any additions to the library interface,
889 # (and when it is incremented, the release version of the library should
891 LIBNOTMUCH_VERSION_MINOR = ${libnotmuch_version_minor}
893 # The release version the library interface. This should be incremented at
894 # the time of release if there have been no changes to the interface, (but
895 # simply compatible changes to the implementation).
896 LIBNOTMUCH_VERSION_RELEASE = ${libnotmuch_version_release}
898 # These are derived from the VERSION macros in lib/notmuch.h so
899 # if you have to change them, something is wrong.
901 # The C compiler to use
904 # The C++ compiler to use
907 # Command to execute emacs from Makefiles
908 EMACS = emacs --quick
910 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
913 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
914 CPPFLAGS = ${CPPFLAGS}
916 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
917 CXXFLAGS = ${CXXFLAGS}
919 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
922 # Flags to enable warnings when using the C++ compiler
923 WARN_CXXFLAGS=${WARN_CXXFLAGS}
925 # Flags to enable warnings when using the C compiler
926 WARN_CFLAGS=${WARN_CFLAGS}
928 # Name of python interpreter
931 # The prefix to which notmuch should be installed
932 # Note: If you change this value here, be sure to ensure that the
933 # LIBDIR_IN_LDCONFIG value below is still set correctly.
936 # The directory to which libraries should be installed
937 # Note: If you change this value here, be sure to ensure that the
938 # LIBDIR_IN_LDCONFIG value below is still set correctly.
939 libdir = ${LIBDIR:=\$(prefix)/lib}
941 # byte order within a 32 bit word. 1234 = little, 4321 = big, 0 = guess
942 UTIL_BYTE_ORDER = ${util_byte_order}
944 # Whether libdir is in a path configured into ldconfig
945 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
947 # The directory to which header files should be installed
948 includedir = ${INCLUDEDIR:=\$(prefix)/include}
950 # The directory to which man pages should be installed
951 mandir = ${MANDIR:=\$(prefix)/share/man}
953 # The directory to which read-only (configuration) files should be installed
954 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
956 # The directory to which emacs lisp files should be installed
957 emacslispdir=${EMACSLISPDIR}
959 # The directory to which emacs miscellaneous (machine-independent) files should
961 emacsetcdir=${EMACSETCDIR}
963 # Whether there's an emacs binary available for byte-compiling
964 HAVE_EMACS = ${have_emacs}
966 # Whether there's a sphinx-build binary available for building documentation
967 HAVE_SPHINX=${have_sphinx}
969 # Whether there's a doxygen binary available for building api documentation
970 HAVE_DOXYGEN=${have_doxygen}
972 # The directory to which desktop files should be installed
973 desktop_dir = \$(prefix)/share/applications
975 # The directory to which bash completions files should be installed
976 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(sysconfdir)/bash_completion.d}
978 # The directory to which zsh completions files should be installed
979 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
981 # Whether the canonicalize_file_name function is available (if not, then notmuch will
982 # build its own version)
983 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
985 # Whether the getline function is available (if not, then notmuch will
986 # build its own version)
987 HAVE_GETLINE = ${have_getline}
989 # Are the ruby development files (and ruby) available? If not skip
990 # building/testing ruby bindings.
991 HAVE_RUBY_DEV = ${have_ruby_dev}
993 # Whether the strcasestr function is available (if not, then notmuch will
994 # build its own version)
995 HAVE_STRCASESTR = ${have_strcasestr}
997 # Whether the strsep function is available (if not, then notmuch will
998 # build its own version)
999 HAVE_STRSEP = ${have_strsep}
1001 # Whether struct dirent has d_type (if not, then notmuch will use stat)
1002 HAVE_D_TYPE = ${have_d_type}
1004 # Whether the Xapian version in use supports compaction
1005 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
1007 # Whether the getpwuid_r function is standards-compliant
1008 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1009 # to enable the standards-compliant version -- needed for Solaris)
1010 STD_GETPWUID = ${std_getpwuid}
1012 # Whether the asctime_r function is standards-compliant
1013 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
1014 # to enable the standards-compliant version -- needed for Solaris)
1015 STD_ASCTIME = ${std_asctime}
1017 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
1018 PLATFORM = ${platform}
1020 # Whether the linker will automatically resolve the dependency of one
1021 # library on another (if not, then linking a binary requires linking
1022 # directly against both)
1023 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
1025 # Flags needed to compile and link against Xapian
1026 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
1027 XAPIAN_LDFLAGS = ${xapian_ldflags}
1029 # Flags needed to compile and link against GMime-2.4
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_D_TYPE=\$(HAVE_D_TYPE) \\
1074 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1075 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1076 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1077 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1079 CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
1080 -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1082 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
1083 \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS) \\
1084 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR) \\
1085 -DHAVE_STRSEP=\$(HAVE_STRSEP) \\
1086 -DHAVE_D_TYPE=\$(HAVE_D_TYPE) \\
1087 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1088 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1089 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1090 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1092 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
1095 # construct the sh.config
1096 cat > sh.config <<EOF
1097 # This sh.config was automatically generated by the ./configure
1098 # script of notmuch.
1100 # Whether the Xapian version in use supports compaction
1101 NOTMUCH_HAVE_XAPIAN_COMPACT=${have_xapian_compact}
1103 # do we have man pages?
1104 NOTMUCH_HAVE_MAN=$((have_sphinx))
1106 # Name of python interpreter
1107 NOTMUCH_PYTHON=${python}
1109 # Are the ruby development files (and ruby) available? If not skip
1110 # building/testing ruby bindings.
1111 NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
1114 # Finally, after everything configured, inform the user how to continue.
1117 All required packages were found. You may now run the following
1118 commands to compile and install notmuch: