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 # Set the defaults for values the user can specify with command-line
18 Usage: ./configure [options]...
20 This script configures notmuch to build on your system.
22 It verifies that dependencies are available, determines flags needed
23 to compile and link against various required libraries, and identifies
24 whether various system functions can be used or if locally-provided
25 replacements will be built instead.
27 Finally, it allows you to control various aspects of the build and
30 First, some common variables can specified via environment variables:
32 CC The C compiler to use
33 CFLAGS Flags to pass to the C compiler
34 CXX The C++ compiler to use
35 CXXFLAGS Flags to pass to the C compiler
36 LDFLAGS Flags to pass when linking
38 Each of these values can further be controlled by specifying them
39 later on the "make" command line.
41 Other environment variables can be used to control configure itself,
42 (and for which there is no equivalent build-time control):
44 XAPIAN_CONFIG The program to use to determine flags for
45 compiling and linking against the Xapian
46 library. [$XAPIAN_CONFIG]
48 Additionally, various options can be specified on the configure
51 --prefix=PREFIX Install files in PREFIX [$PREFIX]
53 By default, "make install" will install the resulting program to
54 $PREFIX/bin, documentation to $PREFIX/share, etc. You can
55 specify an installation prefix other than $PREFIX using
56 --prefix, for instance:
58 ./configure --prefix=\$HOME
63 # Parse command-line options
65 if [ "${option}" = '--help' ] ; then
68 elif [ "${option%%=*}" = '--prefix' ] ; then
74 Welcome to Notmuch, a system for indexing, searching and tagging your email.
76 We hope that the process of building and installing notmuch is quick
77 and smooth so that you can soon be reading and processing your email
78 more efficiently than ever.
80 If anything goes wrong in the configure process, you can override any
81 decisions it makes by manually editing the Makefile.config file that
82 it creates. Also please do as much as you can to figure out what could
83 be different on your machine compared to those of the notmuch
84 developers. Then, please email those details to the Notmuch list
85 (notmuch@notmuchmail.org) so that we can hopefully make future
86 versions of notmuch easier for you to use.
88 We'll now investigate your system to verify that all required
89 dependencies are available:
95 if pkg-config --version > /dev/null 2>&1; then
101 printf "Checking for Xapian development files... "
103 for xapian_config in ${XAPIAN_CONFIG}; do
104 if ${xapian_config} --version > /dev/null 2>&1; then
107 xapian_cxxflags=$(${xapian_config} --cxxflags)
108 xapian_ldflags=$(${xapian_config} --libs)
112 if [ ${have_xapian} = "0" ]; then
114 errors=$((errors + 1))
117 printf "Checking for GMime 2.4 development files... "
118 if pkg-config --modversion gmime-2.4 > /dev/null 2>&1; then
121 gmime_cflags=$(pkg-config --cflags gmime-2.4)
122 gmime_ldflags=$(pkg-config --libs gmime-2.4)
126 errors=$((errors + 1))
129 printf "Checking for talloc development files... "
130 if pkg-config --modversion talloc > /dev/null 2>&1; then
133 talloc_cflags=$(pkg-config --cflags talloc)
134 talloc_ldflags=$(pkg-config --libs talloc)
139 errors=$((errors + 1))
142 printf "Checking for valgrind development files... "
143 if pkg-config --modversion valgrind > /dev/null 2>&1; then
146 valgrind_cflags=$(pkg-config --cflags valgrind)
148 printf "No (but that's fine).\n"
152 if pkg-config --modversion emacs > /dev/null 2>&1; then
153 emacs_lispdir=$(pkg-config emacs --variable sitepkglispdir)
155 emacs_lispdir='$(prefix)/share/emacs/site-lisp'
158 if [ $errors -gt 0 ]; then
161 *** Error: The dependencies of notmuch could not be satisfied. You will
162 need to install the following packages before being able to compile
166 if [ $have_xapian -eq 0 ]; then
167 echo " Xapian library (including development files such as headers)"
168 echo " http://xapian.org/"
170 if [ $have_gmime -eq 0 ]; then
171 echo " GMime 2.4 library (including development files such as headers)"
172 echo " http://spruce.sourceforge.net/gmime/"
174 if [ $have_talloc -eq 0 ]; then
175 echo " The talloc library (including development files such as headers)"
176 echo " http://talloc.samba.org/"
180 With any luck, you're using a modern, package-based operating system
181 that has all of these packages available in the distribution. In that
182 case a simple command will install everything you need. For example:
184 On Debian and similar systems:
186 sudo apt-get install libxapian-dev libgmime-2.4-dev libtalloc-dev
188 Or on Fedora and similar systems:
190 sudo yum install xapian-core-devel gmime-devel libtalloc-devel
192 On other systems, similar commands can be used, but the details of the
193 package names may be different.
196 if [ $have_pkg_config -eq 0 ]; then
198 Note: the pkg-config program is not available. This configure script
199 uses pkg-config to find the compilation flags required to link against
200 the various libraries needed by notmuch. It's possible you simply need
201 to install pkg-config with a command such as:
203 sudo apt-get install pkg-config
205 sudo yum install pkgconfig
207 But if pkg-config is not available for your system, then you will need
208 to modify the configure script to manually set the cflags and ldflags
209 variables to the correct values to link against each library in each
210 case that pkg-config could not be used to determine those values.
215 When you have installed the necessary dependencies, you can run
216 configure again to ensure the packages can be found, or simply run
217 "make" to compile notmuch.
223 printf "Checking for getline... "
224 if ${CC} -o config/have_getline config/have_getline.c > /dev/null 2>&1
229 printf "No (will use our own instead).\n"
232 rm -f config/have_getline
236 All required packages were found. You may now run the following
237 commands to compile and install notmuch:
244 # construct the Makefile.config
245 cat > Makefile.config <<EOF
246 # This Makefile.config was automatically generated by the ./configure
247 # script of notmuch. If the configure script identified anything
248 # incorrectly, then you can edit this file to try to correct things,
249 # but be warned that if configure is run again it will destroy your
250 # changes, (and this could happen by simply calling "make" if the
251 # configure script is updated).
253 # The C compiler to use
256 # The C++ compiler to use
259 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
262 # Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
263 CXXFLAGS = ${CXXFLAGS}
265 # The prefix to which notmuch should be installed
268 # The directory to which emacs lisp files should be installed
269 emacs_lispdir=${emacs_lispdir}
271 # Whether the getline function is available (if not, then notmuch will
272 # build its own version)
273 HAVE_GETLINE = ${have_getline}
275 # Flags needed to compile and link against Xapian
276 XAPIAN_CXXFLAGS = ${xapian_cxxflags}
277 XAPIAN_LDFLAGS = ${xapian_ldflags}
279 # Flags needed to compile and link against GMime-2.4
280 GMIME_CFLAGS = ${gmime_cflags}
281 GMIME_LDFLAGS = ${gmime_ldflags}
283 # Flags needed to compile and link against talloc
284 TALLOC_CFLAGS = ${talloc_cflags}
285 TALLOC_LDFLAGS = ${talloc_ldflags}
287 # Whether valgrind header files are available
288 HAVE_VALGRIND = ${have_valgrind}
290 # And if so, flags needed at compile time for valgrind macros
291 VALGRIND_CFLAGS = ${valgrind_cflags}
293 # Combined flags for compiling and linking against all of the above
294 CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
295 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
297 CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
298 \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
299 \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS)
300 CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(XAPIAN_LDFLAGS)