Fix typos.
[gnulib.git] / gnulib-tool
index ceba3dc..1f7f187 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 #
-# Copyright (C) 2002-2006 Free Software Foundation, Inc.
+# Copyright (C) 2002-2007 Free Software Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -22,7 +22,7 @@
 
 progname=$0
 package=gnulib
-cvsdatestamp='$Date: 2006-12-22 12:49:38 $'
+cvsdatestamp='$Date: 2007-03-17 16:27:48 $'
 last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'`
 version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'`
 nl='
@@ -66,20 +66,13 @@ if test -z "${AUTOPOINT}" || test -n "${GETTEXTPATH}"; then
   AUTOPOINT="${GETTEXTPATH}autopoint"
 fi
 
-# GNU sort is needed. Set SORT to its location (not needed if it's called
-# 'sort' and already in the PATH).
-if test -z "$SORT"; then
-  SORT=sort
-fi
-
-# A sed program is needed. When using GNU sed, turn off a maximum of GNU
-# extensions, to minimize the risk of accidentally using non-portable features
-# of GNU sed.
-if test -z "$SED"; then
-  SED=sed
-fi
-if echo | $SED --posix d >/dev/null 2>&1; then
-  SED="$SED --posix"
+# When using GNU sed, turn off as many GNU extensions as possible,
+# to minimize the risk of accidentally using non-portable features.
+# However, do this only for gnulib-tool itself, not for the code that
+# gnulib-tool generates, since we don't want "sed --posix" to leak
+# into makefiles.
+if (alias) > /dev/null 2>&1 && echo | sed --posix -e d >/dev/null 2>&1; then
+  alias sed='sed --posix'
 fi
 
 # func_usage
@@ -100,6 +93,7 @@ Usage: gnulib-tool --list
        gnulib-tool --extract-autoconf-snippet module
        gnulib-tool --extract-automake-snippet module
        gnulib-tool --extract-include-directive module
+       gnulib-tool --extract-link-directive module
        gnulib-tool --extract-license module
        gnulib-tool --extract-maintainer module
        gnulib-tool --extract-tests-module module
@@ -124,6 +118,7 @@ Operation modes:
       --extract-autoconf-snippet   extract the snippet for configure.ac
       --extract-automake-snippet   extract the snippet for library makefile
       --extract-include-directive  extract the #include directive
+      --extract-link-directive     extract the linker directive
       --extract-license            report the license terms of the source files
                                    under lib/
       --extract-maintainer         report the maintainer(s) inside gnulib
