3 # Removing space from IFS makes it much easier to support filenames
4 # with spaces. See http://www.dwheeler.com/essays/filenames-in-shell.html
8 # Since we don't have space in IFS we use tab to separate things in lists
11 # Set several defaults (optionally specified by the user in
12 # environemnt variables)
16 CXXFLAGS=${CXXFLAGS:-\$(CFLAGS)}
18 XAPIAN_CONFIG=${XAPIAN_CONFIG:-xapian-config-1.1${tab}xapian-config}
20 # We don't allow the EMACS or GZIP Makefile variables inherit values
21 # from the environment as we do with CC and CXX above. The reason is
22 # that these names as environment variables have existing uses other
23 # than the program name that we want. (EMACS is set to 't' when a
24 # shell is running within emacs and GZIP specifies arguments to pass
25 # on the gzip command line).
27 # Set the defaults for values the user can specify with command-line
35 Usage: ./configure [options]...
37 This script configures notmuch to build on your system.
39 It verifies that dependencies are available, determines flags needed
40 to compile and link against various required libraries, and identifies
41 whether various system functions can be used or if locally-provided
42 replacements will be built instead.
44 Finally, it allows you to control various aspects of the build and
47 First, some common variables can specified via environment variables:
49 CC The C compiler to use
50 CFLAGS Flags to pass to the C compiler
51 CXX The C++ compiler to use
52 CXXFLAGS Flags to pass to the C compiler
53 LDFLAGS Flags to pass when linking
55 Each of these values can further be controlled by specifying them
56 later on the "make" command line.
58 Other environment variables can be used to control configure itself,
59 (and for which there is no equivalent build-time control):
61 XAPIAN_CONFIG The program to use to determine flags for
62 compiling and linking against the Xapian
63 library. [$XAPIAN_CONFIG]
65 Additionally, various options can be specified on the configure
68 --prefix=PREFIX Install files in PREFIX [$PREFIX]
70 By default, "make install" will install the resulting program to
71 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
72 specify an installation prefix other than $PREFIX using
73 --prefix, for instance:
75 ./configure --prefix=\$HOME
77 Fine tuning of some installation directories is available:
79 --libdir=DIR Install libraries to DIR [PREFIX/lib]
80 --includedir=DIR Install header files to DIR [PREFIX/include]
81 --mandir=DIR Install man pages to DIR [PREFIX/share/man]
82 --sysconfdir=DIR Read-only single-machine data [PREFIX/etc]
83 --emacslispdir=DIR Emacs code [PREFIX/share/emacs/site-lisp]
85 Additional options are accepted for compatibility with other
86 configure-script calling conventions, but don't do anything yet:
88 --build=<cpu>-<vendor>-<os> Currently ignored
89 --host=<cpu>-<vendor>-<os> Currently ignored
90 --infodir=DIR Currently ignored
91 --datadir=DIR Currently ignored
92 --localstatedir=DIR Currently ignored
93 --libexecdir=DIR Currently ignored
94 --disable-maintainer-mode Currently ignored
95 --disable-dependency-tracking Currently ignored
100 # Parse command-line options
102 if [ "${option}" = '--help' ] ; then
105 elif [ "${option%%=*}" = '--prefix' ] ; then
106 PREFIX="${option#*=}"
107 elif [ "${option%%=*}" = '--libdir' ] ; then
108 LIBDIR="${option#*=}"
109 elif [ "${option%%=*}" = '--includedir' ] ; then
110 INCLUDEDIR="${option#*=}"
111 elif [ "${option%%=*}" = '--mandir' ] ; then
112 MANDIR="${option#*=}"
113 elif [ "${option%%=*}" = '--sysconfdir' ] ; then
114 SYSCONFDIR="${option#*=}"
115 elif [ "${option%%=*}" = '--emacslispdir' ] ; then
116 EMACSLISPDIR="${option#*=}"
117 elif [ "${option%%=*}" = '--build' ] ; then
118 build_option="${option#*=}"
119 case ${build_option} in
122 echo "Unrecognized value for --build option: ${build_option}"
123 echo "Should be: <cpu>-<vendor>-<os>"
129 build_cpu=${build_option%%-*}
130 build_option=${build_option#*-}
131 build_vendor=${build_option%%-*}
132 build_os=${build_option#*-}
133 elif [ "${option%%=*}" = '--host' ] ; then
134 host_option="${option#*=}"
135 case ${host_option} in
138 echo "Unrecognized value for --host option: ${host_option}"
139 echo "Should be: <cpu>-<vendor>-<os>"
145 host_cpu=${host_option%%-*}
146 host_option=${host_option#*-}
147 host_vendor=${host_option%%-*}
148 host_os=${host_option#*-}
149 elif [ "${option%%=*}" = '--infodir' ] ; then
151 elif [ "${option%%=*}" = '--datadir' ] ; then
153 elif [ "${option%%=*}" = '--localstatedir' ] ; then
155 elif [ "${option%%=*}" = '--libexecdir' ] ; then
157 elif [ "${option}" = '--disable-maintainer-mode' ] ; then
159 elif [ "${option}" = '--disable-dependency-tracking' ] ; then
162 echo "Unrecognized option: ${option}"
171 Welcome to Notmuch, a system for indexing, searching and tagging your email.
173 We hope that the process of building and installing notmuch is quick
174 and smooth so that you can soon be reading and processing your email
175 more efficiently than ever.
177 If anything goes wrong in the configure process, you can override any
178 decisions it makes by manually editing the Makefile.config file that
179 it creates. Also please do as much as you can to figure out what could
180 be different on your machine compared to those of the notmuch
181 developers. Then, please email those details to the Notmuch list
182 (notmuch@notmuchmail.org) so that we can hopefully make future
183 versions of notmuch easier for you to use.
185 We'll now investigate your system to verify that all required
186 dependencies are available:
192 if pkg-config --version > /dev/null 2>&1; then
198 printf "Checking for Xapian development files... "
200 for xapian_config in ${XAPIAN_CONFIG}; do
201 if ${xapian_config} --version > /dev/null 2>&1; then
202 printf "Yes (%s).\n" $(${xapian_config} --version | sed -e 's/.* //')
204 xapian_cxxflags=$(${xapian_config} --cxxflags)
205 xapian_ldflags=$(${xapian_config} --libs)
209 if [ ${have_xapian} = "0" ]; then
211 errors=$((errors + 1))
214 printf "Checking for GMime development files... "
216 for gmimepc in gmime-2.6 gmime-2.4; do
217 if pkg-config --modversion $gmimepc > /dev/null 2>&1; then
218 printf "Yes ($gmimepc).\n"
220 gmime_cflags=$(pkg-config --cflags $gmimepc)
221 gmime_ldflags=$(pkg-config --libs $gmimepc)
224 if [ "$have_gmime" = "0" ]; then
226 errors=$((errors + 1))
229 printf "Checking for talloc development files... "
230 if pkg-config --modversion talloc > /dev/null 2>&1; then
233 talloc_cflags=$(pkg-config --cflags talloc)
234 talloc_ldflags=$(pkg-config --libs talloc)
239 errors=$((errors + 1))
242 printf "Checking for valgrind development files... "
243 if pkg-config --modversion valgrind > /dev/null 2>&1; then
246 valgrind_cflags=$(pkg-config --cflags valgrind)
248 printf "No (but that's fine).\n"
252 if [ -z "${EMACSLISPDIR}" ]; then
253 if pkg-config --modversion emacs > /dev/null 2>&1; then
254 EMACSLISPDIR=$(pkg-config emacs --variable sitepkglispdir)
256 EMACSLISPDIR='$(prefix)/share/emacs/site-lisp'
260 printf "Checking if emacs is available... "
261 if emacs --quick --batch > /dev/null 2>&1; then
265 printf "No (so will not byte-compile emacs code)\n"
269 printf "Checking which platform we are on... "
270 if [ `uname` = "Darwin" ] ; then
273 linker_resolves_library_dependencies=0
274 elif [ `uname` = "SunOS" ] ; then
277 linker_resolves_library_dependencies=0
278 elif [ `uname` = "Linux" ] ; then
281 linker_resolves_library_dependencies=1
286 *** Warning: Unknown platform. Notmuch might or might not build correctly.
291 if [ $errors -gt 0 ]; then
294 *** Error: The dependencies of notmuch could not be satisfied. You will
295 need to install the following packages before being able to compile
299 if [ $have_xapian -eq 0 ]; then
300 echo " Xapian library (including development files such as headers)"
301 echo " http://xapian.org/"
303 if [ $have_gmime -eq 0 ]; then
304 echo " GMime 2.4 library (including development files such as headers)"
305 echo " http://spruce.sourceforge.net/gmime/"
307 if [ $have_talloc -eq 0 ]; then
308 echo " The talloc library (including development files such as headers)"
309 echo " http://talloc.samba.org/"
313 With any luck, you're using a modern, package-based operating system
314 that has all of these packages available in the distribution. In that
315 case a simple command will install everything you need. For example:
317 On Debian and similar systems:
319 sudo apt-get install libxapian-dev libgmime-2.4-dev libtalloc-dev
321 Or on Fedora and similar systems:
323 sudo yum install xapian-core-devel gmime-devel libtalloc-devel
325 On other systems, similar commands can be used, but the details of the
326 package names may be different.
329 if [ $have_pkg_config -eq 0 ]; then
331 Note: the pkg-config program is not available. This configure script
332 uses pkg-config to find the compilation flags required to link against
333 the various libraries needed by notmuch. It's possible you simply need
334 to install pkg-config with a command such as:
336 sudo apt-get install pkg-config
338 sudo yum install pkgconfig
340 But if pkg-config is not available for your system, then you will need
341 to modify the configure script to manually set the cflags and ldflags
342 variables to the correct values to link against each library in each
343 case that pkg-config could not be used to determine those values.
348 When you have installed the necessary dependencies, you can run
349 configure again to ensure the packages can be found, or simply run
350 "make" to compile notmuch.
356 printf "Checking for getline... "
357 if ${CC} -o compat/have_getline compat/have_getline.c > /dev/null 2>&1
362 printf "No (will use our own instead).\n"
365 rm -f compat/have_getline
367 printf "Checking for strcasestr... "
368 if ${CC} -o compat/have_strcasestr compat/have_strcasestr.c > /dev/null 2>&1
373 printf "No (will use our own instead).\n"
376 rm -f compat/have_strcasestr
380 All required packages were found. You may now run the following
381 commands to compile and install notmuch:
388 # construct the Makefile.config
389 cat > Makefile.config <<EOF
390 # This Makefile.config was automatically generated by the ./configure
391 # script of notmuch. If the configure script identified anything
392 # incorrectly, then you can edit this file to try to correct things,
393 # but be warned that if configure is run again it will destroy your
394 # changes, (and this could happen by simply calling "make" if the
395 # configure script is updated).
397 # The C compiler to use
400 # The C++ compiler to use
403 # Command to execute emacs from Makefiles
404 EMACS = emacs --quick
406 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
409 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
410 CXXFLAGS = ${CXXFLAGS}
412 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
415 # Flags to enable warnings when using the C++ compiler
416 WARN_CXXFLAGS=-Wall -Wextra -Wwrite-strings -Wswitch-enum
418 # Flags to enable warnings when using the C compiler
419 WARN_CFLAGS=\$(WARN_CXXFLAGS) -Wmissing-declarations
421 # The prefix to which notmuch should be installed
424 # The directory to which libraries should be installed
425 libdir = ${LIBDIR:=\$(prefix)/lib}
427 # The directory to which header files should be installed
428 includedir = ${INCLUDEDIR:=\$(prefix)/include}
430 # The directory to which man pages should be installed
431 mandir = ${MANDIR:=\$(prefix)/share/man}
433 # The directory to which read-only (configuration) filesshould be installed
434 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
436 # The directory to which emacs lisp files should be installed
437 emacslispdir=${EMACSLISPDIR}
439 # Whether there's an emacs binary available for byte-compiling
440 HAVE_EMACS = ${have_emacs}
442 # The directory to which desktop files should be installed
443 desktop_dir = \$(prefix)/share/applications
445 # The directory to which bash completions files should be installed
446 bash_completion_dir = \$(sysconfdir)/bash_completion.d
448 # The directory to which zsh completions files should be installed
449 zsh_completion_dir = \$(prefix)/share/zsh/functions/Completion/Unix
451 # Whether the getline function is available (if not, then notmuch will
452 # build its own version)
453 HAVE_GETLINE = ${have_getline}
455 # Whether the strcasestr function is available (if not, then notmuch will
456 # build its own version)
457 HAVE_STRCASESTR = ${have_strcasestr}
459 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS
460 PLATFORM = ${platform}
462 # Whether the linker will automatically resolve the dependency of one
463 # library on another (if not, then linking a binary requires linking
464 # directly against both)
465 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
467 # Flags needed to compile and link against Xapian
468 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
469 XAPIAN_LDFLAGS = ${xapian_ldflags}
471 # Flags needed to compile and link against GMime-2.4
472 GMIME_CFLAGS = ${gmime_cflags}
473 GMIME_LDFLAGS = ${gmime_ldflags}
475 # Flags needed to compile and link against talloc
476 TALLOC_CFLAGS = ${talloc_cflags}
477 TALLOC_LDFLAGS = ${talloc_ldflags}
479 # Whether valgrind header files are available
480 HAVE_VALGRIND = ${have_valgrind}
482 # And if so, flags needed at compile time for valgrind macros
483 VALGRIND_CFLAGS = ${valgrind_cflags}
485 # Combined flags for compiling and linking against all of the above
486 CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
487 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
488 \$(VALGRIND_CFLAGS) -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)
489 CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
490 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
491 \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS) \\
492 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)
493 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(XAPIAN_LDFLAGS)