guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] GNU Guile branch, string_abstraction2, updated. release_


From: Michael Gran
Subject: [Guile-commits] GNU Guile branch, string_abstraction2, updated. release_1-9-1-135-g26e9742
Date: Mon, 10 Aug 2009 13:40:19 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

http://git.savannah.gnu.org/cgit/guile.git/commit/?id=26e9742b9a89878e736d9759bb005ed3986a3bae

The branch, string_abstraction2 has been updated
       via  26e9742b9a89878e736d9759bb005ed3986a3bae (commit)
       via  32be5735cd89931048f12283f3977c72cd292f77 (commit)
       via  6ce6923b6826db2f2ddc8a5f787ab57d7072f0e8 (commit)
       via  50b1996f1b229889f088aa01f4c1c5fcd5dd0d63 (commit)
       via  4847dc172f4086152987d5f9c353cf14db17d554 (commit)
       via  b07992900bef24596532018d7939384f8632cd0f (commit)
       via  9af080f7206dccffb91409529fff74e6554f2385 (commit)
       via  25361e4b2564623f57a5b338912b2f656bfc8d94 (commit)
       via  18c73f8e2bc4a184db62a975fa5bf2fdf43453e1 (commit)
      from  42f9187a79e160e77f572b3b153e46efd739a884 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 26e9742b9a89878e736d9759bb005ed3986a3bae
Merge: 42f9187a79e160e77f572b3b153e46efd739a884 
32be5735cd89931048f12283f3977c72cd292f77
Author: Michael Gran <address@hidden>
Date:   Mon Aug 10 06:38:59 2009 -0700

    Merge branch 'master' into string_abstraction2
    
    This includes the renaming of scm_charprint to scm_i_charprint.
    
    Conflicts:
        libguile/Makefile.am
        libguile/print.c
        libguile/print.h
        libguile/strings.c

-----------------------------------------------------------------------

Summary of changes:
 configure.ac            |    8 +-
 lib/Makefile.am         |    4 +-
 lib/time.in.h           |    8 +-
 lib/unistd.in.h         |   13 ++-
 libguile/Makefile.am    |    9 ++-
 libguile/chars.h        |    6 +-
 libguile/libguile.map   |   44 +++++++
 libguile/ports.c        |   23 +---
 libguile/ports.h        |   10 +-
 libguile/print.c        |    6 +-
 libguile/print.h        |    2 +-
 libguile/strings.c      |  305 +++++++++++++++++++++++++++++++++++-----------
 libguile/strings.h      |   10 ++-
 m4/gnulib-cache.m4      |    3 +-
 m4/gnulib-comp.m4       |    6 +-
 m4/iconv.m4             |    6 +-
 m4/ld-version-script.m4 |   44 +++++++
 m4/time_h.m4            |    4 +-
 m4/unistd_h.m4          |    3 +-
 19 files changed, 389 insertions(+), 125 deletions(-)
 create mode 100644 libguile/libguile.map
 create mode 100644 m4/ld-version-script.m4

diff --git a/configure.ac b/configure.ac
index b28cde8..96083b0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -833,13 +833,7 @@ AC_LIB_HAVE_LINKFLAGS(gmp,
   [mpz_import (0, 0, 0, 0, 0, 0, 0);],
   AC_MSG_ERROR([GNU MP 4.1 or greater not found, see README]))
 