@@ -179,7 +174,7 @@ Report bugs to <bug-gnulib@gnu.org>."
 # outputs to stdout the --version message.
 func_version ()
 {
-  year=`echo "$last_checkin_date" | $SED -e 's,/.*$,,'`
+  year=`echo "$last_checkin_date" | sed -e 's,/.*$,,'`
   echo "\
 $progname (GNU $package) $version
 Copyright (C) $year Free Software Foundation, Inc.
@@ -192,7 +187,7 @@ Written by" "Bruno Haible" "and" "Simon Josefsson"
 # outputs to stdout a header for a generated file.
 func_emit_copyright_notice ()
 {
-  echo "# Copyright (C) 2004-2006 Free Software Foundation, Inc."
+  echo "# Copyright (C) 2004-2007 Free Software Foundation, Inc."
   echo "#"
   echo "# This file is free software, distributed under the terms of the GNU"
   echo "# General Public License.  As a special exception to the GNU General"
@@ -279,7 +274,7 @@ else
   {
     # Use two sed invocations. A single sed -n -e 's,^.* -> \(.*\)$,\1,p'
     # would do the wrong thing if the link target contains " -> ".
-    LC_ALL=C ls -l "$1" | $SED -e 's, -> ,#%%#,' | $SED -n -e 's,^.*#%%#\(.*\)$,\1,p'
+    LC_ALL=C ls -l "$1" | sed -e 's, -> ,#%%#,' | sed -n -e 's,^.*#%%#\(.*\)$,\1,p'
   }
 fi
 
@@ -300,22 +295,22 @@ func_relativize ()
   sed_last='s,^.*/\([^/]*\)$,\1,'
   sed_butlast='s,/*[^/]*$,,'
   while test -n "$dir1"; do
-    first=`echo "$dir1" | $SED -e "$sed_first"`
+    first=`echo "$dir1" | sed -e "$sed_first"`
     if test "$first" != "."; then
       if test "$first" = ".."; then
-        dir2=`echo "$dir0" | $SED -e "$sed_last"`/"$dir2"
-        dir0=`echo "$dir0" | $SED -e "$sed_butlast"`
+        dir2=`echo "$dir0" | sed -e "$sed_last"`/"$dir2"
+        dir0=`echo "$dir0" | sed -e "$sed_butlast"`
       else
-        first2=`echo "$dir2" | $SED -e "$sed_first"`
+        first2=`echo "$dir2" | sed -e "$sed_first"`
         if test "$first2" = "$first"; then
-          dir2=`echo "$dir2" | $SED -e "$sed_rest"`
+          dir2=`echo "$dir2" | sed -e "$sed_rest"`
         else
           dir2="../$dir2"
         fi
         dir0="$dir0"/"$first"
       fi
     fi
-    dir1=`echo "$dir1" | $SED -e "$sed_rest"`
+    dir1=`echo "$dir1" | sed -e "$sed_rest"`
   done
   reldir="$dir2"
 }
@@ -336,18 +331,18 @@ func_relconcat ()
   sed_last='s,^.*/\([^/]*\)$,\1,'
   sed_butlast='s,/*[^/]*$,,'
   while true; do
-    first=`echo "$dir2" | $SED -e "$sed_first"`
+    first=`echo "$dir2" | sed -e "$sed_first"`
     if test "$first" = "."; then
-      dir2=`echo "$dir2" | $SED -e "$sed_rest"`
+      dir2=`echo "$dir2" | sed -e "$sed_rest"`
       if test -z "$dir2"; then
         relconcat="$dir1"
         break
       fi
     else
-      last=`echo "$dir1" | $SED -e "$sed_last"`
+      last=`echo "$dir1" | sed -e "$sed_last"`
       while test "$last" = "."; do
-        dir1=`echo "$dir1" | $SED -e "$sed_butlast"`
-        last=`echo "$dir1" | $SED -e "$sed_last"`
+        dir1=`echo "$dir1" | sed -e "$sed_butlast"`
+        last=`echo "$dir1" | sed -e "$sed_last"`
       done
       if test -z "$dir1"; then
         relconcat="$dir2"
@@ -358,8 +353,8 @@ func_relconcat ()
           relconcat="$dir1/$dir2"
           break
         fi
-        dir1=`echo "$dir1" | $SED -e "$sed_butlast"`
-        dir2=`echo "$dir2" | $SED -e "$sed_rest"`
+        dir1=`echo "$dir1" | sed -e "$sed_butlast"`
+        dir2=`echo "$dir2" | sed -e "$sed_rest"`
         if test -z "$dir1"; then
           relconcat="$dir2"
           break
@@ -389,7 +384,7 @@ func_ln ()
         /*)
           ln -s "`pwd`/$1" "$2" ;;
         *) # DEST is relative too.
-          ln_destdir=`echo "$2" | $SED -e 's,[^/]*$,,'`
+          ln_destdir=`echo "$2" | sed -e 's,[^/]*$,,'`
           test -n "$ln_destdir" || ln_destdir="."
           func_relativize "$ln_destdir" "$1"
           ln -s "$reldir" "$2"
@@ -486,7 +481,7 @@ func_ln_if_changed ()
         mode=megatest
         shift ;;
       --extract-* )
-        mode=`echo "X$1" | $SED -e 's/^X--//'`
+        mode=`echo "X$1" | sed -e 's/^X--//'`
         shift ;;
       --dir )
         shift
@@ -496,7 +491,7 @@ func_ln_if_changed ()
         destdir=$1
         shift ;;
       --dir=* )
-        destdir=`echo "X$1" | $SED -e 's/^X--dir=//'`
+        destdir=`echo "X$1" | sed -e 's/^X--dir=//'`
         shift ;;
       --local-dir )
         shift
@@ -506,7 +501,7 @@ func_ln_if_changed ()
         local_gnulib_dir=$1
         shift ;;
       --local-dir=* )
-        local_gnulib_dir=`echo "X$1" | $SED -e 's/^X--local-dir=//'`
+        local_gnulib_dir=`echo "X$1" | sed -e 's/^X--local-dir=//'`
         shift ;;
       --lib )
         shift
@@ -517,7 +512,7 @@ func_ln_if_changed ()
         supplied_libname=true
         shift ;;
       --lib=* )
-        libname=`echo "X$1" | $SED -e 's/^X--lib=//'`
+        libname=`echo "X$1" | sed -e 's/^X--lib=//'`
         supplied_libname=true
         shift ;;
       --source-base )
@@ -528,7 +523,7 @@ func_ln_if_changed ()
         sourcebase=$1
         shift ;;
       --source-base=* )
-        sourcebase=`echo "X$1" | $SED -e 's/^X--source-base=//'`
+        sourcebase=`echo "X$1" | sed -e 's/^X--source-base=//'`
         shift ;;
       --m4-base )
         shift
@@ -538,7 +533,7 @@ func_ln_if_changed ()
         m4base=$1
         shift ;;
       --m4-base=* )
-        m4base=`echo "X$1" | $SED -e 's/^X--m4-base=//'`
+        m4base=`echo "X$1" | sed -e 's/^X--m4-base=//'`
         shift ;;
       --doc-base )
         shift
@@ -548,7 +543,7 @@ func_ln_if_changed ()
         docbase=$1
         shift ;;
       --doc-base=* )
-        docbase=`echo "X$1" | $SED -e 's/^X--doc-base=//'`
+        docbase=`echo "X$1" | sed -e 's/^X--doc-base=//'`
         shift ;;
       --tests-base )
         shift
@@ -558,7 +553,7 @@ func_ln_if_changed ()
         testsbase=$1
         shift ;;
       --tests-base=* )
-        testsbase=`echo "X$1" | $SED -e 's/^X--tests-base=//'`
+        testsbase=`echo "X$1" | sed -e 's/^X--tests-base=//'`
         shift ;;
       --aux-dir )
         shift
@@ -568,7 +563,7 @@ func_ln_if_changed ()
         auxdir=$1
         shift ;;
       --aux-dir=* )
-        auxdir=`echo "X$1" | $SED -e 's/^X--aux-dir=//'`
+        auxdir=`echo "X$1" | sed -e 's/^X--aux-dir=//'`
         shift ;;
       --with-tests )
         inctests=true
@@ -581,7 +576,7 @@ func_ln_if_changed ()
         func_append avoidlist " $1"
         shift ;;
       --avoid=* )
-        arg=`echo "X$1" | $SED -e 's/^X--avoid=//'`
+        arg=`echo "X$1" | sed -e 's/^X--avoid=//'`
         func_append avoidlist " $arg"
         shift ;;
       --lgpl )
@@ -595,7 +590,7 @@ func_ln_if_changed ()
         makefile_name="$1"
         shift ;;
       --makefile-name=* )
-        makefile_name=`echo "X$1" | $SED -e 's/^X--makefile-name=//'`
+        makefile_name=`echo "X$1" | sed -e 's/^X--makefile-name=//'`
         shift ;;
       --libtool )
         libtool=true
@@ -611,7 +606,7 @@ func_ln_if_changed ()
         macro_prefix="$1"
         shift ;;
       --macro-prefix=* )
-        macro_prefix=`echo "X$1" | $SED -e 's/^X--macro-prefix=//'`
+        macro_prefix=`echo "X$1" | sed -e 's/^X--macro-prefix=//'`
         shift ;;
       --no-changelog | --no-changelo | --no-changel | --no-change | --no-chang | --no-chan | --no-cha | --no-ch | --no-c )
         do_changelog=false
@@ -700,11 +695,14 @@ func_ln_if_changed ()
       s,^dnl .*$,,
       s, dnl .*$,,
       /AC_PREREQ/ {
-        s,^.*AC_PREREQ([[ ]*\([^])]*\).*$,prereqs="$prereqs \1",p
+        s,^.*AC_PREREQ([[ ]*\([^])]*\).*$,\1,p
       }'
-    eval `$SED -n -e "$my_sed_traces" < "$configure_ac"`
+    prereqs=`sed -n -e "$my_sed_traces" < "$configure_ac"`
     if test -n "$prereqs"; then
-      autoconf_minversion=`for version in $prereqs; do echo $version; done | $SORT -g -u | tail -1`
+      autoconf_minversion=`
+        for version in $prereqs; do echo $version; done |
+        LC_ALL=C sort -nru | sed 1q
+      `
     fi
   fi
   if test -z "$autoconf_minversion"; then
@@ -719,29 +717,29 @@ func_ln_if_changed ()
   # m4base (to avoid an error in func_import) and optional for the others.
   sed_trimtrailingslashes='s,\([^/]\)//*$,\1,'
   case "$local_gnulib_dir" in
-    */ ) local_gnulib_dir=`echo "$local_gnulib_dir" | $SED -e "$sed_trimtrailingslashes"` ;;
+    */ ) local_gnulib_dir=`echo "$local_gnulib_dir" | sed -e "$sed_trimtrailingslashes"` ;;
   esac
   case "$sourcebase" in
-    */ ) sourcebase=`echo "$sourcebase" | $SED -e "$sed_trimtrailingslashes"` ;;
+    */ ) sourcebase=`echo "$sourcebase" | sed -e "$sed_trimtrailingslashes"` ;;
   esac
   case "$m4base" in
-    */ ) m4base=`echo "$m4base" | $SED -e "$sed_trimtrailingslashes"` ;;
+    */ ) m4base=`echo "$m4base" | sed -e "$sed_trimtrailingslashes"` ;;
   esac
   case "$docbase" in
-    */ ) docbase=`echo "$docbase" | $SED -e "$sed_trimtrailingslashes"` ;;
+    */ ) docbase=`echo "$docbase" | sed -e "$sed_trimtrailingslashes"` ;;
   esac
   case "$testsbase" in
-    */ ) testsbase=`echo "$testsbase" | $SED -e "$sed_trimtrailingslashes"` ;;
+    */ ) testsbase=`echo "$testsbase" | sed -e "$sed_trimtrailingslashes"` ;;
   esac
   case "$auxdir" in
-    */ ) auxdir=`echo "$auxdir" | $SED -e "$sed_trimtrailingslashes"` ;;
+    */ ) auxdir=`echo "$auxdir" | sed -e "$sed_trimtrailingslashes"` ;;
   esac
 }
 
 case "$0" in
   /*) self_abspathname="$0" ;;
   */*) self_abspathname=`pwd`/"$0" ;;
-  *) for d in `echo ":$PATH:" | $SED -e 's/:::*/:.:/g' | $SED -e 's/:/ /g'`; do
+  *) for d in `echo ":$PATH:" | sed -e 's/:::*/:.:/g' | sed -e 's/:/ /g'`; do
        if test -x "$d/$0" && test ! -d "$d/$0"; then
          self_abspathname="$d/$0"
          break
@@ -758,10 +756,10 @@ while test -h "$self_abspathname"; do
   test -n "$linkval" || break
   case "$linkval" in
     /* ) self_abspathname="$linkval" ;;
-    * ) self_abspathname=`echo "$self_abspathname" | $SED -e 's,/[^/]*$,,'`/"$linkval" ;;
+    * ) self_abspathname=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`/"$linkval" ;;
   esac
 done
-gnulib_dir=`echo "$self_abspathname" | $SED -e 's,/[^/]*$,,'`
+gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`
 
 func_tmpdir
 trap 'exit_status=$?
@@ -792,7 +790,7 @@ func_lookup_file ()
   else
     if test -f "$gnulib_dir/$lkfile"; then
       if test -n "$local_gnulib_dir" && test -f "$local_gnulib_dir/$lkfile.diff"; then
-        lkbase=`echo "$lkfile" | $SED -e 's,^.*/,,'`
+        lkbase=`echo "$lkfile" | sed -e 's,^.*/,,'`
         rm -f "$tmp/$lkbase"
         cp "$gnulib_dir/$lkfile" "$tmp/$lkbase"
         patch -s "$tmp/$lkbase" < "$local_gnulib_dir/$lkfile.diff" \
