]> git.notmuchmail.org Git - notmuch/blobdiff - configure
Merge branch 'debian' into rebuild
[notmuch] / configure
index b4770ec9ee2f28a69b2b16c4fba247f03b698543..648d8771b9198ca02f2fb995c66a461ba336aeff 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,95 @@
 #! /bin/sh
 
 #! /bin/sh
 
+# Set several defaults (optionally specified by the user in
+# environemnt variables)
+CC=${CC:-gcc}
+CXX=${CXX:-g++}
+CFLAGS=${CFLAGS:--O2}
+CXXFLAGS=${CXXFLAGS:-\$(CFLAGS)}
+XAPIAN_CONFIG=${XAPIAN_CONFIG:-xapian-config-1.1 xapian-config}
+
+# We don't allow the EMACS or GZIP Makefile variables inherit values
+# from the environment as we do with CC and CXX above. The reason is
+# that these names as environment variables have existing uses other
+# than the program name that we want. (EMACS is set to 't' when a
+# shell is running within emacs and GZIP specifies arguments to pass
+# on the gzip command line).
+
+# Set the defaults for values the user can specify with command-line
+# options.
+PREFIX=/usr/local
+LIBDIR=
+
+usage ()
+{
+    cat <<EOF
+Usage: ./configure [options]...
+
+This script configures notmuch to build on your system.
+
+It verifies that dependencies are available, determines flags needed
+to compile and link against various required libraries, and identifies
+whether various system functions can be used or if locally-provided
+replacements will be built instead.
+
+Finally, it allows you to control various aspects of the build and
+installation process.
+
+First, some common variables can specified via environment variables:
+
+       CC              The C compiler to use
+       CFLAGS          Flags to pass to the C compiler
+       CXX             The C++ compiler to use
+       CXXFLAGS        Flags to pass to the C compiler
+       LDFLAGS         Flags to pass when linking
+
+Each of these values can further be controlled by specifying them
+later on the "make" command line.
+
+Other environment variables can be used to control configure itself,
+(and for which there is no equivalent build-time control):
+
+       XAPIAN_CONFIG   The program to use to determine flags for
+                       compiling and linking against the Xapian
+                       library. [$XAPIAN_CONFIG]
+
+Additionally, various options can be specified on the configure
+command line.
+
+       --prefix=PREFIX Install files in PREFIX [$PREFIX]
+
+By default, "make install" will install the resulting program to
+$PREFIX/bin, documentation to $PREFIX/man, etc. You can
+specify an installation prefix other than $PREFIX using
+--prefix, for instance:
+
+       ./configure --prefix=\$HOME
+
+Fine tuning of some installation directories is available:
+
+       --libdir=DIR    Install libraries in LIBDIR [PREFIX/lib]
+
+EOF
+}
+
+# Parse command-line options
+for option; do
+    if [ "${option}" = '--help' ] ; then
+       usage
+       exit 0
+    elif [ "${option%%=*}" = '--prefix' ] ; then
+       PREFIX="${option#*=}"
+    elif [ "${option%%=*}" = '--libdir' ] ; then
+       LIBDIR="${option#*=}"
+    else
+       echo "Unrecognized option: ${option}."
+       echo "See:"
+       echo "  $0 --help"
+       echo ""
+       exit 1
+    fi
+done
+
 cat <<EOF
 Welcome to Notmuch, a system for indexing, searching and tagging your email.
 
 cat <<EOF
 Welcome to Notmuch, a system for indexing, searching and tagging your email.
 
@@ -7,14 +97,16 @@ We hope that the process of building and installing notmuch is quick
 and smooth so that you can soon be reading and processing your email
 more efficiently than ever.
 
 and smooth so that you can soon be reading and processing your email
 more efficiently than ever.
 
-If anything goes wrong in this process, please do as much as you can
-to figure out what could be different on your machine compared to
-those of the notmuch developers. Then, please email those details to
-Carl Worth <cworth@cworth.org> so that we can hopefully make future
+If anything goes wrong in the configure process, you can override any
+decisions it makes by manually editing the Makefile.config file that
+it creates. Also please do as much as you can to figure out what could
+be different on your machine compared to those of the notmuch
+developers. Then, please email those details to the Notmuch list
+(notmuch@notmuchmail.org) so that we can hopefully make future
 versions of notmuch easier for you to use.
 
 versions of notmuch easier for you to use.
 
-We'll now investigate your system to find verify that various software
-components that notmuch relies on are available.
+We'll now investigate your system to verify that all required
+dependencies are available:
 
 EOF
 
 
 EOF
 
@@ -26,39 +118,70 @@ else
     have_pkg_config=0
 fi
 
     have_pkg_config=0
 fi
 