-dnl GNU libunistring tests.
-AC_LIB_HAVE_LINKFLAGS(unistring,
-  [],
-  [#include <unistr.h>],
-  [u8_check ("foo", 3)]
-  AC_MSG_ERROR([GNU libunistring not found, see README]))
-
+dnl GNU libunistring is checked for by Gnulib's `libunistring' module.
 
 dnl i18n tests
 #AC_CHECK_HEADERS([libintl.h])
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 424e590..0f74b51 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -9,7 +9,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib 
--m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl 
--libtool --macro-prefix=gl --no-vc-files alloca-opt autobuild byteswap 
canonicalize-lgpl count-one-bits environ extensions flock fpieee full-read 
full-write havelib iconv_open-utf lib-symbol-visibility libunistring putenv 
stdlib strcase strftime striconveh string verify vsnprintf
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib 
--m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl 
--libtool --macro-prefix=gl --no-vc-files alloca-opt autobuild byteswap 
canonicalize-lgpl count-one-bits environ extensions flock fpieee full-read 
full-write havelib iconv_open-utf lib-symbol-versions lib-symbol-visibility 
libunistring putenv stdlib strcase strftime striconveh string verify vsnprintf
 
 AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
 
@@ -896,6 +896,7 @@ time.h: time.in.h
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
              -e 's|@REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
+             -e 's|@REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \
              -e 's|@REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
              -e 's|@REPLACE_STRPTIME''@|$(REPLACE_STRPTIME)|g' \
              -e 's|@REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
@@ -972,6 +973,7 @@ unistd.h: unistd.in.h
              -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
              -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
              -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+             -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
              -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
              -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
              -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
diff --git a/lib/time.in.h b/lib/time.in.h
index 7da429a..cef4e05 100644
--- a/lib/time.in.h
+++ b/lib/time.in.h
@@ -1,6 +1,6 @@
 /* A more-standard <time.h>.
 
-   Copyright (C) 2007-2008 Free Software Foundation, Inc.
+   Copyright (C) 2007-2009 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -66,6 +66,12 @@ struct timespec
 int nanosleep (struct timespec const *__rqtp, struct timespec *__rmtp);
 # endif
 
+/* Return the 'time_t' representation of TP and normalize TP.  */
+# if @REPLACE_MKTIME@
+#  define mktime rpl_mktime
+extern time_t mktime (struct tm *__tp);
+# endif
+
 /* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
    <http://www.opengroup.org/susv3xsh/localtime_r.html> and
    <http://www.opengroup.org/susv3xsh/gmtime_r.html>.  */
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
index 2e42c0b..e2545cb 100644
--- a/lib/unistd.in.h
+++ b/lib/unistd.in.h
@@ -150,10 +150,13 @@ extern int close (int);
 
 
 #if @GNULIB_DUP2@
-# if address@hidden@
+# if @REPLACE_DUP2@
+#  define dup2 rpl_dup2
+# endif
+# if address@hidden@ || @REPLACE_DUP2@
 /* Copy the file descriptor OLDFD into file descriptor NEWFD.  Do nothing if
    NEWFD = OLDFD, otherwise close NEWFD first if it is open.
-   Return 0 if successful, otherwise -1 and errno set.
+   Return newfd if successful, otherwise -1 and errno set.
    See the POSIX:2001 specification
    <http://www.opengroup.org/susv3xsh/dup2.html>.  */
 extern int dup2 (int oldfd, int newfd);
@@ -214,7 +217,11 @@ extern int fchdir (int /*fd*/);
 
 #  define dup rpl_dup
 extern int dup (int);
-#  define dup2 rpl_dup2
+
+#  if @REPLACE_DUP2@
+#   undef dup2
+#  endif
+#  define dup2 rpl_dup2_fchdir
 extern int dup2 (int, int);
 
 # endif
diff --git a/libguile/Makefile.am b/libguile/Makefile.am
index 0f34994..691d3ba 100644
--- a/libguile/Makefile.am
+++ b/libguile/Makefile.am
@@ -223,6 +223,13 @@ libguile_la_DEPENDENCIES = @LIBLOBJS@
 libguile_la_LIBADD = @LIBLOBJS@ $(gnulib_library) $(LTLIBGMP) $(LTLIBUNISTRING)
 libguile_la_LDFLAGS = @LTLIBINTL@ -version-info 
@LIBGUILE_INTERFACE_CURRENT@:@LIBGUILE_INTERFACE_REVISION@:@LIBGUILE_INTERFACE_AGE@
 -export-dynamic -no-undefined
 
+if HAVE_LD_VERSION_SCRIPT
+
+libguile_la_LDFLAGS += -Wl,--version-script="$(srcdir)/libguile.map"
+
+endif HAVE_LD_VERSION_SCRIPT
+
+
 # These are headers visible as <guile/mumble.h>
 pkginclude_HEADERS = 
 
@@ -264,7 +271,7 @@ EXTRA_DIST = ChangeLog-scm ChangeLog-threads                
\
     cpp_errno.c cpp_err_symbols.in cpp_err_symbols.c                   \
     cpp_sig_symbols.c cpp_sig_symbols.in cpp_cnvt.awk                  \
     c-tokenize.lex version.h.in                                                
\
-    scmconfig.h.top libgettext.h unidata_to_charset.pl
+    scmconfig.h.top libgettext.h unidata_to_charset.pl libguile.map
 #    $(DOT_DOC_FILES) $(EXTRA_DOT_DOC_FILES) \
 #    guile-procedures.txt guile.texi
 
diff --git a/libguile/chars.h b/libguile/chars.h
index b6d36c8..c2c4efb 100644
--- a/libguile/chars.h
+++ b/libguile/chars.h
@@ -38,9 +38,9 @@ typedef scm_t_int32 scm_t_wchar;
 #define SCM_CHAR(x) ((scm_t_wchar)SCM_ITAG8_DATA(x))
 
 #define SCM_MAKE_CHAR(x)                                              \
-  (x < 0                                                              \
-   ? SCM_MAKE_ITAG8 ((scm_t_bits) (unsigned char) x, scm_tc8_char)    \
-   : SCM_MAKE_ITAG8 ((scm_t_bits) x, scm_tc8_char))
+  ((x) < 0                                                            \
+   ? SCM_MAKE_ITAG8 ((scm_t_bits) (unsigned char) (x), scm_tc8_char)  \
+   : SCM_MAKE_ITAG8 ((scm_t_bits) (x), scm_tc8_char))
 
 #define SCM_CODEPOINT_MAX (0x10ffff)
 #define SCM_IS_UNICODE_CHAR(c)                                          \
diff --git a/libguile/libguile.map b/libguile/libguile.map
new file mode 100644
index 0000000..2586e0a
--- /dev/null
+++ b/libguile/libguile.map
@@ -0,0 +1,44 @@
+# Linker version script for libguile.           -*- ld-script -*-
+#
+# Copyright (C) 2009 Free Software Foundation, Inc.
+#
+# This file is part of GUILE.
+#
+# GUILE is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 3, or
+# (at your option) any later version.
+#
+# GUILE is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with GUILE; see the file COPYING.LESSER.  If not,
+# write to the Free Software Foundation, Inc., 51 Franklin Street,
+# Fifth Floor, Boston, MA 02110-1301 USA
+
+GUILE_2.0
+{
+  global:
+    # Note: This includes `scm_i_' symbols declared as `SCM_API' (e.g.,
+    # symbols from `deprecated.c' or symbols used by public inline
+    # functions or macros).
+    scm_*;
+
+    # GDB interface.
+    gdb_options;
+    gdb_language;
+    gdb_result;
+    gdb_output;
+    gdb_output_length;
+    gdb_maybe_valid_type_p;
+    gdb_read;
+    gdb_eval;
+    gdb_print;
+    gdb_binding;
+
+  local:
+    *;
+};
diff --git a/libguile/ports.c b/libguile/ports.c
index a6289ee..f58ac44 100644
--- a/libguile/ports.c
+++ b/libguile/ports.c
@@ -1128,28 +1128,17 @@ static void
 update_port_lf (scm_t_wchar c, SCM port)
 {
   if (c == '\a')
-    {
-    }
+    ;                           /* Do nothing. */
   else if (c == '\b')
-    {
-      SCM_DECCOL (port);
-    }
+    SCM_DECCOL (port);
   else if (c == '\n')
-    {
-      SCM_INCLINE (port);
-    }
+    SCM_INCLINE (port);
   else if (c == '\r')
-    {
-      SCM_ZEROCOL (port);
-    }
+    SCM_ZEROCOL (port);
   else if (c == '\t')
-    {
-      SCM_TABCOL (port);
-    }
+    SCM_TABCOL (port);
   else
-    {
-      SCM_INCCOL (port);
-    }
+    SCM_INCCOL (port);
 }
 
 void
diff --git a/libguile/ports.h b/libguile/ports.h
index 4f228fe..fa303d4 100644
--- a/libguile/ports.h
+++ b/libguile/ports.h
@@ -162,11 +162,11 @@ SCM_INTERNAL SCM scm_i_port_weak_hash;
 #define SCM_REVEALED(x)           (SCM_PTAB_ENTRY(x)->revealed)
 #define SCM_SETREVEALED(x, s)      (SCM_PTAB_ENTRY(x)->revealed = (s))
 
-#define SCM_INCLINE(port)      {SCM_LINUM (port) += 1; SCM_COL (port) = 0;}
-#define SCM_ZEROCOL(port)      {SCM_COL (port) = 0;}
-#define SCM_INCCOL(port)       {SCM_COL (port) += 1;}
-#define SCM_DECCOL(port)       {if (SCM_COL (port) > 0) SCM_COL (port) -= 1;}
-#define SCM_TABCOL(port)       {SCM_COL (port) += 8 - SCM_COL (port) % 8;}
+#define SCM_INCLINE(port)      do {SCM_LINUM (port) += 1; SCM_COL (port) = 0;} 
while (0)
+#define SCM_ZEROCOL(port)      do {SCM_COL (port) = 0;} while (0)
+#define SCM_INCCOL(port)       do {SCM_COL (port) += 1;} while (0)
+#define SCM_DECCOL(port)       do {if (SCM_COL (port) > 0) SCM_COL (port) -= 
1;} while (0)
+#define SCM_TABCOL(port)       do {SCM_COL (port) += 8 - SCM_COL (port) % 8;} 
while (0)
 
 /* Maximum number of port types.  */
 #define SCM_I_MAX_PORT_TYPE_COUNT  256