@@ -818,13 +816,20 @@ func_all_modules ()
   # Filter out unit test modules; they can be retrieved through
   # --extract-tests-module if desired.
   {
-    (cd "$gnulib_dir/modules" && ls -1)
+    (cd "$gnulib_dir" && find modules -type f -print | sed -e 's,^modules/,,')
     if test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules"; then
-      (cd "$local_gnulib_dir/modules" && ls -1 | $SED -e 's,\.diff$,,')
+      (cd "$local_gnulib_dir" && find modules -type f -print | sed -e 's,^modules/,,' -e 's,\.diff$,,')
     fi
   } \
-      | $SED -e '/^CVS$/d' -e '/^ChangeLog$/d' -e '/^COPYING$/d' -e '/^README$/d' -e '/^TEMPLATE$/d' -e '/^TEMPLATE-TESTS$/d' -e '/~$/d' \
-      | $SED -e '/-tests$/d' \
+      | sed -e '/^CVS\//d' -e '/\/CVS\//d' \
+            -e '/^ChangeLog$/d' -e '/\/ChangeLog$/d' \
+            -e '/^COPYING$/d' -e '/\/COPYING$/d' \
+            -e '/^README$/d' -e '/\/README$/d' \
+            -e '/^TEMPLATE$/d' \
+            -e '/^TEMPLATE-TESTS$/d' \
+            -e '/^\..*/d' \
+            -e '/~$/d' \
+      | sed -e '/-tests$/d' \
       | LC_ALL=C sort -u
 }
 
@@ -885,9 +890,11 @@ sed_extract_prog=':[        ]*$/ {
     s/^Description:[    ]*$//
     s/^Files:[  ]*$//
     s/^Depends-on:[     ]*$//
+    s/^configure\.ac-early:[    ]*$//
     s/^configure\.ac:[  ]*$//
     s/^Makefile\.am:[   ]*$//
     s/^Include:[        ]*$//
+    s/^Link:[   ]*$//
     s/^License:[        ]*$//
     s/^Maintainer:[     ]*$//
     tb
@@ -902,7 +909,7 @@ sed_extract_prog=':[         ]*$/ {
 func_get_description ()
 {
   func_lookup_file "modules/$1"
-  $SED -n -e "/^Description$sed_extract_prog" < "$lookedup_file"
+  sed -n -e "/^Description$sed_extract_prog" < "$lookedup_file"
 }
 
 # func_get_filelist module
@@ -911,7 +918,8 @@ func_get_description ()
 func_get_filelist ()
 {
   func_lookup_file "modules/$1"
-  $SED -n -e "/^Files$sed_extract_prog" < "$lookedup_file"
+  sed -n -e "/^Files$sed_extract_prog" < "$lookedup_file"
+  echo m4/gnulib-common.m4
   case "$autoconf_minversion" in
     2.59)
       #echo m4/onceonly.m4
@@ -926,10 +934,19 @@ func_get_filelist ()
 func_get_dependencies ()
 {
   # ${module}-tests always implicitly depends on ${module}.
-  echo "$1" | $SED -n -e 's/-tests//p'
+  echo "$1" | sed -n -e 's/-tests//p'
   # Then the explicit dependencies listed in the module description.
   func_lookup_file "modules/$1"
-  $SED -n -e "/^Depends-on$sed_extract_prog" < "$lookedup_file"
+  sed -n -e "/^Depends-on$sed_extract_prog" < "$lookedup_file"
+}
+
+# func_get_autoconf_early_snippet module
+# Input:
+# - local_gnulib_dir  from --local-dir
+func_get_autoconf_early_snippet ()
+{
+  func_lookup_file "modules/$1"
+  sed -n -e "/^configure\.ac-early$sed_extract_prog" < "$lookedup_file"
 }
 
 # func_get_autoconf_snippet module
@@ -938,7 +955,7 @@ func_get_dependencies ()
 func_get_autoconf_snippet ()
 {
   func_lookup_file "modules/$1"
-  $SED -n -e "/^configure\.ac$sed_extract_prog" < "$lookedup_file"
+  sed -n -e "/^configure\.ac$sed_extract_prog" < "$lookedup_file"
 }
 
 # func_get_automake_snippet module
@@ -947,7 +964,7 @@ func_get_autoconf_snippet ()
 func_get_automake_snippet ()
 {
   func_lookup_file "modules/$1"
-  $SED -n -e "/^Makefile\.am$sed_extract_prog" < "$lookedup_file"
+  sed -n -e "/^Makefile\.am$sed_extract_prog" < "$lookedup_file"
   case "$1" in
     *-tests)
       # *-tests module live in tests/, not lib/.
@@ -961,17 +978,17 @@ func_get_automake_snippet ()
         s/\\$/\\/
         ta
       }'
