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]
73 Additional options are accepted for compatibility with other
74 configure-script calling conventions, but don't do anything yet:
76 --build=<cpu>-<vendor>-<os> Currently ignored
81 # Parse command-line options
83 if [ "${option}" = '--help' ] ; then
86 elif [ "${option%%=*}" = '--prefix' ] ; then
88 elif [ "${option%%=*}" = '--libdir' ] ; then
90 elif [ "${option%%=*}" = '--includedir' ] ; then
91 INCLUDEDIR="${option#*=}"
92 elif [ "${option%%=*}" = '--build' ] ; then
93 build_option="${option#*=}"
94 case ${build_option} in
97 echo "Unrecognized value for --build option: ${build_option}"
98 echo "Should be: <cpu>-<vendor>-<os>"
104 build_cpu=${build_option%%-*}
105 build_option=${build_option#*-}
106 build_vendor=${build_option%%-*}
107 build_os=${build_option#*-}
109 echo "Unrecognized option: ${option}"
118 Welcome to Notmuch, a system for indexing, searching and tagging your email.
120 We hope that the process of building and installing notmuch is quick
121 and smooth so that you can soon be reading and processing your email
122 more efficiently than ever.
124 If anything goes wrong in the configure process, you can override any
125 decisions it makes by manually editing the Makefile.config file that
126 it creates. Also please do as much as you can to figure out what could
127 be different on your machine compared to those of the notmuch
128 developers. Then, please email those details to the Notmuch list
129 (notmuch@notmuchmail.org) so that we can hopefully make future
130 versions of notmuch easier for you to use.
132 We'll now investigate your system to verify that all required
133 dependencies are available:
139 if pkg-config --version > /dev/null 2>&1; then
145 printf "Checking for Xapian development files... "
147 for xapian_config in ${XAPIAN_CONFIG}; do
148 if ${xapian_config} --version > /dev/null 2>&1; then
151 xapian_cxxflags=$(${xapian_config} --cxxflags)
152 xapian_ldflags=$(${xapian_config} --libs)
156 if [ ${have_xapian} = "0" ]; then
158 errors=$((errors + 1))
161 printf "Checking for GMime 2.4 development files... "
162 if pkg-config --modversion gmime-2.4 > /dev/null 2>&1; then
165 gmime_cflags=$(pkg-config --cflags gmime-2.4)
166 gmime_ldflags=$(pkg-config --libs gmime-2.4)
170 errors=$((errors + 1))
173 printf "Checking for talloc development files... "
174 if pkg-config --modversion talloc > /dev/null 2>&1; then
177 talloc_cflags=$(pkg-config --cflags talloc)
178 talloc_ldflags=$(pkg-config --libs talloc)
183 errors=$((errors + 1))
186 printf "Checking for valgrind development files... "
187 if pkg-config --modversion valgrind > /dev/null 2>&1; then
190 valgrind_cflags=$(pkg-config --cflags valgrind)
192 printf "No (but that's fine).\n"
196 if pkg-config --modversion emacs > /dev/null 2>&1; then
197 emacs_lispdir=$(pkg-config emacs --variable sitepkglispdir)
199 emacs_lispdir='$(prefix)/share/emacs/site-lisp'
202 printf "Checking if emacs is available... "
203 if emacs --quick --batch > /dev/null 2>&1; then
207 printf "No (so will not byte-compile emacs code)\n"
211 if [ $errors -gt 0 ]; then
214 *** Error: The dependencies of notmuch could not be satisfied. You will
215 need to install the following packages before being able to compile
219 if [ $have_xapian -eq 0 ]; then
220 echo " Xapian library (including development files such as headers)"
221 echo " http://xapian.org/"
223 if [ $have_gmime -eq 0 ]; then
224 echo " GMime 2.4 library (including development files such as headers)"
225 echo " http://spruce.sourceforge.net/gmime/"
227 if [ $have_talloc -eq 0 ]; then
228 echo " The talloc library (including development files such as headers)"
229 echo " http://talloc.samba.org/"
233 With any luck, you're using a modern, package-based operating system
234 that has all of these packages available in the distribution. In that
235 case a simple command will install everything you need. For example:
237 On Debian and similar systems:
239 sudo apt-get install libxapian-dev libgmime-2.4-dev libtalloc-dev
241 Or on Fedora and similar systems:
243 sudo yum install xapian-core-devel gmime-devel libtalloc-devel
245 On other systems, similar commands can be used, but the details of the
246 package names may be different.
249 if [ $have_pkg_config -eq 0 ]; then
251 Note: the pkg-config program is not available. This configure script
252 uses pkg-config to find the compilation flags required to link against
253 the various libraries needed by notmuch. It's possible you simply need
254 to install pkg-config with a command such as:
256 sudo apt-get install pkg-config
258 sudo yum install pkgconfig
260 But if pkg-config is not available for your system, then you will need
261 to modify the configure script to manually set the cflags and ldflags
262 variables to the correct values to link against each library in each
263 case that pkg-config could not be used to determine those values.
268 When you have installed the necessary dependencies, you can run
269 configure again to ensure the packages can be found, or simply run
270 "make" to compile notmuch.
276 printf "Checking for getline... "
277 if ${CC} -o compat/have_getline compat/have_getline.c > /dev/null 2>&1
282 printf "No (will use our own instead).\n"
285 rm -f compat/have_getline
289 All required packages were found. You may now run the following
290 commands to compile and install notmuch:
297 # construct the Makefile.config
298 cat > Makefile.config <<EOF
299 # This Makefile.config was automatically generated by the ./configure
300 # script of notmuch. If the configure script identified anything
301 # incorrectly, then you can edit this file to try to correct things,
302 # but be warned that if configure is run again it will destroy your
303 # changes, (and this could happen by simply calling "make" if the
304 # configure script is updated).
306 # The C compiler to use
309 # The C++ compiler to use
312 # Command to execute emacs from Makefiles
313 EMACS = emacs --quick
315 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
318 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
319 CXXFLAGS = ${CXXFLAGS}
321 # Flags to enable warnings when using the C++ compiler
322 WARN_CXXFLAGS=-Wall -Wextra -Wwrite-strings -Wswitch-enum
324 # Flags to enable warnings when using the C compiler
325 WARN_CFLAGS=\$(WARN_CXXFLAGS) -Wmissing-declarations
327 # The prefix to which notmuch should be installed
330 # The directory to which libraries should be installed
331 libdir = ${LIBDIR:=\$(prefix)/lib}
333 # The directory to which header files should be installed
334 includedir = ${INCLUDEDIR:=\$(prefix)/lib}
336 # The directory to which emacs lisp files should be installed
337 emacs_lispdir=${emacs_lispdir}
339 # Whether there's an emacs binary available for byte-compiling
340 HAVE_EMACS = ${have_emacs}
342 # The directory to which desktop files should be installed
343 desktop_dir = \$(prefix)/share/applications
345 # The directory to which bash completions files should be installed
346 bash_completion_dir = /etc/bash_completion.d
348 # The directory to which zsh completions files should be installed
349 zsh_completion_dir = \$(prefix)/share/zsh/functions/Completion/Unix
351 # Whether the getline function is available (if not, then notmuch will
352 # build its own version)
353 HAVE_GETLINE = ${have_getline}
355 # Flags needed to compile and link against Xapian
356 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
357 XAPIAN_LDFLAGS = ${xapian_ldflags}
359 # Flags needed to compile and link against GMime-2.4
360 GMIME_CFLAGS = ${gmime_cflags}
361 GMIME_LDFLAGS = ${gmime_ldflags}
363 # Flags needed to compile and link against talloc
364 TALLOC_CFLAGS = ${talloc_cflags}
365 TALLOC_LDFLAGS = ${talloc_ldflags}
367 # Whether valgrind header files are available
368 HAVE_VALGRIND = ${have_valgrind}
370 # And if so, flags needed at compile time for valgrind macros
371 VALGRIND_CFLAGS = ${valgrind_cflags}
373 # Combined flags for compiling and linking against all of the above
374 CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
375 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
377 CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
378 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
379 \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS)
380 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(XAPIAN_LDFLAGS)