diff --git a/libguile/print.c b/libguile/print.c
index 7a35f74..1111bf0 100644
--- a/libguile/print.c
+++ b/libguile/print.c
@@ -490,7 +490,7 @@ iprin1 (SCM exp, SCM port, scm_print_state *pstate)
                 scm_intprint (i, 8, port);
            }
          else
-           scm_charprint (i, port);
+           scm_i_charprint (i, port);
        }
       else if (SCM_IFLAGP (exp)
               && ((size_t) SCM_IFLAGNUM (exp) < (sizeof iflagnames / sizeof 
(char *))))
@@ -606,7 +606,7 @@ iprin1 (SCM exp, SCM port, scm_print_state *pstate)
                   else if (ch == '"' || ch == '\\')
                     {
                       scm_putc ('\\', port);
-                      scm_charprint (ch, port);
+                      scm_i_charprint (ch, port);
                       printed = 1;
                     }
                   else
@@ -848,7 +848,7 @@ scm_prin1 (SCM exp, SCM port, int writingp)
 /* Print a character.
  */
 void
-scm_charprint (scm_t_wchar ch, SCM port)
+scm_i_charprint (scm_t_wchar ch, SCM port)
 {
   scm_t_wchar *wbuf;
   SCM wstr = scm_i_make_wide_string (1, &wbuf);
diff --git a/libguile/print.h b/libguile/print.h
index 14c63fe..36ff51a 100644
--- a/libguile/print.h
+++ b/libguile/print.h
@@ -79,7 +79,7 @@ SCM_API SCM scm_print_options (SCM setting);
 SCM_API SCM scm_make_print_state (void);
 SCM_API void scm_free_print_state (SCM print_state);
 SCM_INTERNAL SCM scm_i_port_with_print_state (SCM port, SCM print_state);
-SCM_API void scm_charprint (scm_t_wchar c, SCM port);
+SCM_INTERNAL void scm_i_charprint (scm_t_wchar c, SCM port);
 SCM_API void scm_intprint (scm_t_intmax n, int radix, SCM port);
 SCM_API void scm_uintprint (scm_t_uintmax n, int radix, SCM port);
 SCM_API void scm_ipruk (char *hdr, SCM ptr, SCM port);
diff --git a/libguile/strings.c b/libguile/strings.c
index 0e7f3ad..c3ebc50 100644
--- a/libguile/strings.c
+++ b/libguile/strings.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,1996,1998,2000,2001, 2004, 2006, 2008 Free Software 
Foundation, Inc.
+/* Copyright (C) 1995,1996,1998,2000,2001, 2004, 2006, 2008, 2009 Free 
Software Foundation, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -49,7 +49,7 @@
  *
  * XXX - keeping an accurate refcount during GC seems to be quite
  * tricky, so we just keep score of whether a stringbuf might be
- * shared, not wether it definitely is.  
+ * shared, not whether it definitely is.  
  *
  * The scheme I (mvo) tried to keep an accurate reference count would
  * recount all strings that point to a stringbuf during the mark-phase
@@ -66,16 +66,24 @@
  * A stringbuf needs to know its length, but only so that it can be
  * reported when the stringbuf is freed.
  *
- * Stringbufs (and strings) are not stored very compactly: a stringbuf
- * has room for about 2*sizeof(scm_t_bits)-1 bytes additional
- * information.  As a compensation, the code below is made more
- * complicated by storing small strings inline in the double cell of a
- * stringbuf.  So we have fixstrings and bigstrings...
+ * There are 3 storage strategies for stringbufs: inline, outline, and
+ * wide.
+ *
+ * Inline strings are small 8-bit strings stored within the double
+ * cell itself.  Outline strings are larger 8-bit strings with GC
+ * allocated storage.  Wide strings are 32-bit strings with allocated
+ * storage.
+ *
+ * There was little value in making wide string inlineable, since
+ * there is only room for three inlined 32-bit characters.  Thus wide
+ * stringbufs are never inlined.
  */
 
 #define STRINGBUF_F_SHARED      0x100
 #define STRINGBUF_F_INLINE      0x200
-#define STRINGBUF_F_WIDE        0x400
+#define STRINGBUF_F_WIDE        0x400 /* If true, strings have UCS-4
+                                         encoding.  Otherwise, strings
+                                         are Latin-1.  */
 
 #define STRINGBUF_TAG           scm_tc7_stringbuf
 #define STRINGBUF_SHARED(buf)   (SCM_CELL_WORD_0(buf) & STRINGBUF_F_SHARED)
@@ -90,6 +98,7 @@
 #define STRINGBUF_CHARS(buf)  (STRINGBUF_INLINE (buf) \
                                ? STRINGBUF_INLINE_CHARS (buf) \
                                : STRINGBUF_OUTLINE_CHARS (buf))