-      sed_extract_mentioned_files='s/^lib_SOURCES[     ]*+=[   ]*//p'
+      sed_extract_mentioned_files='s/^lib_SOURCES[      ]*+=[   ]*//p'
       already_mentioned_files=` \
-        $SED -n -e "/^Makefile\.am$sed_extract_prog" < "$lookedup_file" \
-        | $SED -e "$sed_combine_lines" \
-        | $SED -n -e "$sed_extract_mentioned_files" | $SED -e 's/#.*//'`
+        sed -n -e "/^Makefile\.am$sed_extract_prog" < "$lookedup_file" \
+        | sed -e "$sed_combine_lines" \
+        | sed -n -e "$sed_extract_mentioned_files" | sed -e 's/#.*//'`
       all_files=`func_get_filelist $1`
       lib_files=`for f in $all_files; do \
                    case $f in \
                      lib/*) echo $f ;; \
                    esac; \
-                 done | $SED -e 's,^lib/,,'`
+                 done | sed -e 's,^lib/,,'`
       # Remove $already_mentioned_files from $lib_files.
       echo "$lib_files" | LC_ALL=C sort -u > "$tmp"/lib-files
       extra_files=`for f in $already_mentioned_files; do echo $f; done \
@@ -991,12 +1008,17 @@ func_get_automake_snippet ()
       # If some .c file exists and is not used with AC_LIBOBJ - for example,
       # a .c file is preprocessed into another .c file for BUILT_SOURCES -,
       # automake will generate a useless dependency; this is harmless.
-      sed_extract_c_files='/\.c$/p'
-      extra_files=`echo "$extra_files" | $SED -n -e "$sed_extract_c_files"`
-      if test -n "$extra_files"; then
-        echo "EXTRA_lib_SOURCES +=" $extra_files
-        echo
-      fi
+      case "$1" in
+        relocatable-prog-wrapper) ;;
+        *)
+          sed_extract_c_files='/\.c$/p'
+          extra_files=`echo "$extra_files" | sed -n -e "$sed_extract_c_files"`
+          if test -n "$extra_files"; then
+            echo "EXTRA_lib_SOURCES +=" $extra_files
+            echo
+          fi
+          ;;
+      esac
       ;;
   esac
 }
@@ -1007,8 +1029,17 @@ func_get_automake_snippet ()
 func_get_include_directive ()
 {
   func_lookup_file "modules/$1"
-  $SED -n -e "/^Include$sed_extract_prog" < "$lookedup_file" | \
-  $SED -e 's/^\(["<]\)/#include \1/'
+  sed -n -e "/^Include$sed_extract_prog" < "$lookedup_file" | \
+  sed -e 's/^\(["<]\)/#include \1/'
+}
+
+# func_get_link_directive module
+# Input:
+# - local_gnulib_dir  from --local-dir
+func_get_link_directive ()
+{
+  func_lookup_file "modules/$1"
+  sed -n -e "/^Link$sed_extract_prog" < "$lookedup_file"
 }
 
 # func_get_license module
@@ -1017,7 +1048,10 @@ func_get_include_directive ()
 func_get_license ()
 {
   func_lookup_file "modules/$1"
-  $SED -n -e "/^License$sed_extract_prog" < "$lookedup_file"
+  { sed -n -e "/^License$sed_extract_prog" < "$lookedup_file"
+    # The default is GPL.
+    echo "GPL"
+  } | sed -e 's,^ *$,,' | sed -e 1q
 }
 
 # func_get_maintainer module
@@ -1026,7 +1060,7 @@ func_get_license ()
 func_get_maintainer ()
 {
   func_lookup_file "modules/$1"
-  $SED -n -e "/^Maintainer$sed_extract_prog" < "$lookedup_file"
+  sed -n -e "/^Maintainer$sed_extract_prog" < "$lookedup_file"
 }
 
 # func_get_tests_module module
@@ -1128,7 +1162,7 @@ ba
     func_verify_nontests_module
     if test -n "$module"; then
       # Extract the value of "lib_SOURCES += ...".
-      for file in `func_get_automake_snippet "$module" | $SED -e "$sed_remove_backslash_newline" | $SED -n -e 's,^lib_SOURCES[  ]*+=\([^#]*\).*$,\1,p'`; do
+      for file in `func_get_automake_snippet "$module" | sed -e "$sed_remove_backslash_newline" | sed -n -e 's,^lib_SOURCES[    ]*+=\([^#]*\).*$,\1,p'`; do
         # Ignore .h files since they are not compiled.
         case "$file" in
           *.h) ;;
@@ -1173,6 +1207,7 @@ func_modules_to_filelist ()
 # - libtool         true if libtool will be used, false or blank otherwise
 # - macro_prefix    prefix of gl_LIBOBJS macros to use
 # - actioncmd       (optional) command that will reproduce this invocation
+# - for_test        true if creating a package for testing, false otherwise
 # Output:
 # - uses_subdirs    nonempty if object files in subdirs exist
 func_emit_lib_Makefile_am ()
@@ -1193,6 +1228,15 @@ func_emit_lib_Makefile_am ()
     perhapsLT=
     sed_eliminate_LDFLAGS='/^lib_LDFLAGS[       ]*+=/d'
   fi
+  if $for_test; then
+    # When creating a package for testing: Attempt to provoke failures,
+    # especially link errors, already during "make" rather than during
+    # "make check", because "make check" is not possible in a cross-compiling
+    # situation. Turn check_PROGRAMS into noinst_PROGRAMS.
+    sed_transform_check_PROGRAMS='s,check_PROGRAMS,noinst_PROGRAMS,g'
+  else
+    sed_transform_check_PROGRAMS=
+  fi
   echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!"
   echo "## Process this file with automake to produce Makefile.in."
   func_emit_copyright_notice
@@ -1207,12 +1251,13 @@ func_emit_lib_Makefile_am ()
       if test -n "$module"; then
         {
           func_get_automake_snippet "$module" |
-            $SED -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \
-                 -e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' |
-            $SED -e "$sed_eliminate_LDFLAGS" |
-            $SED -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' |
-            $SED -e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
-                 -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g'
+            sed -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \
+                -e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' |
+            sed -e "$sed_eliminate_LDFLAGS" |
+            sed -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' |
+            sed -e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
+                -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' |
+            sed -e "$sed_transform_check_PROGRAMS"
           if test "$module" = 'alloca'; then
             echo "${libname}_${libext}_LIBADD += @${perhapsLT}ALLOCA@"
             echo "${libname}_${libext}_DEPENDENCIES += @${perhapsLT}ALLOCA@"
@@ -1269,7 +1314,7 @@ func_emit_lib_Makefile_am ()
     echo "AM_CPPFLAGS ="
   fi
   echo
-  if grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *= *$libname\\.$libext\$" allsnippets.tmp > /dev/null; then
+  if LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *= *$libname\\.$libext\$" allsnippets.tmp > /dev/null; then
     # One of the snippets already specifies an installation location for the
     # library. Don't confuse automake by saying it should not be installed.
     :
@@ -1289,7 +1334,7 @@ func_emit_lib_Makefile_am ()
   fi
   echo
   cat allsnippets.tmp \
-    | $SED -e 's|\$(top_srcdir)/build-aux/|$(top_srcdir)/'"$auxdir"'/|g'
+    | sed -e 's|\$(top_srcdir)/build-aux/|$(top_srcdir)/'"$auxdir"'/|g'
   echo
   echo "mostlyclean-local: mostlyclean-generic"
   echo "       @for dir in '' \$(MOSTLYCLEANDIRS); do \\"
@@ -1311,6 +1356,7 @@ func_emit_lib_Makefile_am ()
 # - sourcebase      relative directory containing lib source code
 # - m4base          relative directory containing autoconf macros
 # - testsbase       relative directory containing unit test code
+# - for_test        true if creating a package for testing, false otherwise
 func_emit_tests_Makefile_am ()
 {
   if test "$libtool" = true; then
@@ -1325,7 +1371,16 @@ func_emit_tests_Makefile_am ()
     libext=a
     sed_eliminate_LDFLAGS='/^lib_LDFLAGS[       ]*+=/d'
   fi
-  testsbase_inverse=`echo "$testsbase" | $SED -e 's,/$,,' | $SED -e 's,[^/][^/]*,..,g'`
+  if $for_test; then
+    # When creating a package for testing: Attempt to provoke failures,
+    # especially link errors, already during "make" rather than during
+    # "make check", because "make check" is not possible in a cross-compiling
+    # situation. Turn check_PROGRAMS into noinst_PROGRAMS.
+    sed_transform_check_PROGRAMS='s,check_PROGRAMS,noinst_PROGRAMS,g'
+  else
+    sed_transform_check_PROGRAMS=
+  fi
+  testsbase_inverse=`echo "$testsbase" | sed -e 's,/$,,' | sed -e 's,[^/][^/]*,..,g'`
   echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!"
   echo "## Process this file with automake to produce Makefile.in."
   func_emit_copyright_notice
@@ -1341,12 +1396,13 @@ func_emit_tests_Makefile_am ()
       if test -n "$module"; then
         {
           func_get_automake_snippet "$module" |
-            $SED -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \
-                 -e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' |
-            $SED -e "$sed_eliminate_LDFLAGS" |
-            $SED -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' |
-            $SED -e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
-                 -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g'
+            sed -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \
+                -e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' |
+            sed -e "$sed_eliminate_LDFLAGS" |
+            sed -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' |
+            sed -e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
+                -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' |
+            sed -e "$sed_transform_check_PROGRAMS"
         } > amsnippet.tmp
         # Skip the contents if its entirely empty.
         if grep '[^     ]' amsnippet.tmp > /dev/null ; then
@@ -1367,7 +1423,9 @@ func_emit_tests_Makefile_am ()
   echo "TESTS ="
   echo "TESTS_ENVIRONMENT ="
   echo "noinst_PROGRAMS ="
-  echo "check_PROGRAMS ="
+  if ! $for_test; then
+    echo "check_PROGRAMS ="
+  fi
   echo "noinst_HEADERS ="
   if grep '^pkgdata_DATA *+=' allsnippets.tmp > /dev/null; then
     echo "pkgdata_DATA ="
@@ -1439,7 +1497,7 @@ func_emit_initmacro_end ()
   echo "    if test -n \"\$${macro_prefix}_LIBOBJS\"; then"
   echo "      # Remove the extension."
   echo "      sed_drop_objext='s/\\.o\$//;s/\\.obj\$//'"
-  echo "      for i in \`for i in \$${macro_prefix}_LIBOBJS; do echo \"\$i\"; done | $SED \"\$sed_drop_objext\" | sort | uniq\`; do"
+  echo "      for i in \`for i in \$${macro_prefix}_LIBOBJS; do echo \"\$i\"; done | sed \"\$sed_drop_objext\" | sort | uniq\`; do"
   echo "        ${macro_prefix}_libobjs=\"\$${macro_prefix}_libobjs \$i.\$ac_objext\""
   echo "        ${macro_prefix}_ltlibobjs=\"\$${macro_prefix}_ltlibobjs \$i.lo\""
   echo "      done"
@@ -1552,7 +1610,7 @@ func_import ()
       /gl_MACRO_PREFIX(/ {
         s,^.*gl_MACRO_PREFIX([[ ]*\([^])]*\).*$,cached_macro_prefix="\1",p
       }'
-    eval `$SED -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-cache.m4`
+    eval `sed -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-cache.m4`
     if test -f "$destdir"/$m4base/gnulib-comp.m4; then
       my_sed_traces='
         s,#.*$,,
@@ -1571,7 +1629,7 @@ func_import ()
           :b
           p
         }'
-      eval `$SED -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-comp.m4`
+      eval `sed -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-comp.m4`
     fi
   fi
 
@@ -1663,7 +1721,7 @@ func_import ()
   modules="$specified_modules"
   func_modules_transitive_closure
   echo "Module list with included dependencies:"
-  echo "$modules" | $SED -e 's/^/  /'
+  echo "$modules" | sed -e 's/^/  /'
 
   # Add the dummy module if needed.
   func_modules_add_dummy
@@ -1702,7 +1760,7 @@ func_import ()
   # Determine final file list.
   func_modules_to_filelist
   echo "File list:"
-  echo "$files" | $SED -e 's/^/  /'
+  echo "$files" | sed -e 's/^/  /'
 
   test -n "$files" \
     || func_fatal_error "refusing to do nothing"
@@ -1730,7 +1788,7 @@ func_import ()
   # Create directories.
   { echo "$sourcebase"
     echo "$m4base"
-    docfiles=`echo "$files" | $SED -n -e 's,^doc/,,p'`
+    docfiles=`echo "$files" | sed -n -e 's,^doc/,,p'`
     if test -n "$docfiles"; then
       echo "$docbase"
     fi
@@ -1739,8 +1797,8 @@ func_import ()
     fi
     echo "$auxdir"
     for f in $files; do echo $f; done \
-      | $SED -e "$sed_rewrite_new_files" \
-      | $SED -n -e 's,^\(.*\)/[^/]*,\1,p' \
+      | sed -e "$sed_rewrite_new_files" \
+      | sed -n -e 's,^\(.*\)/[^/]*,\1,p' \
       | LC_ALL=C sort -u
   } > "$tmp"/dirs
   { # Rearrange file descriptors. Needed because "while ... done < ..."
@@ -1777,22 +1835,24 @@ func_import ()
   }
 
   # Copy files or make symbolic links. Remove obsolete files.
+  added_files=''
+  removed_files=''
   delimiter='  '
   # Construct a table with 2 columns: rewritten-file-name original-file-name,
   # representing the files according to the last gnulib-tool invocation.
   for f in $old_files; do echo $f; done \
-    | $SED -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_old_files" \
+    | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_old_files" \
     | LC_ALL=C sort \
     > "$tmp"/old-files
   # Construct a table with 2 columns: rewritten-file-name original-file-name,
   # representing the files after this gnulib-tool invocation.
   for f in $new_files; do echo $f; done \
-    | $SED -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" \
+    | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" \
     | LC_ALL=C sort \
     > "$tmp"/new-files
   # First the files that are in old-files, but not in new-files:
   sed_take_first_column='s,'"$delimiter"'.*,,'
-  for g in `LC_ALL=C join -t"$delimiter" -v1 "$tmp"/old-files "$tmp"/new-files | $SED -e "$sed_take_first_column"`; do
+  for g in `LC_ALL=C join -t"$delimiter" -v1 "$tmp"/old-files "$tmp"/new-files | sed -e "$sed_take_first_column"`; do
     # Remove the file. Do nothing if the user already removed it.
     if test -f "$destdir/$g"; then
       if $doit; then
@@ -1801,6 +1861,7 @@ func_import ()
       else
         echo "Remove file $g (backup in ${g}~)"
       fi
+      func_append removed_files "$g$nl"
     fi
   done
   # func_add_or_update handles a file that ought to be present afterwards.
@@ -1816,7 +1877,7 @@ func_import ()
     if test -n "$sed_transform_lib_file"; then
       case "$f" in
         lib/*)
-          $SED -e "$sed_transform_lib_file" \
+          sed -e "$sed_transform_lib_file" \
             < "$lookedup_file" > "$tmpfile" || func_fatal_error "failed"
           ;;
       esac
@@ -1869,6 +1930,7 @@ func_import ()
       else
         echo "Copy file $g"
       fi
+      func_append added_files "$g$nl"
     fi
     rm -f "$tmpfile"
   }
@@ -1876,8 +1938,8 @@ func_import ()
   sed_take_last_column='s,^.*'"$delimiter"',,'
   already_present=
   LC_ALL=C join -t"$delimiter" -v2 "$tmp"/old-files "$tmp"/new-files \
-    | $SED -e "$sed_take_last_column" \
-    | $SED -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" > "$tmp"/added-files
+    | sed -e "$sed_take_last_column" \
+    | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" > "$tmp"/added-files
   { # Rearrange file descriptors. Needed because "while ... done < ..."
     # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
     exec 5<&0 < "$tmp"/added-files
@@ -1889,8 +1951,8 @@ func_import ()
   # Then the files that are in new-files and in old-files:
   already_present=true
   LC_ALL=C join -t"$delimiter" "$tmp"/old-files "$tmp"/new-files \
-    | $SED -e "$sed_take_last_column" \
-    | $SED -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" > "$tmp"/kept-files
+    | sed -e "$sed_take_last_column" \
+    | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" > "$tmp"/kept-files
   { # Rearrange file descriptors. Needed because "while ... done < ..."
     # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
     exec 5<&0 < "$tmp"/kept-files
@@ -1935,6 +1997,9 @@ func_import ()
     makefile_am=Makefile.am
   fi
 
+  # Create normal Makefile.ams.
+  for_test=false
+
   # Create library makefile.
   func_dest_tmpfilename $sourcebase/$makefile_am
   func_emit_lib_Makefile_am > "$tmpfile"
@@ -1959,6 +2024,7 @@ func_import ()
       echo "Create $sourcebase/$makefile_am"
       rm -f "$tmpfile"
     fi
+    func_append added_files "$sourcebase/$makefile_am$nl"
   fi
 
   # Create m4/gnulib-cache.m4.
@@ -2061,12 +2127,13 @@ func_import ()
     if grep AC_GNU_SOURCE "$destdir"/$m4base/*.m4 >/dev/null 2>/dev/null; then
       echo "  AC_REQUIRE([AC_GNU_SOURCE])"
     fi
-    if grep gl_USE_SYSTEM_EXTENSIONS "$destdir"/$m4base/*.m4 >/dev/null 2>/dev/null; then
-      echo "  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])"
-    fi
-    if grep gl_LOCK "$destdir"/$m4base/*.m4 >/dev/null 2>/dev/null; then
-      echo "  AC_REQUIRE([gl_LOCK_EARLY])"
-    fi
+    for module in $modules; do
+      func_verify_module
+      if test -n "$module"; then
+        func_get_autoconf_early_snippet "$module"
+      fi
+    done \
+      | sed -e '/^$/d;' -e 's/^/  /'
     echo "])"
     echo
     echo "# This macro should be invoked from $configure_ac, in the section"
@@ -2091,7 +2158,7 @@ func_import ()
           s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)|
           ba
         }'
-      sed_replace_build_aux=`echo "$sed_replace_build_aux" | $SED -e 1d -e 's/^ *//'`
+      sed_replace_build_aux=`echo "$sed_replace_build_aux" | sed -e 1d -e 's/^ *//'`
     else
       sed_replace_build_aux=
     fi
