Move macros for finding floating-point exponents into separate M4 files.
[gnulib.git] / gnulib-tool
index f6c4a17..7dd2063 100755 (executable)
@@ -1,11 +1,11 @@
 #! /bin/sh
 #
-# Copyright (C) 2002-2007 Free Software Foundation, Inc.
+# Copyright (C) 2002-2008 Free Software Foundation, Inc.
 #
-# This program is free software; you can redistribute it and/or modify
+# 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
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -13,8 +13,7 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
 # This program is meant for authors or maintainers which want to import
 
 progname=$0
 package=gnulib
-cvsdatestamp='$Date: 2007-09-17 10:26:33 $'
-last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'`
-# Sometimes last_checkin_date is "YYYY/MM/DD ...", sometimes "YYYY-MM-DD ...".
-version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'`
-# version is in YYYY-MM-DD format.
 nl='
 '
 IFS=" ""       $nl"
@@ -170,8 +164,10 @@ Options for --import:
       --avoid=MODULE        Avoid including the given MODULE. Useful if you
                             have code that provides equivalent functionality.
                             This option can be repeated.
-      --lgpl                Abort if modules aren't available under the LGPL.
+      --lgpl[=2|=3]         Abort if modules aren't available under the LGPL.
                             Also modify license template from GPL to LGPL.
+                            The version number of the LGPL can be specified;
+                            the default is currently LGPLv3.
       --makefile-name=NAME  Name of makefile in automake syntax in the
                             source-base and tests-base directories
                             (default \"Makefile.am\").
@@ -181,7 +177,10 @@ Options for --import:
                             'gl_INIT'. Default is 'gl'.
       --po-domain=NAME      Specify the prefix of the i18n domain. Usually use
                             the package name. A suffix '-gnulib' is appended.
-      --no-changelog        don't update or create ChangeLog files
+      --vc-files            Update version control related files.
+      --no-vc-files         Don't update version control related files
+                            (.gitignore and/or .cvsignore).
+      --no-changelog        Don't update or create ChangeLog files.
 
 Options for --import and --update:
       --dry-run             For --import, only print what would have been done.
@@ -198,12 +197,45 @@ Report bugs to <bug-gnulib@gnu.org>."
 # outputs to stdout the --version message.
 func_version ()
 {
-  year=`echo "$version" | sed -e 's,-.*$,,'`
+  func_gnulib_dir
+  if test -d "$gnulib_dir"/.git \
+     && (git --version) >/dev/null 2>/dev/null \
+     && (date --version) >/dev/null 2>/dev/null; then
+    # gnulib checked out from git.
+    sed_extract_first_date='/^Date/{
+s/^Date:[       ]*//p
+q
+}'
+    date=`cd "$gnulib_dir" && git log ChangeLog | sed -n -e "$sed_extract_first_date"`
+    # Turn "Fri Mar 21 07:16:51 2008 -0600" into "Mar 21 2008 07:16:51 -0600".
+    sed_year_before_time='s/^[^ ]* \([^ ]*\) \([0-9]*\) \([0-9:]*\) \([0-9]*\) /\1 \2 \4 \3 /'
+    date=`echo "$date" | sed -e "$sed_year_before_time"`
+    # Use GNU date to compute the time in GMT.
+    date=`date -d "$date" -u +"%Y-%m-%d %H:%M:%S"`
+    version=' '`"$gnulib_dir"/build-aux/git-version-gen /dev/null | sed -e 's/-dirty/-modified/'`
+  else
+    if test -d "$gnulib_dir"/CVS \
+       && (cvs --version) >/dev/null 2>/dev/null; then
+      # gnulib checked out from CVS.
+      sed_extract_first_date='/^date: /{
+s/^date: \([0-9][0-9][0-9][0-9]\).\([0-9][0-9]\).\([0-9][0-9]\) \([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\).*/\1-\2-\3 \4/p
+q
+}'
+      date=`cd "$gnulib_dir" && cvs log -N ChangeLog 2>/dev/null | sed -n -e "$sed_extract_first_date"`
+    else
+      # gnulib copy without versioning information.
+      date=`sed -e 's/ .*//;q' "$gnulib_dir"/ChangeLog`
+    fi
+    version=
+  fi
+  year=`"$gnulib_dir"/build-aux/mdate-sh "$self_abspathname" | sed 's,^.* ,,'`
   echo "\
-$progname (GNU $package) $version
+gnulib-tool (GNU $package $date)$version
 Copyright (C) $year Free Software Foundation, Inc.
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
 Written by" "Bruno Haible" "and" "Simon Josefsson"
 }
 
@@ -211,7 +243,10 @@ Written by" "Bruno Haible" "and" "Simon Josefsson"
 # outputs to stdout a header for a generated file.
 func_emit_copyright_notice ()
 {
-  echo "# Copyright (C) 2004-2007 Free Software Foundation, Inc."
+  sed -n '/Copyright/ {
+            p
+            q
+          }' < "$self_abspathname"
   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"
@@ -229,6 +264,85 @@ func_exit ()
   (exit $1); exit $1
 }
 