+
 #define STRINGBUF_WIDE_CHARS(buf) ((scm_t_wchar *)SCM_CELL_WORD_1(buf))
 #define STRINGBUF_LENGTH(buf) (STRINGBUF_INLINE (buf) \
                                ? STRINGBUF_INLINE_LENGTH (buf) \
@@ -100,10 +109,12 @@
 #define SET_STRINGBUF_SHARED(buf) \
   (SCM_SET_CELL_WORD_0 ((buf), SCM_CELL_WORD_0 (buf) | STRINGBUF_F_SHARED))
 
-#if SCM_DEBUG
+#if SCM_STRING_LENGTH_HISTOGRAM
 static size_t lenhist[1001];
 #endif
 
+/* Make a stringbuf with space for LEN 8-bit Latin-1-encoded
+   characters. */
 static SCM
 make_stringbuf (size_t len)
 {
@@ -114,7 +125,7 @@ make_stringbuf (size_t len)
      can be dropped.
   */
 
-#if SCM_DEBUG
+#if SCM_STRING_LENGTH_HISTOGRAM
   if (len < 1000)
     lenhist[len]++;
   else
@@ -135,11 +146,13 @@ make_stringbuf (size_t len)
     }
 }
 
+/* Make a stringbuf with space for LEN 32-bit UCS-4-encoded
+   characters.  */
 static SCM
 make_wide_stringbuf (size_t len)
 {
   scm_t_wchar *mem;
-#if SCM_DEBUG
+#if SCM_STRING_LENGTH_HISTOGRAM
   if (len < 1000)
     lenhist[len]++;
   else
@@ -185,6 +198,8 @@ scm_i_stringbuf_free (SCM buf)
 
 }
 
+/* Convert a stringbuf containing 8-bit Latin-1-encoded characters to
+   one containing 32-bit UCS-4-encoded characters.  */
 static void
 widen_stringbuf (SCM buf)
 {
@@ -259,6 +274,9 @@ scm_i_pthread_mutex_t stringbuf_write_mutex = 
SCM_I_PTHREAD_MUTEX_INITIALIZER;
 
 #define IS_SH_STRING(str)   (SCM_CELL_TYPE(str)==SH_STRING_TAG)
 
+/* Create a scheme string with space for LEN 8-bit Latin-1-encoded
+   characters.  CHARSP, if not NULL, will be set to location of the
+   char array.  */
 SCM
 scm_i_make_string (size_t len, char **charsp)
 {
@@ -271,8 +289,11 @@ scm_i_make_string (size_t len, char **charsp)
   return res;
 }
 
+/* Create a scheme string with space for LEN 32-bit UCS-4-encoded
+   characters.  CHARSP, if not NULL, will be set to location of the
+   character array.  */
 SCM
-scm_i_make_wide_string (size_t len, scm_t_wchar ** charsp)
+scm_i_make_wide_string (size_t len, scm_t_wchar **charsp)
 {
   SCM buf = make_wide_stringbuf (len);
   SCM res;
@@ -354,7 +375,7 @@ scm_i_substring_copy (SCM str, size_t start, size_t end)
                (scm_t_uint32 *) (STRINGBUF_WIDE_CHARS (buf) + str_start 
                                  + start), len);
       /* Even though this string is wide, the substring may be narrow.
-         Consider adding code to narrow string.  */
+         Consider adding code to narrow the string.  */
     }
   scm_remember_upto_here_1 (buf);
   return scm_double_cell (STRING_TAG, SCM_UNPACK (my_buf),
@@ -424,18 +445,25 @@ scm_i_string_free (SCM str)
 /* Internal accessors
  */
 
+/* Returns the number of characters in STR.  This may be different
+   than the memory size of the string storage.  */
 size_t
 scm_i_string_length (SCM str)
 {
   return STRING_LENGTH (str);
 }
 
+/* True if the string is 'narrow', meaning it has a 8-bit Latin-1
+   encoding.  False if it is 'wide', having a 32-bit UCS-4
+   encoding.  */
 int
 scm_i_is_narrow_string (SCM str)
 {
   return !STRINGBUF_WIDE (STRING_STRINGBUF (str));
 }
 
+/* Returns a pointer to the 8-bit Latin-1 encoded character array of
+   STR.  */
 const char *
 scm_i_string_chars (SCM str)
 {
@@ -450,6 +478,8 @@ scm_i_string_chars (SCM str)
   return NULL;
 }
 
+/* Returns a pointer to the 32-bit UCS-4 encoded character array of
+   STR.  */
 const scm_t_wchar *
 scm_i_string_wide_chars (SCM str)
 {
@@ -466,7 +496,8 @@ scm_i_string_wide_chars (SCM str)
 
 /* If the buffer in ORIG_STR is shared, copy ORIG_STR's characters to
    a new string buffer, so that it can be modified without modifying
-   other strings.  */
+   other strings.  Also, lock the string mutex.  Later, one must call
+   scm_i_string_stop_writing to unlock the mutex.  */
 SCM
 scm_i_string_start_writing (SCM orig_str)
 {
@@ -513,8 +544,7 @@ scm_i_string_start_writing (SCM orig_str)
   return orig_str;
 }
 
-/* Return a pointer to the chars of a string that fits in a Latin-1
-   encoding.  */
+/* Return a pointer to the 8-bit Latin-1 chars of a string.  */
 char *
 scm_i_string_writable_chars (SCM str)
 {
@@ -530,7 +560,7 @@ scm_i_string_writable_chars (SCM str)
   return NULL;
 }
 
-/* Return a pointer to the Unicode codepoints of a string.  */
+/* Return a pointer to the UCS-4 codepoints of a string.  */
 static scm_t_wchar *
 scm_i_string_writable_wide_chars (SCM str)
 {
@@ -545,13 +575,15 @@ scm_i_string_writable_wide_chars (SCM str)
                     scm_list_1 (str));
 }
 
+/* Unlock the string mutex that was locked when
+   scm_i_string_start_writing was called.  */
 void
 scm_i_string_stop_writing (void)
 {
   scm_i_pthread_mutex_unlock (&stringbuf_write_mutex);
 }
 
-/* Return the Xth character is C.  */
+/* Return the Xth character of STR as a UCS-4 codepoint.  */
 scm_t_wchar
 scm_i_string_ref (SCM str, size_t x)
 {
@@ -614,6 +646,7 @@ scm_i_string_strcmp (SCM sstr, size_t start_x, const char 
*cstr)
   return 0;
 }
 
+/* Set the Pth character of STR to UCS-4 codepoint CHR. */
 void
 scm_i_string_set_x (SCM str, size_t p, scm_t_wchar chr)
 {
@@ -709,6 +742,8 @@ scm_i_c_take_symbol (char *name, size_t len,
                          (scm_t_bits) hash, SCM_UNPACK (props));
 }
 
+/* Returns the number of characters in SYM.  This may be different
+   from the memory size of SYM.  */
 size_t
 scm_i_symbol_length (SCM sym)
 {
@@ -725,6 +760,8 @@ scm_c_symbol_length (SCM sym)
 }
 #undef FUNC_NAME
 
+/* True if the name of SYM is stored as a Latin-1 encoded string.
+   False if it is stored as a 32-bit UCS-4-encoded string.  */
 int
 scm_i_is_narrow_symbol (SCM sym)
 {
@@ -734,6 +771,8 @@ scm_i_is_narrow_symbol (SCM sym)
   return !STRINGBUF_WIDE (buf);
 }
 
+/* Returns a pointer to the 8-bit Latin-1 encoded character array that
+   contains the name of SYM.  */
 const char *
 scm_i_symbol_chars (SCM sym)
 {
@@ -747,7 +786,8 @@ scm_i_symbol_chars (SCM sym)
                     scm_list_1 (sym));
 }
 
