#! /bin/sh
+# Test whether this shell is capable of parameter substring processing.
+( option='a/b'; : ${option#*/} ) 2>/dev/null || {
+ echo "
+The shell interpreting '$0' is lacking some required features.
+
+To work around this problem you may try to execute:
+
+ ksh $0 $*
+ or
+ bash $0 $*
+"
+ exit 1
+}
+
+# Store original IFS value so it can be changed (and restored) in many places.
+readonly DEFAULT_IFS="$IFS"
+
srcdir=$(dirname "$0")
# For a non-srcdir configure invocation (such as ../configure), create
fi
# Set several defaults (optionally specified by the user in
-# environemnt variables)
+# environment variables)
CC=${CC:-gcc}
CXX=${CXX:-g++}
CFLAGS=${CFLAGS:--O2}
WITH_BASH=1
WITH_ZSH=1
+# Compatible GMime versions (with constraints).
+# If using GMime 2.6, we need to have a version >= 2.6.5 to avoid a
+# crypto bug. We need 2.6.7 for permissive "From " header handling.
+GMIME_24_VERSION_CTR=''
+GMIME_24_VERSION="gmime-2.4 $GMIME_24_VERSION_CTR"
+GMIME_26_VERSION_CTR='>= 2.6.7'
+GMIME_26_VERSION="gmime-2.6 $GMIME_26_VERSION_CTR"
+
+WITH_GMIME_VERSIONS="$GMIME_26_VERSION;$GMIME_24_VERSION"
+
usage ()
{
cat <<EOF
--mandir=DIR Install man pages to DIR [PREFIX/share/man]
--sysconfdir=DIR Read-only single-machine data [PREFIX/etc]
--emacslispdir=DIR Emacs code [PREFIX/share/emacs/site-lisp]
+ --emacsetcdir=DIR Emacs miscellaneous files [PREFIX/share/emacs/site-lisp]
--bashcompletiondir=DIR Bash completions files [SYSCONFDIR/bash_completion.d]
--zshcompletiondir=DIR Zsh completions files [PREFIX/share/zsh/functions/Completion/Unix]
+Some specific library versions can be specified (auto-detected otherwise):
+
+ --with-gmime-version=VERS Specify GMIME version (2.4 or 2.6)
+
Some features can be disabled (--with-feature=no is equivalent to
--without-feature) :
SYSCONFDIR="${option#*=}"
elif [ "${option%%=*}" = '--emacslispdir' ] ; then
EMACSLISPDIR="${option#*=}"
+ elif [ "${option%%=*}" = '--emacsetcdir' ] ; then
+ EMACSETCDIR="${option#*=}"
elif [ "${option%%=*}" = '--bashcompletiondir' ] ; then
BASHCOMPLETIONDIR="${option#*=}"
elif [ "${option%%=*}" = '--zshcompletiondir' ] ; then
fi
elif [ "${option}" = '--without-zsh-completion' ] ; then
WITH_ZSH=0
+ elif [ "${option%%=*}" = '--with-gmime-version' ] ; then
+ if [ "${option#*=}" = '2.4' ]; then
+ WITH_GMIME_VERSIONS=$GMIME_24_VERSION
+ elif [ "${option#*=}" = '2.6' ]; then
+ WITH_GMIME_VERSIONS=$GMIME_26_VERSION
+ fi
elif [ "${option%%=*}" = '--build' ] ; then
- build_option="${option#*=}"
- case ${build_option} in
- *-*-*) ;;
- *)
- echo "Unrecognized value for --build option: ${build_option}"
- echo "Should be: <cpu>-<vendor>-<os>"
- echo "See:"
- echo " $0 --help"
- echo ""
- exit 1
- esac
- build_cpu=${build_option%%-*}
- build_option=${build_option#*-}
- build_vendor=${build_option%%-*}
- build_os=${build_option#*-}
+ true
elif [ "${option%%=*}" = '--host' ] ; then
- host_option="${option#*=}"
- case ${host_option} in
- *-*-*) ;;
- *)
- echo "Unrecognized value for --host option: ${host_option}"
- echo "Should be: <cpu>-<vendor>-<os>"
- echo "See:"
- echo " $0 --help"
- echo ""
- exit 1
- esac
- host_cpu=${host_option%%-*}
- host_option=${host_option#*-}
- host_vendor=${host_option%%-*}
- host_os=${host_option#*-}
+ true
elif [ "${option%%=*}" = '--infodir' ] ; then
true
elif [ "${option%%=*}" = '--datadir' ] ; then
# Makefile.config file later like most values), because we need to
# actually investigate this value compared to the ldconfig_paths value
# below.
-libdir_expanded=${LIBDIR:-${PREFIX}/lib}
+if [ -z "$LIBDIR" ] ; then
+ libdir_expanded="${PREFIX}/lib"
+else
+ # very non-general variable expansion
+ libdir_expanded=`echo "$LIBDIR" | sed "s|\\${prefix}|${PREFIX}|g; s|\\$prefix/|${PREFIX}/|; s|//*|/|g"`
+fi
cat <<EOF
Welcome to Notmuch, a system for indexing, searching and tagging your email.
printf "Checking for GMime development files... "
have_gmime=0
-for gmimepc in gmime-2.6 gmime-2.4; do
+IFS=';'
+for gmimepc in $WITH_GMIME_VERSIONS; do
if pkg-config --exists $gmimepc; then
printf "Yes ($gmimepc).\n"
have_gmime=1
gmime_cflags=$(pkg-config --cflags $gmimepc)
gmime_ldflags=$(pkg-config --libs $gmimepc)
+ break
fi
done
+IFS=$DEFAULT_IFS
if [ "$have_gmime" = "0" ]; then
printf "No.\n"
errors=$((errors + 1))
fi
# GMime already depends on Glib >= 2.12, but we use at least one Glib
-# function that only exists as of 2.14, (g_hash_table_get_keys)
-printf "Checking for Glib development files (>= 2.14)... "
+# function that only exists as of 2.22, (g_array_unref)
+printf "Checking for Glib development files (>= 2.22)... "
have_glib=0
-if pkg-config --exists 'glib-2.0 >= 2.14'; then
+if pkg-config --exists 'glib-2.0 >= 2.22'; then
printf "Yes.\n"
have_glib=1
glib_cflags=$(pkg-config --cflags glib-2.0)
fi
fi
+if [ -z "${EMACSETCDIR}" ]; then
+ if pkg-config --exists emacs; then
+ EMACSETCDIR=$(pkg-config emacs --variable sitepkglispdir)
+ else
+ EMACSETCDIR='$(prefix)/share/emacs/site-lisp'
+ fi
+fi
+
printf "Checking if emacs is available... "
if emacs --quick --batch > /dev/null 2>&1; then
printf "Yes.\n"
printf "Solaris.\n"
platform=SOLARIS
linker_resolves_library_dependencies=0
-elif [ $uname = "Linux" ] ; then
- printf "Linux\n"
- platform=LINUX
+elif [ $uname = "FreeBSD" ] ; then
+ printf "FreeBSD.\n"
+ platform=FREEBSD
+ linker_resolves_library_dependencies=0
+elif [ $uname = "OpenBSD" ] ; then
+ printf "OpenBSD.\n"
+ platform=OPENBSD
+ linker_resolves_library_dependencies=0
+elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
+ printf "$uname\n"
+ platform="$uname"
linker_resolves_library_dependencies=1
printf "Checking for $libdir_expanded in ldconfig... "
# IFS=$(printf '\n')
#
# because the shell's command substitution deletes any trailing newlines.
- OLD_IFS=$IFS
IFS="
"
for path in $ldconfig_paths; do
libdir_in_ldconfig=1
fi
done
- IFS=$OLD_IFS
+ IFS=$DEFAULT_IFS
if [ "$libdir_in_ldconfig" = '0' ]; then
printf "No (will set RPATH)\n"
else
echo " http://xapian.org/"
fi
if [ $have_gmime -eq 0 ]; then
- echo " GMime 2.4 library (including development files such as headers)"
+ echo " Either GMime 2.4 library" $GMIME_24_VERSION_CTR "or GMime 2.6 library" $GMIME_26_VERSION_CTR
+ echo " (including development files such as headers)"
echo " http://spruce.sourceforge.net/gmime/"
+ echo
fi
if [ $have_glib -eq 0 ]; then
- echo " Glib library >= 2.14 (including development files such as headers)"
+ echo " Glib library >= 2.22 (including development files such as headers)"
echo " http://ftp.gnome.org/pub/gnome/sources/glib/"
+ echo
fi
if [ $have_talloc -eq 0 ]; then
echo " The talloc library (including development files such as headers)"
echo " http://talloc.samba.org/"
+ echo
fi
cat <<EOF
-
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.6-dev libtalloc-dev
Or on Fedora and similar systems:
WARN_CXXFLAGS=""
printf "Checking for available C++ compiler warning flags... "
-for flag in -Wall -Wextra -Wwrite-strings -Wswitch-enum; do
+for flag in -Wall -Wextra -Wwrite-strings; do
if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
then
WARN_CXXFLAGS="${WARN_CXXFLAGS}${WARN_CXXFLAGS:+ }${flag}"
printf "\n\t${WARN_CFLAGS}\n"
rm -f minimal minimal.c
-
+
cat <<EOF
All required packages were found. You may now run the following
# The directory to which man pages should be installed
mandir = ${MANDIR:=\$(prefix)/share/man}
-# The directory to which read-only (configuration) filesshould be installed
+# The directory to which read-only (configuration) files should be installed
sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
# The directory to which emacs lisp files should be installed
emacslispdir=${EMACSLISPDIR}
+# The directory to which emacs miscellaneous (machine-independent) files should
+# be installed
+emacsetcdir=${EMACSETCDIR}
+
# Whether there's an emacs binary available for byte-compiling
HAVE_EMACS = ${have_emacs}
# build its own version)
HAVE_STRCASESTR = ${have_strcasestr}
-# Supported platforms (so far) are: LINUX, MACOSX, SOLARIS
+# Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
PLATFORM = ${platform}
# Whether the linker will automatically resolve the dependency of one