+# func_gnulib_dir
+# locates the directory where the gnulib repository lives
+# Sets variables
+# - self_abspathname         absolute pathname of gnulib-tool
+# - gnulib_dir               absolute pathname of gnulib repository
+func_gnulib_dir ()
+{
+  case "$0" in
+    /*) self_abspathname="$0" ;;
+    */*) self_abspathname=`pwd`/"$0" ;;
+    *)
+      # Look in $PATH.
+      # Iterate through the elements of $PATH.
+      # We use IFS=: instead of
+      #   for d in `echo ":$PATH:" | sed -e 's/:::*/:.:/g' | sed -e 's/:/ /g'`
+      # because the latter does not work when some PATH element contains spaces.
+      # We use a canonicalized $pathx instead of $PATH, because empty PATH
+      # elements are by definition equivalent to '.', however field splitting
+      # according to IFS=: loses empty fields in many shells:
+      #   - /bin/sh on OSF/1 and Solaris loses all empty fields (at the
+      #     beginning, at the end, and in the middle),
+      #   - /bin/sh on IRIX and /bin/ksh on IRIX and OSF/1 lose empty fields
+      #     at the beginning and at the end,
+      #   - GNU bash, /bin/sh on AIX and HP-UX, and /bin/ksh on AIX, HP-UX,
+      #     Solaris lose empty fields at the end.
+      # The 'case' statement is an optimization, to avoid evaluating the
+      # explicit canonicalization command when $PATH contains no empty fields.
+      self_abspathname=
+      if test "${PATH_SEPARATOR+set}" != set; then
+        func_tmpdir
+        { echo "#! /bin/sh"; echo "exit 0"; } > "$tmp"/conf.sh
+        chmod +x "$tmp"/conf.sh
+        if (PATH="/nonexistent;$tmp"; conf.sh) >/dev/null 2>&1; then
+          PATH_SEPARATOR=';'
+        else
+          PATH_SEPARATOR=:
+        fi
+        rm -rf "$tmp"
+      fi
+      if test "$PATH_SEPARATOR" = ";"; then
+        # On Windows, programs are searched in "." before $PATH.
+        pathx=".;$PATH"
+      else
+        # On Unix, we have to convert empty PATH elements to ".".
+        pathx="$PATH"
+        case :$PATH: in
+          *::*)
+            pathx=`echo ":$PATH:" | sed -e 's/:::*/:.:/g' -e 's/^://' -e 's/:\$//'`
+            ;;
+        esac
+      fi
+      save_IFS="$IFS"
+      IFS="$PATH_SEPARATOR"
+      for d in $pathx; do
+        IFS="$save_IFS"
+        test -z "$d" && d=.
+        if test -x "$d/$0" && test ! -d "$d/$0"; then
+          self_abspathname="$d/$0"
+          break
+        fi
+      done
+      IFS="$save_IFS"
+      if test -z "$self_abspathname"; then
+        func_fatal_error "could not locate the gnulib-tool program - how did you invoke it?"
+      fi
+      ;;
+  esac
+  while test -h "$self_abspathname"; do
+    # Resolve symbolic link.
+    linkval=`func_readlink "$self_abspathname"`
+    test -n "$linkval" || break
+    case "$linkval" in
+      /* ) self_abspathname="$linkval" ;;
+      * ) self_abspathname=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`/"$linkval" ;;
+    esac
+  done
+  gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`
+}
+
 # func_tmpdir
 # creates a temporary directory.
 # Sets variable
@@ -595,12 +709,14 @@ fi
 # - auxdir          from --aux-dir
 # - inctests        true if --with-tests was given, blank otherwise
 # - avoidlist       list of modules to avoid, from --avoid
-# - lgpl            true if --lgpl was given, blank otherwise
+# - lgpl            yes or a number if --lgpl was given, blank otherwise
 # - makefile_name   from --makefile-name
 # - libtool         true if --libtool was given, false if --no-libtool was
 #                   given, blank otherwise
 # - macro_prefix    from --macro-prefix
 # - po_domain       from --po-domain
+# - vc_files        true if --vc-files was given, false if --no-vc-files was
+#                   given, blank otherwise
 # - autoconf_minversion  minimum supported autoconf version
 # - do_changelog    false if --no-changelog was given, : otherwise
 # - doit            : if actions shall be executed, false if only to be printed
@@ -628,6 +744,7 @@ fi
   libtool=
   macro_prefix=
   po_domain=
+  vc_files=
   do_changelog=:
   doit=:
   symbolic=
@@ -775,7 +892,15 @@ fi
         func_append avoidlist " $arg"
         shift ;;
       --lgpl )
-        lgpl=true
+        lgpl=yes
+        shift ;;
+      --lgpl=* )
+        arg=`echo "X$1" | sed -e 's/^X--lgpl=//'`
+        case "$arg" in
+          2 | 3) ;;
+          *) func_fatal_error "invalid LGPL version number for --lgpl" ;;
+        esac
+        lgpl=$arg
         shift ;;
       --makefile-name )
         shift
@@ -813,6 +938,12 @@ fi
       --po-domain=* )
         po_domain=`echo "X$1" | sed -e 's/^X--po-domain=//'`
         shift ;;
+      --vc-files )
+        vc_files=true
+        shift ;;
+      --no-vc-files )
+        vc_files=false
+        shift ;;
       --no-changelog | --no-changelo | --no-changel | --no-change | --no-chang | --no-chan | --no-cha | --no-ch | --no-c )
         do_changelog=false
         shift ;;
@@ -861,7 +992,7 @@ fi
        || test -n "$docbase" || test -n "$testsbase" || test -n "$auxdir" \
        || test -n "$inctests" || test -n "$avoidlist" || test -n "$lgpl" \
        || test -n "$makefile_name" || test -n "$macro_prefix" \
-       || test -n "$po_domain"; then
+       || test -n "$po_domain" || test -n "$vc_files"; then
       echo "gnulib-tool: invalid options for 'update' mode" 1>&2
       echo "Try 'gnulib-tool --help' for more information." 1>&2
       echo "If you really want to modify the gnulib configuration of your project," 1>&2
@@ -957,77 +1088,7 @@ fi
   esac
 }
 
-case "$0" in
-  /*) self_abspathname="$0" ;;
-  */*) self_abspathname=`pwd`/"$0" ;;
-  *)
-    # Look in $PATH.
-    # Iterate through the elements of $PATH.
-    # We use IFS=: instead of
-    #   for d in `echo ":$PATH:" | sed -e 's/:::*/:.:/g' | sed -e 's/:/ /g'`
-    # because the latter does not work when some PATH element contains spaces.
-    # We use a canonicalized $pathx instead of $PATH, because empty PATH
-    # elements are by definition equivalent to '.', however field splitting
-    # according to IFS=: loses empty fields in many shells:
-    #   - /bin/sh on OSF/1 and Solaris loses all empty fields (at the
-    #     beginning, at the end, and in the middle),
-    #   - /bin/sh on IRIX and /bin/ksh on IRIX and OSF/1 lose empty fields
-    #     at the beginning and at the end,
-    #   - GNU bash, /bin/sh on AIX and HP-UX, and /bin/ksh on AIX, HP-UX,
-    #     Solaris lose empty fields at the end.
-    # The 'case' statement is an optimization, to avoid evaluating the
-    # explicit canonicalization command when $PATH contains no empty fields.
-    self_abspathname=
-    if test "${PATH_SEPARATOR+set}" != set; then
-      func_tmpdir
-      { echo "#! /bin/sh"; echo "exit 0"; } > "$tmp"/conf.sh
-      chmod +x "$tmp"/conf.sh
-      if (PATH="/nonexistent;$tmp"; conf.sh) >/dev/null 2>&1; then
-        PATH_SEPARATOR=';'
-      else
-        PATH_SEPARATOR=:
-      fi
-      rm -rf "$tmp"
-    fi
-    if test "$PATH_SEPARATOR" = ";"; then
-      # On Windows, programs are searched in "." before $PATH.
-      pathx=".;$PATH"
-    else
-      # On Unix, we have to convert empty PATH elements to ".".
-      pathx="$PATH"
-      case :$PATH: in
-        *::*)
-          pathx=`echo ":$PATH:" | sed -e 's/:::*/:.:/g' -e 's/^://' -e 's/:\$//'`
-          ;;
-      esac
-    fi
-    save_IFS="$IFS"
-    IFS="$PATH_SEPARATOR"
-    for d in $pathx; do
-      IFS="$save_IFS"
-      test -z "$d" && d=.
-      if test -x "$d/$0" && test ! -d "$d/$0"; then
-        self_abspathname="$d/$0"
-        break
-      fi
-    done
-    IFS="$save_IFS"
-    if test -z "$self_abspathname"; then
-      func_fatal_error "could not locate the gnulib-tool program - how did you invoke it?"
-    fi
-    ;;
-esac
-while test -h "$self_abspathname"; do
-  # Resolve symbolic link.
-  linkval=`func_readlink "$self_abspathname"`
-  test -n "$linkval" || break
-  case "$linkval" in
-    /* ) self_abspathname="$linkval" ;;
-    * ) self_abspathname=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`/"$linkval" ;;
-  esac
-done
-gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`
-
+func_gnulib_dir
 func_tmpdir
 trap 'exit_status=$?
       if test "$signal" != 0; then
@@ -1201,8 +1262,7 @@ func_get_filelist ()
   echo m4/gnulib-common.m4
   case "$autoconf_minversion" in
     2.59)
-      #echo m4/onceonly.m4
-      echo m4/onceonly_2_57.m4
+      echo m4/onceonly.m4
       ;;
   esac
 }
@@ -1213,7 +1273,7 @@ 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"
@@ -1247,6 +1307,18 @@ func_get_automake_snippet ()
   case "$1" in
     *-tests)
       # *-tests module live in tests/, not lib/.
+      # Synthesize an EXTRA_DIST augmentation.
+      all_files=`func_get_filelist $1`
+      tests_files=`for f in $all_files; do \
+                     case $f in \
+                       tests/*) echo $f ;; \
+                     esac; \
+                   done | sed -e 's,^tests/,,'`
+      extra_files="$tests_files"
+      if test -n "$extra_files"; then
+        echo "EXTRA_DIST +=" $extra_files
+        echo
+      fi
       ;;
     *)
       # Synthesize an EXTRA_DIST augmentation.
@@ -1309,6 +1381,17 @@ func_get_automake_snippet ()
         echo "EXTRA_DIST += "`echo "$buildaux_files" | sed -e "$sed_prepend_auxdir"`
         echo
       fi
+      # Synthesize an EXTRA_DIST augmentation also for the files from top/.
+      top_files=`for f in $all_files; do \
+                   case $f in \
+                     top/*) echo $f ;; \
+                   esac; \
+                 done | sed -e 's,^top/,,'`
+      if test -n "$top_files"; then
+        sed_prepend_topdir='s,^,$(top_srcdir)/,'
+        echo "EXTRA_DIST += "`echo "$top_files" | sed -e "$sed_prepend_topdir"`
+        echo
+      fi
       ;;
   esac
 }
@@ -1519,7 +1602,7 @@ func_execute_command ()
     echo "executing $*"
     "$@"
   else
-    # Commands like automake produce output to stderr even when the succeed.
+    # Commands like automake produce output to stderr even when they succeed.
     # Turn this output off if the command succeeds.
     "$@" > "$tmp"/cmdout 2>&1
     cmdret=$?
@@ -1603,7 +1686,7 @@ func_emit_lib_Makefile_am ()
             echo "${libname}_${libext}_DEPENDENCIES += @${perhapsLT}ALLOCA@"
           fi
         } > amsnippet.tmp
-        # Skip the contents if its entirely empty.
+        # Skip the contents if it's entirely empty.
         if grep '[^     ]' amsnippet.tmp > /dev/null ; then
           echo "## begin gnulib module $module"
           echo
@@ -1654,7 +1737,7 @@ func_emit_lib_Makefile_am ()
     echo "AM_CPPFLAGS ="
   fi
   echo
-  if LC_ALL=C 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 *+\{0,1\}= *$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.
     :
@@ -1665,7 +1748,7 @@ func_emit_lib_Makefile_am ()
   echo
   echo "${libname}_${libext}_SOURCES ="
   # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However,
-  # automake during its analyses looks for $(LIBOBJS), not for @LIBOBJS@.
+  # automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@.
   echo "${libname}_${libext}_LIBADD = \$(${macro_prefix}_${perhapsLT}LIBOBJS)"
   echo "${libname}_${libext}_DEPENDENCIES = \$(${macro_prefix}_${perhapsLT}LIBOBJS)"
   echo "EXTRA_${libname}_${libext}_SOURCES ="
@@ -1691,7 +1774,7 @@ func_emit_lib_Makefile_am ()
 }
 
 # func_emit_po_Makevars
-# emits the contents of po/ makefile parametrization to standard output.
+# emits the contents of po/ makefile parameterization to standard output.
 # Input:
 # - local_gnulib_dir  from --local-dir
 # - sourcebase      directory relative to destdir where to place source code
@@ -1772,21 +1855,21 @@ func_emit_po_POTFILES_in ()
 # - local_gnulib_dir  from --local-dir
 # - modules         list of modules, including dependencies
 # - libname         library name
+# - auxdir          directory relative to destdir where to place build aux files
 # - makefile_name   from --makefile-name
 # - libtool         true if libtool will be used, false or blank otherwise
 # - sourcebase      relative directory containing lib source code
 # - m4base          relative directory containing autoconf macros
 # - testsbase       relative directory containing unit test code
+# - macro_prefix    prefix of gl_LIBOBJS macros to use
 # - for_test        true if creating a package for testing, false otherwise
+# - use_libtests    true if a libtests.a should be built, false otherwise
+# Output:
+# - uses_subdirs    nonempty if object files in subdirs exist
 func_emit_tests_Makefile_am ()
 {
   if test "$libtool" = true; then
     libext=la
-  else
-    libext=a
-  fi
-  if test "$libtool" = true; then
-    libext=la
     sed_eliminate_LDFLAGS=
   else
     libext=a
@@ -1806,26 +1889,30 @@ func_emit_tests_Makefile_am ()
   echo "## Process this file with automake to produce Makefile.in."
   func_emit_copyright_notice
   echo
-  # Generate dependencies here, since it eases the debugging of test failures.
-  echo "AUTOMAKE_OPTIONS = 1.5 foreign"
-  echo
-  echo "ACLOCAL_AMFLAGS = -I ${testsbase_inverse}/${m4base}"
-  echo
+  uses_subdirs=
   (
     for module in $modules; do
-      func_verify_tests_module
+      if $for_test; then
+        func_verify_tests_module
+      else
+        func_verify_module
+      fi
       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' \
                 -e "$sed_eliminate_LDFLAGS" \
-                -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' \
+                -e 's,lib_\([A-Z][A-Z]*\),libtests_a_\1,g' \
                 -e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
                 -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \
                 -e "$sed_transform_check_PROGRAMS"
+          if $use_libtests && test "$module" = 'alloca'; then
+            echo "libtests_a_LIBADD += @${perhapsLT}ALLOCA@"
+            echo "libtests_a_DEPENDENCIES += @${perhapsLT}ALLOCA@"
+          fi
         } > amsnippet.tmp
-        # Skip the contents if its entirely empty.
+        # Skip the contents if it's entirely empty.
         if grep '[^     ]' amsnippet.tmp > /dev/null ; then
           echo "## begin gnulib module $module"
           echo
@@ -1834,9 +1921,28 @@ func_emit_tests_Makefile_am ()
           echo
         fi
         rm -f amsnippet.tmp
+        # Test whether there are some source files in subdirectories.
+        for f in `func_get_filelist "$module"`; do
+          case $f in
+            lib/*/*.c | tests/*/*.c) uses_subdirs=yes ;;
+          esac
+        done
       fi
     done
   ) > allsnippets.tmp
+  # Generate dependencies here, since it eases the debugging of test failures.
+  # If there are source files in subdirectories, prevent collision of the
+  # object files (example: hash.c and libxml/hash.c).
+  subdir_options=
+  if test -n "$uses_subdirs"; then
+    subdir_options=' subdir-objects'
+  fi
+  echo "AUTOMAKE_OPTIONS = 1.5 foreign${subdir_options}"
+  echo
+  if $for_test; then
+    echo "ACLOCAL_AMFLAGS = -I ${testsbase_inverse}/${m4base}"
+    echo
+  fi
   # Nothing is being added to SUBDIRS; nevertheless the existence of this
   # variable is needed to avoid an error from automake:
   #   "AM_GNU_GETTEXT used but SUBDIRS not defined"
@@ -1848,6 +1954,16 @@ func_emit_tests_Makefile_am ()
     echo "check_PROGRAMS ="
   fi
   echo "noinst_HEADERS ="
+  echo "noinst_LIBRARIES ="
+  if $use_libtests; then
+    if $for_test; then
+      echo "noinst_LIBRARIES += libtests.a"
+    else
+      echo "check_LIBRARIES = libtests.a"
+    fi
+  fi
+  # Automake versions < 1.9b create an empty pkgdatadir at installation time
+  # if you specify pkgdata_DATA to empty. This is a workaround.
   if grep '^pkgdata_DATA *+=' allsnippets.tmp > /dev/null; then
     echo "pkgdata_DATA ="
   fi
@@ -1865,9 +1981,35 @@ func_emit_tests_Makefile_am ()
   echo "  -I${testsbase_inverse} -I\$(srcdir)/${testsbase_inverse} \\"
   echo "  -I${testsbase_inverse}/${sourcebase-lib} -I\$(srcdir)/${testsbase_inverse}/${sourcebase-lib}"
   echo
-  echo "LDADD = ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext}"
+  local_ldadd_before=''
+  local_ldadd_after=''
+  if $use_libtests; then
+    # All test programs need to be linked with libtests.a.
+    # It needs to be passed to the linker before ${libname}.${libext}, since
+    # the tests-related modules depend on the main modules.
+    # It also needs to be passed to the linker after ${libname}.${libext}
+    # because the latter might contain incomplete modules (such as the 'error'
+    # module whose dependency to 'progname' is voluntarily omitted).
+    # The LIBTESTS_LIBDEPS can be passed to the linker once or twice, it does
+    # not matter.
+    local_ldadd_before=' libtests.a'
+    local_ldadd_after=' libtests.a $(LIBTESTS_LIBDEPS)'
+  fi
+  echo "LDADD =${local_ldadd_before} ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext}${local_ldadd_after}"
   echo
-  cat allsnippets.tmp
+  if $use_libtests; then
+    echo "libtests_a_SOURCES ="
+    # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However,
+    # automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@.
+    echo "libtests_a_LIBADD = \$(${macro_prefix}tests_LIBOBJS)"
+    echo "libtests_a_DEPENDENCIES = \$(${macro_prefix}tests_LIBOBJS)"
+    echo "EXTRA_libtests_a_SOURCES ="
+    # The circular dependency in LDADD requires this.
+    echo "AM_LIBTOOLFLAGS = --preserve-dup-deps"
+    echo
+  fi
+  cat allsnippets.tmp \
+    | sed -e 's|\$(top_srcdir)/build-aux/|$(top_srcdir)/'"$auxdir"'/|g'
   echo "# Clean up after Solaris cc."
   echo "clean-local:"
   echo "       rm -rf SunWS_cache"
@@ -1882,73 +2024,116 @@ func_emit_tests_Makefile_am ()
   rm -f allsnippets.tmp
 }
 
-# func_emit_initmacro_start
+# func_emit_initmacro_start macro_prefix
 # emits the first few statements of the gl_INIT macro to standard output.
 # - macro_prefix    prefix of gl_EARLY, gl_INIT macros to use
 func_emit_initmacro_start ()
 {
+  macro_prefix_arg="$1"
   # Overriding AC_LIBOBJ and AC_REPLACE_FUNCS has the effect of storing
-  # platform-dependent object files in ${macro_prefix}_LIBOBJS instead of
+  # platform-dependent object files in ${macro_prefix_arg}_LIBOBJS instead of
   # LIBOBJS.  The purpose is to allow several gnulib instantiations under
   # a single configure.ac file.  (AC_CONFIG_LIBOBJ_DIR does not allow this
   # flexibility.)
   # Furthermore it avoids an automake error like this when a Makefile.am
   # that uses pieces of gnulib also uses $(LIBOBJ):
   #   automatically discovered file `error.c' should not be explicitly mentioned
-  echo "  m4_pushdef([AC_LIBOBJ], m4_defn([${macro_prefix}_LIBOBJ]))"
-  echo "  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([${macro_prefix}_REPLACE_FUNCS]))"
+  echo "  m4_pushdef([AC_LIBOBJ], m4_defn([${macro_prefix_arg}_LIBOBJ]))"
+  echo "  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([${macro_prefix_arg}_REPLACE_FUNCS]))"
   # Overriding AC_LIBSOURCES has the same purpose of avoiding the automake
   # error when a Makefile.am that uses pieces of gnulib also uses $(LIBOBJ):
   #   automatically discovered file `error.c' should not be explicitly mentioned
   # We let automake know about the files to be distributed through the
   # EXTRA_lib_SOURCES variable.
-  echo "  m4_pushdef([AC_LIBSOURCES], m4_defn([${macro_prefix}_LIBSOURCES]))"
+  echo "  m4_pushdef([AC_LIBSOURCES], m4_defn([${macro_prefix_arg}_LIBSOURCES]))"
+  # Create data variables for checking the presence of files that are mentioned
+  # as AC_LIBSOURCES arguments. These are m4 variables, not shell variables,
+  # because we want the check to happen when the configure file is created,
+  # not when it is run. ${macro_prefix_arg}_LIBSOURCES_LIST is the list of
+  # files to check for. ${macro_prefix_arg}_LIBSOURCES_DIR is the subdirectory
+  # in which to expect them.
+  echo "  m4_pushdef([${macro_prefix_arg}_LIBSOURCES_LIST], [])"
+  echo "  m4_pushdef([${macro_prefix_arg}_LIBSOURCES_DIR], [])"
+  echo "  gl_COMMON"
 }
 
-# func_emit_initmacro_end
+# func_emit_initmacro_end macro_prefix
 # emits the last few statements of the gl_INIT macro to standard output.
 # - macro_prefix    prefix of gl_EARLY, gl_INIT macros to use
 func_emit_initmacro_end ()
 {
+  macro_prefix_arg="$1"
+  # Check the presence of files that are mentioned as AC_LIBSOURCES arguments.
+  # The check is performed only when autoconf is run from the directory where
+  # the configure.ac resides; if it is run from a different directory, the
+  # check is skipped.
+  echo "  m4_ifval(${macro_prefix_arg}_LIBSOURCES_LIST, ["
+  echo "    m4_syscmd([test ! -d ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[ ||"
+  echo "      for gl_file in ]${macro_prefix_arg}_LIBSOURCES_LIST[ ; do"
+  echo "        if test ! -r ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[/\$gl_file ; then"
+  echo "          echo \"missing file ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[/\$gl_file\" >&2"
+  echo "          exit 1"
+  echo "        fi"
+  echo "      done])dnl"
+  echo "      m4_if(m4_sysval, [0], [],"
+  echo "        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])"
+  echo "  ])"
+  echo "  m4_popdef([${macro_prefix_arg}_LIBSOURCES_DIR])"
+  echo "  m4_popdef([${macro_prefix_arg}_LIBSOURCES_LIST])"
   echo "  m4_popdef([AC_LIBSOURCES])"
   echo "  m4_popdef([AC_REPLACE_FUNCS])"
   echo "  m4_popdef([AC_LIBOBJ])"
   echo "  AC_CONFIG_COMMANDS_PRE(["
-  echo "    ${macro_prefix}_libobjs="
-  echo "    ${macro_prefix}_ltlibobjs="
-  echo "    if test -n \"\$${macro_prefix}_LIBOBJS\"; then"
+  echo "    ${macro_prefix_arg}_libobjs="
+  echo "    ${macro_prefix_arg}_ltlibobjs="
+  echo "    if test -n \"\$${macro_prefix_arg}_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 "        ${macro_prefix}_libobjs=\"\$${macro_prefix}_libobjs \$i.\$ac_objext\""
-  echo "        ${macro_prefix}_ltlibobjs=\"\$${macro_prefix}_ltlibobjs \$i.lo\""
+  echo "      for i in \`for i in \$${macro_prefix_arg}_LIBOBJS; do echo \"\$i\"; done | sed \"\$sed_drop_objext\" | sort | uniq\`; do"
+  echo "        ${macro_prefix_arg}_libobjs=\"\$${macro_prefix_arg}_libobjs \$i.\$ac_objext\""
+  echo "        ${macro_prefix_arg}_ltlibobjs=\"\$${macro_prefix_arg}_ltlibobjs \$i.lo\""
   echo "      done"
   echo "    fi"
-  echo "    AC_SUBST([${macro_prefix}_LIBOBJS], [\$${macro_prefix}_libobjs])"
-  echo "    AC_SUBST([${macro_prefix}_LTLIBOBJS], [\$${macro_prefix}_ltlibobjs])"
+  echo "    AC_SUBST([${macro_prefix_arg}_LIBOBJS], [\$${macro_prefix_arg}_libobjs])"
+  echo "    AC_SUBST([${macro_prefix_arg}_LTLIBOBJS], [\$${macro_prefix_arg}_ltlibobjs])"
   echo "  ])"
 }
 
-# func_emit_initmacro_done
+# func_emit_initmacro_done macro_prefix sourcebase
 # emits a few statements after the gl_INIT macro to standard output.
 # - macro_prefix    prefix of gl_EARLY, gl_INIT macros to use
+# - sourcebase      directory relative to destdir where to place source code
 func_emit_initmacro_done ()
 {
+  macro_prefix_arg="$1"
+  sourcebase_arg="$2"
   echo
   echo "# Like AC_LIBOBJ, except that the module name goes"
-  echo "# into ${macro_prefix}_LIBOBJS instead of into LIBOBJS."
-  echo "AC_DEFUN([${macro_prefix}_LIBOBJ],"
-  echo "  [${macro_prefix}_LIBOBJS=\"\$${macro_prefix}_LIBOBJS \$1.\$ac_objext\"])"
+  echo "# into ${macro_prefix_arg}_LIBOBJS instead of into LIBOBJS."
+  echo "AC_DEFUN([${macro_prefix_arg}_LIBOBJ], ["
+  echo "  AS_LITERAL_IF([\$1], [${macro_prefix_arg}_LIBSOURCES([\$1.c])])dnl"
+  echo "  ${macro_prefix_arg}_LIBOBJS=\"\$${macro_prefix_arg}_LIBOBJS \$1.\$ac_objext\""
+  echo "])"
   echo
   echo "# Like AC_REPLACE_FUNCS, except that the module name goes"
-  echo "# into ${macro_prefix}_LIBOBJS instead of into LIBOBJS."
-  echo "AC_DEFUN([${macro_prefix}_REPLACE_FUNCS],"
-  echo "  [AC_CHECK_FUNCS([\$1], , [${macro_prefix}_LIBOBJ(\$ac_func)])])"
+  echo "# into ${macro_prefix_arg}_LIBOBJS instead of into LIBOBJS."
+  echo "AC_DEFUN([${macro_prefix_arg}_REPLACE_FUNCS], ["
+  echo "  m4_foreach_w([gl_NAME], [\$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl"
+  echo "  AC_CHECK_FUNCS([\$1], , [${macro_prefix_arg}_LIBOBJ(\$ac_func)])"
+  echo "])"
   echo
-  echo "# Like AC_LIBSOURCES, except that it does nothing."
-  echo "# We rely on EXTRA_lib..._SOURCES instead."
-  echo "AC_DEFUN([${macro_prefix}_LIBSOURCES],"
-  echo "  [])"
+  echo "# Like AC_LIBSOURCES, except the directory where the source file is"
+  echo "# expected is derived from the gnulib-tool parameterization,"
+  echo "# and alloca is special cased (for the alloca-opt module)."
+  echo "# We could also entirely rely on EXTRA_lib..._SOURCES."
+  echo "AC_DEFUN([${macro_prefix_arg}_LIBSOURCES], ["
+  echo "  m4_foreach([_gl_NAME], [\$1], ["
+  echo "    m4_if(_gl_NAME, [alloca.c], [], ["
+  echo "      m4_define([${macro_prefix_arg}_LIBSOURCES_DIR], [$sourcebase_arg])"
+  echo "      m4_append([${macro_prefix_arg}_LIBSOURCES_LIST], _gl_NAME, [ ])"
+  echo "    ])"
+  echo "  ])"
+  echo "])"
 }
 
 # func_import modules
@@ -1965,13 +2150,16 @@ func_emit_initmacro_done ()
 # - auxdir          directory relative to destdir where to place build aux files
 # - inctests        true if --with-tests was given, blank otherwise
 # - avoidlist       list of modules to avoid, from --avoid
-# - lgpl            true if library's license shall be LGPL, blank otherwise
+# - lgpl            yes or a number if library's license shall be LGPL,
+#                   blank otherwise
 # - makefile_name   from --makefile-name
 # - libtool         true if --libtool was given, false if --no-libtool was
 #                   given, blank otherwise
 # - guessed_libtool true if the configure.ac file uses libtool, false otherwise
 # - macro_prefix    prefix of gl_EARLY, gl_INIT macros to use
 # - po_domain       prefix of i18n domain to use (without -gnulib suffix)
+# - vc_files        true if --vc-files was given, false if --no-vc-files was
+#                   given, blank otherwise
 # - autoconf_minversion  minimum supported autoconf version
 # - doit            : if actions shall be executed, false if only to be printed
 # - symbolic        true if files should be symlinked, copied otherwise
@@ -1997,6 +2185,7 @@ func_import ()
   cached_libtool=
   cached_macro_prefix=
   cached_po_domain=
+  cached_vc_files=
   cached_files=
   if test -f "$destdir"/$m4base/gnulib-cache.m4; then
     cached_libtool=false
@@ -2008,6 +2197,12 @@ func_import ()
         s,^.*gl_LOCAL_DIR([[ ]*\([^])]*\).*$,cached_local_gnulib_dir="\1",p
       }
       /gl_MODULES(/ {
+        :a
+          s/)/)/
+          tb
+          N
+          ba
+        :b
         s,^.*gl_MODULES([[ ]*\([^])]*\).*$,cached_specified_modules="\1",p
       }
       /gl_AVOID(/ {
@@ -2034,8 +2229,11 @@ func_import ()
       /gl_LIB(/ {
         s,^.*gl_LIB([[ ]*\([^])]*\).*$,cached_libname="\1",p
       }
+      /gl_LGPL(/ {
+        s,^.*gl_LGPL([[ ]*\([^])]*\).*$,cached_lgpl="\1",p
+      }
       /gl_LGPL/ {
-        s,^.*$,cached_lgpl=true,p
+        s,^.*$,cached_lgpl=yes,p
       }
       /gl_MAKEFILE_NAME(/ {
         s,^.*gl_MAKEFILE_NAME([[ ]*\([^])]*\).*$,cached_makefile_name="\1",p
@@ -2048,6 +2246,9 @@ func_import ()
       }
       /gl_PO_DOMAIN(/ {
         s,^.*gl_PO_DOMAIN([[ ]*\([^])]*\).*$,cached_po_domain="\1",p
+      }
+      /gl_VC_FILES(/ {
+        s,^.*gl_VC_FILES([[ ]*\([^])]*\).*$,cached_vc_files="\1",p
       }'
     eval `sed -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-cache.m4`
     if test -f "$destdir"/$m4base/gnulib-comp.m4; then
@@ -2166,6 +2367,10 @@ func_import ()
   if test -z "$po_domain"; then
     po_domain="$cached_po_domain"
   fi
+  # The vc_files defaults to the cached one.
+  if test -z "$vc_files"; then
+    vc_files="$cached_vc_files"
+  fi
 
   # Canonicalize the list of specified modules.
   specified_modules=`for m in $specified_modules; do echo $m; done | LC_ALL=C sort -u`
@@ -2177,28 +2382,100 @@ func_import ()
     echo "Module list with included dependencies:"
     echo "$modules" | sed -e 's/^/  /'
   fi
+  final_modules="$modules"
+
+  # Determine main module list and tests-related module list separately.
+  # The main module list is the transitive closure of the specified modules,
+  # ignoring tests modules. Its lib/* sources go into $sourcebase/. If --lgpl
+  # is specified, it will consist only of LGPLed source.
+  # The tests-related module list is the transitive closure of the specified
+  # modules, including tests modules, minus the main module list. Its lib/*
+  # sources (brought in through dependencies of *-tests modules) go into
+  # $testsbase/. It may contain GPLed source, even if --lgpl is specified.
+  # Determine main module list.
+  saved_inctests="$inctests"
+  inctests=""
+  modules="$specified_modules"
+  func_modules_transitive_closure
+  main_modules="$modules"
+  inctests="$saved_inctests"
+  if test $verbose -ge 1; then
+    echo "Main module list:"
+    echo "$main_modules" | sed -e 's/^/  /'
+  fi
+  # Determine tests-related module list.
+  echo "$final_modules" | LC_ALL=C sort -u > "$tmp"/final-modules
+  testsrelated_modules=`echo "$main_modules" | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/final-modules`
+  if test $verbose -ge 1; then
+    echo "Tests-related module list:"
+    echo "$testsrelated_modules" | sed -e 's/^/  /'
+  fi
 
-  # Add the dummy module if needed.
+  # Add the dummy module to the main module list if needed.
+  modules="$main_modules"
   func_modules_add_dummy
+  main_modules="$modules"
+
+  # Determine whether a $testsbase/libtests.a is needed.
+  use_libtests=false
+  for module in $testsrelated_modules; do
+    func_verify_nontests_module
+    if test -n "$module"; then
+      all_files=`func_get_filelist $module`
+      lib_files=`for f in $all_files; do \
+                   case $f in \
+                     lib/*) echo $f ;; \
+                   esac; \
+                 done | sed -e 's,^lib/,,'`
+      if test -n "$lib_files"; then
+        use_libtests=true
+        break
+      fi
+    fi
+  done
+
+  # Add the dummy module to the tests-related module list if needed.
+  if $use_libtests; then
+    modules="$testsrelated_modules"
+    func_modules_add_dummy
+    testsrelated_modules="$modules"
+  fi
 
   # If --lgpl, verify that the licenses of modules are compatible.
   if test -n "$lgpl"; then
-    for module in $modules; do
+    for module in $main_modules; do
       license=`func_get_license $module`
       case $license in
-        LGPL | LGPLv2+ | 'GPLed build tool') ;;
+        'GPLed build tool') ;;
         'public domain' | 'unlimited' | 'unmodifiable license text') ;;
-        *) func_fatal_error "incompatible license on module $module: $license" ;;
+        *)
+          case "$lgpl" in
+            yes | 3)
+              case $license in
+                LGPL | LGPLv2+) ;;
+                *) func_fatal_error "incompatible license on module $module: $license" ;;
+              esac
+              ;;
+            2)
+              case $license in
+                LGPLv2+) ;;
+                *) func_fatal_error "incompatible license on module $module: $license" ;;
+              esac
+              ;;
+            *) func_fatal_error "invalid value lgpl=$lgpl" ;;
+          esac
+          ;;
       esac
     done
   fi
 
   # Show banner notice of every module.
+  modules="$main_modules"
   func_modules_notice
 
   # Determine script to apply to imported library files.
   sed_transform_lib_file=
-  for module in $modules; do
+  for module in $main_modules; do
     if test $module = config-h; then
       # Assume config.h exists, and that -DHAVE_CONFIG_H is omitted.
       sed_transform_lib_file=$sed_transform_lib_file'
@@ -2207,21 +2484,65 @@ func_import ()
       break
     fi
   done
+  sed_transform_main_lib_file="$sed_transform_lib_file"
   if test -n "$do_copyrights"; then
     if test -n "$lgpl"; then
       # Update license.
-      sed_transform_lib_file=$sed_transform_lib_file'
-        s/GNU General/GNU Lesser General/g
-        s/version 2\([ ,]\)/version 2.1\1/g
+      case "$lgpl" in
+        yes | 3)
+          sed_transform_main_lib_file=$sed_transform_main_lib_file'
+            s/GNU General/GNU Lesser General/g
+          '
+          ;;
+        2)
+          sed_transform_main_lib_file=$sed_transform_main_lib_file'
+            s/GNU General/GNU Lesser General/g
+            s/version [23]\([ ,]\)/version 2.1\1/g
+          '
+          ;;
+        *) func_fatal_error "invalid value lgpl=$lgpl" ;;
+      esac
+    else
+      # Update license.
+      sed_transform_main_lib_file=$sed_transform_main_lib_file'
+        s/GNU Lesser General/GNU General/g
+        s/GNU Library General/GNU General/g
+        s/version \(2\|2\.1\)\([ ,]\)/version 3\2/g
       '
     fi
   fi
 
-  # Determine final file list.
+  # Determine script to apply to library files that go into $testsbase/.
+  sed_transform_testsrelated_lib_file="$sed_transform_lib_file"
+  if test -n "$do_copyrights"; then
+    # Update license.
+    sed_transform_testsrelated_lib_file=$sed_transform_testsrelated_lib_file'
+      s/GNU Lesser General/GNU General/g
+      s/GNU Library General/GNU General/g
+      s/version \(2\|2\.1\)\([ ,]\)/version 3\2/g
+    '
+  fi
+
+  # Determine the final file lists.
+  # They must be computed separately, because files in lib/* go into
+  # $sourcebase/ if they are in the main file list but into $testsbase/
+  # if they are in the tests-related file list. Furthermore lib/dummy.c
+  # can be in both.
+  # Determine final main file list.
+  modules="$main_modules"
+  func_modules_to_filelist
+  main_files="$files"
+  # Determine final tests-related file list.
+  modules="$testsrelated_modules"
   func_modules_to_filelist
+  testsrelated_files=`echo "$files" | sed -e 's,^lib/,tests=lib/,'`
+  # Merge both file lists.
+  sed_remove_empty_lines='/^$/d'
+  files=`{ echo "$main_files"; echo "$testsrelated_files"; } | sed -e "$sed_remove_empty_lines" | LC_ALL=C sort -u`
   if test $verbose -ge 0; then
     echo "File list:"
-    echo "$files" | sed -e 's/^/  /'
+    sed_prettyprint_files='s,^tests=lib/\(.*\)$,lib/\1 -> tests/\1,'
+    echo "$files" | sed -e "$sed_prettyprint_files" -e 's/^/  /'
   fi
 
   test -n "$files" \
@@ -2239,13 +2560,17 @@ func_import ()
     s,^doc/,$cached_docbase/,
     s,^lib/,$cached_sourcebase/,
     s,^m4/,$cached_m4base/,
-    s,^tests/,$cached_testsbase/,"
+    s,^tests/,$cached_testsbase/,
+    s,^tests=lib/,$cached_testsbase/,
+    s,^top/,,"
   sed_rewrite_new_files="\
     s,^build-aux/,$auxdir/,
     s,^doc/,$docbase/,
     s,^lib/,$sourcebase/,
     s,^m4/,$m4base/,
-    s,^tests/,$testsbase/,"
+    s,^tests/,$testsbase/,
+    s,^tests=lib/,$testsbase/,
+    s,^top/,,"
 
   # Create directories.
   { echo "$sourcebase"
@@ -2336,13 +2661,25 @@ func_import ()
   # - already_present  nonempty if the file already exists, empty otherwise
   func_add_or_update ()
   {
+    of="$f"
+    case "$f" in
+      tests=lib/*) f=`echo "$f" | sed -e 's,^tests=lib/,lib/,'` ;;
+    esac
     func_dest_tmpfilename "$g"
     func_lookup_file "$f"
     cp "$lookedup_file" "$tmpfile" || func_fatal_error "failed"
-    if test -n "$sed_transform_lib_file"; then
-      case "$f" in
+    if test -n "$sed_transform_main_lib_file"; then
+      case "$of" in
         lib/*)
-          sed -e "$sed_transform_lib_file" \
+          sed -e "$sed_transform_main_lib_file" \
+            < "$lookedup_file" > "$tmpfile" || func_fatal_error "failed"
+          ;;
+      esac
+    fi
+    if test -n "$sed_transform_testsrelated_lib_file"; then
+      case "$of" in
+        tests=lib/*)
+          sed -e "$sed_transform_testsrelated_lib_file" \
             < "$lookedup_file" > "$tmpfile" || func_fatal_error "failed"
           ;;
       esac
@@ -2357,7 +2694,7 @@ func_import ()
           if test -n "$already_present"; then
             echo "Updating file $g (backup in ${g}~)"
           else
-            echo "Replacing file $g (non-gnulib code backuped in ${g}~) !!"
+            echo "Replacing file $g (non-gnulib code backed up in ${g}~) !!"
           fi
           mv -f "$destdir/$g" "$destdir/${g}~" || func_fatal_error "failed"
           if { test -n "$symbolic" \
@@ -2373,7 +2710,7 @@ func_import ()
           if test -n "$already_present"; then
             echo "Update file $g (backup in ${g}~)"
           else
-            echo "Replace file $g (non-gnulib code backuped in ${g}~) !!"
+            echo "Replace file $g (non-gnulib code backed up in ${g}~) !!"
           fi
         fi
       fi
@@ -2448,7 +2785,11 @@ func_import ()
     func_append actioncmd " --avoid=$module"
   done
   if test -n "$lgpl"; then
-    func_append actioncmd " --lgpl"
+    if test "$lgpl" = yes; then
+      func_append actioncmd " --lgpl"
+    else
+      func_append actioncmd " --lgpl=$lgpl"
+    fi
   fi
   if test -n "$makefile_name"; then
     func_append actioncmd " --makefile-name=$makefile_name"
@@ -2462,6 +2803,13 @@ func_import ()
   if test -n "$po_domain"; then
     func_append actioncmd " --po-domain=$po_domain"
   fi
+  if test -n "$vc_files"; then
+    if test "$vc_files" = true; then
+      func_append actioncmd " --vc-files"
+    else
+      func_append actioncmd " --no-vc-files"
+    fi
+  fi
   func_append actioncmd " `echo $specified_modules`"
 
   # Default the makefile name to Makefile.am.
@@ -2476,6 +2824,7 @@ func_import ()
 
   # Create library makefile.
   func_dest_tmpfilename $sourcebase/$makefile_am
+  modules="$main_modules"
   func_emit_lib_Makefile_am > "$tmpfile"
   if test -f "$destdir"/$sourcebase/$makefile_am; then
     if cmp "$destdir"/$sourcebase/$makefile_am "$tmpfile" > /dev/null; then
@@ -2532,7 +2881,7 @@ func_import ()
         func_append added_files "$pobase/$file$nl"
       fi
     done
-    # Create po makefile parametrization, part 1.
+    # Create po makefile parameterization, part 1.
     func_dest_tmpfilename $pobase/Makevars
     func_emit_po_Makevars > "$tmpfile"
     if test -f "$destdir"/$pobase/Makevars; then
@@ -2558,7 +2907,7 @@ func_import ()
       fi
       func_append added_files "$pobase/Makevars$nl"
     fi
-    # Create po makefile parametrization, part 2.
+    # Create po makefile parameterization, part 2.
     func_dest_tmpfilename $pobase/POTFILES.in
     func_emit_po_POTFILES_in > "$tmpfile"
     if test -f "$destdir"/$pobase/POTFILES.in; then
@@ -2661,7 +3010,9 @@ func_import ()
         esac ;;
     esac
     echo "gl_LOCAL_DIR([$relative_local_gnulib_dir])"
-    echo "gl_MODULES(["`echo $specified_modules`"])"
+    echo "gl_MODULES(["
+    echo "$specified_modules" | sed 's/^/  /g'
+    echo "])"
     echo "gl_AVOID([$avoidlist])"
     echo "gl_SOURCE_BASE([$sourcebase])"
     echo "gl_M4_BASE([$m4base])"
@@ -2670,13 +3021,22 @@ func_import ()
     echo "gl_TESTS_BASE([$testsbase])"
     test -z "$inctests" || echo "gl_WITH_TESTS"
     echo "gl_LIB([$libname])"
-    test -z "$lgpl" || echo "gl_LGPL"
+    if test -n "$lgpl"; then
+      if test "$lgpl" = yes; then
+        echo "gl_LGPL"
+      else
+        echo "gl_LGPL([$lgpl])"
+      fi
+    fi
     echo "gl_MAKEFILE_NAME([$makefile_name])"
     if test "$libtool" = true; then
       echo "gl_LIBTOOL"
     fi
     echo "gl_MACRO_PREFIX([$macro_prefix])"
     echo "gl_PO_DOMAIN([$po_domain])"
+    if test -n "$vc_files"; then
+      echo "gl_VC_FILES([$vc_files])"
+    fi
   ) > "$tmpfile"
   if test -f "$destdir"/$m4base/gnulib-cache.m4; then
     if cmp "$destdir"/$m4base/gnulib-cache.m4 "$tmpfile" > /dev/null; then
@@ -2735,7 +3095,7 @@ func_import ()
     if grep AC_GNU_SOURCE "$destdir"/$m4base/*.m4 >/dev/null 2>/dev/null; then
       echo "  AC_REQUIRE([AC_GNU_SOURCE])"
     fi
-    for module in $modules; do
+    for module in $final_modules; do
       func_verify_module
       if test -n "$module"; then
         func_get_autoconf_early_snippet "$module"
@@ -2748,7 +3108,6 @@ func_import ()
     echo "# \"Check for header files, types and library functions\"."
     echo "AC_DEFUN([${macro_prefix}_INIT],"
     echo "["
-    func_emit_initmacro_start
     if test "$libtool" = true; then
       echo "  AM_CONDITIONAL([GL_COND_LIBTOOL], [true])"
       echo "  gl_cond_libtool=true"
@@ -2758,7 +3117,6 @@ func_import ()
       echo "  gl_libdeps="
       echo "  gl_ltlibdeps="
     fi
-    echo "  gl_source_base='$sourcebase'"
     if test "$auxdir" != "build-aux"; then
       sed_replace_build_aux='
         :a
@@ -2769,7 +3127,9 @@ func_import ()
     else
       sed_replace_build_aux=
     fi
-    for module in $modules; do
+    func_emit_initmacro_start $macro_prefix
+    echo "  gl_source_base='$sourcebase'"
+    for module in $main_modules; do
       func_verify_module
       if test -n "$module"; then
         func_get_autoconf_snippet "$module" \
@@ -2784,6 +3144,24 @@ func_import ()
         fi
       fi
     done
+    func_emit_initmacro_end $macro_prefix
+    echo "  gltests_libdeps="
+    echo "  gltests_ltlibdeps="
+    func_emit_initmacro_start ${macro_prefix}tests
+    echo "  gl_source_base='$testsbase'"
+    for module in $testsrelated_modules; do
+      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" \
+                -e 's/\$gl_cond_libtool/false/g' \
+                -e 's/gl_libdeps/gltests_libdeps/g' \
+                -e 's/gl_ltlibdeps/gltests_ltlibdeps/g'
+      fi
+    done
+    func_emit_initmacro_end ${macro_prefix}tests
     # _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
@@ -2793,9 +3171,13 @@ func_import ()
       echo "  ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
       echo "  AC_SUBST([${libname_upper}_LTLIBDEPS])"
     fi
-    func_emit_initmacro_end
+    if $use_libtests; then
+      echo "  LIBTESTS_LIBDEPS=\"\$gltests_libdeps\""
+      echo "  AC_SUBST([LIBTESTS_LIBDEPS])"
+    fi
     echo "])"
-    func_emit_initmacro_done
+    func_emit_initmacro_done $macro_prefix $sourcebase
+    func_emit_initmacro_done ${macro_prefix}tests $testsbase
     echo
     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."
@@ -2835,6 +3217,7 @@ func_import ()
   if test -n "$inctests"; then
     # Create tests makefile.
     func_dest_tmpfilename $testsbase/$makefile_am
+    modules="$testsrelated_modules"
     func_emit_tests_Makefile_am > "$tmpfile"
     if test -f "$destdir"/$testsbase/$makefile_am; then
       if cmp "$destdir"/$testsbase/$makefile_am "$tmpfile" > /dev/null; then
@@ -2861,99 +3244,103 @@ func_import ()
     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 test "$vc_files" != false; then
+    # 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,'
+      # Treat gnulib-comp.m4 like an added file, even if it already existed.
+      echo "$m4base/|A|gnulib-comp.m4"
+    } | 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 "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"
+              echo "Creating $destdir/$dir$ignore"
+              {
+                if test "$ignore" = .cvsignore; then
+                  echo ".deps"
+                  # Automake generates Makefile rules that create .dirstamp files.
+                  echo ".dirstamp"
+                fi
+                echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u
+              } > "$destdir/$dir$ignore"
             else
-              echo "Update $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)"
+              echo "Create $destdir/$dir$ignore"
             fi
           fi
         fi
-      else
-        if test -n "$dir_added"; then
-          if $doit; then
-            echo "Creating $destdir/$dir$ignore"
-            {
-              if test "$ignore" = .cvsignore; then
-                echo ".deps"
-                # Automake generates Makefile rules that create .dirstamp files.
-                echo ".dirstamp"
-              fi
-              echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u
-            } > "$destdir/$dir$ignore"
-          else
-            echo "Create $destdir/$dir$ignore"
-          fi
+      }
+      func_done_dir ()
+      {
+        dir="$1"
+        dir_added="$2"
+        dir_removed="$3"
+        if test -d "$destdir/CVS" || test -d "$destdir/${dir}CVS" || test -f "$destdir/${dir}.cvsignore"; then
+          func_update_ignorelist .cvsignore
         fi
-      fi
-    }
-    func_done_dir ()
-    {
-      dir="$1"
-      dir_added="$2"
-      dir_removed="$3"
-      if test -d "$destdir/CVS" || 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
+        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<&-
     }
-    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<&-
-  }
+  fi
 
   echo "Finished."
   echo
   echo "You may need to add #include directives for the following .h files."
-  # Intersect $specified_modules and $modules
-  # (since $specified_modules is not necessarily of subset of $modules - some
-  # may have been skipped through --avoid, and since the elements of $modules
-  # but not in $specified_modules can go away without explicit notice - through
-  # changes in the module dependencies).
+  # Intersect $specified_modules and $main_modules
+  # (since $specified_modules is not necessarily of subset of $main_modules
+  # - some may have been skipped through --avoid, and since the elements of
+  # $main_modules but not in $specified_modules can go away without explicit
+  # notice - through changes in the module dependencies).
   echo "$specified_modules" > "$tmp"/modules1 # a sorted list, one module per line
-  echo "$modules" > "$tmp"/modules2 # also a sorted list, one module per line
+  echo "$main_modules" > "$tmp"/modules2 # also a sorted list, one module per line
   # First the #include <...> directives without #ifs, sorted for convenience,
   # then the #include "..." directives without #ifs, sorted for convenience,
   # then the #include directives that are surrounded by #ifs. Not sorted.
@@ -2976,7 +3363,7 @@ func_import ()
   ) | sed -e '/^$/d' -e 's/^/  /'
   rm -f "$tmp"/include-angles "$tmp"/include-quotes "$tmp"/include-if
 
-  for module in $modules; do
+  for module in $main_modules; do
     func_get_link_directive "$module"
   done \
     | LC_ALL=C sort -u | sed -e '/^$/d' -e 's/^/  /' > "$tmp"/link
@@ -3024,6 +3411,18 @@ func_import ()
     fi
   fi
   echo "  - mention \"-I ${m4base}\" in ACLOCAL_AMFLAGS in Makefile.am,"
+  {
+    # Find the first parent directory of $m4base that contains a Makefile.am.
+    sed_last='s,^.*/\([^/][^/]*\)//*$,\1/,
+s,//*$,/,'
+    sed_butlast='s,[^/][^/]*//*$,,'
+    dir1="${m4base}/"; dir2=""
+    while test -n "$dir1" && test ! -f "${destdir}/${dir1}Makefile.am"; do
+      dir2=`echo "$dir1" | sed -e "$sed_last"`"$dir2"
+      dir1=`echo "$dir1" | sed -e "$sed_butlast"`
+    done
+    echo "  - mention ${dir2}gnulib-cache.m4 in EXTRA_DIST in ${dir1}Makefile.am."
+  }
   echo "  - invoke ${macro_prefix}_EARLY in $configure_ac, right after AC_PROG_CC,"
   echo "  - invoke ${macro_prefix}_INIT in $configure_ac."
 }
