Merge remote-tracking branch 'origin/stable-2.0'
[bpt/guile.git] / configure.ac
index da71529..8050193 100644 (file)
@@ -4,7 +4,8 @@ dnl
 
 define(GUILE_CONFIGURE_COPYRIGHT,[[
 
-Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+  2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 
 This file is part of GUILE
 
@@ -27,38 +28,25 @@ Floor, Boston, MA 02110-1301, USA.
 
 AC_PREREQ(2.61)
 
-dnl  `patsubst' here deletes the newline which "echo" prints.  We can't use
-dnl  "echo -n" since -n is not portable (see autoconf manual "Limitations of
-dnl  Builtins"), in particular on solaris it results in a literal "-n" in
-dnl  the output.
-dnl
-AC_INIT(patsubst(m4_esyscmd(. ./GUILE-VERSION && echo ${PACKAGE}),[
-]),
-        patsubst(m4_esyscmd(. ./GUILE-VERSION && echo ${GUILE_VERSION}),[
-]),
+AC_INIT([GNU Guile],
+        m4_esyscmd([build-aux/git-version-gen .tarball-version]),
         [bug-guile@gnu.org])
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_SRCDIR(GUILE-VERSION)
 
-AM_INIT_AUTOMAKE([gnu no-define check-news -Wall -Wno-override])
+AM_INIT_AUTOMAKE([gnu no-define -Wall -Wno-override])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [AC_SUBST([AM_DEFAULT_VERBOSITY],1)])
 
 AC_COPYRIGHT(GUILE_CONFIGURE_COPYRIGHT)
 AC_CONFIG_SRCDIR([GUILE-VERSION])
 
 . $srcdir/GUILE-VERSION
+GUILE_VERSION="$PACKAGE_VERSION"
 
 AC_CONFIG_HEADERS([config.h])
 AH_TOP(/*GUILE_CONFIGURE_COPYRIGHT*/)
 
-#--------------------------------------------------------------------
-#
-# Independent Subdirectories
-#
-#--------------------------------------------------------------------
-
-AC_CONFIG_SUBDIRS(guile-readline)
-
 #--------------------------------------------------------------------
 
 AC_LANG([C])
@@ -72,6 +60,7 @@ AC_PROG_INSTALL
 AC_PROG_CC
 gl_EARLY
 AC_PROG_CPP
+AC_PROG_SED
 AC_PROG_AWK
 
 dnl Gnulib.
@@ -84,23 +73,35 @@ AM_PROG_CC_C_O
 
 AC_LIBTOOL_DLOPEN
 AC_PROG_LIBTOOL
-AC_CHECK_LIB([ltdl], [lt_dlinit], ,
-  [AC_MSG_ERROR([libltdl not found.  See README.])])
-AC_CHECK_HEADER([ltdl.h], [],
-  [AC_MSG_ERROR([<ltdl.h> not found.  See README.])])
+
+AM_CONDITIONAL([HAVE_SHARED_LIBRARIES], [test "x$enable_shared" = "xyes"])
+
+AC_DEFINE_UNQUOTED([SHARED_LIBRARY_PATH_VARIABLE], ["$shlibpath_var"],
+  [Name of the environment variable that tells the dynamic linker where
+to find shared libraries.])
+
+dnl Check for libltdl.
+AC_LIB_HAVE_LINKFLAGS([ltdl], [], [#include <ltdl.h>],
+  [lt_dlopenext ("foo");])
+if test "x$HAVE_LIBLTDL" != "xyes"; then
+  AC_MSG_ERROR([GNU libltdl (Libtool) not found, see README.])
+fi
 
 AC_CHECK_PROG(have_makeinfo, makeinfo, yes, no)
 AM_CONDITIONAL(HAVE_MAKEINFO, test "$have_makeinfo" = yes)
 
 AM_PATH_LISPDIR
 
+AC_DEFINE_UNQUOTED([HOST_TYPE], ["$host"],
+  [Define to the host's GNU triplet.])
+
 #--------------------------------------------------------------------
 #
 # User options (after above tests that may set default CFLAGS etc.)
 #
 #--------------------------------------------------------------------
 
-GUILE_ERROR_ON_WARNING="yes"
+GUILE_ERROR_ON_WARNING="no"
 
 AC_ARG_ENABLE(error-on-warning,
   [  --enable-error-on-warning    treat compile warnings as errors],
@@ -110,18 +111,10 @@ AC_ARG_ENABLE(error-on-warning,
      *) AC_MSG_ERROR(bad value ${enableval} for --enable-error-on-warning) ;;
    esac])
 
-SCM_I_GSC_GUILE_DEBUG_FREELIST=0
-AC_ARG_ENABLE(debug-freelist,
-  [  --enable-debug-freelist include garbage collector freelist debugging code],
-  if test "$enable_debug_freelist" = y \
-     || test "$enable_debug_freelist" = yes; then
-    SCM_I_GSC_GUILE_DEBUG_FREELIST=1
-  fi)
-
 AC_ARG_ENABLE(debug-malloc,
   [  --enable-debug-malloc   include malloc debugging code],
   if test "$enable_debug_malloc" = y || test "$enable_debug_malloc" = yes; then
-    AC_DEFINE(GUILE_DEBUG_MALLOC, 1,
+    AC_DEFINE([GUILE_DEBUG_MALLOC], 1,
       [Define this if you want to debug scm_must_malloc/realloc/free calls.])
   fi)
 
@@ -134,7 +127,7 @@ AC_ARG_ENABLE(guile-debug,
   fi)
 
 AC_ARG_ENABLE(posix,
-  [  --disable-posix         omit posix interfaces],,
+  [  --disable-posix         omit non-essential POSIX interfaces],,
   enable_posix=yes)
 
 AC_ARG_ENABLE(networking,
@@ -145,15 +138,6 @@ AC_ARG_ENABLE(regex,
   [  --disable-regex         omit regular expression interfaces],,
   enable_regex=yes)
 
-AC_ARG_ENABLE([discouraged],
-  AS_HELP_STRING([--disable-discouraged],[omit discouraged features]))
-
-if test "$enable_discouraged" = no; then
-  SCM_I_GSC_ENABLE_DISCOURAGED=0
-else
-  SCM_I_GSC_ENABLE_DISCOURAGED=1
-fi
-
 AC_ARG_ENABLE([deprecated],
   AS_HELP_STRING([--disable-deprecated],[omit deprecated features]))
 
@@ -170,13 +154,9 @@ else
   fi
   SCM_I_GSC_ENABLE_DEPRECATED=1
 fi
-AC_DEFINE_UNQUOTED(SCM_WARN_DEPRECATED_DEFAULT, "$warn_default",
+AC_DEFINE_UNQUOTED([SCM_WARN_DEPRECATED_DEFAULT], "$warn_default",
 [Define this to control the default warning level for deprecated features.])
 
-AC_ARG_ENABLE(elisp,
-  [  --disable-elisp         omit Emacs Lisp support],,
-  enable_elisp=yes)
-
 dnl  Added the following configure option in January 2008 following
 dnl  investigation of problems with "64" system and library calls on
 dnl  Darwin (MacOS X).  The libguile code (_scm.h) assumes that if a
@@ -217,7 +197,7 @@ AC_ARG_WITH([64-calls],
 AC_MSG_RESULT($use_64_calls)
 case "$use_64_calls" in
   y* )
-    AC_DEFINE(GUILE_USE_64_CALLS, 1,
+    AC_DEFINE([GUILE_USE_64_CALLS], 1,
       [Define to 1 in order to try to use "64" versions of system and library calls.])
     ;;
 esac
@@ -250,16 +230,15 @@ if test "$use_modules" != no; then
 fi
 
 if test "$enable_posix" = yes; then
-   AC_LIBOBJ([filesys])
    AC_LIBOBJ([posix])
-   AC_DEFINE(HAVE_POSIX, 1,
-     [Define this if you want support for POSIX system calls in Guile.])
+   AC_DEFINE([HAVE_POSIX], 1,
+     [Define this if you want support for non-essential POSIX system calls in Guile.])
 fi
 
 if test "$enable_networking" = yes; then
    AC_LIBOBJ([net_db])
    AC_LIBOBJ([socket])
-   AC_DEFINE(HAVE_NETWORKING, 1,
+   AC_DEFINE([HAVE_NETWORKING], 1,
      [Define this if you want support for networking in Guile.])
 fi
 
@@ -267,11 +246,6 @@ if test "$enable_debug_malloc" = yes; then
    AC_LIBOBJ([debug-malloc])
 fi
 
-if test "$enable_elisp" = yes; then
-  SCM_I_GSC_ENABLE_ELISP=1
-else
-  SCM_I_GSC_ENABLE_ELISP=0
-fi
 AC_CHECK_LIB(uca, __uc_get_ar_bsp)
 
 AC_C_CONST
@@ -311,8 +285,8 @@ AC_CHECK_SIZEOF(ptrdiff_t)
 AC_CHECK_SIZEOF(size_t)
 AC_CHECK_SIZEOF(off_t)
 
-if test "$ac_cv_sizeof_long" -ne "$ac_cv_sizeof_void_p"; then
-  AC_MSG_ERROR(sizes of long and void* are not identical)
+if test "$ac_cv_sizeof_long" -gt "$ac_cv_sizeof_void_p"; then
+  AC_MSG_ERROR(long does not fit into a void*)
 fi
 
 if test "$ac_cv_sizeof_ptrdiff_t" -ne 0; then
@@ -360,6 +334,8 @@ if test "$ac_cv_header_stdint_h" = yes; then
    AC_CHECK_TYPE([uint64_t],[scm_stdint_has_uint64=1],,[#include <stdint.h>])
    AC_CHECK_TYPE([intmax_t],[scm_stdint_has_intmax=1],,[#include <stdint.h>])
    AC_CHECK_TYPE([uintmax_t],[scm_stdint_has_uintmax=1],,[#include <stdint.h>])
+   AC_CHECK_TYPE([intptr_t],[scm_stdint_has_intptr=1],,[#include <stdint.h>])
+   AC_CHECK_TYPE([uintptr_t],[scm_stdint_has_uintptr=1],,[#include <stdint.h>])
 fi
 
 # so we don't get confused by the cache (wish there was a better way
@@ -388,6 +364,8 @@ if test "$ac_cv_header_inttypes_h" = yes; then
   AC_CHECK_TYPE([uint64_t],[scm_inttypes_has_uint64=1],,[#include <inttypes.h>])
   AC_CHECK_TYPE([intmax_t],[scm_inttypes_has_intmax=1],,[#include <inttypes.h>])
   AC_CHECK_TYPE([uintmax_t],[scm_inttypes_has_uintmax=1],,[#include <inttypes.h>])
+  AC_CHECK_TYPE([intptr_t],[scm_inttypes_has_intptr=1],,[#include <inttypes.h>])
+  AC_CHECK_TYPE([uintptr_t],[scm_inttypes_has_uintptr=1],,[#include <inttypes.h>])
 fi
 
 # Try hard to find definitions for some required scm_t_*int* types.
@@ -580,6 +558,46 @@ else
 fi
 AC_SUBST([SCM_I_GSC_T_UINTMAX])
 
+### Required type scm_t_intptr
+###
+SCM_I_GSC_T_INTPTR=0
+if test "$scm_stdint_has_intptr"; then
+  SCM_I_GSC_T_INTPTR='"intptr_t"'
+  SCM_I_GSC_NEEDS_STDINT_H=1
+elif test "$scm_inttypes_has_intptr"; then
+  SCM_I_GSC_T_INTPTR='"intptr_t"'
+  SCM_I_GSC_NEEDS_INTTYPES_H=1
+elif test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_void_p"; then
+  SCM_I_GSC_T_INTPTR='"int"'
+elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_void_p"; then
+  SCM_I_GSC_T_INTPTR='"long"'
+elif test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_void_p"; then
+  SCM_I_GSC_T_INTPTR='"long long"'
+else
+  AC_MSG_ERROR([Can't find appropriate type for `scm_t_intptr'.])
+fi
+AC_SUBST([SCM_I_GSC_T_INTPTR])
+
+### Required type scm_t_uintptr
+###
+SCM_I_GSC_T_UINTPTR=0
+if test "$scm_stdint_has_uintptr"; then
+  SCM_I_GSC_T_UINTPTR='"uintptr_t"'
+  SCM_I_GSC_NEEDS_STDINT_H=1
+elif test "$scm_inttypes_has_uintptr"; then
+  SCM_I_GSC_T_UINTPTR='"uintptr_t"'
+  SCM_I_GSC_NEEDS_INTTYPES_H=1
+elif test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_void_p"; then
+  SCM_I_GSC_T_UINTPTR='"unsigned int"'
+elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_void_p"; then
+  SCM_I_GSC_T_UINTPTR='"unsigned long"'
+elif test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_void_p"; then
+  SCM_I_GSC_T_UINTPTR='"unsigned long long"'
+else
+  AC_MSG_ERROR([Can't find appropriate type for `scm_t_uintptr'.])
+fi
+AC_SUBST([SCM_I_GSC_T_UINTPTR])
+
 
 AC_SUBST([SCM_I_GSC_NEEDS_STDINT_H])
 AC_SUBST([SCM_I_GSC_NEEDS_INTTYPES_H])
@@ -625,12 +643,23 @@ AC_SUBST([SCM_I_GSC_HAVE_STRUCT_DIRENT64])
 #     this file instead of <fenv.h>
 #   process.h - mingw specific
 #   langinfo.h, nl_types.h - SuS v2
+#   sched.h - missing on MinGW
 #
 AC_CHECK_HEADERS([complex.h fenv.h io.h libc.h limits.h malloc.h memory.h process.h string.h \
 regex.h rxposix.h rx/rxposix.h sys/dir.h sys/ioctl.h sys/select.h \
 sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.h \
 sys/utime.h time.h unistd.h utime.h pwd.h grp.h sys/utsname.h \
-direct.h langinfo.h nl_types.h machine/fpu.h])
+direct.h langinfo.h nl_types.h machine/fpu.h poll.h sched.h])
+
+# Reasons for testing:
+#   nl_item - lacking on Cygwin
+AC_CHECK_TYPES([nl_item], [], [],
+  [[#ifdef HAVE_LANGINFO_H
+    # include <langinfo.h>
+    #endif
+    #ifdef HAVE_NL_TYPES_H
+    # include <nl_types.h>
+    #endif]])
 
 # "complex double" is new in C99, and "complex" is only a keyword if
 # <complex.h> is included
@@ -642,14 +671,15 @@ AC_CHECK_TYPES(complex double,,,
 # On MacOS X <sys/socklen.h> contains socklen_t, so must include that
 # when testing.
 AC_CHECK_TYPE(socklen_t, ,
-  [AC_DEFINE_UNQUOTED(socklen_t, int,
+  [AC_DEFINE_UNQUOTED([socklen_t], int,
                       [Define to `int' if <sys/socket.h> does not define.])],
   [#if HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
 #include <sys/socket.h>
 ])
-AC_CHECK_TYPE(struct ip_mreq)
+
+AC_CHECK_TYPES([struct ip_mreq], , , [#include <netinet/in.h>])
 
 GUILE_HEADER_LIBC_WITH_UNISTD
 
@@ -688,7 +718,7 @@ case $host in
     fi
     if test "$enable_shared" = yes ; then
       EXTRA_DEFS="-DSCM_IMPORT"
-      AC_DEFINE(USE_DLL_IMPORT, 1,
+      AC_DEFINE([USE_DLL_IMPORT], 1,
         [Define if you need additional CPP macros on Win32 platforms.])
     fi
     ;;
@@ -716,6 +746,7 @@ AC_CHECK_HEADERS([assert.h crt_externs.h])
 #   gmtime_r - recent posix, not on old systems
 #   pipe - not in mingw
 #   _pipe - specific to mingw, taking 3 args
+#   poll - since posix 2001
 #   readdir_r - recent posix, not on old systems
 #   readdir64_r - not available on HP-UX 11.11
 #   stat64 - SuS largefile stuff, not on old systems
@@ -725,8 +756,10 @@ AC_CHECK_HEADERS([assert.h crt_externs.h])
 #   _NSGetEnviron - Darwin specific
 #   strcoll_l, newlocale - GNU extensions (glibc), also available on Darwin
 #   nl_langinfo - X/Open, not available on Windows.
+#   utimensat: posix.1-2008
+#   sched_getaffinity, sched_setaffinity: GNU extensions (glibc)
 #
-AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid fesetround ftime ftruncate fchown getcwd geteuid gettimeofday gmtime_r ioctl lstat mkdir mknod nice pipe _pipe readdir_r readdir64_r readlink rename rmdir select setegid seteuid setlocale setpgid setsid sigaction siginterrupt stat64 strftime strptime symlink sync sysconf tcgetpgrp tcsetpgrp times uname waitpid strdup system usleep atexit on_exit chown link fcntl ttyname getpwent getgrent kill getppid getpgrp fork setitimer getitimer strchr strcmp index bcopy memcpy rindex truncate unsetenv isblank _NSGetEnviron strcoll strcoll_l newlocale nl_langinfo])
+AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid fesetround ftime ftruncate fchown getcwd geteuid getsid gettimeofday gmtime_r ioctl lstat mkdir mknod nice pipe _pipe poll readdir_r readdir64_r readlink rename rmdir select setegid seteuid setlocale setpgid setsid sigaction siginterrupt stat64 strftime strptime symlink sync sysconf tcgetpgrp tcsetpgrp times uname waitpid strdup system usleep atexit on_exit chown link fcntl ttyname getpwent getgrent kill getppid getpgrp fork setitimer getitimer strchr strcmp index bcopy memcpy rindex truncate unsetenv isblank _NSGetEnviron strcoll strcoll_l newlocale nl_langinfo utimensat sched_getaffinity sched_setaffinity])
 
 # Reasons for testing:
 #   netdb.h - not in mingw
@@ -735,13 +768,12 @@ AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid fesetround ftime
 #       check this specifically, we need it for the timespec test below.
 #   sethostname - the function itself check because it's not in mingw,
 #       the DECL is checked because Solaris 10 doens't have in any header
-#   xlocale.h - needed on Darwin for the `locale_t' API
 #   hstrerror - on Tru64 5.1b the symbol is available in libc but the
 #       declaration isn't anywhere.
 #   cuserid - on Tru64 5.1b the declaration is documented to be available
 #       only with `_XOPEN_SOURCE' or some such.
 #
-AC_CHECK_HEADERS(crypt.h netdb.h pthread.h sys/param.h sys/resource.h sys/file.h xlocale.h)
+AC_CHECK_HEADERS([crypt.h netdb.h pthread.h sys/param.h sys/resource.h sys/file.h sys/mman.h])
 AC_CHECK_FUNCS(chroot flock getlogin cuserid getpriority setpriority getpass sethostname gethostname)
 AC_CHECK_DECLS([sethostname, hstrerror, cuserid])
 
@@ -759,7 +791,7 @@ AC_CHECK_DECLS([sethostname, hstrerror, cuserid])
 # libraries already in that list.
 #
 AC_SEARCH_LIBS(crypt, crypt,
-  [AC_DEFINE(HAVE_CRYPT,1,
+  [AC_DEFINE([HAVE_CRYPT],1,
              [Define to 1 if you have the `crypt' function.])])
 
 # When compiling with GCC on some OSs (Solaris, AIX), _Complex_I doesn't
@@ -777,7 +809,7 @@ complex double z;
 ]], [[
 z = _Complex_I;
 ]])],
-    [AC_DEFINE(GUILE_I,_Complex_I,[The imaginary unit (positive square root of -1).])
+    [AC_DEFINE([GUILE_I],_Complex_I,[The imaginary unit (positive square root of -1).])
      AC_MSG_RESULT([_Complex_I])],
     [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #if HAVE_COMPLEX_H
@@ -787,7 +819,7 @@ complex double z;
 ]],[[
 z = 1.0fi;
 ]])],
-  [AC_DEFINE(GUILE_I,1.0fi)
+  [AC_DEFINE([GUILE_I],1.0fi)
    AC_MSG_RESULT([1.0fi])],
   [ac_cv_type_complex_double=no
    AC_MSG_RESULT([not available])])])
@@ -820,20 +852,48 @@ main (void)
     [guile_cv_use_csqrt="yes, hopefully (cross-compiling)"])])
   case $guile_cv_use_csqrt in
     yes*)
-      AC_DEFINE(HAVE_USABLE_CSQRT, 1, [Define to 1 if csqrt is bug-free])
+      AC_DEFINE([HAVE_USABLE_CSQRT], 1, [Define to 1 if csqrt is bug-free])
       ;;
   esac
 fi
 
+AC_CACHE_SAVE
 
 dnl GMP tests
-AC_LIB_HAVE_LINKFLAGS(gmp,
+AC_LIB_HAVE_LINKFLAGS([gmp],
   [],
   [#include <gmp.h>],
-  [mpz_import (0, 0, 0, 0, 0, 0, 0);],
-  AC_MSG_ERROR([GNU MP 4.1 or greater not found, see README]))
+  [mpz_import (0, 0, 0, 0, 0, 0, 0);])
+
+if test "x$HAVE_LIBGMP" != "xyes"; then
+  AC_MSG_ERROR([GNU MP 4.1 or greater not found, see README])
+fi
 
 dnl GNU libunistring is checked for by Gnulib's `libunistring' module.
+if test "x$LTLIBUNISTRING" = "x"; then
+  AC_MSG_ERROR([GNU libunistring is required, please install it.])
+fi
+
+GUILE_LIBUNISTRING_WITH_ICONV_SUPPORT
+if test "x$ac_cv_libunistring_with_iconv_support" != "xyes"; then
+  AC_MSG_ERROR([No iconv support.  Please recompile libunistring with iconv enabled.])
+fi
+
+dnl Libffi is needed to compile Guile's foreign function interface, but its
+dnl interface isn't exposed in Guile's API.
+PKG_CHECK_MODULES(LIBFFI, libffi)
+AC_SUBST(LIBFFI_CFLAGS)
+AC_SUBST(LIBFFI_LIBS)
+
+dnl figure out approriate ffi type for size_t
+AC_CHECK_SIZEOF(size_t)
+AC_CHECK_SIZEOF(ssize_t)
+ffi_size_type=uint$(($ac_cv_sizeof_size_t*8))
+ffi_ssize_type=sint$(($ac_cv_sizeof_ssize_t*8))
+AC_DEFINE_UNQUOTED([ffi_type_size_t], ffi_type_${ffi_size_type}, 
+                  [ffi type for size_t])
+AC_DEFINE_UNQUOTED([ffi_type_ssize_t], ffi_type_${ffi_ssize_type}, 
+                  [ffi type for ssize_t])
 
 dnl i18n tests
 #AC_CHECK_HEADERS([libintl.h])
@@ -878,14 +938,14 @@ AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
                   [guile_cv_func_usleep_return_type=int])])
 case "$guile_cv_func_usleep_return_type" in
   "void" )
-    AC_DEFINE(USLEEP_RETURNS_VOID, 1,
+    AC_DEFINE([USLEEP_RETURNS_VOID], 1,
       [Define if the system headers declare usleep to return void.])
   ;;
 esac
 
 AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
 if test -n "$have_sys_un_h" ; then
-  AC_DEFINE(HAVE_UNIX_DOMAIN_SOCKETS, 1,
+  AC_DEFINE([HAVE_UNIX_DOMAIN_SOCKETS], 1,
     [Define if the system supports Unix-domain (file-domain) sockets.])
 fi
 
@@ -898,13 +958,9 @@ AC_CHECK_FUNCS(sethostent   gethostent   endhostent   dnl
                setprotoent  getprotoent  endprotoent  dnl
                setservent   getservent   endservent   dnl
                getnetbyaddr getnetbyname dnl
-              inet_lnaof inet_makeaddr inet_netof hstrerror dnl
-              inet_pton inet_ntop)
+              inet_lnaof inet_makeaddr inet_netof hstrerror)
 
-# struct sockaddr field sin_len is only present on BSD systems.
-# On 4.4BSD apparently a #define SIN_LEN exists, but on other BSD systems
-# (eg. FreeBSD 4.9) it doesn't and we must use this configure check
-AC_CHECK_MEMBERS([struct sockaddr.sin_len],,,
+AC_CHECK_MEMBERS([struct sockaddr_in.sin_len],,,
 [#ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
@@ -920,7 +976,7 @@ extern char *__libc_stack_end;]],
 AC_MSG_RESULT($guile_cv_have_libc_stack_end)
 
 if test $guile_cv_have_libc_stack_end = yes; then
-  AC_DEFINE(HAVE_LIBC_STACK_END, 1,
+  AC_DEFINE([HAVE_LIBC_STACK_END], 1,
            [Define if you have the __libc_stack_end variable.])
 fi
 
@@ -935,7 +991,7 @@ AC_CACHE_VAL(guile_cv_have_h_errno,
   [guile_cv_have_h_errno=no])])
 AC_MSG_RESULT($guile_cv_have_h_errno)
 if test $guile_cv_have_h_errno = yes; then
-  AC_DEFINE(HAVE_H_ERRNO, 1, [Define if h_errno is declared in netdb.h.])
+  AC_DEFINE([HAVE_H_ERRNO], 1, [Define if h_errno is declared in netdb.h.])
 fi
 
 AC_MSG_CHECKING(whether uint32_t is defined)
@@ -952,7 +1008,7 @@ AC_CACHE_VAL(guile_cv_have_uint32_t,
                   [guile_cv_have_uint32_t=no])])
 AC_MSG_RESULT($guile_cv_have_uint32_t)
 if test $guile_cv_have_uint32_t = yes; then
-  AC_DEFINE(HAVE_UINT32_T, 1,
+  AC_DEFINE([HAVE_UINT32_T], 1,
     [Define if uint32_t typedef is defined when netdb.h is include.])
 fi
 
@@ -969,7 +1025,7 @@ AC_CACHE_VAL(guile_cv_have_ipv6,
 [guile_cv_have_ipv6=no])])
 AC_MSG_RESULT($guile_cv_have_ipv6)
 if test $guile_cv_have_ipv6 = yes; then
-  AC_DEFINE(HAVE_IPV6, 1, [Define if you want support for IPv6.])
+  AC_DEFINE([HAVE_IPV6], 1, [Define if you want support for IPv6.])
 fi
 
 # included in rfc2553 but not in older implementations, e.g., glibc 2.1.3.
@@ -985,7 +1041,7 @@ AC_CACHE_VAL(guile_cv_have_sin6_scope_id,
 [guile_cv_have_sin6_scope_id=no])])
 AC_MSG_RESULT($guile_cv_have_sin6_scope_id)
 if test $guile_cv_have_sin6_scope_id = yes; then
-  AC_DEFINE(HAVE_SIN6_SCOPE_ID, 1,
+  AC_DEFINE([HAVE_SIN6_SCOPE_ID], 1,
     [Define this if your IPv6 has sin6_scope_id in sockaddr_in6 struct.])
 fi
 
@@ -1042,7 +1098,7 @@ else
 fi])dnl
 AC_MSG_RESULT($guile_cv_localtime_cache)
 if test $guile_cv_localtime_cache = yes; then
-  AC_DEFINE(LOCALTIME_CACHE, 1, [Define if localtime caches the TZ setting.])
+  AC_DEFINE([LOCALTIME_CACHE], 1, [Define if localtime caches the TZ setting.])
 fi
 
 if test "$enable_regex" = yes; then
@@ -1060,15 +1116,13 @@ if test "$enable_regex" = yes; then
      if test "$ac_cv_func_regcomp_norx" = yes ||
         test "$ac_cv_func_regcomp_regex" = yes ||
         test "$ac_cv_func_regcomp_rx" = yes; then
-       AC_DEFINE(HAVE_REGCOMP, 1,
+       AC_DEFINE([HAVE_REGCOMP], 1,
          [This is included as part of a workaround for a autoheader bug.])
      fi
    fi
 fi
 
-AC_REPLACE_FUNCS(inet_aton putenv strerror memmove mkstemp)
-
-AC_CHECK_HEADERS(floatingpoint.h ieeefp.h nan.h)
+AC_REPLACE_FUNCS([strerror memmove mkstemp])
 
 # Reasons for testing:
 #   asinh, acosh, atanh, trunc - C99 standard, generally not available on
@@ -1092,7 +1146,7 @@ AC_LINK_IFELSE(AC_LANG_SOURCE(
 volatile double x = 0.0;
 int main () { return (isinf(x) != 0); }]]),
   [AC_MSG_RESULT([yes])
-   AC_DEFINE(HAVE_ISINF, 1,
+   AC_DEFINE([HAVE_ISINF], 1,
              [Define to 1 if you have the `isinf' macro or function.])],
   [AC_MSG_RESULT([no])])
 AC_MSG_CHECKING([for isnan])
@@ -1101,7 +1155,7 @@ AC_LINK_IFELSE(AC_LANG_SOURCE(
 volatile double x = 0.0;
 int main () { return (isnan(x) != 0); }]]),
   [AC_MSG_RESULT([yes])
-   AC_DEFINE(HAVE_ISNAN, 1,
+   AC_DEFINE([HAVE_ISNAN], 1,
              [Define to 1 if you have the `isnan' macro or function.])],
   [AC_MSG_RESULT([no])])
 
@@ -1115,7 +1169,10 @@ int main () { return (isnan(x) != 0); }]]),
 # Note AC_STRUCT_ST_BLOCKS is not used here because we don't want the
 # AC_LIBOBJ(fileblocks) replacement which that macro gives.
 #
-AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_blksize, struct stat.st_blocks])
+AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_blksize, struct stat.st_blocks, struct stat.st_atim, struct stat.st_mtim, struct stat.st_ctim],,,
+                 [#define _GNU_SOURCE
+AC_INCLUDES_DEFAULT
+])
 
 AC_STRUCT_TIMEZONE
 AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,
@@ -1175,9 +1232,48 @@ main ()
               [],
               [AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h)])
 
+#--------------------------------------------------------------------
+#
+# Boehm's GC library
+#
+#--------------------------------------------------------------------
+PKG_CHECK_MODULES([BDW_GC], [bdw-gc])
+
+save_LIBS="$LIBS"
+LIBS="$BDW_GC_LIBS $LIBS"
+CFLAGS="$BDW_GC_CFLAGS $CFLAGS"
+
+AC_CHECK_FUNCS([GC_do_blocking GC_call_with_gc_active GC_pthread_exit GC_pthread_cancel GC_allow_register_threads GC_pthread_sigmask GC_set_start_callback])
+
+# Though the `GC_do_blocking ()' symbol is present in GC 7.1, it is not
+# declared, and has a different type (returning void instead of
+# void*).
+AC_CHECK_DECL([GC_do_blocking],
+  [AC_DEFINE([HAVE_DECL_GC_DO_BLOCKING], [1],
+    [Define this if the `GC_do_blocking ()' function is declared])],
+  [],
+  [#include <gc/gc.h>])
+
+# `GC_fn_type' is not available in GC 7.1 and earlier.
+AC_CHECK_TYPE([GC_fn_type],
+  [AC_DEFINE([HAVE_GC_FN_TYPE], [1],
+    [Define this if the `GC_fn_type' type is available.])],
+  [],
+  [#include <gc/gc.h>])
+
+# `GC_stack_base' is not available in GC 7.1 and earlier.
+AC_CHECK_TYPE([struct GC_stack_base],
+  [AC_DEFINE([HAVE_GC_STACK_BASE], [1],
+    [Define this if the `GC_stack_base' type is available.])],
+  [],
+  [#include <gc/gc.h>])
+
+LIBS="$save_LIBS"
+
+
 AC_CHECK_SIZEOF(float)
 if test "$ac_cv_sizeof_float" -le "$ac_cv_sizeof_long"; then
-    AC_DEFINE(SCM_SINGLES, 1, 
+    AC_DEFINE([SCM_SINGLES], 1, 
               [Define this if floats are the same size as longs.])
 fi
 
@@ -1191,7 +1287,7 @@ AC_CACHE_VAL(scm_cv_struct_linger,
                          [scm_cv_struct_linger="no"]))
 AC_MSG_RESULT($scm_cv_struct_linger)
 if test $scm_cv_struct_linger = yes; then
-       AC_DEFINE(HAVE_STRUCT_LINGER, 1,
+       AC_DEFINE([HAVE_STRUCT_LINGER], 1,
           [Define this if your system defines struct linger, for use with the
            getsockopt and setsockopt system calls.])
 fi
@@ -1210,7 +1306,7 @@ AC_CACHE_VAL(scm_cv_struct_timespec,
           [scm_cv_struct_timespec="no"]))
 AC_MSG_RESULT($scm_cv_struct_timespec)
 if test $scm_cv_struct_timespec = yes; then
-  AC_DEFINE(HAVE_STRUCT_TIMESPEC, 1,
+  AC_DEFINE([HAVE_STRUCT_TIMESPEC], 1,
     [Define this if your system defines struct timespec via either <time.h> or <pthread.h>.])
 fi
 
@@ -1307,6 +1403,7 @@ case "$with_threads" in
   ;;
   "no" | "null")
     SCM_I_GSC_USE_NULL_THREADS=1
+    SCM_I_GSC_HAVE_THREAD_STORAGE_CLASS=0
     with_threads="null-threads"
   ;;
   * )
@@ -1325,42 +1422,48 @@ AM_CONDITIONAL([BUILD_PTHREAD_SUPPORT],
 
 if test "$with_threads" = pthreads; then
 
-AC_MSG_CHECKING(whether pthread_attr_getstack works for the main thread)
+AC_MSG_CHECKING([whether pthread_attr_getstack works for the main thread])
 old_CFLAGS="$CFLAGS"
 CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
-AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#if HAVE_PTHREAD_ATTR_GETSTACK
-#include <pthread.h>
-
-int main ()
-{
-  pthread_attr_t attr;
-  void *start, *end;
-  size_t size;
-
-  pthread_getattr_np (pthread_self (), &attr);
-  pthread_attr_getstack (&attr, &start, &size);
-  end = (char *)start + size;
-
-  if ((void *)&attr < start || (void *)&attr >= end)
+if test "$cross_compiling" = "no"; then
+  AC_RUN_IFELSE([AC_LANG_SOURCE([[
+  #if HAVE_PTHREAD_ATTR_GETSTACK
+  #include <pthread.h>
+
+  int main ()
+  {
+    pthread_attr_t attr;
+    void *start, *end;
+    size_t size;
+
+    pthread_getattr_np (pthread_self (), &attr);
+    pthread_attr_getstack (&attr, &start, &size);
+    end = (char *)start + size;
+
+    if ((void *)&attr < start || (void *)&attr >= end)
+      return 1;
+    else
+      return 0;
+  }
+  #else
+  int main ()
+  {
     return 1;
-  else
-    return 0;
-}
-#else
-int main ()
-{
-  return 1;
-}
-#endif
-]])],
-[works=yes
-AC_DEFINE(PTHREAD_ATTR_GETSTACK_WORKS, [1], [Define when pthread_att_get_stack works for the main thread])],
-[works=no],
-[])
+  }
+  #endif
+  ]])],
+  [works=yes
+   AC_DEFINE([PTHREAD_ATTR_GETSTACK_WORKS], [1], [Define when pthread_att_get_stack works for the main thread])],
+  [works=no],
+  [])
+else
+  works="assuming it doesn't"
+fi
 CFLAGS="$old_CFLAGS"
 AC_MSG_RESULT($works)
 
+GUILE_THREAD_LOCAL_STORAGE
+
 fi # with_threads=pthreads
 
 
@@ -1396,7 +1499,7 @@ if test "$cross_compiling" = "yes"; then
   AC_MSG_CHECKING(guile for build)
   GUILE_FOR_BUILD="${GUILE_FOR_BUILD-guile}"
 else
-  GUILE_FOR_BUILD='$(preinstguile)'
+  GUILE_FOR_BUILD='this-value-will-never-be-used'
 fi   
 
 ## AC_MSG_CHECKING("if we are cross compiling")
@@ -1405,9 +1508,10 @@ if test "$cross_compiling" = "yes"; then
    AC_MSG_RESULT($GUILE_FOR_BUILD)
 fi
 AC_ARG_VAR(GUILE_FOR_BUILD,[guile for build system])
-AC_SUBST(GUILE_FOR_BUILD)
+AM_SUBST_NOTMAKE(GUILE_FOR_BUILD)
                        
 ## If we're using GCC, ask for aggressive warnings.
+GCC_CFLAGS=""
 case "$GCC" in
   yes )
     ## We had -Wstrict-prototypes in here for a bit, but Guile does too
@@ -1415,19 +1519,32 @@ case "$GCC" in
     ## less than exasperating.
     ## -Wpointer-arith was here too, but something changed in gcc/glibc
     ## and it became equally exasperating (gcc 2.95 and/or glibc 2.1.2).
-    GCC_CFLAGS="-Wall -Wmissing-prototypes"
+    ## -Wundef was removed because Gnulib prevented it (see
+    ## <http://thread.gmane.org/gmane.lisp.guile.bugs/5329>.)
+    POTENTIAL_GCC_CFLAGS="-Wall -Wmissing-prototypes \
+      -Wdeclaration-after-statement \
+      -Wswitch-enum"
     # Do this here so we don't screw up any of the tests above that might
     # not be "warning free"
     if test "${GUILE_ERROR_ON_WARNING}" = yes
     then
-       GCC_CFLAGS="${GCC_CFLAGS} -Werror"
+       POTENTIAL_GCC_CFLAGS="${POTENTIAL_GCC_CFLAGS} -Werror"
        enable_compile_warnings=no
     fi
+
+    for flag in $POTENTIAL_GCC_CFLAGS
+    do
+       gl_WARN_ADD([$flag], [GCC_CFLAGS])
+    done
     ;;
 esac
 
 AC_SUBST(GCC_CFLAGS)
 
+# Check for GNU ld's "-z relro".
+GUILE_GNU_LD_RELRO
+
+
 ## If we're creating a shared library (using libtool!), then we'll
 ## need to generate a list of .lo files corresponding to the .o files
 ## given in LIBOBJS.  We'll call it LIBLOBJS.
@@ -1437,6 +1554,9 @@ LIBLOBJS="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`"
 EXTRA_DOT_DOC_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.doc ,g;s,\.[[^.]]*$,.doc,'`"
 EXTRA_DOT_X_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.x ,g;s,\.[[^.]]*$,.x,'`"
 
+# GNU Readline bindings.
+GUILE_READLINE
+
 AC_SUBST(GUILE_MAJOR_VERSION)
 AC_SUBST(GUILE_MINOR_VERSION)
 AC_SUBST(GUILE_MICRO_VERSION)
@@ -1451,30 +1571,6 @@ AC_SUBST(LIBGUILE_INTERFACE_REVISION)
 AC_SUBST(LIBGUILE_INTERFACE_AGE)
 AC_SUBST(LIBGUILE_INTERFACE)
 
-AC_SUBST(LIBGUILE_SRFI_SRFI_1_MAJOR)
-AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_CURRENT)
-AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_REVISION)
-AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_AGE)
-AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE)
-
-AC_SUBST(LIBGUILE_SRFI_SRFI_4_MAJOR)
-AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_CURRENT)
-AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_REVISION)
-AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_AGE)
-AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE)
-
-AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_MAJOR)
-AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_CURRENT)
-AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_REVISION)
-AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_AGE)
-AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE)
-
-AC_SUBST(LIBGUILE_SRFI_SRFI_60_MAJOR)
-AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE_CURRENT)
-AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE_REVISION)
-AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE_AGE)
-AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE)
-
 AC_SUBST(LIBGUILE_I18N_MAJOR)
 AC_SUBST(LIBGUILE_I18N_INTERFACE_CURRENT)
 AC_SUBST(LIBGUILE_I18N_INTERFACE_REVISION)