-if xapian-config --version > /dev/null 2>&1; then
-    echo "Checking for Xapian development files... Yes."
-    have_xapian=1
-else
-    echo "Checking for Xapian development files... No."
-    have_xapian=0
+printf "Checking for Xapian development files... "
+have_xapian=0
+for xapian_config in ${XAPIAN_CONFIG}; do
+    if ${xapian_config} --version > /dev/null 2>&1; then
+       printf "Yes.\n"
+       have_xapian=1
+       xapian_cxxflags=$(${xapian_config} --cxxflags)
+       xapian_ldflags=$(${xapian_config} --libs)
+       break
+    fi
+done
+if [ ${have_xapian} = "0" ]; then
+    printf "No.\n"
     errors=$((errors + 1))
 fi
 
     errors=$((errors + 1))
 fi
 
+printf "Checking for GMime 2.4 development files... "
 if pkg-config --modversion gmime-2.4 > /dev/null 2>&1; then
 if pkg-config --modversion gmime-2.4 > /dev/null 2>&1; then
-    echo "Checking for GMime 2.4 development files... Yes."
+    printf "Yes.\n"
     have_gmime=1
     have_gmime=1
+    gmime_cflags=$(pkg-config --cflags gmime-2.4)
+    gmime_ldflags=$(pkg-config --libs gmime-2.4)
 else
 else
-    echo "Checking for GMime 2.4 development files... No."
+    printf "No.\n"
     have_gmime=0
     errors=$((errors + 1))
 fi
 
     have_gmime=0
     errors=$((errors + 1))
 fi
 
+printf "Checking for talloc development files... "
 if pkg-config --modversion talloc > /dev/null 2>&1; then
 if pkg-config --modversion talloc > /dev/null 2>&1; then
-    echo "Checking for talloc development files... Yes."
+    printf "Yes.\n"
     have_talloc=1
     have_talloc=1
+    talloc_cflags=$(pkg-config --cflags talloc)
+    talloc_ldflags=$(pkg-config --libs talloc)
 else
 else
-    echo "Checking for talloc development files... No."
+    printf "No.\n"
     have_talloc=0
     have_talloc=0
+    talloc_cflags=
     errors=$((errors + 1))
 fi
 
     errors=$((errors + 1))
 fi
 
+printf "Checking for valgrind development files... "
 if pkg-config --modversion valgrind > /dev/null 2>&1; then
 if pkg-config --modversion valgrind > /dev/null 2>&1; then
-    echo "Checking for valgrind development files... Yes."
-    have_valgrind=-DHAVE_VALGRIND
+    printf "Yes.\n"
+    have_valgrind=1
+    valgrind_cflags=$(pkg-config --cflags valgrind)
+else
+    printf "No (but that's fine).\n"
+    have_valgrind=0
+fi
+
+if pkg-config --modversion emacs > /dev/null 2>&1; then
+    emacs_lispdir=$(pkg-config emacs --variable sitepkglispdir)
+else
+    emacs_lispdir='$(prefix)/share/emacs/site-lisp'
+fi
+
+printf "Checking if emacs is available... "
+if emacs --quick --batch > /dev/null 2>&1; then
+    printf "Yes.\n"
+    have_emacs=1
 else
 else
-    echo "Checking for valgrind development files... No."
-    have_valgrind=
+    printf "No (so will not byte-compile emacs code)\n"
+    have_emacs=0
 fi
 
 if [ $errors -gt 0 ]; then
 fi
 
 if [ $errors -gt 0 ]; then
@@ -83,29 +206,37 @@ EOF
     fi
     cat <<EOF
 
     fi
     cat <<EOF
 
-On a modern, package-based operating system such as Debian, you can
-install all of the dependencies with the following simple command
-line:
+With any luck, you're using a modern, package-based operating system
+that has all of these packages available in the distribution. In that
+case a simple command will install everything you need. For example:
+
+On Debian and similar systems:
 
        sudo apt-get install libxapian-dev libgmime-2.4-dev libtalloc-dev
 
 
        sudo apt-get install libxapian-dev libgmime-2.4-dev libtalloc-dev
 
-On other systems, a similar command can be used, but the details of the 
-package names may be different, (such as "devel" in place of "dev").
+Or on Fedora and similar systems:
+
+       sudo yum install xapian-core-devel gmime-devel libtalloc-devel
+
+On other systems, similar commands can be used, but the details of the
+package names may be different.
 
 EOF
     if [ $have_pkg_config -eq 0 ]; then
 cat <<EOF
 
 EOF
     if [ $have_pkg_config -eq 0 ]; then
 cat <<EOF
