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}"
170 # We set this value early, (rather than just while printing the
171 # Makefile.config file later like most values), because we need to
172 # actually investigate this value compared to the ldconfig_paths value
174 libdir_expanded=${LIBDIR:-${PREFIX}/lib}
177 Welcome to Notmuch, a system for indexing, searching and tagging your email.
179 We hope that the process of building and installing notmuch is quick
180 and smooth so that you can soon be reading and processing your email
181 more efficiently than ever.
183 If anything goes wrong in the configure process, you can override any
184 decisions it makes by manually editing the Makefile.config file that
185 it creates. Also please do as much as you can to figure out what could
186 be different on your machine compared to those of the notmuch
187 developers. Then, please email those details to the Notmuch list
188 (notmuch@notmuchmail.org) so that we can hopefully make future
189 versions of notmuch easier for you to use.
191 We'll now investigate your system to verify that all required
192 dependencies are available:
198 if pkg-config --version > /dev/null 2>&1; then
204 printf "Checking for Xapian development files... "
206 for xapian_config in ${XAPIAN_CONFIG}; do
207 if ${xapian_config} --version > /dev/null 2>&1; then
208 printf "Yes (%s).\n" $(${xapian_config} --version | sed -e 's/.* //')
210 xapian_cxxflags=$(${xapian_config} --cxxflags)
211 xapian_ldflags=$(${xapian_config} --libs)
215 if [ ${have_xapian} = "0" ]; then
217 errors=$((errors + 1))
220 printf "Checking for GMime development files... "
222 for gmimepc in gmime-2.6 gmime-2.4; do
223 if pkg-config --modversion $gmimepc > /dev/null 2>&1; then
224 printf "Yes ($gmimepc).\n"
226 gmime_cflags=$(pkg-config --cflags $gmimepc)
227 gmime_ldflags=$(pkg-config --libs $gmimepc)
230 if [ "$have_gmime" = "0" ]; then
232 errors=$((errors + 1))
235 printf "Checking for talloc development files... "
236 if pkg-config --modversion talloc > /dev/null 2>&1; then
239 talloc_cflags=$(pkg-config --cflags talloc)
240 talloc_ldflags=$(pkg-config --libs talloc)
245 errors=$((errors + 1))
248 printf "Checking for valgrind development files... "
249 if pkg-config --modversion valgrind > /dev/null 2>&1; then
252 valgrind_cflags=$(pkg-config --cflags valgrind)
254 printf "No (but that's fine).\n"
258 if [ -z "${EMACSLISPDIR}" ]; then
259 if pkg-config --modversion emacs > /dev/null 2>&1; then
260 EMACSLISPDIR=$(pkg-config emacs --variable sitepkglispdir)
262 EMACSLISPDIR='$(prefix)/share/emacs/site-lisp'
266 printf "Checking if emacs is available... "
267 if emacs --quick --batch > /dev/null 2>&1; then
271 printf "No (so will not byte-compile emacs code)\n"
277 printf "Checking which platform we are on... "
278 if [ `uname` = "Darwin" ] ; then
281 linker_resolves_library_dependencies=0
282 elif [ `uname` = "SunOS" ] ; then
285 linker_resolves_library_dependencies=0
286 elif [ `uname` = "Linux" ] ; then
289 linker_resolves_library_dependencies=1
290 ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
291 for path in $ldconfig_paths; do
292 echo "Checking $path compared to $libdir_expanded"
293 if [ "$path" = "$libdir_expanded" ]; then
301 *** Warning: Unknown platform. Notmuch might or might not build correctly.
306 if [ $errors -gt 0 ]; then
309 *** Error: The dependencies of notmuch could not be satisfied. You will
310 need to install the following packages before being able to compile
314 if [ $have_xapian -eq 0 ]; then
315 echo " Xapian library (including development files such as headers)"
316 echo " http://xapian.org/"
318 if [ $have_gmime -eq 0 ]; then
319 echo " GMime 2.4 library (including development files such as headers)"
320 echo " http://spruce.sourceforge.net/gmime/"
322 if [ $have_talloc -eq 0 ]; then
323 echo " The talloc library (including development files such as headers)"
324 echo " http://talloc.samba.org/"
328 With any luck, you're using a modern, package-based operating system
329 that has all of these packages available in the distribution. In that
330 case a simple command will install everything you need. For example:
332 On Debian and similar systems:
334 sudo apt-get install libxapian-dev libgmime-2.4-dev libtalloc-dev
336 Or on Fedora and similar systems:
338 sudo yum install xapian-core-devel gmime-devel libtalloc-devel
340 On other systems, similar commands can be used, but the details of the
341 package names may be different.
344 if [ $have_pkg_config -eq 0 ]; then
346 Note: the pkg-config program is not available. This configure script
347 uses pkg-config to find the compilation flags required to link against
348 the various libraries needed by notmuch. It's possible you simply need
349 to install pkg-config with a command such as:
351 sudo apt-get install pkg-config
353 sudo yum install pkgconfig
355 But if pkg-config is not available for your system, then you will need
356 to modify the configure script to manually set the cflags and ldflags
357 variables to the correct values to link against each library in each
358 case that pkg-config could not be used to determine those values.
363 When you have installed the necessary dependencies, you can run
364 configure again to ensure the packages can be found, or simply run
365 "make" to compile notmuch.
371 printf "Checking for getline... "
372 if ${CC} -o compat/have_getline compat/have_getline.c > /dev/null 2>&1
377 printf "No (will use our own instead).\n"
380 rm -f compat/have_getline
382 printf "Checking for strcasestr... "
383 if ${CC} -o compat/have_strcasestr compat/have_strcasestr.c > /dev/null 2>&1
388 printf "No (will use our own instead).\n"
391 rm -f compat/have_strcasestr
395 All required packages were found. You may now run the following
396 commands to compile and install notmuch:
403 # construct the Makefile.config
404 cat > Makefile.config <<EOF
405 # This Makefile.config was automatically generated by the ./configure
406 # script of notmuch. If the configure script identified anything
407 # incorrectly, then you can edit this file to try to correct things,
408 # but be warned that if configure is run again it will destroy your
409 # changes, (and this could happen by simply calling "make" if the
410 # configure script is updated).
412 # The C compiler to use
415 # The C++ compiler to use
418 # Command to execute emacs from Makefiles
419 EMACS = emacs --quick
421 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
424 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
425 CXXFLAGS = ${CXXFLAGS}
427 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
430 # Flags to enable warnings when using the C++ compiler
431 WARN_CXXFLAGS=-Wall -Wextra -Wwrite-strings -Wswitch-enum
433 # Flags to enable warnings when using the C compiler
434 WARN_CFLAGS=\$(WARN_CXXFLAGS) -Wmissing-declarations
436 # The prefix to which notmuch should be installed
437 # Note: If you change this value here, be sure to ensure that the
438 # LIBDIR_IN_LDCONFIG value below is still set correctly.
441 # The directory to which libraries should be installed
442 # Note: If you change this value here, be sure to ensure that the
443 # LIBDIR_IN_LDCONFIG value below is still set correctly.
444 libdir = ${LIBDIR:=\$(prefix)/lib}
446 # Whether libdir is in a path configured into ldconfig
447 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
449 # The directory to which header files should be installed
450 includedir = ${INCLUDEDIR:=\$(prefix)/include}
452 # The directory to which man pages should be installed
453 mandir = ${MANDIR:=\$(prefix)/share/man}
455 # The directory to which read-only (configuration) filesshould be installed
456 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
458 # The directory to which emacs lisp files should be installed
459 emacslispdir=${EMACSLISPDIR}
461 # Whether there's an emacs binary available for byte-compiling
462 HAVE_EMACS = ${have_emacs}
464 # The directory to which desktop files should be installed
465 desktop_dir = \$(prefix)/share/applications
467 # The directory to which bash completions files should be installed
468 bash_completion_dir = \$(sysconfdir)/bash_completion.d
470 # The directory to which zsh completions files should be installed
471 zsh_completion_dir = \$(prefix)/share/zsh/functions/Completion/Unix
473 # Whether the getline function is available (if not, then notmuch will
474 # build its own version)
475 HAVE_GETLINE = ${have_getline}
477 # Whether the strcasestr function is available (if not, then notmuch will
478 # build its own version)
479 HAVE_STRCASESTR = ${have_strcasestr}
481 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS
482 PLATFORM = ${platform}
484 # Whether the linker will automatically resolve the dependency of one
485 # library on another (if not, then linking a binary requires linking
486 # directly against both)
487 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
489 # Flags needed to compile and link against Xapian
490 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
491 XAPIAN_LDFLAGS = ${xapian_ldflags}
493 # Flags needed to compile and link against GMime-2.4
494 GMIME_CFLAGS = ${gmime_cflags}
495 GMIME_LDFLAGS = ${gmime_ldflags}
497 # Flags needed to compile and link against talloc
498 TALLOC_CFLAGS = ${talloc_cflags}
499 TALLOC_LDFLAGS = ${talloc_ldflags}
501 # Whether valgrind header files are available
502 HAVE_VALGRIND = ${have_valgrind}
504 # And if so, flags needed at compile time for valgrind macros
505 VALGRIND_CFLAGS = ${valgrind_cflags}
507 # Combined flags for compiling and linking against all of the above
508 CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
509 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
510 \$(VALGRIND_CFLAGS) -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)
511 CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
512 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
513 \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS) \\
514 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)
515 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(XAPIAN_LDFLAGS)