3 # Set several defaults (optionally specified by the user in
4 # environemnt variables)
8 CXXFLAGS=${CXXFLAGS:-\$(CFLAGS)}
9 XAPIAN_CONFIG=${XAPIAN_CONFIG:-xapian-config-1.1 xapian-config}
11 # We don't allow the EMACS or GZIP Makefile variables inherit values
12 # from the environment as we do with CC and CXX above. The reason is
13 # that these names as environment variables have existing uses other
14 # than the program name that we want. (EMACS is set to 't' when a
15 # shell is running within emacs and GZIP specifies arguments to pass
16 # on the gzip command line).
18 # Set the defaults for values the user can specify with command-line
26 Usage: ./configure [options]...
28 This script configures notmuch to build on your system.
30 It verifies that dependencies are available, determines flags needed
31 to compile and link against various required libraries, and identifies
32 whether various system functions can be used or if locally-provided
33 replacements will be built instead.
35 Finally, it allows you to control various aspects of the build and
38 First, some common variables can specified via environment variables:
40 CC The C compiler to use
41 CFLAGS Flags to pass to the C compiler
42 CXX The C++ compiler to use
43 CXXFLAGS Flags to pass to the C compiler
44 LDFLAGS Flags to pass when linking
46 Each of these values can further be controlled by specifying them
47 later on the "make" command line.
49 Other environment variables can be used to control configure itself,
50 (and for which there is no equivalent build-time control):
52 XAPIAN_CONFIG The program to use to determine flags for
53 compiling and linking against the Xapian
54 library. [$XAPIAN_CONFIG]
56 Additionally, various options can be specified on the configure
59 --prefix=PREFIX Install files in PREFIX [$PREFIX]
61 By default, "make install" will install the resulting program to
62 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
63 specify an installation prefix other than $PREFIX using
64 --prefix, for instance:
66 ./configure --prefix=\$HOME
68 Fine tuning of some installation directories is available:
70 --libdir=DIR Install libraries to DIR [PREFIX/lib]
71 --includedir=DIR Install header files to DIR [PREFIX/include]
72 --mandir=DIR Install man pages to DIR [PREFIX/share/man]
73 --sysconfdir=DIR Read-only single-machine data [PREFIX/etc]
74 --emacslispdir=DIR Emacs code [PREFIX/share/emacs/site-lisp]
76 Additional options are accepted for compatibility with other
77 configure-script calling conventions, but don't do anything yet:
79 --build=<cpu>-<vendor>-<os> Currently ignored
80 --host=<cpu>-<vendor>-<os> Currently ignored
81 --infodir=DIR Currently ignored
82 --datadir=DIR Currently ignored
83 --localstatedir=DIR Currently ignored
84 --libexecdir=DIR Currently ignored
85 --disable-maintainer-mode Currently ignored
86 --disable-dependency-tracking Currently ignored
91 # Parse command-line options
93 if [ "${option}" = '--help' ] ; then
96 elif [ "${option%%=*}" = '--prefix' ] ; then
98 elif [ "${option%%=*}" = '--libdir' ] ; then
100 elif [ "${option%%=*}" = '--includedir' ] ; then
101 INCLUDEDIR="${option#*=}"
102 elif [ "${option%%=*}" = '--mandir' ] ; then
103 MANDIR="${option#*=}"
104 elif [ "${option%%=*}" = '--sysconfdir' ] ; then
105 SYSCONFDIR="${option#*=}"
106 elif [ "${option%%=*}" = '--emacslispdir' ] ; then
107 EMACSLISPDIR="${option#*=}"
108 elif [ "${option%%=*}" = '--build' ] ; then
109 build_option="${option#*=}"
110 case ${build_option} in
113 echo "Unrecognized value for --build option: ${build_option}"
114 echo "Should be: <cpu>-<vendor>-<os>"
120 build_cpu=${build_option%%-*}
121 build_option=${build_option#*-}
122 build_vendor=${build_option%%-*}
123 build_os=${build_option#*-}
124 elif [ "${option%%=*}" = '--host' ] ; then
125 host_option="${option#*=}"
126 case ${host_option} in
129 echo "Unrecognized value for --host option: ${host_option}"
130 echo "Should be: <cpu>-<vendor>-<os>"
136 host_cpu=${host_option%%-*}
137 host_option=${host_option#*-}
138 host_vendor=${host_option%%-*}
139 host_os=${host_option#*-}
140 elif [ "${option%%=*}" = '--infodir' ] ; then
142 elif [ "${option%%=*}" = '--datadir' ] ; then
144 elif [ "${option%%=*}" = '--localstatedir' ] ; then
146 elif [ "${option%%=*}" = '--libexecdir' ] ; then
148 elif [ "${option}" = '--disable-maintainer-mode' ] ; then
150 elif [ "${option}" = '--disable-dependency-tracking' ] ; then
153 echo "Unrecognized option: ${option}"
162 Welcome to Notmuch, a system for indexing, searching and tagging your email.
164 We hope that the process of building and installing notmuch is quick
165 and smooth so that you can soon be reading and processing your email
166 more efficiently than ever.
168 If anything goes wrong in the configure process, you can override any
169 decisions it makes by manually editing the Makefile.config file that
170 it creates. Also please do as much as you can to figure out what could
171 be different on your machine compared to those of the notmuch
172 developers. Then, please email those details to the Notmuch list
173 (notmuch@notmuchmail.org) so that we can hopefully make future
174 versions of notmuch easier for you to use.
176 We'll now investigate your system to verify that all required
177 dependencies are available:
183 if pkg-config --version > /dev/null 2>&1; then
189 printf "Checking for Xapian development files... "
191 for xapian_config in ${XAPIAN_CONFIG}; do
192 if ${xapian_config} --version > /dev/null 2>&1; then
193 printf "Yes (%s).\n" $(${xapian_config} --version | sed -e 's/.* //')
195 xapian_cxxflags=$(${xapian_config} --cxxflags)
196 xapian_ldflags=$(${xapian_config} --libs)
200 if [ ${have_xapian} = "0" ]; then
202 errors=$((errors + 1))
205 printf "Checking for GMime development files... "
207 for gmimepc in gmime-2.6 gmime-2.4; do
208 if pkg-config --modversion $gmimepc > /dev/null 2>&1; then
209 printf "Yes ($gmimepc).\n"
211 gmime_cflags=$(pkg-config --cflags $gmimepc)
212 gmime_ldflags=$(pkg-config --libs $gmimepc)
215 if [ "$have_gmime" = "0" ]; then
217 errors=$((errors + 1))
220 printf "Checking for talloc development files... "
221 if pkg-config --modversion talloc > /dev/null 2>&1; then
224 talloc_cflags=$(pkg-config --cflags talloc)
225 talloc_ldflags=$(pkg-config --libs talloc)
230 errors=$((errors + 1))
233 printf "Checking for valgrind development files... "
234 if pkg-config --modversion valgrind > /dev/null 2>&1; then
237 valgrind_cflags=$(pkg-config --cflags valgrind)
239 printf "No (but that's fine).\n"
243 if [ -z "${EMACSLISPDIR}" ]; then
244 if pkg-config --modversion emacs > /dev/null 2>&1; then
245 EMACSLISPDIR=$(pkg-config emacs --variable sitepkglispdir)
247 EMACSLISPDIR='$(prefix)/share/emacs/site-lisp'
251 printf "Checking if emacs is available... "
252 if emacs --quick --batch > /dev/null 2>&1; then
256 printf "No (so will not byte-compile emacs code)\n"
260 printf "Checking for Mac OS X (for shared library)... "
261 if [ `uname` = "Darwin" ] ; then
264 linker_resolves_library_dependencies=0
268 linker_resolves_library_dependencies=1
271 if [ $errors -gt 0 ]; then
274 *** Error: The dependencies of notmuch could not be satisfied. You will
275 need to install the following packages before being able to compile
279 if [ $have_xapian -eq 0 ]; then
280 echo " Xapian library (including development files such as headers)"
281 echo " http://xapian.org/"
283 if [ $have_gmime -eq 0 ]; then
284 echo " GMime 2.4 library (including development files such as headers)"
285 echo " http://spruce.sourceforge.net/gmime/"
287 if [ $have_talloc -eq 0 ]; then
288 echo " The talloc library (including development files such as headers)"
289 echo " http://talloc.samba.org/"
293 With any luck, you're using a modern, package-based operating system
294 that has all of these packages available in the distribution. In that
295 case a simple command will install everything you need. For example:
297 On Debian and similar systems:
299 sudo apt-get install libxapian-dev libgmime-2.4-dev libtalloc-dev
301 Or on Fedora and similar systems:
303 sudo yum install xapian-core-devel gmime-devel libtalloc-devel
305 On other systems, similar commands can be used, but the details of the
306 package names may be different.
309 if [ $have_pkg_config -eq 0 ]; then
311 Note: the pkg-config program is not available. This configure script
312 uses pkg-config to find the compilation flags required to link against
313 the various libraries needed by notmuch. It's possible you simply need
314 to install pkg-config with a command such as:
316 sudo apt-get install pkg-config
318 sudo yum install pkgconfig
320 But if pkg-config is not available for your system, then you will need
321 to modify the configure script to manually set the cflags and ldflags
322 variables to the correct values to link against each library in each
323 case that pkg-config could not be used to determine those values.
328 When you have installed the necessary dependencies, you can run
329 configure again to ensure the packages can be found, or simply run
330 "make" to compile notmuch.
336 printf "Checking for getline... "
337 if ${CC} -o compat/have_getline compat/have_getline.c > /dev/null 2>&1
342 printf "No (will use our own instead).\n"
345 rm -f compat/have_getline
347 printf "Checking for strcasestr... "
348 if ${CC} -o compat/have_strcasestr compat/have_strcasestr.c > /dev/null 2>&1
353 printf "No (will use our own instead).\n"
356 rm -f compat/have_strcasestr
360 All required packages were found. You may now run the following
361 commands to compile and install notmuch:
368 # construct the Makefile.config
369 cat > Makefile.config <<EOF
370 # This Makefile.config was automatically generated by the ./configure
371 # script of notmuch. If the configure script identified anything
372 # incorrectly, then you can edit this file to try to correct things,
373 # but be warned that if configure is run again it will destroy your
374 # changes, (and this could happen by simply calling "make" if the
375 # configure script is updated).
377 # The C compiler to use
380 # The C++ compiler to use
383 # Command to execute emacs from Makefiles
384 EMACS = emacs --quick
386 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
389 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
390 CXXFLAGS = ${CXXFLAGS}
392 # Flags to enable warnings when using the C++ compiler
393 WARN_CXXFLAGS=-Wall -Wextra -Wwrite-strings -Wswitch-enum
395 # Flags to enable warnings when using the C compiler
396 WARN_CFLAGS=\$(WARN_CXXFLAGS) -Wmissing-declarations
398 # The prefix to which notmuch should be installed
401 # The directory to which libraries should be installed
402 libdir = ${LIBDIR:=\$(prefix)/lib}
404 # The directory to which header files should be installed
405 includedir = ${INCLUDEDIR:=\$(prefix)/include}
407 # The directory to which man pages should be installed
408 mandir = ${MANDIR:=\$(prefix)/share/man}
410 # The directory to which read-only (configuration) filesshould be installed
411 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
413 # The directory to which emacs lisp files should be installed
414 emacslispdir=${EMACSLISPDIR}
416 # Whether there's an emacs binary available for byte-compiling
417 HAVE_EMACS = ${have_emacs}
419 # The directory to which desktop files should be installed
420 desktop_dir = \$(prefix)/share/applications
422 # The directory to which bash completions files should be installed
423 bash_completion_dir = \$(sysconfdir)/bash_completion.d
425 # The directory to which zsh completions files should be installed
426 zsh_completion_dir = \$(prefix)/share/zsh/functions/Completion/Unix
428 # Whether the getline function is available (if not, then notmuch will
429 # build its own version)
430 HAVE_GETLINE = ${have_getline}
432 # Whether the strcasestr function is available (if not, then notmuch will
433 # build its own version)
434 HAVE_STRCASESTR = ${have_strcasestr}
436 # Whether we are building on OS X. This will affect how we build the
438 MAC_OS_X = ${mac_os_x}
440 # Whether the linker will automatically resolve the dependency of one
441 # library on another (if not, then linking a binary requires linking
442 # directly against both)
443 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
445 # Flags needed to compile and link against Xapian
446 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
447 XAPIAN_LDFLAGS = ${xapian_ldflags}
449 # Flags needed to compile and link against GMime-2.4
450 GMIME_CFLAGS = ${gmime_cflags}
451 GMIME_LDFLAGS = ${gmime_ldflags}
453 # Flags needed to compile and link against talloc
454 TALLOC_CFLAGS = ${talloc_cflags}
455 TALLOC_LDFLAGS = ${talloc_ldflags}
457 # Whether valgrind header files are available
458 HAVE_VALGRIND = ${have_valgrind}
460 # And if so, flags needed at compile time for valgrind macros
461 VALGRIND_CFLAGS = ${valgrind_cflags}
463 # Combined flags for compiling and linking against all of the above
464 CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
465 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
466 \$(VALGRIND_CFLAGS) -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)
467 CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
468 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
469 \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS) \\
470 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)
471 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(XAPIAN_LDFLAGS)