@@ -3105,6 +3504,7 @@ func_create_testdir ()
   testsbase=gltests
   macro_prefix=gl
   po_domain=
+  vc_files=
 
   # Determine final module list.
   func_modules_transitive_closure
@@ -3131,7 +3531,8 @@ func_create_testdir ()
     s,^doc/,$docbase/,
     s,^lib/,$sourcebase/,
     s,^m4/,$m4base/,
-    s,^tests/,$testsbase/,"
+    s,^tests/,$testsbase/,
+    s,^top/,,"
 
   # Create directories.
   for f in $files; do echo $f; done \
@@ -3181,6 +3582,7 @@ func_create_testdir ()
   # Create $sourcebase/Makefile.am.
   mkdir -p "$testdir/$sourcebase"
   func_emit_lib_Makefile_am > "$testdir/$sourcebase/Makefile.am"
+  any_uses_subdirs="$uses_subdirs"
 
   # Create $m4base/Makefile.am.
   mkdir -p "$testdir/$m4base"
@@ -3209,12 +3611,17 @@ func_create_testdir ()
 
   if test -n "$inctests"; then
     test -d "$testdir/$testsbase" || mkdir "$testdir/$testsbase"
+    # Viewed from the $testsbase subdirectory, $auxdir is different.
+    saved_auxdir="$auxdir"
+    auxdir=`echo "$testsbase/"|sed 's%[^/][^/]*//*%../%g'`"$auxdir"
     # Create $testsbase/Makefile.am.
