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 ideal0.
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
73 # Compatible GMime versions (with constraints).
74 # If using GMime 2.6, we need to have a version >= 2.6.5 to avoid a
75 # crypto bug. We need 2.6.7 for permissive "From " header handling.
76 GMIME_24_VERSION_CTR=''
77 GMIME_24_VERSION="gmime-2.4 $GMIME_24_VERSION_CTR"
78 GMIME_26_VERSION_CTR='>= 2.6.7'
79 GMIME_26_VERSION="gmime-2.6 $GMIME_26_VERSION_CTR"
81 WITH_GMIME_VERSIONS="$GMIME_26_VERSION;$GMIME_24_VERSION"
86 Usage: ./configure [options]...
88 This script configures notmuch to build on your system.
90 It verifies that dependencies are available, determines flags needed
91 to compile and link against various required libraries, and identifies
92 whether various system functions can be used or if locally-provided
93 replacements will be built instead.
95 Finally, it allows you to control various aspects of the build and
98 First, some common variables can specified via environment variables:
100 CC The C compiler to use
101 CFLAGS Flags to pass to the C compiler
102 CPPFLAGS Flags to pass to the C preprocessor
103 CXX The C++ compiler to use
104 CXXFLAGS Flags to pass to the C compiler
105 LDFLAGS Flags to pass when linking
107 Each of these values can further be controlled by specifying them
108 later on the "make" command line.
110 Other environment variables can be used to control configure itself,
111 (and for which there is no equivalent build-time control):
113 XAPIAN_CONFIG The program to use to determine flags for
114 compiling and linking against the Xapian
115 library. [$XAPIAN_CONFIG]
117 Additionally, various options can be specified on the configure
120 --prefix=PREFIX Install files in PREFIX [$PREFIX]
122 By default, "make install" will install the resulting program to
123 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
124 specify an installation prefix other than $PREFIX using
125 --prefix, for instance:
127 ./configure --prefix=\$HOME
129 Fine tuning of some installation directories is available:
131 --libdir=DIR Install libraries to DIR [PREFIX/lib]
132 --includedir=DIR Install header files to DIR [PREFIX/include]
133 --mandir=DIR Install man pages to DIR [PREFIX/share/man]
134 --sysconfdir=DIR Read-only single-machine data [PREFIX/etc]
135 --emacslispdir=DIR Emacs code [PREFIX/share/emacs/site-lisp]
136 --emacsetcdir=DIR Emacs miscellaneous files [PREFIX/share/emacs/site-lisp]
137 --bashcompletiondir=DIR Bash completions files [SYSCONFDIR/bash_completion.d]
138 --zshcompletiondir=DIR Zsh completions files [PREFIX/share/zsh/functions/Completion/Unix]
140 Some specific library versions can be specified (auto-detected otherwise):
142 --with-gmime-version=VERS Specify GMIME version (2.4 or 2.6)
144 Some features can be disabled (--with-feature=no is equivalent to
147 --without-docs Do not install documentation and man pages
148 --without-emacs Do not install lisp file
149 --without-bash-completion Do not install bash completions files
150 --without-zsh-completion Do not install zsh completions files
152 Additional options are accepted for compatibility with other
153 configure-script calling conventions, but don't do anything yet:
155 --build=<cpu>-<vendor>-<os> Currently ignored
156 --host=<cpu>-<vendor>-<os> Currently ignored
157 --infodir=DIR Currently ignored
158 --datadir=DIR Currently ignored
159 --localstatedir=DIR Currently ignored
160 --libexecdir=DIR Currently ignored
161 --disable-maintainer-mode Currently ignored
162 --disable-dependency-tracking Currently ignored
167 # Parse command-line options
169 if [ "${option}" = '--help' ] ; then
172 elif [ "${option%%=*}" = '--prefix' ] ; then
173 PREFIX="${option#*=}"
174 elif [ "${option%%=*}" = '--libdir' ] ; then
175 LIBDIR="${option#*=}"
176 elif [ "${option%%=*}" = '--includedir' ] ; then
177 INCLUDEDIR="${option#*=}"
178 elif [ "${option%%=*}" = '--mandir' ] ; then
179 MANDIR="${option#*=}"
180 elif [ "${option%%=*}" = '--sysconfdir' ] ; then
181 SYSCONFDIR="${option#*=}"
182 elif [ "${option%%=*}" = '--emacslispdir' ] ; then
183 EMACSLISPDIR="${option#*=}"
184 elif [ "${option%%=*}" = '--emacsetcdir' ] ; then
185 EMACSETCDIR="${option#*=}"
186 elif [ "${option%%=*}" = '--bashcompletiondir' ] ; then
187 BASHCOMPLETIONDIR="${option#*=}"
188 elif [ "${option%%=*}" = '--zshcompletiondir' ] ; then
189 ZSHCOMLETIONDIR="${option#*=}"
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-zsh-completion' ]; then
209 if [ "${option#*=}" = 'no' ]; then
214 elif [ "${option}" = '--without-zsh-completion' ] ; then
216 elif [ "${option%%=*}" = '--with-gmime-version' ] ; then
217 if [ "${option#*=}" = '2.4' ]; then
218 WITH_GMIME_VERSIONS=$GMIME_24_VERSION
219 elif [ "${option#*=}" = '2.6' ]; then
220 WITH_GMIME_VERSIONS=$GMIME_26_VERSION
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 if pkg-config --version > /dev/null 2>&1; then
315 printf "Checking for Xapian development files... "
317 for xapian_config in ${XAPIAN_CONFIG}; do
318 if ${xapian_config} --version > /dev/null 2>&1; then
319 xapian_version=$(${xapian_config} --version | sed -e 's/.* //')
320 printf "Yes (%s).\n" ${xapian_version}
322 xapian_cxxflags=$(${xapian_config} --cxxflags)
323 xapian_ldflags=$(${xapian_config} --libs)
327 if [ ${have_xapian} = "0" ]; then
329 errors=$((errors + 1))
332 # Compaction is only supported on Xapian > 1.2.6
333 have_xapian_compact=0
334 if [ ${have_xapian} = "1" ]; then
335 printf "Checking for Xapian compaction support... "
336 case "${xapian_version}" in
337 0.*|1.[01].*|1.2.[0-5])
338 printf "No (only available with Xapian > 1.2.6).\n" ;;
339 [1-9]*.[0-9]*.[0-9]*)
340 have_xapian_compact=1
343 printf "Unknown version.\n" ;;
347 printf "Checking for GMime development files... "
350 for gmimepc in $WITH_GMIME_VERSIONS; do
351 if pkg-config --exists $gmimepc; then
352 printf "Yes ($gmimepc).\n"
354 gmime_cflags=$(pkg-config --cflags $gmimepc)
355 gmime_ldflags=$(pkg-config --libs $gmimepc)
360 if [ "$have_gmime" = "0" ]; then
362 errors=$((errors + 1))
365 # GMime already depends on Glib >= 2.12, but we use at least one Glib
366 # function that only exists as of 2.22, (g_array_unref)
367 printf "Checking for Glib development files (>= 2.22)... "
369 if pkg-config --exists 'glib-2.0 >= 2.22'; then
372 glib_cflags=$(pkg-config --cflags glib-2.0)
373 glib_ldflags=$(pkg-config --libs glib-2.0)
376 errors=$((errors + 1))
379 if ! pkg-config --exists zlib; then
380 ${CC} ${zlib_cflags} -o compat/gen_zlib_pc \
381 "$srcdir"/compat/gen_zlib_pc.c ${zlib_ldflags} > /dev/null 2>&1 &&
382 compat/gen_zlib_pc > compat/zlib.pc &&
383 PKG_CONFIG_PATH="$PKG_CONFIG_PATH":compat &&
384 export PKG_CONFIG_PATH
385 rm -f compat/gen_zlib_pc
388 printf "Checking for zlib (>= 1.2.5.2)... "
390 if pkg-config --atleast-version=1.2.5.2 zlib; then
393 zlib_cflags=$(pkg-config --cflags zlib)
394 zlib_ldflags=$(pkg-config --libs zlib)
397 errors=$((errors + 1))
400 printf "Checking for talloc development files... "
401 if pkg-config --exists talloc; then
404 talloc_cflags=$(pkg-config --cflags talloc)
405 talloc_ldflags=$(pkg-config --libs talloc)
410 errors=$((errors + 1))
413 printf "Checking for python... "
416 for name in ${PYTHON} python python2 python3; do
417 if command -v $name > /dev/null; then
420 printf "Yes ($name).\n"
425 if [ $have_python -eq 0 ]; then
427 errors=$((errors + 1))
430 printf "Checking for valgrind development files... "
431 if pkg-config --exists valgrind; then
434 valgrind_cflags=$(pkg-config --cflags valgrind)
436 printf "No (but that's fine).\n"
440 printf "Checking for bash-completion (>= 1.90)... "
441 if pkg-config --atleast-version=1.90 bash-completion; then
444 printf "No (will not install bash completion).\n"
448 if [ -z "${EMACSLISPDIR}" ]; then
449 if pkg-config --exists emacs; then
450 EMACSLISPDIR=$(pkg-config emacs --variable sitepkglispdir)
452 EMACSLISPDIR='$(prefix)/share/emacs/site-lisp'
456 if [ -z "${EMACSETCDIR}" ]; then
457 if pkg-config --exists emacs; then
458 EMACSETCDIR=$(pkg-config emacs --variable sitepkglispdir)
460 EMACSETCDIR='$(prefix)/share/emacs/site-lisp'
464 printf "Checking if emacs is available... "
465 if emacs --quick --batch > /dev/null 2>&1; then
469 printf "No (so will not byte-compile emacs code)\n"
474 if [ $WITH_DOCS = "1" ] ; then
475 printf "Checking if doxygen is available... "
476 if command -v doxygen > /dev/null; then
480 printf "No (so will not install api docs)\n"
484 printf "Checking for ruby development files... "
485 if ruby -e "require 'mkmf'"> /dev/null 2>&1; then
489 printf "No (skipping ruby bindings)\n"
494 if [ $WITH_DOCS = "1" ] ; then
495 printf "Checking if sphinx is available and supports nroff output... "
496 if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then
500 printf "No (so will not install man pages).\n"
506 printf "Checking which platform we are on... "
508 if [ $uname = "Darwin" ] ; then
511 linker_resolves_library_dependencies=0
512 elif [ $uname = "SunOS" ] ; then
515 linker_resolves_library_dependencies=0
516 elif [ $uname = "FreeBSD" ] ; then
519 linker_resolves_library_dependencies=0
520 elif [ $uname = "OpenBSD" ] ; then
523 linker_resolves_library_dependencies=0
524 elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
527 linker_resolves_library_dependencies=1
529 printf "Checking for $libdir_expanded in ldconfig... "
530 ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
531 # Separate ldconfig_paths only on newline (not on any potential
532 # embedded space characters in any filenames). Note, we use a
533 # literal newline in the source here rather than something like:
537 # because the shell's command substitution deletes any trailing newlines.
540 for path in $ldconfig_paths; do
541 if [ "$path" = "$libdir_expanded" ]; then
546 if [ "$libdir_in_ldconfig" = '0' ]; then
547 printf "No (will set RPATH)\n"
555 *** Warning: Unknown platform. Notmuch might or might not build correctly.
560 printf "Checking byte order... "
561 cat> _byteorder.c <<EOF
564 uint32_t test = 0x34333231;
565 int main() { printf("%.4s\n", (const char*)&test); return 0; }
567 ${CC} ${CFLAGS} _byteorder.c -o _byteorder > /dev/null 2>&1
568 util_byte_order=$(./_byteorder)
569 echo $util_byte_order
571 rm -f _byteorder _byteorder.c
573 if [ $errors -gt 0 ]; then
576 *** Error: The dependencies of notmuch could not be satisfied. You will
577 need to install the following packages before being able to compile
581 if [ $have_python -eq 0 ]; then
582 echo " python interpreter"
584 if [ $have_xapian -eq 0 ]; then
585 echo " Xapian library (including development files such as headers)"
586 echo " http://xapian.org/"
588 if [ $have_zlib -eq 0 ]; then
589 echo " zlib library (>= version 1.2.5.2, including development files such as headers)"
590 echo " http://zlib.net/"
593 if [ $have_gmime -eq 0 ]; then
594 echo " Either GMime 2.4 library" $GMIME_24_VERSION_CTR "or GMime 2.6 library" $GMIME_26_VERSION_CTR
595 echo " (including development files such as headers)"
596 echo " http://spruce.sourceforge.net/gmime/"
599 if [ $have_glib -eq 0 ]; then
600 echo " Glib library >= 2.22 (including development files such as headers)"
601 echo " http://ftp.gnome.org/pub/gnome/sources/glib/"
604 if [ $have_talloc -eq 0 ]; then
605 echo " The talloc library (including development files such as headers)"
606 echo " http://talloc.samba.org/"
610 With any luck, you're using a modern, package-based operating system
611 that has all of these packages available in the distribution. In that
612 case a simple command will install everything you need. For example:
614 On Debian and similar systems:
616 sudo apt-get install libxapian-dev libgmime-2.6-dev libtalloc-dev zlib1g-dev
618 Or on Fedora and similar systems:
620 sudo yum install xapian-core-devel gmime-devel libtalloc-devel zlib-devel
622 On other systems, similar commands can be used, but the details of the
623 package names may be different.
626 if [ $have_pkg_config -eq 0 ]; then
628 Note: the pkg-config program is not available. This configure script
629 uses pkg-config to find the compilation flags required to link against
630 the various libraries needed by notmuch. It's possible you simply need
631 to install pkg-config with a command such as:
633 sudo apt-get install pkg-config
635 sudo yum install pkgconfig
637 But if pkg-config is not available for your system, then you will need
638 to modify the configure script to manually set the cflags and ldflags
639 variables to the correct values to link against each library in each
640 case that pkg-config could not be used to determine those values.
645 When you have installed the necessary dependencies, you can run
646 configure again to ensure the packages can be found, or simply run
647 "make" to compile notmuch.
653 printf "Checking for canonicalize_file_name... "
654 if ${CC} -o compat/have_canonicalize_file_name "$srcdir"/compat/have_canonicalize_file_name.c > /dev/null 2>&1
657 have_canonicalize_file_name=1
659 printf "No (will use our own instead).\n"
660 have_canonicalize_file_name=0
662 rm -f compat/have_canonicalize_file_name
665 printf "Checking for getline... "
666 if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
671 printf "No (will use our own instead).\n"
674 rm -f compat/have_getline
676 printf "Checking for strcasestr... "
677 if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
682 printf "No (will use our own instead).\n"
685 rm -f compat/have_strcasestr
687 printf "Checking for strsep... "
688 if ${CC} -o compat/have_strsep "$srcdir"/compat/have_strsep.c > /dev/null 2>&1
693 printf "No (will use our own instead).\n"
696 rm -f compat/have_strsep
698 printf "Checking for timegm... "
699 if ${CC} -o compat/have_timegm "$srcdir"/compat/have_timegm.c > /dev/null 2>&1
704 printf "No (will use our own instead).\n"
707 rm -f compat/have_timegm
709 printf "Checking for dirent.d_type... "
710 if ${CC} -o compat/have_d_type "$srcdir"/compat/have_d_type.c > /dev/null 2>&1
715 printf "No (will use stat instead).\n"
718 rm -f compat/have_d_type
720 printf "Checking for standard version of getpwuid_r... "
721 if ${CC} -o compat/check_getpwuid "$srcdir"/compat/check_getpwuid.c > /dev/null 2>&1
726 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
729 rm -f compat/check_getpwuid
731 printf "Checking for standard version of asctime_r... "
732 if ${CC} -o compat/check_asctime "$srcdir"/compat/check_asctime.c > /dev/null 2>&1
737 printf "No (will define _POSIX_PTHREAD_SEMANTICS to get it).\n"
740 rm -f compat/check_asctime
742 printf "Checking for rpath support... "
743 if ${CC} -Wl,--enable-new-dtags -Wl,-rpath,/tmp/ -o minimal minimal.c >/dev/null 2>&1
746 rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)"
748 printf "No (nothing to worry about).\n"
752 printf "Checking for -Wl,--as-needed... "
753 if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1
756 as_needed_ldflags="-Wl,--as-needed"
758 printf "No (nothing to worry about).\n"
762 printf "Checking for -Wl,--no-undefined... "
763 if ${CC} -Wl,--no-undefined -o minimal minimal.c >/dev/null 2>&1
766 no_undefined_ldflags="-Wl,--no-undefined"
768 printf "No (nothing to worry about).\n"
769 no_undefined_ldflags=""
773 printf "Checking for available C++ compiler warning flags... "
774 for flag in -Wall -Wextra -Wwrite-strings; do
775 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
777 WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
780 printf "\n\t${WARN_CXXFLAGS}\n"
782 WARN_CFLAGS="${WARN_CXXFLAGS}"
783 printf "Checking for available C compiler warning flags... "
784 for flag in -Wmissing-declarations; do
785 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
787 WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
790 printf "\n\t${WARN_CFLAGS}\n"
792 rm -f minimal minimal.c
794 # construct the Makefile.config
795 cat > Makefile.config <<EOF
796 # This Makefile.config was automatically generated by the ./configure
797 # script of notmuch. If the configure script identified anything
798 # incorrectly, then you can edit this file to try to correct things,
799 # but be warned that if configure is run again it will destroy your
800 # changes, (and this could happen by simply calling "make" if the
801 # configure script is updated).
803 # The top-level directory for the source, (the directory containing
804 # the configure script). This may be different than the build
805 # directory (the current directory at the time configure was run).
808 # subdirectories to build
811 configure_options = $@
813 # We use vpath directives (rather than the VPATH variable) since the
814 # VPATH variable matches targets as well as prerequisites, (which is
815 # not useful since then a target left-over from a srcdir build would
816 # cause a target to not be built in the non-srcdir build).
818 # Also, we don't use a single "vpath % \$(srcdir)" here because we
819 # don't want the vpath to trigger for our emacs lisp compilation,
820 # (unless we first find a way to convince emacs to build the .elc
821 # target in a directory other than the directory of the .el
822 # prerequisite). In the meantime, we're actually copying in the .el
823 # files, (which is quite ugly).
825 vpath %.cc \$(srcdir)
826 vpath Makefile.% \$(srcdir)
827 vpath %.py \$(srcdir)
828 vpath %.rst \$(srcdir)
830 # The C compiler to use
833 # The C++ compiler to use
836 # Command to execute emacs from Makefiles
837 EMACS = emacs --quick
839 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
842 # Default FLAGS for C preprocessor (can be overridden by user such as "make CPPFLAGS=-I/usr/local/include")
843 CPPFLAGS = ${CPPFLAGS}
845 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
846 CXXFLAGS = ${CXXFLAGS}
848 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
851 # Flags to enable warnings when using the C++ compiler
852 WARN_CXXFLAGS=${WARN_CXXFLAGS}
854 # Flags to enable warnings when using the C compiler
855 WARN_CFLAGS=${WARN_CFLAGS}
857 # Name of python interpreter
860 # The prefix to which notmuch should be installed
861 # Note: If you change this value here, be sure to ensure that the
862 # LIBDIR_IN_LDCONFIG value below is still set correctly.
865 # The directory to which libraries should be installed
866 # Note: If you change this value here, be sure to ensure that the
867 # LIBDIR_IN_LDCONFIG value below is still set correctly.
868 libdir = ${LIBDIR:=\$(prefix)/lib}
870 # byte order within a 32 bit word. 1234 = little, 4321 = big, 0 = guess
871 UTIL_BYTE_ORDER = ${util_byte_order}
873 # Whether libdir is in a path configured into ldconfig
874 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
876 # The directory to which header files should be installed
877 includedir = ${INCLUDEDIR:=\$(prefix)/include}
879 # The directory to which man pages should be installed
880 mandir = ${MANDIR:=\$(prefix)/share/man}
882 # The directory to which read-only (configuration) files should be installed
883 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
885 # The directory to which emacs lisp files should be installed
886 emacslispdir=${EMACSLISPDIR}
888 # The directory to which emacs miscellaneous (machine-independent) files should
890 emacsetcdir=${EMACSETCDIR}
892 # Whether there's an emacs binary available for byte-compiling
893 HAVE_EMACS = ${have_emacs}
895 # Whether there's a sphinx-build binary available for building documentation
896 HAVE_SPHINX=${have_sphinx}
898 # Whether there's a doxygen binary available for building api documentation
899 HAVE_DOXYGEN=${have_doxygen}
901 # The directory to which desktop files should be installed
902 desktop_dir = \$(prefix)/share/applications
904 # The directory to which bash completions files should be installed
905 bash_completion_dir = ${BASHCOMPLETIONDIR:=\$(sysconfdir)/bash_completion.d}
907 # The directory to which zsh completions files should be installed
908 zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completion/Unix}
910 # Whether the canonicalize_file_name function is available (if not, then notmuch will
911 # build its own version)
912 HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
914 # Whether the getline function is available (if not, then notmuch will
915 # build its own version)
916 HAVE_GETLINE = ${have_getline}
918 # Are the ruby development files (and ruby) available? If not skip
919 # building/testing ruby bindings.
920 HAVE_RUBY_DEV = ${have_ruby_dev}
922 # Whether the strcasestr function is available (if not, then notmuch will
923 # build its own version)
924 HAVE_STRCASESTR = ${have_strcasestr}
926 # Whether the strsep function is available (if not, then notmuch will
927 # build its own version)
928 HAVE_STRSEP = ${have_strsep}
930 # Whether struct dirent has d_type (if not, then notmuch will use stat)
931 HAVE_D_TYPE = ${have_d_type}
933 # Whether the Xapian version in use supports compaction
934 HAVE_XAPIAN_COMPACT = ${have_xapian_compact}
936 # Whether the getpwuid_r function is standards-compliant
937 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
938 # to enable the standards-compliant version -- needed for Solaris)
939 STD_GETPWUID = ${std_getpwuid}
941 # Whether the asctime_r function is standards-compliant
942 # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS
943 # to enable the standards-compliant version -- needed for Solaris)
944 STD_ASCTIME = ${std_asctime}
946 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
947 PLATFORM = ${platform}
949 # Whether the linker will automatically resolve the dependency of one
950 # library on another (if not, then linking a binary requires linking
951 # directly against both)
952 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
954 # Flags needed to compile and link against Xapian
955 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
956 XAPIAN_LDFLAGS = ${xapian_ldflags}
958 # Flags needed to compile and link against GMime-2.4
959 GMIME_CFLAGS = ${gmime_cflags}
960 GMIME_LDFLAGS = ${gmime_ldflags}
962 # Flags needed to compile and link against zlib
963 ZLIB_CFLAGS = ${zlib_cflags}
964 ZLIB_LDFLAGS = ${zlib_ldflags}
966 # Flags needed to compile and link against talloc
967 TALLOC_CFLAGS = ${talloc_cflags}
968 TALLOC_LDFLAGS = ${talloc_ldflags}
970 # Flags needed to have linker set rpath attribute
971 RPATH_LDFLAGS = ${rpath_ldflags}
973 # Flags needed to have linker link only to necessary libraries
974 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
976 # Flags to have the linker flag undefined symbols in object files
977 NO_UNDEFINED_LDFLAGS = ${no_undefined_ldflags}
979 # Whether valgrind header files are available
980 HAVE_VALGRIND = ${have_valgrind}
982 # And if so, flags needed at compile time for valgrind macros
983 VALGRIND_CFLAGS = ${valgrind_cflags}
986 WITH_EMACS = ${WITH_EMACS}
988 # Support for bash completion
989 WITH_BASH = ${WITH_BASH}
991 # Support for zsh completion
992 WITH_ZSH = ${WITH_ZSH}
994 # Combined flags for compiling and linking against all of the above
995 CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
996 -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
998 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
999 \$(VALGRIND_CFLAGS) \\
1000 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR) \\
1001 -DHAVE_STRSEP=\$(HAVE_STRSEP) \\
1002 -DHAVE_D_TYPE=\$(HAVE_D_TYPE) \\
1003 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1004 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1005 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1006 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1008 CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
1009 -DHAVE_CANONICALIZE_FILE_NAME=\$(HAVE_CANONICALIZE_FILE_NAME) \\
1011 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
1012 \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS) \\
1013 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR) \\
1014 -DHAVE_STRSEP=\$(HAVE_STRSEP) \\
1015 -DHAVE_D_TYPE=\$(HAVE_D_TYPE) \\
1016 -DSTD_GETPWUID=\$(STD_GETPWUID) \\
1017 -DSTD_ASCTIME=\$(STD_ASCTIME) \\
1018 -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\
1019 -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER)
1021 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS)
1024 # construct the sh.config
1025 cat > sh.config <<EOF
1026 # This sh.config was automatically generated by the ./configure
1027 # script of notmuch.
1029 # Whether the Xapian version in use supports compaction
1030 NOTMUCH_HAVE_XAPIAN_COMPACT=${have_xapian_compact}
1032 # do we have man pages?
1033 NOTMUCH_HAVE_MAN=$((have_sphinx))
1035 # Name of python interpreter
1036 NOTMUCH_PYTHON=${python}
1038 # Are the ruby development files (and ruby) available? If not skip
1039 # building/testing ruby bindings.
1040 NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
1043 # Finally, after everything configured, inform the user how to continue.
1046 All required packages were found. You may now run the following
1047 commands to compile and install notmuch: