mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-08 22:22:26 +02:00
As the Autoconf documentation says, "These days portable programs [...] should not rely on `HAVE_RESTARTABLE_SYSCALLS', since nowadays whether a system call is restartable is a dynamic issue, not a configuration-time issue." In other words, if we ever rely on HAVE_RESTARTABLE_SYSCALLS, we are at the mercy of any code that Guile happens to be linked with, because that code could install a signal handler without the SA_RESTART flag, and then a Guile system call could unexpectedly return EINTR. The readline part of this goes back to this problem report: http://sources.redhat.com/ml/guile/2000-05/msg00177.html; and is an excellent example of the above paragraph. It was noted during the discussion that undefining HAVE_RESTARTABLE_SYSCALLS would fix the problem, but that solution wasn't adopted - I guess because Guile was still using cooperative threads then (not pthreads) and so there was a significant concern (whether founded or not) that not using restartable syscalls (where available) could lead to a loss of performance. Now Guile's default mode of operation is with pthreads, where we already don't assume that HAVE_RESTARTABLE_SYSCALLS is reliable, so there is no possible further performance loss. And in any case we really have no choice, if we want correct operation. Thanks to Sylvain Beucler for reporting this and suggesting the fix. * configure.in (AC_SYS_RESTARTABLE_SYSCALLS): Removed. * doc/ref/posix.texi (Signals): Remove statement that Guile always sets SA_RESTART flag. * guile-readline/configure.in (GUILE_SIGWINCH_SA_RESTART_CLEARED): Remove this setting, together with its test code. (HAVE_RL_PRE_INPUT_HOOK): Remove this setting and its code, as no longer needed. * guile-readline/readline.c (sigwinch_enable_restart): Removed. (scm_init_readline): Remove setting of rl_pre_input_hook. * libguile/_scm.h (SCM_SYSCALL): Remove the definition that relies on HAVE_RESTARTABLE_SYSCALLS. * libguile/scmsigs.c (scm_sigaction_for_thread): Don't always set the SA_RESTART flag if available. Update docstring accordingly. (scm_init_scmsigs): Remove code that sets SA_RESTART flag for all signals. * THANKS: Add Sylvain.
88 lines
2.5 KiB
Text
88 lines
2.5 KiB
Text
AC_PREREQ(2.50)
|
|
|
|
dnl Don't use "echo -n", which is not portable (e.g., not available on
|
|
dnl MacOS X). Instead, use `patsubst' to remove the newline.
|
|
AC_INIT(guile-readline,
|
|
patsubst(m4_esyscmd(. ../GUILE-VERSION && echo ${GUILE_VERSION}), [
|
|
]),
|
|
[bug-guile@gnu.org])
|
|
|
|
AC_CONFIG_AUX_DIR([../build-aux])
|
|
AC_CONFIG_SRCDIR(readline.c)
|
|
AM_CONFIG_HEADER([guile-readline-config.h])
|
|
AM_INIT_AUTOMAKE([foreign no-define])
|
|
|
|
. $srcdir/../GUILE-VERSION
|
|
|
|
AC_PROG_INSTALL
|
|
AC_PROG_CC
|
|
AM_PROG_CC_STDC
|
|
AC_LIBTOOL_WIN32_DLL
|
|
AC_PROG_LIBTOOL
|
|
|
|
dnl
|
|
dnl Check for Winsock and other functionality on Win32 (*not* CygWin)
|
|
dnl
|
|
AC_CYGWIN
|
|
AC_MINGW32
|
|
EXTRA_DEFS=""
|
|
if test "$MINGW32" = "yes" ; then
|
|
if test $enable_shared = yes ; then
|
|
EXTRA_DEFS="-DSCM_IMPORT"
|
|
fi
|
|
fi
|
|
AC_SUBST(EXTRA_DEFS)
|
|
|
|
for termlib in ncurses curses termcap terminfo termlib ; do
|
|
AC_CHECK_LIB(${termlib}, tgoto,
|
|
[LIBS="-l${termlib} $LIBS"; break])
|
|
done
|
|
|
|
AC_LIB_LINKFLAGS(readline)
|
|
AC_CHECK_LIB(readline, readline)
|
|
if test $ac_cv_lib_readline_readline = no; then
|
|
AC_MSG_WARN([libreadline was not found on your system.])
|
|
fi
|
|
|
|
AC_CHECK_FUNCS(siginterrupt rl_clear_signals rl_cleanup_after_signal)
|
|
|
|
dnl Check for modern readline naming
|
|
AC_CHECK_FUNCS(rl_filename_completion_function)
|
|
|
|
dnl Check for rl_get_keymap. We only use this for deciding whether to
|
|
dnl install paren matching on the Guile command line (when using
|
|
dnl readline for input), so it's completely optional.
|
|
AC_CHECK_FUNCS(rl_get_keymap)
|
|
|
|
AC_CACHE_CHECK([for rl_getc_function pointer in readline],
|
|
ac_cv_var_rl_getc_function,
|
|
[AC_TRY_LINK([
|
|
#include <stdio.h>
|
|
#include <readline/readline.h>],
|
|
[printf ("%ld", (long) rl_getc_function)],
|
|
[ac_cv_var_rl_getc_function=yes],
|
|
[ac_cv_var_rl_getc_function=no])])
|
|
if test "${ac_cv_var_rl_getc_function}" = "yes"; then
|
|
AC_DEFINE(HAVE_RL_GETC_FUNCTION, 1,
|
|
[Define if your readline library has the rl_getc_function variable.])
|
|
fi
|
|
|
|
if test $ac_cv_lib_readline_readline = yes \
|
|
-a $ac_cv_var_rl_getc_function = no; then
|
|
AC_MSG_WARN([*** libreadline is too old on your system.])
|
|
AC_MSG_WARN([*** You need readline version 2.1 or later.])
|
|
fi
|
|
|
|
AC_CHECK_FUNCS(strdup)
|
|
|
|
. $srcdir/LIBGUILEREADLINE-VERSION
|
|
AC_SUBST(LIBGUILEREADLINE_MAJOR)
|
|
AC_SUBST(LIBGUILEREADLINE_INTERFACE_CURRENT)
|
|
AC_SUBST(LIBGUILEREADLINE_INTERFACE_REVISION)
|
|
AC_SUBST(LIBGUILEREADLINE_INTERFACE_AGE)
|
|
AC_SUBST(LIBGUILEREADLINE_INTERFACE)
|
|
|
|
AC_SUBST(GUILE_EFFECTIVE_VERSION)
|
|
|
|
AC_CONFIG_FILES(Makefile ice-9/Makefile)
|
|
AC_OUTPUT
|