+    use_libtests=false
     func_emit_tests_Makefile_am > "$testdir/$testsbase/Makefile.am"
+    any_uses_subdirs="$any_uses_subdirs$uses_subdirs"
     # Create $testsbase/configure.ac.
     (echo "# Process this file with autoconf to produce a configure script."
      echo "AC_INIT([dummy], [0])"
-     echo "AC_CONFIG_AUX_DIR([../$auxdir])"
+     echo "AC_CONFIG_AUX_DIR([$auxdir])"
      echo "AM_INIT_AUTOMAKE"
      echo
      echo "AM_CONFIG_HEADER([config.h])"
@@ -3252,13 +3659,13 @@ func_create_testdir ()
      # expansion of the required macro before the current point, and only one
      # expansion total).
      echo "AC_DEFUN([gl_INIT], ["
-     func_emit_initmacro_start
      sed_replace_build_aux='
        :a
        /AC_CONFIG_FILES(.*:build-aux\/.*)/{
-         s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:../'"$auxdir"'/\2)|
+         s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)|
          ba
        }'
+     func_emit_initmacro_start $macro_prefix
      # 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.
@@ -3278,6 +3685,7 @@ func_create_testdir ()
            | sed -e "$sed_replace_build_aux"
        fi
      done
+     func_emit_initmacro_end $macro_prefix
      # _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
