X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=configure;h=acb90a8c610efdf24c5d472e6a2d1852b71dc391;hp=1ae717aea7b8107e2cbb6938bf6bd9df7ef619ca;hb=df6f3cdf9d421011090ccb50af9828f5903544ee;hpb=660510ee4cdc25bcaf60a74000d2754c0f7794ff diff --git a/configure b/configure index 1ae717ae..acb90a8c 100755 --- a/configure +++ b/configure @@ -1,15 +1,45 @@ #! /bin/sh -# Removing space from IFS makes it much easier to support filenames -# with spaces. See http://www.dwheeler.com/essays/filenames-in-shell.html -# for gory details. -IFS="$(printf '\n\t')" +# 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. -# Since we don't have space in IFS we use tab to separate things in lists -tab="$(printf '\t')" +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 +# the directory structure and copy Makefiles. +if [ "$srcdir" != "." ]; then + + for dir in . $(grep "^subdirs *=" "$srcdir"/Makefile | sed -e "s/subdirs *= *//"); do + mkdir -p "$dir" + cp "$srcdir"/"$dir"/Makefile.local "$dir" + cp "$srcdir"/"$dir"/Makefile "$dir" + done + + # Easiest way to get the test suite to work is to just copy the + # whole thing into the build directory. + cp -a "$srcdir"/test/* test + + # Emacs only likes to generate compiled files next to the .el files + # by default so copy these as well (which is not ideal0. + cp -a "$srcdir"/emacs/*.el emacs +fi # Set several defaults (optionally specified by the user in -# environemnt variables) +# environment variables) CC=${CC:-gcc} CXX=${CXX:-g++} CFLAGS=${CFLAGS:--O2} @@ -28,6 +58,19 @@ XAPIAN_CONFIG=${XAPIAN_CONFIG:-xapian-config} # options. PREFIX=/usr/local LIBDIR= +WITH_EMACS=1 +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 () { @@ -81,6 +124,20 @@ Fine tuning of some installation directories is available: --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) : + + --without-emacs Do not install lisp file + --without-bash-completion Do not install bash completions files + --without-zsh-completion Do not install zsh completions files Additional options are accepted for compatibility with other configure-script calling conventions, but don't do anything yet: @@ -114,38 +171,46 @@ for option; do SYSCONFDIR="${option#*=}" elif [ "${option%%=*}" = '--emacslispdir' ] ; then EMACSLISPDIR="${option#*=}" + elif [ "${option%%=*}" = '--emacsetcdir' ] ; then + EMACSETCDIR="${option#*=}" + elif [ "${option%%=*}" = '--bashcompletiondir' ] ; then + BASHCOMPLETIONDIR="${option#*=}" + elif [ "${option%%=*}" = '--zshcompletiondir' ] ; then + ZSHCOMLETIONDIR="${option#*=}" + elif [ "${option%%=*}" = '--with-emacs' ]; then + if [ "${option#*=}" = 'no' ]; then + WITH_EMACS=0 + else + WITH_EMACS=1 + fi + elif [ "${option}" = '--without-emacs' ] ; then + WITH_EMACS=0 + elif [ "${option%%=*}" = '--with-bash-completion' ]; then + if [ "${option#*=}" = 'no' ]; then + WITH_BASH=0 + else + WITH_BASH=1 + fi + elif [ "${option}" = '--without-bash-completion' ] ; then + WITH_BASH=0 + elif [ "${option%%=*}" = '--with-zsh-completion' ]; then + if [ "${option#*=}" = 'no' ]; then + WITH_ZSH=0 + else + WITH_ZSH=1 + 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: --" - 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: --" - 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 @@ -219,21 +284,38 @@ fi printf "Checking for GMime development files... " have_gmime=0 -for gmimepc in gmime-2.6 gmime-2.4; do - if pkg-config --modversion $gmimepc > /dev/null 2>&1; then +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.22, (g_array_unref) +printf "Checking for Glib development files (>= 2.22)... " +have_glib=0 +if pkg-config --exists 'glib-2.0 >= 2.22'; then + printf "Yes.\n" + have_glib=1 + glib_cflags=$(pkg-config --cflags glib-2.0) + glib_ldflags=$(pkg-config --libs glib-2.0) +else + printf "No.\n" + errors=$((errors + 1)) +fi + printf "Checking for talloc development files... " -if pkg-config --modversion talloc > /dev/null 2>&1; then +if pkg-config --exists talloc; then printf "Yes.\n" have_talloc=1 talloc_cflags=$(pkg-config --cflags talloc) @@ -246,7 +328,7 @@ else fi printf "Checking for valgrind development files... " -if pkg-config --modversion valgrind > /dev/null 2>&1; then +if pkg-config --exists valgrind; then printf "Yes.\n" have_valgrind=1 valgrind_cflags=$(pkg-config --cflags valgrind) @@ -256,13 +338,21 @@ else fi if [ -z "${EMACSLISPDIR}" ]; then - if pkg-config --modversion emacs > /dev/null 2>&1; then + if pkg-config --exists emacs; then EMACSLISPDIR=$(pkg-config emacs --variable sitepkglispdir) else EMACSLISPDIR='$(prefix)/share/emacs/site-lisp' 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" @@ -284,16 +374,37 @@ elif [ $uname = "SunOS" ] ; then 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 = "Linux" ] || [ $uname = "GNU" ] ; then + printf "$uname\n" + platform="$uname" linker_resolves_library_dependencies=1 + + printf "Checking for $libdir_expanded in ldconfig... " ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p') + # Separate ldconfig_paths only on newline (not on any potential + # embedded space characters in any filenames). Note, we use a + # literal newline in the source here rather than something like: + # + # IFS=$(printf '\n') + # + # because the shell's command substitution deletes any trailing newlines. + IFS=" +" for path in $ldconfig_paths; do if [ "$path" = "$libdir_expanded" ]; then libdir_in_ldconfig=1 fi done + IFS=$DEFAULT_IFS + if [ "$libdir_in_ldconfig" = '0' ]; then + printf "No (will set RPATH)\n" + else + printf "Yes\n" + fi else printf "Unknown.\n" cat <= 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 < /dev/null 2>&1 +if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1 then printf "Yes.\n" have_getline=1 @@ -380,7 +498,7 @@ fi rm -f compat/have_getline printf "Checking for strcasestr... " -if ${CC} -o compat/have_strcasestr compat/have_strcasestr.c > /dev/null 2>&1 +if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1 then printf "Yes.\n" have_strcasestr=1 @@ -399,6 +517,17 @@ then rpath_ldflags="-Wl,--enable-new-dtags -Wl,-rpath,\$(libdir)" else printf "No (nothing to worry about).\n" + rpath_ldflags="" +fi + +printf "Checking for -Wl,--as-needed... " +if ${CC} -Wl,--as-needed -o minimal minimal.c >/dev/null 2>&1 +then + printf "Yes.\n" + as_needed_ldflags="-Wl,--as-needed" +else + printf "No (nothing to worry about).\n" + as_needed_ldflags="" fi WARN_CXXFLAGS="" @@ -422,7 +551,7 @@ done printf "\n\t${WARN_CFLAGS}\n" rm -f minimal minimal.c - + cat < Makefile.config <