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... "
279 if [ $uname = "Darwin" ] ; then
282 linker_resolves_library_dependencies=0
283 elif [ $uname = "SunOS" ] ; then
286 linker_resolves_library_dependencies=0
287 elif [ $uname = "Linux" ] ; then
290 linker_resolves_library_dependencies=1
291 ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
292 for path in $ldconfig_paths; do
293 echo "Checking $path compared to $libdir_expanded"
294 if [ "$path" = "$libdir_expanded" ]; then
302 *** Warning: Unknown platform. Notmuch might or might not build correctly.
307 if [ $errors -gt 0 ]; then
310 *** Error: The dependencies of notmuch could not be satisfied. You will
311 need to install the following packages before being able to compile
315 if [ $have_xapian -eq 0 ]; then
316 echo " Xapian library (including development files such as headers)"
317 echo " http://xapian.org/"
319 if [ $have_gmime -eq 0 ]; then
320 echo " GMime 2.4 library (including development files such as headers)"
321 echo " http://spruce.sourceforge.net/gmime/"
323 if [ $have_talloc -eq 0 ]; then
324 echo " The talloc library (including development files such as headers)"
325 echo " http://talloc.samba.org/"
329 With any luck, you're using a modern, package-based operating system
330 that has all of these packages available in the distribution. In that
331 case a simple command will install everything you need. For example:
333 On Debian and similar systems:
335 sudo apt-get install libxapian-dev libgmime-2.4-dev libtalloc-dev
337 Or on Fedora and similar systems:
339 sudo yum install xapian-core-devel gmime-devel libtalloc-devel
341 On other systems, similar commands can be used, but the details of the
342 package names may be different.
345 if [ $have_pkg_config -eq 0 ]; then
347 Note: the pkg-config program is not available. This configure script
348 uses pkg-config to find the compilation flags required to link against
349 the various libraries needed by notmuch. It's possible you simply need
350 to install pkg-config with a command such as:
352 sudo apt-get install pkg-config
354 sudo yum install pkgconfig
356 But if pkg-config is not available for your system, then you will need
357 to modify the configure script to manually set the cflags and ldflags
358 variables to the correct values to link against each library in each
359 case that pkg-config could not be used to determine those values.
364 When you have installed the necessary dependencies, you can run
365 configure again to ensure the packages can be found, or simply run
366 "make" to compile notmuch.
372 printf "Checking for getline... "
373 if ${CC} -o compat/have_getline compat/have_getline.c > /dev/null 2>&1
378 printf "No (will use our own instead).\n"
381 rm -f compat/have_getline
383 printf "Checking for strcasestr... "
384 if ${CC} -o compat/have_strcasestr compat/have_strcasestr.c > /dev/null 2>&1
389 printf "No (will use our own instead).\n"
392 rm -f compat/have_strcasestr
396 All required packages were found. You may now run the following
397 commands to compile and install notmuch:
404 # construct the Makefile.config
405 cat > Makefile.config <<EOF
406 # This Makefile.config was automatically generated by the ./configure
407 # script of notmuch. If the configure script identified anything
408 # incorrectly, then you can edit this file to try to correct things,
409 # but be warned that if configure is run again it will destroy your
410 # changes, (and this could happen by simply calling "make" if the
411 # configure script is updated).
413 # The C compiler to use
416 # The C++ compiler to use
419 # Command to execute emacs from Makefiles
420 EMACS = emacs --quick
422 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
425 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
426 CXXFLAGS = ${CXXFLAGS}
428 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
431 # Flags to enable warnings when using the C++ compiler
432 WARN_CXXFLAGS=-Wall -Wextra -Wwrite-strings -Wswitch-enum
434 # Flags to enable warnings when using the C compiler
435 WARN_CFLAGS=\$(WARN_CXXFLAGS) -Wmissing-declarations
437 # The prefix to which notmuch should be installed
438 # Note: If you change this value here, be sure to ensure that the
439 # LIBDIR_IN_LDCONFIG value below is still set correctly.
442 # The directory to which libraries should be installed
443 # Note: If you change this value here, be sure to ensure that the
444 # LIBDIR_IN_LDCONFIG value below is still set correctly.
445 libdir = ${LIBDIR:=\$(prefix)/lib}
447 # Whether libdir is in a path configured into ldconfig
448 LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
450 # The directory to which header files should be installed
451 includedir = ${INCLUDEDIR:=\$(prefix)/include}
453 # The directory to which man pages should be installed
454 mandir = ${MANDIR:=\$(prefix)/share/man}
456 # The directory to which read-only (configuration) filesshould be installed
457 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
459 # The directory to which emacs lisp files should be installed
460 emacslispdir=${EMACSLISPDIR}
462 # Whether there's an emacs binary available for byte-compiling
463 HAVE_EMACS = ${have_emacs}
465 # The directory to which desktop files should be installed
466 desktop_dir = \$(prefix)/share/applications
468 # The directory to which bash completions files should be installed
469 bash_completion_dir = \$(sysconfdir)/bash_completion.d
471 # The directory to which zsh completions files should be installed
472 zsh_completion_dir = \$(prefix)/share/zsh/functions/Completion/Unix
474 # Whether the getline function is available (if not, then notmuch will
475 # build its own version)
476 HAVE_GETLINE = ${have_getline}
478 # Whether the strcasestr function is available (if not, then notmuch will
479 # build its own version)
480 HAVE_STRCASESTR = ${have_strcasestr}
482 # Supported platforms (so far) are: LINUX, MACOSX, SOLARIS
483 PLATFORM = ${platform}
485 # Whether the linker will automatically resolve the dependency of one
486 # library on another (if not, then linking a binary requires linking
487 # directly against both)
488 LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
490 # Flags needed to compile and link against Xapian
491 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
492 XAPIAN_LDFLAGS = ${xapian_ldflags}
494 # Flags needed to compile and link against GMime-2.4
495 GMIME_CFLAGS = ${gmime_cflags}
496 GMIME_LDFLAGS = ${gmime_ldflags}
498 # Flags needed to compile and link against talloc
499 TALLOC_CFLAGS = ${talloc_cflags}
500 TALLOC_LDFLAGS = ${talloc_ldflags}
502 # Whether valgrind header files are available
503 HAVE_VALGRIND = ${have_valgrind}
505 # And if so, flags needed at compile time for valgrind macros
506 VALGRIND_CFLAGS = ${valgrind_cflags}
508 # Combined flags for compiling and linking against all of the above
509 CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
510 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
511 \$(VALGRIND_CFLAGS) -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)
512 CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
513 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
514 \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS) \\
515 -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)
516 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(XAPIAN_LDFLAGS)