@@ -3287,9 +3695,8 @@ func_create_testdir ()
        echo "  ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
        echo "  AC_SUBST([${libname_upper}_LTLIBDEPS])"
      fi
-     func_emit_initmacro_end
      echo "])"
-     func_emit_initmacro_done
+     func_emit_initmacro_done $macro_prefix $sourcebase # FIXME use $sourcebase or $testsbase?
      echo
      echo "gl_INIT"
      echo
@@ -3299,6 +3706,7 @@ func_create_testdir ()
      echo
      echo "AC_OUTPUT([Makefile])"
     ) > "$testdir/$testsbase/configure.ac"
+    auxdir="$saved_auxdir"
     func_append subdirs " $testsbase"
     subdirs_with_configure_ac="$subdirs_with_configure_ac $testsbase"
   fi
@@ -3338,7 +3746,7 @@ func_create_testdir ()
    echo
    echo "AC_PROG_RANLIB"
    echo
-   if test -n "$uses_subdirs"; then
+   if test -n "$any_uses_subdirs"; then
      echo "AM_PROG_CC_C_O"
      echo
    fi
@@ -3362,7 +3770,6 @@ func_create_testdir ()
      echo "gl_libdeps="
      echo "gl_ltlibdeps="
    fi
-   echo "gl_source_base='$sourcebase'"
    # Wrap the set of autoconf snippets into an autoconf macro that is then
    # invoked. This is needed because autoconf does not support AC_REQUIRE
    # at the top level:
@@ -3371,7 +3778,6 @@ func_create_testdir ()
    # expansion of the required macro before the current point, and only one
    # expansion total).
    echo "AC_DEFUN([gl_INIT], ["
-   func_emit_initmacro_start
    if test "$auxdir" != "build-aux"; then
      sed_replace_build_aux='
        :a
@@ -3382,6 +3788,8 @@ func_create_testdir ()
    else
      sed_replace_build_aux=
    fi
+   func_emit_initmacro_start $macro_prefix
+   echo "gl_source_base='$sourcebase'"
    for module in $modules; do
      func_verify_nontests_module
      if test -n "$module"; then
@@ -3389,6 +3797,7 @@ func_create_testdir ()
          | sed -e "$sed_replace_build_aux"
      fi
    done
+   func_emit_initmacro_end $macro_prefix
    # _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
@@ -3398,9 +3807,8 @@ func_create_testdir ()
      echo "  ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
      echo "  AC_SUBST([${libname_upper}_LTLIBDEPS])"
    fi
-   func_emit_initmacro_end
    echo "])"
-   func_emit_initmacro_done
+   func_emit_initmacro_done $macro_prefix $sourcebase
    echo
    echo "gl_INIT"
    echo
@@ -3513,7 +3921,12 @@ func_create_megatestdir ()
   func_append megasubdirs "ALL"
 
   # Create autobuild.
-  cvsdate=`sh "$gnulib_dir/build-aux/mdate-sh" "$gnulib_dir/CVS/Entries" \
+  cvsdate=`if test -f "$gnulib_dir/CVS/Entries"; then \
+             vc_witness="$gnulib_dir/CVS/Entries"; \
+           else \
+             vc_witness="$gnulib_dir/.git/refs/heads/master"; \
+           fi; \
+           sh "$gnulib_dir/build-aux/mdate-sh" "$vc_witness" \
              | 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,' \
@@ -3711,7 +4124,7 @@ case $mode in
               # such as
               #   local_gnulib_dir, avoidlist, sourcebase, m4base, pobase,
               #   docbase, testsbase, inctests, libname, lgpl, makefile_name,
-              #   libtool, macro_prefix, po_domain
+              #   libtool, macro_prefix, po_domain, vc_files
               # don't propagate from one directory to another.
               (func_import) || func_exit 1
             done