@@ -1484,9 +1580,27 @@ AC_SUBST(LIBGUILE_I18N_INTERFACE)
 
 #######################################################################
 
-dnl Tell guile-config what flags guile users should compile and link with.
+dnl Tell guile-config what flags guile users should compile and link
+dnl with, keeping only `-I' flags from $CPPFLAGS.
+GUILE_CFLAGS=""
+next_is_includedir=false
+for flag in $CPPFLAGS
+do
+  if $next_is_includedir; then
+    GUILE_CFLAGS="$GUILE_CFLAGS -I $flag"
+    next_is_includedir=false
+  else
+    case "$flag" in
+      -I)  next_is_includedir=true;;
+      -I*) GUILE_CFLAGS="$GUILE_CFLAGS $flag";;
+      *)   ;;
+    esac
+  fi
+done
+
+GUILE_CFLAGS="$GUILE_CFLAGS $PTHREAD_CFLAGS"
 GUILE_LIBS="$LDFLAGS $LIBS"
-GUILE_CFLAGS="$CPPFLAGS $PTHREAD_CFLAGS"
+
 AC_SUBST(GUILE_LIBS)
 AC_SUBST(GUILE_CFLAGS)
 
@@ -1501,18 +1615,14 @@ AC_SUBST(top_builddir_absolute)
 top_srcdir_absolute=`(cd $srcdir && pwd)`
 AC_SUBST(top_srcdir_absolute)
 
-dnl We need `sitedir' in `guile-1.8.pc'.
-dnl Note: `sitedir' must be kept in sync with `GUILE_SITE_DIR' in `guile.m4'.
-pkgdatadir="$datadir/guile"
-sitedir="$pkgdatadir/site"
+dnl `sitedir' goes into libpath.h and the pkg-config file.
+pkgdatadir="$datadir/$PACKAGE_TARNAME"
+sitedir="$pkgdatadir/site/$GUILE_EFFECTIVE_VERSION"
 AC_SUBST([sitedir])
 
 # Additional SCM_I_GSC definitions are above.
 AC_SUBST([SCM_I_GSC_GUILE_DEBUG])
-AC_SUBST([SCM_I_GSC_GUILE_DEBUG_FREELIST])
-AC_SUBST([SCM_I_GSC_ENABLE_DISCOURAGED])
 AC_SUBST([SCM_I_GSC_ENABLE_DEPRECATED])
-AC_SUBST([SCM_I_GSC_ENABLE_ELISP])
 AC_SUBST([SCM_I_GSC_STACK_GROWS_UP])
 AC_SUBST([SCM_I_GSC_C_INLINE])
 AC_CONFIG_FILES([libguile/gen-scmconfig.h])
@@ -1522,43 +1632,36 @@ AC_CONFIG_FILES([
   am/Makefile
   lib/Makefile
   benchmark-suite/Makefile
+  gc-benchmarks/Makefile
   doc/Makefile
-  doc/goops/Makefile
   doc/r5rs/Makefile
   doc/ref/Makefile
-  doc/tutorial/Makefile
   emacs/Makefile
   examples/Makefile
-  lang/Makefile
   libguile/Makefile
-  srfi/Makefile
+  libguile/version.h
+  guile-readline/Makefile
   test-suite/Makefile
   test-suite/standalone/Makefile
+  test-suite/vm/Makefile
   meta/Makefile
   module/Makefile
-  testsuite/Makefile
 ])
 
-AC_CONFIG_FILES([meta/guile-2.0.pc])
-AC_CONFIG_FILES([meta/guile-2.0-uninstalled.pc])
-AC_CONFIG_FILES([check-guile], [chmod +x check-guile])
-AC_CONFIG_FILES([benchmark-guile], [chmod +x benchmark-guile])
-AC_CONFIG_FILES([meta/guile], [chmod +x meta/guile])
-AC_CONFIG_FILES([meta/uninstalled-env], [chmod +x meta/uninstalled-env])
-AC_CONFIG_FILES([meta/gdb-uninstalled-guile], [chmod +x meta/gdb-uninstalled-guile])
-AC_CONFIG_FILES([meta/guile-tools], [chmod +x meta/guile-tools])
-AC_CONFIG_FILES([libguile/guile-snarf],
-                [chmod +x libguile/guile-snarf])
-AC_CONFIG_FILES([libguile/guile-doc-snarf],
-                [chmod +x libguile/guile-doc-snarf])
-AC_CONFIG_FILES([libguile/guile-func-name-check],
-                [chmod +x libguile/guile-func-name-check])
-AC_CONFIG_FILES([libguile/guile-snarf-docs],
-                [chmod +x libguile/guile-snarf-docs])
-AC_CONFIG_FILES([test-suite/standalone/test-use-srfi],
-                [chmod +x test-suite/standalone/test-use-srfi])
-AC_CONFIG_FILES([test-suite/standalone/test-fast-slot-ref],
-                [chmod +x test-suite/standalone/test-fast-slot-ref])
+AC_CONFIG_FILES([meta/guile-2.2.pc])
+AC_CONFIG_FILES([meta/guile-2.2-uninstalled.pc])
+AC_CONFIG_FILES([doc/ref/effective-version.texi])
+
+GUILE_CONFIG_SCRIPT([check-guile])
+GUILE_CONFIG_SCRIPT([benchmark-guile])
+GUILE_CONFIG_SCRIPT([meta/guile])
+GUILE_CONFIG_SCRIPT([meta/uninstalled-env])
+GUILE_CONFIG_SCRIPT([meta/gdb-uninstalled-guile])
+GUILE_CONFIG_SCRIPT([meta/guile-tools])
+GUILE_CONFIG_SCRIPT([libguile/guile-snarf])
+GUILE_CONFIG_SCRIPT([libguile/guile-snarf-docs])
+GUILE_CONFIG_SCRIPT([test-suite/standalone/test-use-srfi])
+GUILE_CONFIG_SCRIPT([test-suite/standalone/test-fast-slot-ref])
 
 AC_OUTPUT