@@ -2099,12 +2166,12 @@ func_import ()
       func_verify_module
       if test -n "$module"; then
         func_get_autoconf_snippet "$module" \
-          | $SED -e '/^$/d;' -e 's/^/  /' \
-                 -e 's/AM_GNU_GETTEXT(\[external\])/dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac./' \
-                 -e "$sed_replace_build_aux"
+          | sed -e '/^$/d;' -e 's/^/  /' \
+                -e 's/AM_GNU_GETTEXT(\[external\])/dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac./' \
+                -e "$sed_replace_build_aux"
         if test "$module" = 'alloca' && test "$libtool" = true; then
           echo 'changequote(,)dnl'
-          echo 'LTALLOCA=`echo "$ALLOCA" | $SED '"'"'s/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'"'"'`'
+          echo 'LTALLOCA=`echo "$ALLOCA" | sed '"'"'s/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'"'"'`'
           echo 'changequote([, ])dnl'
           echo 'AC_SUBST([LTALLOCA])'
         fi
@@ -2113,7 +2180,7 @@ func_import ()
     # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is
     # created using libtool, because libtool already handles the dependencies.
     if test "$libtool" != true; then
-      libname_upper=`echo "$libname" | tr 'a-z' 'A-Z'`
+      libname_upper=`echo "$libname" | LC_ALL=C tr 'a-z' 'A-Z'`
       echo "  ${libname_upper}_LIBDEPS=\"\$gl_libdeps\""
       echo "  AC_SUBST([${libname_upper}_LIBDEPS])"
       echo "  ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