-Note: the pkg-config program is not available. Both this configure
-script and the Makefile of notmuch use pkg-config to find the
-compilation flags required to link against the various libraries
-needed by notmuch. It's possible you simply need to install pkg-config
-with a command such as:
+Note: the pkg-config program is not available. This configure script
+uses pkg-config to find the compilation flags required to link against
+the various libraries needed by notmuch. It's possible you simply need
+to install pkg-config with a command such as:
 
        sudo apt-get install pkg-config
 
        sudo apt-get install pkg-config
+Or:
+       sudo yum install pkgconfig
 
 But if pkg-config is not available for your system, then you will need
 
 But if pkg-config is not available for your system, then you will need
-to manually edit the notmuch Makefile to set NOTMUCH_CFLAGS and
-NOTMUCH_LDFLAGS to the correct values without calling pkg-config.
+to modify the configure script to manually set the cflags and ldflags
+variables to the correct values to link against each library in each
+case that pkg-config could not be used to determine those values.
 
 EOF
     fi
 
 EOF
     fi
@@ -118,6 +249,17 @@ EOF
     exit 1
 fi
 
     exit 1
 fi
 
+printf "Checking for getline... "
+if ${CC} -o compat/have_getline compat/have_getline.c > /dev/null 2>&1
+then
+    printf "Yes.\n"
+    have_getline=1
+else
+    printf "No (will use our own instead).\n"
+    have_getline=0
+fi
+rm -f compat/have_getline
+
 cat <<EOF
 
 All required packages were found. You may now run the following
 cat <<EOF
 
 All required packages were found. You may now run the following
@@ -130,7 +272,83 @@ EOF
 
 # construct the Makefile.config
 cat > Makefile.config <<EOF
 
 # construct the Makefile.config
 cat > Makefile.config <<EOF
-prefix = /usr/local
+# This Makefile.config was automatically generated by the ./configure
+# script of notmuch. If the configure script identified anything
+# incorrectly, then you can edit this file to try to correct things,
+# but be warned that if configure is run again it will destroy your
+# changes, (and this could happen by simply calling "make" if the
+# configure script is updated).
+
+# The C compiler to use
+CC = ${CC}
+
+# The C++ compiler to use
+CXX = ${CXX}
+
+# Command to execute emacs from Makefiles
+EMACS = emacs --quick
+
+# Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
+CFLAGS = ${CFLAGS}
+
+# Default FLAGS for C++ compiler (can be overridden by user such as "make CXXFLAGS=-g")
+CXXFLAGS = ${CXXFLAGS}
+
+# Flags to enable warnings when using the C++ compiler
+WARN_CXXFLAGS=-Wall -Wextra -Wwrite-strings -Wswitch-enum
+
+# Flags to enable warnings when using the C compiler
+WARN_CFLAGS=\$(WARN_CXXFLAGS) -Wmissing-declarations
+
+# The prefix to which notmuch should be installed
+prefix = ${PREFIX}
+
+# The directory to which notmuch libraries should be installed
+libdir = ${LIBDIR:=\$(prefix)/lib}
+
+# The directory to which emacs lisp files should be installed
+emacs_lispdir=${emacs_lispdir}
+
+# Whether there's an emacs binary available for byte-compiling
+HAVE_EMACS = ${have_emacs}
+
+# The directory to which desktop files should be installed
+desktop_dir = \$(prefix)/share/applications
+
+# The directory to which bash completions files should be installed
 bash_completion_dir = /etc/bash_completion.d
 bash_completion_dir = /etc/bash_completion.d
-CFLAGS += ${have_valgrind}
+
+# The directory to which zsh completions files should be installed
+zsh_completion_dir = \$(prefix)/share/zsh/functions/Completion/Unix
+
+# Whether the getline function is available (if not, then notmuch will
+# build its own version)
+HAVE_GETLINE = ${have_getline}
+
+# Flags needed to compile and link against Xapian
+XAPIAN_CXXFLAGS = ${xapian_cxxflags}
+XAPIAN_LDFLAGS = ${xapian_ldflags}
+
+# Flags needed to compile and link against GMime-2.4
+GMIME_CFLAGS = ${gmime_cflags}
+GMIME_LDFLAGS = ${gmime_ldflags}
+
+# Flags needed to compile and link against talloc
+TALLOC_CFLAGS = ${talloc_cflags}
+TALLOC_LDFLAGS = ${talloc_ldflags}
+
+# Whether valgrind header files are available
+HAVE_VALGRIND = ${have_valgrind}
+
+# And if so, flags needed at compile time for valgrind macros
+VALGRIND_CFLAGS = ${valgrind_cflags}
+
+# Combined flags for compiling and linking against all of the above
+CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS)      \\
+                  \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND)   \\
+                  \$(VALGRIND_CFLAGS)
+CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS)    \\
+                    \$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
+                    \$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS)
+CONFIGURE_LDFLAGS =  \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(XAPIAN_LDFLAGS)
 EOF
 EOF