#! /bin/sh
+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}
--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]
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
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 "Linux\n"
platform=LINUX
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).
+ # 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.
OLD_IFS=$IFS
- IFS="$(printf '\n')"
+ IFS="
+"
for path in $ldconfig_paths; do
if [ "$path" = "$libdir_expanded" ]; then
libdir_in_ldconfig=1
fi
done
IFS=$OLD_IFS
+ if [ "$libdir_in_ldconfig" = '0' ]; then
+ printf "No (will set RPATH)\n"
+ else
+ printf "Yes\n"
+ fi
else
printf "Unknown.\n"
cat <<EOF
fi
printf "Checking for getline... "
-if ${CC} -o compat/have_getline compat/have_getline.c > /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
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
# changes, (and this could happen by simply calling "make" if the
# configure script is updated).
+# The top-level directory for the source, (the directory containing
+# the configure script). This may be different than the build
+# directory (the current directory at the time configure was run).
+srcdir = ${srcdir}
+
+configure_options = $@
+
+# We use vpath directives (rather than the VPATH variable) since the
+# VPATH variable matches targets as well as prerequisites, (which is
+# not useful since then a target left-over from a srcdir build would
+# cause a target to not be built in the non-srcdir build).
+#
+# Also, we don't use a single "vpath % \$(srcdir)" here because we
+# don't want the vpath to trigger for our emacs lisp compilation,
+# (unless we first find a way to convince emacs to build the .elc
+# target in a directory other than the directory of the .el
+# prerequisite). In the meantime, we're actually copying in the .el
+# files, (which is quite ugly).
+vpath %.c \$(srcdir)
+vpath %.cc \$(srcdir)
+vpath %.1 \$(srcdir)
+vpath Makefile.% \$(srcdir)
+
# The C compiler to use
CC = ${CC}
# 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}