@@ -2126,7 +2193,7 @@ func_import ()
     echo "# This macro records the list of files which have been installed by"
     echo "# gnulib-tool and may be removed by future gnulib-tool invocations."
     echo "AC_DEFUN([${macro_prefix}_FILE_LIST], ["
-    echo "$files" | $SED -e 's,^,  ,'
+    echo "$files" | sed -e 's,^,  ,'
     echo "])"
   ) > "$tmpfile"
   if test -f "$destdir"/$m4base/gnulib-comp.m4; then
@@ -2183,9 +2250,86 @@ func_import ()
         echo "Create $testsbase/$makefile_am"
         rm -f "$tmpfile"
       fi
+    func_append added_files "$testsbase/$makefile_am$nl"
     fi
   fi
 
+  # Update the .cvsignore and .gitignore files.
+  { echo "$added_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|A|\1,'
+    echo "$removed_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|R|\1,'
+  } | LC_ALL=C sort -t'|' -k1,1 > "$tmp"/fileset-changes
+  { # Rearrange file descriptors. Needed because "while ... done < ..."
+    # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
+    exec 5<&0 < "$tmp"/fileset-changes
+    func_update_ignorelist ()
+    {
+      ignore="$1"
+      if test -f "$destdir/$dir$ignore"; then
+        if test -n "$dir_added" || test -n "$dir_removed"; then
+          LC_ALL=C sort "$destdir/$dir$ignore" > "$tmp"/ignore
+          echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u \
+            | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-added
+          echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \
+            | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-removed
+          if test -s "$tmp"/ignore-added || test -s "$tmp"/ignore-removed; then
+            if $doit; then
+              echo "Updating $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)"
+              mv -f "$destdir/$dir$ignore" "$destdir/$dir$ignore"~
+              sed -e 's,^,/^,' -e 's,$,\$/d,' < "$tmp"/ignore-removed > "$tmp"/sed-ignore-removed
+              cat "$destdir/$dir$ignore"~ "$tmp"/ignore-added \
+                | sed -f "$tmp"/sed-ignore-removed \
+                > "$destdir/$dir$ignore"
+            else
+              echo "Update $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)"
+            fi
+          fi
+        fi
+      else
+        if test -n "$dir_added"; then
+          if $doit; then
+            echo "Creating $destdir/$dir$ignore"
+            echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u > "$destdir/$dir$ignore"
+          else
+            echo "Create $destdir/$dir$ignore"
+          fi
+        fi
+      fi
+    }
+    func_done_dir ()
+    {
+      dir="$1"
+      dir_added="$2"
+      dir_removed="$3"
+      if test -d "$destdir/${dir}CVS" || test -f "$destdir/${dir}.cvsignore"; then
+        func_update_ignorelist .cvsignore
+      fi
+      if test -d "$destdir/.git" || test -f "$destdir/${dir}.gitignore"; then
+        func_update_ignorelist .gitignore
+      fi
+    }
+    last_dir=
+    last_dir_added=
+    last_dir_removed=
+    while read line; do
+      # Why not ''read next_dir op file'' ? Because the dir column can be empty.
+      next_dir=`echo "$line" | sed -e 's,|.*,,'`
+      op=`echo "$line" | sed -e 's,^[^|]*|\([^|]*\)|.*$,\1,'`
+      file=`echo "$line" | sed -e 's,^[^|]*|[^|]*|,,'`
+      if test "$next_dir" != "$last_dir"; then
+        func_done_dir "$last_dir" "$last_dir_added" "$last_dir_removed"
+        last_dir="$next_dir"
+        last_dir_added=
+        last_dir_removed=
+      fi
+      case $op in
+        A) func_append last_dir_added "$file$nl";;
+        R) func_append last_dir_removed "$file$nl";;
+      esac
+    done
+    func_done_dir "$last_dir" "$last_dir_added" "$last_dir_removed"
+    exec 0<&5 5<&-
+  }
+
   echo "Finished."
   echo
   echo "You may need to add #include directives for the following .h files."
@@ -2215,9 +2359,22 @@ func_import ()
    LC_ALL=C sort -u "$tmp"/include-angles
    LC_ALL=C sort -u "$tmp"/include-quotes
    cat "$tmp"/include-if
-  ) | $SED -e '/^$/d' -e 's/^/  /'
+  ) | sed -e '/^$/d' -e 's/^/  /'
   rm -f "$tmp"/include-angles "$tmp"/include-quotes "$tmp"/include-if
 
+  for module in $modules; do
+    func_get_link_directive "$module"
+  done \
+    | LC_ALL=C sort -u | sed -e '/^$/d' -e 's/^/  /' > "$tmp"/link
+  if test `wc -l < "$tmp"/link` != 0; then
+    echo
+    echo "You may need to use the following Makefile variables when linking."
+    echo "Use them in <program>_LDADD when linking a program, or"
+    echo "in <library>_a_LDFLAGS or <library>_la_LDFLAGS when linking a library."
+    cat "$tmp"/link
+  fi
+  rm -f "$tmp"/link
+
   echo
   echo "Don't forget to"
   if test "$makefile_am" = Makefile.am; then
@@ -2233,13 +2390,13 @@ func_import ()
     fi
   fi
   if test "$makefile_am" = Makefile.am; then
-    sourcebase_dir=`echo "$sourcebase" | $SED -n -e 's,/[^/]*$,/,p'`
+    sourcebase_dir=`echo "$sourcebase" | sed -n -e 's,/[^/]*$,/,p'`
     sourcebase_base=`basename "$sourcebase"`
     echo "  - mention \"${sourcebase_base}\" in SUBDIRS in ${sourcebase_dir}Makefile.am,"
   fi
   if test -n "$inctests"; then
     if test "$makefile_am" = Makefile.am; then
-      testsbase_dir=`echo "$testsbase" | $SED -n -e 's,/[^/]*$,/,p'`
+      testsbase_dir=`echo "$testsbase" | sed -n -e 's,/[^/]*$,/,p'`
       testsbase_base=`basename "$testsbase"`
       echo "  - mention \"${testsbase_base}\" in SUBDIRS in ${testsbase_dir}Makefile.am,"
     fi
@@ -2270,6 +2427,11 @@ func_create_testdir ()
   # Check that the license of every module is consistent with the license of
   # its dependencies.
   saved_modules="$modules"