-/* Return a pointer to the Unicode codepoints of a symbol's name.  */
+/* Return a pointer to the 32-bit UCS-4-encoded character array of a
+   symbol's name.  */
 const scm_t_wchar *
 scm_i_symbol_wide_chars (SCM sym)
 {
@@ -784,6 +824,7 @@ scm_i_symbol_substring (SCM sym, size_t start, size_t end)
                          (scm_t_bits)start, (scm_t_bits) end - start);
 }
 
+/* Returns the Xth character of symbol SYM as a UCS-4 codepoint.  */
 scm_t_wchar
 scm_i_symbol_ref (SCM sym, size_t x)
 {
@@ -814,80 +855,196 @@ scm_i_symbol_strcmp (SCM sym, char *str)
 /* Debugging
  */
 
-#if SCM_DEBUG
-
-SCM scm_sys_string_dump (SCM);
-SCM scm_sys_symbol_dump (SCM);
-SCM scm_sys_stringbuf_hist (void);
-
-SCM_DEFINE (scm_sys_string_dump, "%string-dump", 1, 0, 0, (SCM str), "")
+SCM_DEFINE (scm_sys_string_dump, "%string-dump", 1, 0, 0, (SCM str), 
+            "Returns an association list containing debugging information\n"
+            "for @var{str}. The association list has the following entries."
+            "@table @code\n"
+            "@item string\n"
+            "The string itself.\n"
+            "@item start\n"
+            "The start index of the string into its stringbuf\n"
+            "@item length\n"
+            "The length of the string\n"
+            "@item shared\n"
+            "If this string is a substring, it returns its parent string.\n"
+            "Otherwise, it returns @code{#f}\n"
+            "@item stringbuf\n"
+            "The string buffer that contains this string's characters\n"
+            "@item stringbuf-chars\n"
+            "A new string containing this string's stringbuf's characters\n"
+            "@item stringbuf-length\n"
+            "The number of characters in this stringbuf\n"
+            "@item stringbuf-shared\n"
+            "@code{#t} if this stringbuf is shared\n"
+            "@item stringbuf-inline\n"
+            "@code{#t} if this stringbuf's characters are stored in the\n"
+            "cell itself, or @code{#f} if they were allocated in memory\n"
+            "@item stringbuf-wide\n"
+            "@code{#t} if this stringbuf's characters are stored in a\n"
+            "32-bit buffer, or @code{#f} if they are stored in an 8-bit\n"
+            "buffer\n"
+            "@end table")
 #define FUNC_NAME s_scm_sys_string_dump
 {
+  SCM e1, e2, e3, e4, e5, e6, e7, e8, e9, e10;
+  SCM buf;
   SCM_VALIDATE_STRING (1, str);
-  fprintf (stderr, "%p:\n", str);
-  fprintf (stderr, " start: %u\n", STRING_START (str));
-  fprintf (stderr, " len:   %u\n", STRING_LENGTH (str));
-  if (scm_i_is_narrow_string (str))
-    fprintf (stderr, " format: narrow\n");
-  else
-    fprintf (stderr, " format: wide\n");
+
+  /* String info */
+  e1 = scm_cons (scm_from_locale_symbol ("string"),
+                 str);
+  e2 = scm_cons (scm_from_locale_symbol ("start"),
+                 scm_from_size_t (STRING_START (str)));
+  e3 = scm_cons (scm_from_locale_symbol ("length"),
+                 scm_from_size_t (STRING_LENGTH (str)));
+
   if (IS_SH_STRING (str))
     {
-      fprintf (stderr, " string: %p\n", SH_STRING_STRING (str));
-      fprintf (stderr, "\n");
-      scm_sys_string_dump (SH_STRING_STRING (str));
+      e4 = scm_cons (scm_from_locale_symbol ("shared"),
+                     SH_STRING_STRING (str));
+      buf = STRING_STRINGBUF (SH_STRING_STRING (str));
     }
   else
     {
-      SCM buf = STRING_STRINGBUF (str);
-      fprintf (stderr, " buf:   %p\n", buf);
-      if (scm_i_is_narrow_string (str))
-        fprintf (stderr, "  chars:  %p\n", STRINGBUF_CHARS (buf));
-      else
-        fprintf (stderr, "  chars:   %p\n", STRINGBUF_WIDE_CHARS (buf));
-      fprintf (stderr, "  length: %u\n", STRINGBUF_LENGTH (buf));
-      if (STRINGBUF_SHARED (buf))
-        fprintf (stderr, "  shared: true\n");
-      else
-        fprintf (stderr, "  shared: false\n");
-      if (STRINGBUF_INLINE (buf))
-        fprintf (stderr, "  inline: true\n");
-      else
-        fprintf (stderr, "  inline: false\n");
+      e4 = scm_cons (scm_from_locale_symbol ("shared"),
+                     SCM_BOOL_F);
+      buf = STRING_STRINGBUF (str);
+    }
 
+  /* Stringbuf info */
+  e5 = scm_cons (scm_from_locale_symbol ("stringbuf"),
+                 buf);
+  
+  if (!STRINGBUF_WIDE (buf))
+    {
+      size_t len = STRINGBUF_LENGTH (buf);
+      char *cbuf;
+      SCM sbc = scm_i_make_string (len, &cbuf);
+      memcpy (cbuf, STRINGBUF_CHARS (buf), len);
+      e6 = scm_cons (scm_from_locale_symbol ("stringbuf-chars"),
+                     sbc);
     }
-  return SCM_UNSPECIFIED;
+  else
+    {
+      size_t len = STRINGBUF_LENGTH (buf);
+      scm_t_wchar *cbuf;
+      SCM sbc = scm_i_make_wide_string (len, &cbuf);
+      u32_cpy ((scm_t_uint32 *) cbuf, 
+               (scm_t_uint32 *) STRINGBUF_WIDE_CHARS (buf), len);
+      e6 = scm_cons (scm_from_locale_symbol ("stringbuf-chars"),
+                     sbc);
+    }
+  e7 = scm_cons (scm_from_locale_symbol ("stringbuf-length"), 
+                 scm_from_size_t (STRINGBUF_LENGTH (buf)));
+  if (STRINGBUF_SHARED (buf))
+    e8 = scm_cons (scm_from_locale_symbol ("stringbuf-shared"), 
+                   SCM_BOOL_T);
+  else
+    e8 = scm_cons (scm_from_locale_symbol ("stringbuf-shared"), 
+                   SCM_BOOL_F);
+  if (STRINGBUF_INLINE (buf))
+    e9 = scm_cons (scm_from_locale_symbol ("stringbuf-inline"), 
+                   SCM_BOOL_T);
+  else
+    e9 = scm_cons (scm_from_locale_symbol ("stringbuf-inline"), 
+                   SCM_BOOL_F);
+  if (STRINGBUF_WIDE (buf))
+    e10 = scm_cons (scm_from_locale_symbol ("stringbuf-wide"),
+                    SCM_BOOL_T);
+  else
+    e10 = scm_cons (scm_from_locale_symbol ("stringbuf-wide"),
+                    SCM_BOOL_F);
+
+  return scm_list_n (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, SCM_UNDEFINED);
 }
 #undef FUNC_NAME
 
-SCM_DEFINE (scm_sys_symbol_dump, "%symbol-dump", 1, 0, 0, (SCM sym), "")
+SCM_DEFINE (scm_sys_symbol_dump, "%symbol-dump", 1, 0, 0, (SCM sym),
+            "Returns an association list containing debugging information\n"
+            "for @var{sym}. The association list has the following entries."
+            "@table @code\n"
+            "@item symbol\n"
+            "The symbol itself\n"
+            "@item hash\n"
+            "Its hash value\n"
+            "@item stringbuf\n"
+            "The string buffer that contains this symbol's characters\n"
+            "@item stringbuf-chars\n"
+            "A new string containing this symbols's stringbuf's characters\n"
+            "@item stringbuf-length\n"
+            "The number of characters in this stringbuf\n"
+            "@item stringbuf-shared\n"
+            "@code{#t} if this stringbuf is shared\n"
+            "@item stringbuf-inline\n"
+            "@code{#t} if this stringbuf's characters are stored in the\n"
+            "cell itself, or @code{#f} if they were allocated in memory\n"
+            "@item stringbuf-wide\n"
+            "@code{#t} if this stringbuf's characters are stored in a\n"
+            "32-bit buffer, or @code{#f} if they are stored in an 8-bit\n"
+            "buffer\n"
+            "@end table")
 #define FUNC_NAME s_scm_sys_symbol_dump
 {
+  SCM e1, e2, e3, e4, e5, e6, e7, e8;
+  SCM buf;
   SCM_VALIDATE_SYMBOL (1, sym);
-  fprintf (stderr, "%p:\n", sym);
-  fprintf (stderr, " hash: %lu\n", scm_i_symbol_hash (sym));
-  if (scm_i_is_narrow_symbol (sym))
-    fprintf (stderr, " format: narrow\n");
+  e1 = scm_cons (scm_from_locale_symbol ("symbol"),
+                 sym);
+  e2 = scm_cons (scm_from_locale_symbol ("hash"),
+                 scm_from_ulong (scm_i_symbol_hash (sym)));
+
+  buf = SYMBOL_STRINGBUF (sym);
+
+  /* Stringbuf info */
+  e3 = scm_cons (scm_from_locale_symbol ("stringbuf"),
+                 buf);
+  
+  if (!STRINGBUF_WIDE (buf))
+    {
+      size_t len = STRINGBUF_LENGTH (buf);
+      char *cbuf;
+      SCM sbc = scm_i_make_string (len, &cbuf);
+      memcpy (cbuf, STRINGBUF_CHARS (buf), len);
+      e4 = scm_cons (scm_from_locale_symbol ("stringbuf-chars"),
+                     sbc);
+    }
   else
-    fprintf (stderr, " format: wide\n");
-  {
-    SCM buf = SYMBOL_STRINGBUF (sym);
-    fprintf (stderr, " buf: %p\n", buf);
-    if (scm_i_is_narrow_symbol (sym))
-      fprintf (stderr, "  chars:  %p\n", STRINGBUF_CHARS (buf));
-    else
-      fprintf (stderr, "  chars:  %p\n", STRINGBUF_WIDE_CHARS (buf));
-    fprintf (stderr, "  length: %u\n", STRINGBUF_LENGTH (buf));
-    if (STRINGBUF_SHARED (buf))
-      fprintf (stderr, "  shared: true\n");
-    else
-      fprintf (stderr, "  shared: false\n");
-      
-  }
-  return SCM_UNSPECIFIED;
+    {
+      size_t len = STRINGBUF_LENGTH (buf);
+      scm_t_wchar *cbuf;
+      SCM sbc = scm_i_make_wide_string (len, &cbuf);
+      u32_cpy ((scm_t_uint32 *) cbuf, 
+               (scm_t_uint32 *) STRINGBUF_WIDE_CHARS (buf), len);
+      e4 = scm_cons (scm_from_locale_symbol ("stringbuf-chars"),
+                     sbc);
+    }
+  e5 = scm_cons (scm_from_locale_symbol ("stringbuf-length"), 
+                 scm_from_size_t (STRINGBUF_LENGTH (buf)));
+  if (STRINGBUF_SHARED (buf))
+    e6 = scm_cons (scm_from_locale_symbol ("stringbuf-shared"), 
+                   SCM_BOOL_T);
+  else
+    e6 = scm_cons (scm_from_locale_symbol ("stringbuf-shared"), 
+                   SCM_BOOL_F);
+  if (STRINGBUF_INLINE (buf))
+    e7 = scm_cons (scm_from_locale_symbol ("stringbuf-inline"), 
+                   SCM_BOOL_T);
+  else
+    e7 = scm_cons (scm_from_locale_symbol ("stringbuf-inline"), 
+                   SCM_BOOL_F);
+  if (STRINGBUF_WIDE (buf))
+    e8 = scm_cons (scm_from_locale_symbol ("stringbuf-wide"),
+                    SCM_BOOL_T);
+  else
+    e8 = scm_cons (scm_from_locale_symbol ("stringbuf-wide"),
+                    SCM_BOOL_F);
+  return scm_list_n (e1, e2, e3, e4, e5, e6, e7, e8, SCM_UNDEFINED);
+
 }
 #undef FUNC_NAME
 
+#if SCM_STRING_LENGTH_HISTOGRAM
+
 SCM_DEFINE (scm_sys_stringbuf_hist, "%stringbuf-hist", 0, 0, 0, (void), "")
 #define FUNC_NAME s_scm_sys_stringbuf_hist
 {
@@ -1358,6 +1515,8 @@ scm_from_locale_string (const char *str)
   return scm_from_locale_stringn (str, -1);
 }
 
+/* Create a new scheme string from the C string STR.  The memory of
+   STR may be used directly as storage for the new string.  */
 SCM
 scm_i_from_utf8_string (const scm_t_uint8 *str)
 {
diff --git a/libguile/strings.h b/libguile/strings.h
index a1f698a..e67ee2e 100644
--- a/libguile/strings.h
+++ b/libguile/strings.h
@@ -141,8 +141,8 @@ SCM_INTERNAL SCM scm_i_substring_shared (SCM str, size_t 
start, size_t end);
 SCM_INTERNAL SCM scm_i_substring_copy (SCM str, size_t start, size_t end);
 SCM_INTERNAL size_t scm_i_string_length (SCM str);
 SCM_API /* FIXME: not internal */ const char *scm_i_string_chars (SCM str);
-SCM_API const scm_t_wchar *scm_i_string_wide_chars (SCM str);
 SCM_API /* FIXME: not internal */ char *scm_i_string_writable_chars (SCM str);
+SCM_INTERNAL const scm_t_wchar *scm_i_string_wide_chars (SCM str);
 SCM_INTERNAL SCM scm_i_string_start_writing (SCM str);
 SCM_INTERNAL void scm_i_string_stop_writing (void);
 SCM_INTERNAL int scm_i_is_narrow_string (SCM str);
@@ -186,6 +186,14 @@ SCM_INTERNAL void scm_i_get_substring_spec (size_t len,
                                            SCM end, size_t *cend);
 SCM_INTERNAL SCM scm_i_take_stringbufn (char *str, size_t len);
 
+/* Debugging functions */
+
+SCM_API SCM scm_sys_string_dump (SCM);
+SCM_API SCM scm_sys_symbol_dump (SCM);
+#if SCM_STRING_LENGTH_HISTOGRAM
+SCM_API SCM scm_sys_stringbuf_hist (void);
+#endif
+
 /* deprecated stuff */
 
 #if SCM_ENABLE_DEPRECATED
diff --git a/m4/gnulib-cache.m4 b/m4/gnulib-cache.m4
index 7f64af2..930cce6 100644
--- a/m4/gnulib-cache.m4
+++ b/m4/gnulib-cache.m4
@@ -15,7 +15,7 @@
 
 
 # Specification in the form of a command-line invocation:
-#   gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 
--doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl --libtool 
--macro-prefix=gl --no-vc-files alloca-opt autobuild byteswap canonicalize-lgpl 
count-one-bits environ extensions flock fpieee full-read full-write havelib 
iconv_open-utf lib-symbol-visibility libunistring putenv stdlib strcase 
strftime striconveh string verify vsnprintf
+#   gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 
--doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl --libtool 
--macro-prefix=gl --no-vc-files alloca-opt autobuild byteswap canonicalize-lgpl 
count-one-bits environ extensions flock fpieee full-read full-write havelib 
iconv_open-utf lib-symbol-versions lib-symbol-visibility libunistring putenv 
stdlib strcase strftime striconveh string verify vsnprintf
 
 # Specification in the form of a few gnulib-tool.m4 macro invocations:
 gl_LOCAL_DIR([])
@@ -33,6 +33,7 @@ gl_MODULES([
   full-write
   havelib
   iconv_open-utf
+  lib-symbol-versions
   lib-symbol-visibility
   libunistring
   putenv
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
index 0c2b968..00b3f3f 100644
--- a/m4/gnulib-comp.m4
+++ b/m4/gnulib-comp.m4
@@ -15,7 +15,7 @@
 # In projects using CVS, this file can be treated like other built files.
 
 
-# This macro should be invoked from ./configure.in, in the section
+# This macro should be invoked from ./configure.ac, in the section
 # "Checks for programs", right after AC_PROG_CC, and certainly before
 # any checks for libraries, header files, types and library functions.
 AC_DEFUN([gl_EARLY],
@@ -31,7 +31,7 @@ AC_DEFUN([gl_EARLY],
   AC_REQUIRE([gl_FP_IEEE])
 ])
 
-# This macro should be invoked from ./configure.in, in the section
+# This macro should be invoked from ./configure.ac, in the section
 # "Check for header files, types and library functions".
 AC_DEFUN([gl_INIT],
 [
@@ -62,6 +62,7 @@ AC_DEFUN([gl_INIT],
   gl_FUNC_ICONV_OPEN
   gl_FUNC_ICONV_OPEN_UTF
   gl_INLINE
+  gl_LD_VERSION_SCRIPT
   gl_VISIBILITY
   gl_LIBUNISTRING
   gl_LOCALCHARSET
@@ -361,6 +362,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/inline.m4
   m4/intmax_t.m4
   m4/inttypes_h.m4
+  m4/ld-version-script.m4
   m4/lib-ld.m4
   m4/lib-link.m4
   m4/lib-prefix.m4
diff --git a/m4/iconv.m4 b/m4/iconv.m4
index 3cc6268..ce21b0b 100644
--- a/m4/iconv.m4
+++ b/m4/iconv.m4
@@ -1,4 +1,4 @@
-# iconv.m4 serial AM7 (gettext-0.18)
+# iconv.m4 serial AM8 (gettext-0.18)
 dnl Copyright (C) 2000-2002, 2007-2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -172,8 +172,8 @@ size_t iconv();
 ], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, 
$am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, 
size_t *outbytesleft);"])
     am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( 
/(/'`
-    AC_MSG_RESULT([${ac_t:-
-         }$am_cv_proto_iconv])
+    AC_MSG_RESULT([
+         $am_cv_proto_iconv])
     AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
       [Define as const if the declaration of iconv() needs const.])
   fi
diff --git a/m4/ld-version-script.m4 b/m4/ld-version-script.m4
new file mode 100644
index 0000000..a97888f
--- /dev/null
+++ b/m4/ld-version-script.m4
@@ -0,0 +1,44 @@
+# ld-version-script.m4 serial 1
+dnl Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# FIXME: The test below returns a false positive for mingw
+# cross-compiles, 'local:' statements does not reduce number of
+# exported symbols in a DLL.  Use --disable-ld-version-script to work
+# around the problem.
+
+# gl_LD_VERSION_SCRIPT
+# --------------------
+# Check if LD supports linker scripts, and define automake conditional
+# HAVE_LD_VERSION_SCRIPT if so.
+AC_DEFUN([gl_LD_VERSION_SCRIPT],
+[
+  AC_ARG_ENABLE([ld-version-script],
+    AS_HELP_STRING([--enable-ld-version-script],
+      [enable linker version script (default is enabled when possible)]),
+      [have_ld_version_script=$enableval], [])
+  if test -z "$have_ld_version_script"; then
+    AC_MSG_CHECKING([if LD -Wl,--version-script works])
+    save_LDFLAGS="$LDFLAGS"
+    LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
+    cat > conftest.map <<EOF
+VERS_1 {
+       global: sym;
+};
+
+VERS_2 {
+        global: sym;
+} VERS_1;
+EOF
+    AC_LINK_IFELSE(AC_LANG_PROGRAM([], []),
+                   [have_ld_version_script=yes], [have_ld_version_script=no])
+    rm -f conftest.map
+    LDFLAGS="$save_LDFLAGS"
+    AC_MSG_RESULT($have_ld_version_script)
+  fi
+  AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = 
"yes")
+])
diff --git a/m4/time_h.m4 b/m4/time_h.m4
index d42a635..16fefa1 100644
--- a/m4/time_h.m4
+++ b/m4/time_h.m4
@@ -1,7 +1,6 @@
 # Configure a more-standard replacement for <time.h>.
 
-# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007 Free Software
-# Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -30,6 +29,7 @@ AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS],
   dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK;
   dnl this lets maintainers check for portability.
   REPLACE_LOCALTIME_R=GNULIB_PORTCHECK;  AC_SUBST([REPLACE_LOCALTIME_R])
+  REPLACE_MKTIME=GNULIB_PORTCHECK;       AC_SUBST([REPLACE_MKTIME])
   REPLACE_NANOSLEEP=GNULIB_PORTCHECK;    AC_SUBST([REPLACE_NANOSLEEP])
   REPLACE_STRPTIME=GNULIB_PORTCHECK;     AC_SUBST([REPLACE_STRPTIME])
   REPLACE_TIMEGM=GNULIB_PORTCHECK;       AC_SUBST([REPLACE_TIMEGM])
diff --git a/m4/unistd_h.m4 b/m4/unistd_h.m4
index ff9a4ea..96fddba 100644
--- a/m4/unistd_h.m4
+++ b/m4/unistd_h.m4
@@ -1,4 +1,4 @@
-# unistd_h.m4 serial 17
+# unistd_h.m4 serial 18
 dnl Copyright (C) 2006-2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -73,6 +73,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
   HAVE_SYS_PARAM_H=0;     AC_SUBST([HAVE_SYS_PARAM_H])
   REPLACE_CHOWN=0;        AC_SUBST([REPLACE_CHOWN])
   REPLACE_CLOSE=0;        AC_SUBST([REPLACE_CLOSE])
+  REPLACE_DUP2=0;         AC_SUBST([REPLACE_DUP2])
   REPLACE_FCHDIR=0;       AC_SUBST([REPLACE_FCHDIR])
   REPLACE_GETCWD=0;       AC_SUBST([REPLACE_GETCWD])
   REPLACE_GETPAGESIZE=0;  AC_SUBST([REPLACE_GETPAGESIZE])


hooks/post-receive
-- 
GNU Guile




reply via email to

[Prev in Thread] Current Thread [Next in Thread]