+  saved_inctests="$inctests"
+  # When computing transitive closures, don't consider $module to depend on
+  # $module-tests. Need this becauses tests are implicitly GPL and may depend
+  # on GPL modules - therefore we don't want a warning in this case.
+  inctests=""
   for requested_module in $saved_modules; do
     requested_license=`func_get_license "$requested_module"`
     if test "$requested_license" != GPL; then
@@ -2290,6 +2452,7 @@ func_create_testdir ()
     fi
   done
   modules="$saved_modules"
+  inctests="$saved_inctests"
 
   # Subdirectory names.
   sourcebase=gllib
@@ -2301,7 +2464,7 @@ func_create_testdir ()
   # Determine final module list.
   func_modules_transitive_closure
   echo "Module list with included dependencies:"
-  echo "$modules" | $SED -e 's/^/  /'
+  echo "$modules" | sed -e 's/^/  /'
 
   # Add the dummy module if needed.
   func_modules_add_dummy
@@ -2309,7 +2472,7 @@ func_create_testdir ()
   # Determine final file list.
   func_modules_to_filelist
   echo "File list:"
-  echo "$files" | $SED -e 's/^/  /'
+  echo "$files" | sed -e 's/^/  /'
 
   sed_rewrite_files="\
     s,^build-aux/,$auxdir/,
@@ -2320,8 +2483,8 @@ func_create_testdir ()
 
   # Create directories.
   for f in $files; do echo $f; done \
-    | $SED -e "$sed_rewrite_files" \
-    | $SED -n -e 's,^\(.*\)/[^/]*,\1,p' \
+    | sed -e "$sed_rewrite_files" \
+    | sed -n -e 's,^\(.*\)/[^/]*,\1,p' \
     | LC_ALL=C sort -u \
     > "$tmp"/dirs
   { # Rearrange file descriptors. Needed because "while ... done < ..."
@@ -2336,7 +2499,7 @@ func_create_testdir ()
   # Copy files or make symbolic links.
   delimiter='  '
   for f in $files; do echo $f; done \
-    | $SED -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_files" \
+    | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_files" \
     | LC_ALL=C sort \
     > "$tmp"/files
   { # Rearrange file descriptors. Needed because "while ... done < ..."
@@ -2360,6 +2523,9 @@ func_create_testdir ()
     exec 0<&5 5<&-
   }
 
+  # Create Makefile.ams that are for testing.
+  for_test=true
+
   # Create $sourcebase/Makefile.am.
   mkdir -p "$testdir/$sourcebase"
   func_emit_lib_Makefile_am > "$testdir/$sourcebase/Makefile.am"
@@ -2372,7 +2538,7 @@ func_create_testdir ()
    for f in $files; do
      case "$f" in
        m4/* )
-         echo "EXTRA_DIST += "`echo "$f" | $SED -e 's,^m4/,,'` ;;
+         echo "EXTRA_DIST += "`echo "$f" | sed -e 's,^m4/,,'` ;;
      esac
    done
   ) > "$testdir/$m4base/Makefile.am"
@@ -2410,14 +2576,13 @@ func_create_testdir ()
        echo "AC_GNU_SOURCE"
        echo
      fi
-     if grep gl_USE_SYSTEM_EXTENSIONS "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then
-       echo "gl_USE_SYSTEM_EXTENSIONS"
-       echo
-     fi
-     if grep gl_LOCK "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then
-       echo "gl_LOCK_EARLY"
-       echo
-     fi
+     for module in $modules; do
+       func_verify_module
+       if test -n "$module"; then
+         func_get_autoconf_early_snippet "$module"
+       fi
+     done \
+       | sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/'
      if test "$libtool" = true; then
        echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])"
        echo "gl_cond_libtool=true"
@@ -2439,10 +2604,10 @@ func_create_testdir ()
      sed_replace_build_aux='
        :a
        /AC_CONFIG_FILES(.*:build-aux\/.*)/{
-         s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:../'"$auxdir"'/\2)|
-         ba
+        s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:../'"$auxdir"'/\2)|
+        ba
        }'
-     sed_replace_build_aux=`echo "$sed_replace_build_aux" | $SED -e 1d -e 's/^ *//'`
+     sed_replace_build_aux=`echo "$sed_replace_build_aux" | sed -e 1d -e 's/^ *//'`
      # We don't have explicit ordering constraints between the various
      # autoconf snippets. It's cleanest to put those of the library before
      # those of the tests.
@@ -2451,7 +2616,7 @@ func_create_testdir ()
        func_verify_nontests_module
        if test -n "$module"; then
          func_get_autoconf_snippet "$module" \
-           | $SED -e "$sed_replace_build_aux"
+           | sed -e "$sed_replace_build_aux"
        fi
      done
      echo "gl_source_base='.'"
@@ -2459,13 +2624,13 @@ func_create_testdir ()
        func_verify_tests_module
        if test -n "$module"; then
          func_get_autoconf_snippet "$module" \
-           | $SED -e "$sed_replace_build_aux"
+           | sed -e "$sed_replace_build_aux"
        fi
      done
      # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is
      # created using libtool, because libtool already handles the dependencies.
      if test "$libtool" != true; then
-       libname_upper=`echo "$libname" | tr 'a-z' 'A-Z'`
+       libname_upper=`echo "$libname" | LC_ALL=C tr 'a-z' 'A-Z'`
        echo "  ${libname_upper}_LIBDEPS=\"\$gl_libdeps\""
        echo "  AC_SUBST([${libname_upper}_LIBDEPS])"
        echo "  ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
@@ -2511,6 +2676,10 @@ func_create_testdir ()
    echo "AC_PROG_INSTALL"
    echo "AC_PROG_MAKE_SET"
    echo
+   echo "# For autobuild."
+   echo "AC_CANONICAL_BUILD"
+   echo "AC_CANONICAL_HOST"
+   echo
    echo "m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace"
    echo "m4_pattern_allow([^gl_ES\$])dnl a valid locale name"
    echo "m4_pattern_allow([^gl_LIBOBJS\$])dnl a variable"
@@ -2526,14 +2695,13 @@ func_create_testdir ()
      echo "AC_GNU_SOURCE"
      echo
    fi
-   if grep gl_USE_SYSTEM_EXTENSIONS "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then
-     echo "gl_USE_SYSTEM_EXTENSIONS"
-     echo
-   fi
-   if grep gl_LOCK "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then
-     echo "gl_LOCK_EARLY"
-     echo
-   fi
+   for module in $modules; do
+     func_verify_nontests_module
+     if test -n "$module"; then
+       func_get_autoconf_early_snippet "$module"
+     fi
+   done \
+     | sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/'
    if test "$libtool" = true; then
      echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])"
      echo "gl_cond_libtool=true"
@@ -2560,7 +2728,7 @@ func_create_testdir ()
          s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)|
          ba
        }'
-     sed_replace_build_aux=`echo "$sed_replace_build_aux" | $SED -e 1d -e 's/^ *//'`
+     sed_replace_build_aux=`echo "$sed_replace_build_aux" | sed -e 1d -e 's/^ *//'`
    else
      sed_replace_build_aux=
    fi
@@ -2568,13 +2736,13 @@ func_create_testdir ()
      func_verify_nontests_module
      if test -n "$module"; then
        func_get_autoconf_snippet "$module" \
-         | $SED -e "$sed_replace_build_aux"
+         | sed -e "$sed_replace_build_aux"
      fi
    done
    # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is
    # created using libtool, because libtool already handles the dependencies.
    if test "$libtool" != true; then
-     libname_upper=`echo "$libname" | tr 'a-z' 'A-Z'`
+     libname_upper=`echo "$libname" | LC_ALL=C tr 'a-z' 'A-Z'`
      echo "  ${libname_upper}_LIBDEPS=\"\$gl_libdeps\""
      echo "  AC_SUBST([${libname_upper}_LIBDEPS])"
      echo "  ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
@@ -2609,7 +2777,7 @@ func_create_testdir ()
      echo "executing ${AUTOPOINT} --force"
      ${AUTOPOINT} --force || func_exit 1
      for f in $m4base/*.m4~; do
-       mv -f $f `echo $f | $SED -e 's,~$,,'` || func_exit 1
+       mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1
      done
    fi
    echo "executing ${ACLOCAL} -I $m4base"
@@ -2634,7 +2802,7 @@ func_create_testdir ()
        echo "executing ${AUTOPOINT} --force"
        ${AUTOPOINT} --force || func_exit 1
        for f in ../$m4base/*.m4~; do
-         mv -f $f `echo $f | $SED -e 's,~$,,'` || func_exit 1
+        mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1
        done
      fi
      echo "executing ${ACLOCAL} -I ../$m4base"
@@ -2651,7 +2819,25 @@ func_create_testdir ()
      ${AUTOMAKE} --add-missing --copy || func_exit 1
     ) || func_exit 1
   fi
-  if grep '^BUILT_SOURCES *+=' "$testdir/$sourcebase/Makefile.am" > /dev/null; then
+  # Need to run configure and make once, to create built files that are to be
+  # distributed (such as getdate.c).
+  # Extract the value of "CLEANFILES += ..." and "MOSTLYCLEANFILES += ...".
+  cleaned_files=`sed -e "$sed_remove_backslash_newline" < "$testdir/$sourcebase/Makefile.am" \
+                 | sed -n -e 's,^CLEANFILES[   ]*+=\([^#]*\).*$,\1,p' -e 's,^MOSTLYCLEANFILES[         ]*+=\([^#]*\).*$,\1,p'`
+  cleaned_files=`for file in $cleaned_files; do echo " $file "; done`
+  # Extract the value of "BUILT_SOURCES += ...". Remove variable references
+  # such $(FOO_H) because they don't refer to distributed files.
+  sed_remove_make_variables='s,[$]([A-Za-z0-9_]*),,g'
+  built_sources=`sed -e "$sed_remove_backslash_newline" < "$testdir/$sourcebase/Makefile.am" \
+                 | sed -n -e 's,^BUILT_SOURCES[        ]*+=\([^#]*\).*$,\1,p' \
+                 | sed -e "$sed_remove_make_variables"`
+  distributed_built_sources=`for file in $built_sources; do
+                               case "$cleaned_files" in
+                                 *" "$file" "*) ;;
+                                 *) echo $file ;;
+                               esac;
+                             done`
+  if test -n "$distributed_built_sources"; then
     (cd "$testdir"
      ./configure || func_exit 1
        cd "$sourcebase"
@@ -2688,12 +2874,50 @@ func_create_megatestdir ()
   func_create_testdir "$megatestdir/ALL" "$allmodules"
   func_append megasubdirs "ALL"
 
+  # Create autobuild.
+  cvsdate=`sh "$gnulib_dir/build-aux/mdate-sh" "$gnulib_dir/CVS/Entries" \
+             | sed -e 's,January,01,'   -e 's,Jan,01,' \
+                   -e 's,February,02,'  -e 's,Feb,02,' \
+                   -e 's,March,03,'     -e 's,Mar,03,' \
+                   -e 's,April,04,'     -e 's,Apr,04,' \
+                   -e 's,May,05,'                      \
+                   -e 's,June,06,'      -e 's,Jun,06,' \
+                   -e 's,July,07,'      -e 's,Jul,07,' \
+                   -e 's,August,08,'    -e 's,Aug,08,' \
+                   -e 's,September,09,' -e 's,Sep,09,' \
+                   -e 's,October,10,'   -e 's,Oct,10,' \
+                   -e 's,November,11,'  -e 's,Nov,11,' \
+                   -e 's,December,12,'  -e 's,Dec,12,' \
+             | sed -e 's,^,00,' | sed -e 's,^[0-9]*\([0-9][0-9] \),\1,' \
+             | sed -e 's,^\([0-9]*\) \([0-9]*\) \([0-9]*\),\3\2\1,'`
+  (echo '#!/bin/sh'
+   echo "CVSDATE=$cvsdate"
+   echo "test -d logs || mkdir logs"
+   echo "for module in $megasubdirs; do"
+   echo "  echo \"Working on module \$module...\""
+   echo "  safemodule=\`echo \$module | sed -e 's|/|-|g'\`"
+   echo "  (echo \"To: gnulib@autobuild.josefsson.org\""
+   echo "   echo"
+   echo "   set -x"
+   echo "   : autobuild project... \$module"
+   echo "   : autobuild revision... cvs-\$CVSDATE-000000"
+   echo "   : autobuild timestamp... \`date \"+%Y%m%d-%H%M%S\"\`"
+   echo "   : autobuild hostname... \`hostname\`"
+   echo "   cd \$module && ./configure \$CONFIGURE_OPTIONS && make && make check && make distclean"
+   echo "   echo rc=\$?"
+   echo "  ) 2>&1 | { if test -n \"\$AUTOBUILD_SUBST\"; then sed -e \"\$AUTOBUILD_SUBST\"; else cat; fi; } > logs/\$safemodule"
+   echo "done"
+  ) > "$megatestdir/autobuild"
+  chmod a+x "$megatestdir/autobuild"
+
   # Create Makefile.am.
   (echo "## Process this file with automake to produce Makefile.in."
    echo
    echo "AUTOMAKE_OPTIONS = 1.5 foreign"
    echo
    echo "SUBDIRS = $megasubdirs"
+   echo
+   echo "EXTRA_DIST = autobuild"
   ) > "$megatestdir/Makefile.am"
 
   # Create configure.ac.
@@ -2767,7 +2991,7 @@ case $mode in
       /A[CM]_PROG_LIBTOOL/ {
         s,^.*$,guessed_libtool=true,p
       }'
-    eval `$SED -n -e "$my_sed_traces" < "$configure_ac"`
+    eval `sed -n -e "$my_sed_traces" < "$configure_ac"`
 
     if test -z "$auxdir"; then
       auxdir="$guessed_auxdir"
@@ -2794,7 +3018,7 @@ case $mode in
       m4dirs=
       m4dirs_count=0
       if test -f "$destdir"/Makefile.am; then
-        aclocal_amflags=`grep '^ACLOCAL_AMFLAGS[        ]*=' "$destdir"/Makefile.am | $SED -e 's/^ACLOCAL_AMFLAGS[      ]*=\(.*\)$/\1/'`
+        aclocal_amflags=`sed -n 's/^ACLOCAL_AMFLAGS[    ]*=\(.*\)$/\1/p' "$destdir"/Makefile.am`
         m4dir_is_next=
         for arg in $aclocal_amflags; do
           if test -n "$m4dir_is_next"; then
@@ -2808,6 +3032,7 @@ case $mode in
                 fi
                 ;;
             esac
+            m4dir_is_next=
           else
             if test "X$arg" = "X-I"; then
               m4dir_is_next=yes
@@ -2822,7 +3047,7 @@ case $mode in
           sedexpr1='s,^m4_include(\[\(.*\)])$,\1,p'
           sedexpr2='s,^[^/]*$,.,'
           sedexpr3='s,/[^/]*$,,'
-          m4dirs=`$SED -n -e "$sedexpr1" aclocal.m4 | $SED -e "$sedexpr2" -e "$sedexpr3" | LC_ALL=C sort -u`
+          m4dirs=`sed -n -e "$sedexpr1" aclocal.m4 | sed -e "$sedexpr2" -e "$sedexpr3" | LC_ALL=C sort -u`
           m4dirs_count=`echo "$m4dirs" | wc -l`
         fi
       fi
@@ -2990,6 +3215,16 @@ case $mode in
     done
     ;;
 
+  extract-link-directive )
+    for module
+    do
+      func_verify_module
+      if test -n "$module"; then
+        func_get_link_directive "$module"
+      fi
+    done
+    ;;
+
   extract-license )
     for module
     do