refresh 01-gnulib-directory.patch
[gnulib.git] / gnulib-tool
index f6c29f2..69ff2a1 100755 (executable)
@@ -224,9 +224,10 @@ Options for --import, --add/remove-import,
                             have code that provides equivalent functionality.
                             This option can be repeated.
       --conditional-dependencies
-                            Support conditional dependencies (experimental,
-                            may save configure time and object code, not
-                            compatible with --with-tests).
+                            Support conditional dependencies (may save configure
+                            time and object code).
+      --no-conditional-dependencies
+                            Don't use conditional dependencies.
       --libtool             Use libtool rules.
       --no-libtool          Don't use libtool rules.
 
@@ -258,6 +259,8 @@ Options for --import, --add/remove-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.
+      --witness-c-macro=NAME  Specify the C macro that is defined when the
+                            sources in this directory are compiled or used.
       --vc-files            Update version control related files.
       --no-vc-files         Don't update version control related files
                             (.gitignore and/or .cvsignore).
@@ -272,6 +275,8 @@ Options for --create-[mega]testdir, --[mega]test:
                             Exclude unit tests that require root privileges.
       --without-unportable-tests
                             Exclude unit tests that fail on some platforms.
+      --single-configure    Generate a single configure file, not a separate
+                            configure file for the tests directory.
 
 Options for --import, --add/remove-import, --update,
             --create-[mega]testdir, --[mega]test:
@@ -343,10 +348,22 @@ func_emit_copyright_notice ()
                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"
-  echo "# Public License, this file may be distributed as part of a program"
-  echo "# that contains a configuration script generated by Autoconf, under"
+  echo "# This file is free software; you can redistribute it and/or modify"
+  echo "# it under the terms of the GNU General Public License as published by"
+  echo "# the Free Software Foundation; either version 3 of the License, or"
+  echo "# (at your option) any later version."
+  echo "#"
+  echo "# This file is distributed in the hope that it will be useful,"
+  echo "# but WITHOUT ANY WARRANTY; without even the implied warranty of"
+  echo "# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the"
+  echo "# GNU General Public License for more details."
+  echo "#"
+  echo "# You should have received a copy of the GNU General Public License"
+  echo "# along with this file.  If not, see <http://www.gnu.org/licenses/>."
+  echo "#"
+  echo "# As a special exception to the GNU General Public License,"
+  echo "# this file may be distributed as part of a program that"
+  echo "# contains a configuration script generated by Autoconf, under"
   echo "# the same distribution terms as the rest of that program."
   echo "#"
   echo "# Generated by gnulib-tool."
@@ -438,7 +455,7 @@ func_gnulib_dir ()
       * ) self_abspathname=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`/"$linkval" ;;
     esac
   done
-  gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`
+  gnulib_dir=/usr/share/gnulib
 }
 
 # func_tmpdir
@@ -915,15 +932,17 @@ fi
 #                          otherwise
 # - excl_unportable_tests  true if --without-unportable-tests was given, blank
 #                          otherwise
+# - single_configure  true if --single-configure was given, false otherwise
 # - avoidlist       list of modules to avoid, from --avoid
-# - cond_dependencies  true if --conditional-dependencies was given, blank
-#                      otherwise
+# - cond_dependencies  true if --conditional-dependencies was given, false if
+#                      --no-conditional-dependencies 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
+# - witness_c_macro  from --witness-c-macro
 # - vc_files        true if --vc-files was given, false if --no-vc-files was
 #                   given, blank otherwise
 # - autoconf_minversion  minimum supported autoconf version
@@ -958,6 +977,7 @@ fi
   excl_longrunning_tests=
   excl_privileged_tests=
   excl_unportable_tests=
+  single_configure=false
   avoidlist=
   cond_dependencies=
   lgpl=
@@ -965,6 +985,7 @@ fi
   libtool=
   macro_prefix=
   po_domain=
+  witness_c_macro=
   vc_files=
   do_changelog=:
   doit=:
@@ -1149,6 +1170,9 @@ fi
       --without-unportable-tests | --without-unportable-test | --without-unportable-tes | --without-unportable-te | --without-unportable-t | --without-unportable- | --without-unportable | --without-unportabl | --without-unportab | --without-unporta | --without-unport | --without-unpor | --without-unpo | --without-unp | --without-un | --without-u)
         excl_unportable_tests=true
         shift ;;
+      --single-configure | --single-configur | --single-configu | --single-config | --single-confi | --single-conf | --single-con | --single-con | --single-co | --single-c | --single- | --single | --singl | --sing | --sin | --si)
+        single_configure=true
+        shift ;;
       --avoid )
         shift
         if test $# = 0; then
@@ -1163,6 +1187,9 @@ fi
       --conditional-dependencies | --conditional-dependencie | --conditional-dependenci | --conditional-dependenc | --conditional-dependen | --conditional-depende | --conditional-depend | --conditional-depen | --conditional-depe | --conditional-dep | --conditional-de | --conditional-d | --conditional- | --conditional | --conditiona | --condition | --conditio | --conditi | --condit | --condi | --cond | --con)
         cond_dependencies=true
         shift ;;
+      --no-conditional-dependencies | --no-conditional-dependencie | --no-conditional-dependenci | --no-conditional-dependenc | --no-conditional-dependen | --no-conditional-depende | --no-conditional-depend | --no-conditional-depen | --no-conditional-depe | --no-conditional-dep | --no-conditional-de | --no-conditional-d | --no-conditional- | --no-conditional | --no-conditiona | --no-condition | --no-conditio | --no-conditi | --no-condit | --no-condi | --no-cond | --no-con | --no-co)
+        cond_dependencies=false
+        shift ;;
       --lgpl )
         lgpl=yes
         shift ;;
@@ -1210,6 +1237,16 @@ fi
       --po-domain=* )
         po_domain=`echo "X$1" | sed -e 's/^X--po-domain=//'`
         shift ;;
+      --witness-c-macro )
+        shift
+        if test $# = 0; then
+          func_fatal_error "missing argument for --witness-c-macro"
+        fi
+        witness_c_macro="$1"
+        shift ;;
+      --witness-c-macro=* )
+        witness_c_macro=`echo "X$1" | sed -e 's/^X--witness-c-macro=//'`
+        shift ;;
       --vc-files )
         vc_files=true
         shift ;;
@@ -1253,7 +1290,8 @@ fi
 
   if case "$mode" in import | add-import | remove-import) true;; *) false;; esac; then
     if test -n "$excl_cxx_tests" || test -n "$excl_longrunning_tests" \
-       || test -n "$excl_privileged_tests" || test -n "$excl_unportable_tests"; then
+       || test -n "$excl_privileged_tests" || test -n "$excl_unportable_tests" \
+       || test "$single_configure" != false; then
       echo "gnulib-tool: invalid options for '$mode' mode" 1>&2
       echo "Try 'gnulib-tool --help' for more information." 1>&2
       func_exit 1
@@ -1291,7 +1329,7 @@ fi
        || test -n "$excl_privileged_tests" || test -n "$excl_unportable_tests" \
        || test -n "$avoidlist" || test -n "$lgpl" || test -n "$makefile_name" \
        || test -n "$macro_prefix" || test -n "$po_domain" \
-       || test -n "$vc_files"; then
+       || test -n "$witness_c_macro" || 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
@@ -1308,7 +1346,7 @@ fi
   if test -z "$pobase" && test -n "$po_domain"; then
     func_warning "--po-domain has no effect without a --po-base option"
   fi
-  if test -n "$cond_dependencies" && test -n "$inctests"; then
+  if test "$cond_dependencies" = true && test -n "$inctests"; then
     echo "gnulib-tool: option --conditional-dependencies is not supported with --with-tests" 1>&2
     func_exit 1
   fi
@@ -2070,24 +2108,26 @@ func_get_dependencies ()
       ;;
   esac
   # Then the explicit dependencies listed in the module description.
-  if ! $modcache; then
-    func_lookup_file "modules/$1"
-    sed -n -e "/^Depends-on$sed_extract_prog" < "$lookedup_file"
-  else
-    func_cache_lookup_module "$1"
-    # Output the field's value, including the final newline (if any).
-    if $have_associative; then
-      if eval 'test -n "${modcache_dependson[$1]+set}"'; then
-        eval 'echo "${modcache_dependson[$1]}"'
-      fi
+  { if ! $modcache; then
+      func_lookup_file "modules/$1"
+      sed -n -e "/^Depends-on$sed_extract_prog" < "$lookedup_file"
     else
-      eval "field_set=\"\$${cachevar}_dependson_set\""
-      if test -n "$field_set"; then
-        eval "field_value=\"\$${cachevar}_dependson\""
-        echo "${field_value}"
+      func_cache_lookup_module "$1"
+      # Output the field's value, including the final newline (if any).
+      if $have_associative; then
+        if eval 'test -n "${modcache_dependson[$1]+set}"'; then
+          eval 'echo "${modcache_dependson[$1]}"'
+        fi
+      else
+        eval "field_set=\"\$${cachevar}_dependson_set\""
+        if test -n "$field_set"; then
+          eval "field_value=\"\$${cachevar}_dependson\""
+          echo "${field_value}"
+        fi
       fi
     fi
-  fi
+  } \
+  | sed -e '/^#/d'
 }
 
 # func_get_autoconf_early_snippet module
@@ -2605,7 +2645,7 @@ func_modules_transitive_closure ()
   inmodules="$modules"
   outmodules=
   fmtc_inc_all_tests="$inc_all_direct_tests"
-  if test -n "$cond_dependencies"; then
+  if test "$cond_dependencies" = true; then
     for module in $inmodules; do
       func_verify_module
       if test -n "$module"; then
@@ -2623,7 +2663,7 @@ func_modules_transitive_closure ()
       if test -n "$module"; then
         if func_acceptable $module; then
           func_append outmodules " $module"
-          if test -n "$cond_dependencies"; then
+          if test "$cond_dependencies" = true; then
             if func_get_automake_snippet_conditional $module | grep '^if ' > /dev/null; then
               # A module whose Makefile.am snippet contains a reference to an
               # automake conditional. If we were to use it conditionally, we
@@ -2690,12 +2730,16 @@ func_modules_transitive_closure ()
                   ;;
               esac
             done
-            if $inc; then
+            if $inc && func_acceptable "$dep"; then
               func_append inmodules " $dep"
-              if test -n "$cond_dependencies"; then
+              if test "$cond_dependencies" = true; then
                 escaped_dep=`echo "$dep" | sed -e "$sed_escape_dependency"`
-                sed_extract_condition1='/^ *'"$escaped_dep"' *$/{s/^.*$/true/p}'
-                sed_extract_condition2='/^ *'"$escaped_dep"' *\[.*\] *$/{s/^ *'"$escaped_dep"' *\[\(.*\)\] *$/\1/p}'
+                sed_extract_condition1='/^ *'"$escaped_dep"' *$/{
+                  s/^.*$/true/p
+                }'
+                sed_extract_condition2='/^ *'"$escaped_dep"' *\[.*\] *$/{
+                  s/^ *'"$escaped_dep"' *\[\(.*\)\] *$/\1/p
+                }'
                 condition=`func_get_dependencies $module | sed -n -e "$sed_extract_condition1" -e "$sed_extract_condition2"`
                 if test "$condition" = true; then
                   condition=
@@ -2750,6 +2794,109 @@ func_show_module_list ()
     | sed -e 's/^\(.*\)|.*/|\1/' -e 's/^/    /' -e 's/^    |\(.*\)$/  '"${bold_on}"'\1'"${bold_off}"'/'
 }
 
+# func_modules_transitive_closure_separately
+# 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 excluding
+# modules of applicability 'all'. Its lib/* sources (brought in through
+# dependencies of *-tests modules) go into $testsbase/. It may contain GPLed
+# source, even if --lgpl is specified.
+# Input:
+# - local_gnulib_dir  from --local-dir
+# - modcache        true or false, from --cache-modules/--no-cache-modules
+# - specified_modules  list of specified modules
+# - inctests        true if tests should be included, blank otherwise
+# - incobsolete     true if obsolete modules among dependencies should be
+#                   included, blank otherwise
+# - inc_cxx_tests   true if C++ interoperability tests should be included,
+#                   blank otherwise
+# - inc_longrunning_tests  true if long-runnings tests should be included,
+#                          blank otherwise
+# - inc_privileged_tests  true if tests that require root privileges should be
+#                         included, blank otherwise
+# - inc_unportable_tests  true if tests that fail on some platforms should be
+#                         included, blank otherwise
+# - inc_all_direct_tests   true if all kinds of problematic unit tests among
+#                          the unit tests of the specified modules should be
+#                          included, blank otherwise
+# - inc_all_indirect_tests   true if all kinds of problematic unit tests among
+#                            the unit tests of the dependencies should be
+#                            included, blank otherwise
+# - excl_cxx_tests   true if C++ interoperability tests should be excluded,
+#                    blank otherwise
+# - excl_longrunning_tests  true if long-runnings tests should be excluded,
+#                           blank otherwise
+# - excl_privileged_tests  true if tests that require root privileges should be
+#                          excluded, blank otherwise
+# - excl_unportable_tests  true if tests that fail on some platforms should be
+#                          excluded, blank otherwise
+# - avoidlist       list of modules to avoid
+# - cond_dependencies  true if conditional dependencies shall be supported,
+#                      blank otherwise
+# - tmp             pathname of a temporary directory
+# Output:
+# - main_modules    list of modules, including dependencies
+# - testsrelated_modules  list of tests-related modules, including dependencies
+# - conddep_dependers, conddep_condition  information about conditionally
+#                                         enabled modules
+func_modules_transitive_closure_separately ()
+{
+  # 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=`for module in $main_modules; do
+                          if test \`func_get_applicability $module\` = main; then
+                            echo $module
+                          fi
+                        done \
+                        | 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
+}
+
+# func_determine_use_libtests
+# Determines whether a $testsbase/libtests.a is needed.
+# Input:
+# - local_gnulib_dir  from --local-dir
+# - modcache        true or false, from --cache-modules/--no-cache-modules
+# - testsrelated_modules  list of tests-related modules, including dependencies
+# Output:
+# - use_libtests    true if a $testsbase/libtests.a is needed, false otherwise
+func_determine_use_libtests ()
+{
+  use_libtests=false
+  for module in $testsrelated_modules; do
+    func_verify_nontests_module
+    if test -n "$module"; then
+      all_files=`func_get_filelist $module`
+      # Test whether some file in $all_files lies in lib/.
+      for f in $all_files; do
+        case $f in
+          lib/*)
+            use_libtests=true
+            break 2
+            ;;
+        esac
+      done
+    fi
+  done
+}
+
 # func_modules_add_dummy
 # Input:
 # - local_gnulib_dir  from --local-dir
@@ -2792,6 +2939,32 @@ ba
   fi
 }
 
+# func_modules_add_dummy_separately
+# Input:
+# - local_gnulib_dir  from --local-dir
+# - modcache        true or false, from --cache-modules/--no-cache-modules
+# - main_modules    list of modules, including dependencies
+# - testsrelated_modules  list of tests-related modules, including dependencies
+# - use_libtests    true if a $testsbase/libtests.a is needed, false otherwise
+# Output:
+# - main_modules    list of modules, including 'dummy' if needed
+# - testsrelated_modules  list of tests-related modules, including 'dummy' if
+#                         needed
+func_modules_add_dummy_separately ()
+{
+  # Add the dummy module to the main module list if needed.
+  modules="$main_modules"
+  func_modules_add_dummy
+  main_modules="$modules"
+
+  # 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
+}
+
 # func_modules_notice
 # Input:
 # - local_gnulib_dir  from --local-dir
@@ -2834,6 +3007,55 @@ func_modules_to_filelist ()
   files=`for f in $files; do echo $f; done | LC_ALL=C sort -u`
 }
 
+# func_modules_to_filelist_separately
+# 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.
+# Input:
+# - local_gnulib_dir  from --local-dir
+# - modcache        true or false, from --cache-modules/--no-cache-modules
+# - main_modules    list of modules, including dependencies
+# - testsrelated_modules  list of tests-related modules, including dependencies
+func_modules_to_filelist_separately ()
+{
+  # 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:"
+    sed_prettyprint_files='s,^tests=lib/\(.*\)$,lib/\1 -> tests/\1,'
+    echo "$files" | sed -e "$sed_prettyprint_files" -e 's/^/  /'
+  fi
+}
+
+# func_compute_include_guard_prefix
+# Determine include_guard_prefix.
+# Input:
+# - macro_prefix    prefix of gl_LIBOBJS macros to use
+# Output:
+# - include_guard_prefix  replacement for ${gl_include_guard_prefix}
+# - sed_replace_include_guard_prefix
+#                   sed expression for resolving ${gl_include_guard_prefix}
+func_compute_include_guard_prefix ()
+{
+  if test "$macro_prefix" = gl; then
+    include_guard_prefix='GL'
+  else
+    include_guard_prefix='GL_'`echo "$macro_prefix" | LC_ALL=C tr '[a-z]' '[A-Z]'`
+  fi
+  sed_replace_include_guard_prefix='s/\${gl_include_guard_prefix}/'"${include_guard_prefix}"'/g'
+}
+
 # func_execute_command command [args...]
 # Executes a command.
 # Uses also the variables
@@ -2976,8 +3198,11 @@ func_update_file ()
 # - libtool         true if libtool will be used, false or blank otherwise
 # - macro_prefix    prefix of gl_LIBOBJS macros to use
 # - po_domain       prefix of i18n domain to use (without -gnulib suffix)
+# - witness_c_macro  from --witness-c-macro
 # - actioncmd       (optional) command that will reproduce this invocation
 # - for_test        true if creating a package for testing, false otherwise
+# - sed_replace_include_guard_prefix
+#                   sed expression for resolving ${gl_include_guard_prefix}
 # - destfile        filename relative to destdir of makefile being generated
 # Input/Output:
 # - makefile_am_edits and makefile_am_edit${edit}_{dir,var,val}
@@ -3039,7 +3264,8 @@ func_emit_lib_Makefile_am ()
                 -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' \
                 -e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
                 -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \
-                -e "$sed_transform_check_PROGRAMS"
+                -e "$sed_transform_check_PROGRAMS" \
+                -e "$sed_replace_include_guard_prefix"
           if test "$module" = 'alloca'; then
             echo "${libname}_${libext}_LIBADD += @${perhapsLT}ALLOCA@"
             echo "${libname}_${libext}_DEPENDENCIES += @${perhapsLT}ALLOCA@"
@@ -3053,14 +3279,14 @@ func_emit_lib_Makefile_am ()
         if grep '[^     ]' "$tmp"/amsnippet1 "$tmp"/amsnippet2 > /dev/null ; then
           echo "## begin gnulib module $module"
           echo
-          if test -n "$cond_dependencies"; then
+          if test "$cond_dependencies" = true; then
             if func_cond_module_p "$module"; then
               func_module_conditional_name "$module"
               echo "if $conditional"
             fi
           fi
           cat "$tmp"/amsnippet1
-          if test -n "$cond_dependencies"; then
+          if test "$cond_dependencies" = true; then
             if func_cond_module_p "$module"; then
               echo "endif"
             fi
@@ -3127,14 +3353,25 @@ func_emit_lib_Makefile_am ()
       fi
     fi
   done
+  if test -n "$witness_c_macro"; then
+    cppflags_part1=" -D$witness_c_macro=1"
+  else
+    cppflags_part1=
+  fi
+  if $for_test; then
+    cppflags_part2=" -DGNULIB_STRICT_CHECKING=1"
+  else
+    cppflags_part2=
+  fi
   if test -z "$makefile_name"; then
     echo
-    if $for_test; then
-      echo "AM_CPPFLAGS = -DGNULIB_STRICT_CHECKING=1"
-    else
-      echo "AM_CPPFLAGS ="
-    fi
+    echo "AM_CPPFLAGS =$cppflags_part1$cppflags_part2"
     echo "AM_CFLAGS ="
+  else
+    if test -n "$cppflags_part1$cppflags_part2"; then
+      echo
+      echo "AM_CPPFLAGS +=$cppflags_part1$cppflags_part2"
+    fi
   fi
   echo
   if LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *+\{0,1\}= *$libname\\.$libext\$" "$tmp"/allsnippets > /dev/null \
@@ -3282,8 +3519,13 @@ func_emit_po_POTFILES_in ()
 # - m4base          relative directory containing autoconf macros
 # - testsbase       relative directory containing unit test code
 # - macro_prefix    prefix of gl_LIBOBJS macros to use
+# - witness_c_macro  from --witness-c-macro
 # - for_test        true if creating a package for testing, false otherwise
+# - single_configure  true if a single configure file should be generated,
+#                     false for a separate configure file for the tests
 # - use_libtests    true if a libtests.a should be built, false otherwise
+# - sed_replace_include_guard_prefix
+#                   sed expression for resolving ${gl_include_guard_prefix}
 # - destfile        filename relative to destdir of makefile being generated
 # Input/Output:
 # - makefile_am_edits and makefile_am_edit${edit}_{dir,var,val}
@@ -3317,7 +3559,7 @@ func_emit_tests_Makefile_am ()
   uses_subdirs=
   {
     for module in $modules; do
-      if $for_test; then
+      if $for_test && ! $single_configure; then
         func_verify_tests_module
       else
         func_verify_module
@@ -3332,7 +3574,8 @@ func_emit_tests_Makefile_am ()
                 -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"
+                -e "$sed_transform_check_PROGRAMS" \
+                -e "$sed_replace_include_guard_prefix"
           if $use_libtests && test "$module" = 'alloca'; then
             echo "libtests_a_LIBADD += @${perhapsLT}ALLOCA@"
             echo "libtests_a_DEPENDENCIES += @${perhapsLT}ALLOCA@"
@@ -3377,7 +3620,7 @@ func_emit_tests_Makefile_am ()
   fi
   echo "AUTOMAKE_OPTIONS = 1.5 foreign${subdir_options}"
   echo
-  if $for_test; then
+  if $for_test && ! $single_configure; then
     echo "ACLOCAL_AMFLAGS = -I ${testsbase_inverse}/${m4base}"
     echo
   fi
@@ -3433,6 +3676,9 @@ func_emit_tests_Makefile_am ()
   if $for_test; then
     echo "  -DGNULIB_STRICT_CHECKING=1 \\"
   fi
+  if test -n "$witness_c_macro"; then
+    echo "  -D$witness_c_macro=1 \\"
+  fi
   if test -n "${witness_macro}"; then
     echo "  -D@${witness_macro}@=1 \\"
   fi
@@ -3606,6 +3852,8 @@ func_emit_initmacro_done ()
 # - local_gnulib_dir  from --local-dir
 # - modcache          true or false, from --cache-modules/--no-cache-modules
 # - sed_replace_build_aux  sed expression that replaces reference to build-aux
+# - sed_replace_include_guard_prefix
+#                     sed expression for resolving ${gl_include_guard_prefix}
 # - module            the module name
 # - toplevel          true or false. 'false' means a subordinate use of
 #                     gnulib-tool.
@@ -3628,6 +3876,7 @@ func_emit_autoconf_snippet ()
     func_get_autoconf_snippet "$module" \
       | sed -e '/^$/d;' -e "s/^/$indentation/" \
             -e "$sed_replace_build_aux" \
+            -e "$sed_replace_include_guard_prefix" \
       | { if $disable_libtool; then
             sed -e 's/\$gl_cond_libtool/false/g' \
                 -e 's/gl_libdeps/gltests_libdeps/g' \
@@ -3657,6 +3906,8 @@ func_emit_autoconf_snippet ()
 # - local_gnulib_dir  from --local-dir
 # - modcache          true or false, from --cache-modules/--no-cache-modules
 # - sed_replace_build_aux  sed expression that replaces reference to build-aux
+# - sed_replace_include_guard_prefix
+#                     sed expression for resolving ${gl_include_guard_prefix}
 # - modules           the list of modules.
 # - verifier          one of func_verify_module, func_verify_nontests_module,
 #                     func_verify_tests_module. It selects the subset of
@@ -3674,7 +3925,8 @@ func_emit_autoconf_snippets ()
   toplevel="$3"
   disable_libtool="$4"
   disable_gettext="$5"
-  if test -n "$cond_dependencies"; then
+  if test "$cond_dependencies" = true; then
+    for m in $modules; do echo $m; done | LC_ALL=C sort -u > "$tmp"/modules
     # Emit the autoconf code for the unconditional modules.
     for module in $1; do
       eval $verifier
@@ -3711,12 +3963,14 @@ func_emit_autoconf_snippets ()
           func_emit_autoconf_snippet "      "
           echo "      $shellvar=true"
           deps=`func_get_dependencies $module | sed -e "$sed_dependencies_without_conditions"`
+          # Intersect $deps with the modules list $1.
+          deps=`for m in $deps; do echo $m; done | LC_ALL=C sort -u | LC_ALL=C join - "$tmp"/modules`
           for dep in $deps; do
             if func_cond_module_p "$dep"; then
               func_module_shellfunc_name "$dep"
               func_cond_module_condition "$module" "$dep"
               if test "$condition" != true; then
-                echo '      if $condition; then'
+                echo "      if $condition; then"
                 echo "        $shellfunc"
                 echo '      fi'
               else
@@ -3741,6 +3995,8 @@ func_emit_autoconf_snippets ()
           :
         else
           deps=`func_get_dependencies $module | sed -e "$sed_dependencies_without_conditions"`
+          # Intersect $deps with the modules list $1.
+          deps=`for m in $deps; do echo $m; done | LC_ALL=C sort -u | LC_ALL=C join - "$tmp"/modules`
           for dep in $deps; do
             if func_cond_module_p "$dep"; then
               func_module_shellfunc_name "$dep"
@@ -3810,8 +4066,8 @@ func_emit_autoconf_snippets ()
 #                         otherwise
 # - inc_all_tests   true if --with-all-tests was given, blank otherwise
 # - avoidlist       list of modules to avoid, from --avoid
-# - cond_dependencies  true if conditional dependencies shall be supported,
-#                      blank otherwise
+# - cond_dependencies  true if --conditional-dependencies was given, false if
+#                      --no-conditional-dependencies was given, blank otherwise
 # - lgpl            yes or a number if library's license shall be LGPL,
 #                   blank otherwise
 # - makefile_name   from --makefile-name
@@ -3820,6 +4076,7 @@ func_emit_autoconf_snippets ()
 # - 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)
+# - witness_c_macro  from --witness-c-macro
 # - vc_files        true if --vc-files was given, false if --no-vc-files was
 #                   given, blank otherwise
 # - autoconf_minversion  minimum supported autoconf version
@@ -3852,9 +4109,11 @@ func_import ()
   cached_libname=
   cached_lgpl=
   cached_makefile_name=
+  cached_cond_dependencies=
   cached_libtool=
   cached_macro_prefix=
   cached_po_domain=
+  cached_witness_c_macro=
   cached_vc_files=
   cached_files=
   if test -f "$destdir"/$m4base/gnulib-cache.m4; then
@@ -3927,6 +4186,9 @@ func_import ()
       /gl_MAKEFILE_NAME(/ {
         s,^.*gl_MAKEFILE_NAME([[ ]*\([^]"$`\\)]*\).*$,cached_makefile_name="\1",p
       }
+      /gl_CONDITIONAL_DEPENDENCIES/ {
+        s,^.*$,cached_cond_dependencies=true,p
+      }
       /gl_LIBTOOL/ {
         s,^.*$,cached_libtool=true,p
       }
@@ -3936,6 +4198,9 @@ func_import ()
       /gl_PO_DOMAIN(/ {
         s,^.*gl_PO_DOMAIN([[ ]*\([^]"$`\\)]*\).*$,cached_po_domain="\1",p
       }
+      /gl_WITNESS_C_MACRO(/ {
+        s,^.*gl_WITNESS_C_MACRO([[ ]*\([^]"$`\\)]*\).*$,cached_witness_c_macro="\1",p
+      }
       /gl_VC_FILES(/ {
         s,^.*gl_VC_FILES([[ ]*\([^]"$`\\)]*\).*$,cached_vc_files="\1",p
       }'
@@ -4102,6 +4367,10 @@ func_import ()
     if test -z "$makefile_name"; then
       makefile_name="$cached_makefile_name"
     fi
+    # Use conditional dependencies if specified either way.
+    if test -z "$cond_dependencies"; then
+      cond_dependencies="$cached_cond_dependencies"
+    fi
     # Use libtool if specified either way, or if guessed.
     if test -z "$libtool"; then
       if test -n "$cached_m4base"; then
@@ -4121,10 +4390,19 @@ func_import ()
     if test -z "$po_domain"; then
       po_domain="$cached_po_domain"
     fi
+    # The witness_c_macro defaults to the cached one.
+    if test -z "$witness_c_macro"; then
+      witness_c_macro="$cached_witness_c_macro"
+    fi
     # The vc_files defaults to the cached one.
     if test -z "$vc_files"; then
       vc_files="$cached_vc_files"
     fi
+    # Ensure constraints.
+    if test "$cond_dependencies" = true && test -n "$inctests"; then
+      echo "gnulib-tool: option --conditional-dependencies is not supported with --with-tests" 1>&2
+      func_exit 1
+    fi
   fi
   # --without-*-tests options are not supported here.
   excl_cxx_tests=
@@ -4148,67 +4426,14 @@ func_import ()
   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 excluding
-  # modules of applicability 'all'. 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=`for module in $main_modules; do
-                          if test \`func_get_applicability $module\` = main; then
-                            echo $module
-                          fi
-                        done \
-                        | 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 to the main module list if needed.
-  modules="$main_modules"
-  func_modules_add_dummy
-  main_modules="$modules"
+  func_modules_transitive_closure_separately
 
   # 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`
-      # Test whether some file in $all_files lies in lib/.
-      for f in $all_files; do
-        case $f in
-          lib/*)
-            use_libtests=true
-            break 2
-            ;;
-        esac
-      done
-    fi
-  done
+  func_determine_use_libtests
 
-  # 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
+  # Add the dummy module to the main module list or to the tests-related module
+  # list if needed.
+  func_modules_add_dummy_separately
 
   # If --lgpl, verify that the licenses of modules are compatible.
   if test -n "$lgpl"; then
@@ -4329,26 +4554,7 @@ s,^\(.................................................[^ ]*\) *,
   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:"
-    sed_prettyprint_files='s,^tests=lib/\(.*\)$,lib/\1 -> tests/\1,'
-    echo "$files" | sed -e "$sed_prettyprint_files" -e 's/^/  /'
-  fi
+  func_modules_to_filelist_separately
 
   test -n "$files" \
     || func_fatal_error "refusing to do nothing"
@@ -4573,6 +4779,11 @@ s,^\(.................................................[^ ]*\) *,
   if test -n "$makefile_name"; then
     func_append actioncmd " --makefile-name=$makefile_name"
   fi
+  if test "$cond_dependencies" = true; then
+    func_append actioncmd " --conditional-dependencies"
+  else
+    func_append actioncmd " --no-conditional-dependencies"
+  fi
   if test "$libtool" = true; then
     func_append actioncmd " --libtool"
   else
@@ -4582,6 +4793,9 @@ s,^\(.................................................[^ ]*\) *,
   if test -n "$po_domain"; then
     func_append actioncmd " --po-domain=$po_domain"
   fi
+  if test -n "$witness_c_macro"; then
+    func_append actioncmd " --witness-c-macro=$witness_c_macro"
+  fi
   if test -n "$vc_files"; then
     if test "$vc_files" = true; then
       func_append actioncmd " --vc-files"
@@ -4591,6 +4805,9 @@ s,^\(.................................................[^ ]*\) *,
   fi
   func_append actioncmd " `echo $specified_modules`"
 
+  # Determine include_guard_prefix.
+  func_compute_include_guard_prefix
+
   # Default the makefile name to Makefile.am.
   if test -n "$makefile_name"; then
     makefile_am=$makefile_name
@@ -4867,11 +5084,15 @@ s,//*$,/,'
       fi
     fi
     echo "gl_MAKEFILE_NAME([$makefile_name])"
+    if test "$cond_dependencies" = true; then
+      echo "gl_CONDITIONAL_DEPENDENCIES"
+    fi
     if test "$libtool" = true; then
       echo "gl_LIBTOOL"
     fi
     echo "gl_MACRO_PREFIX([$macro_prefix])"
     echo "gl_PO_DOMAIN([$po_domain])"
+    echo "gl_WITNESS_C_DOMAIN([$witness_c_macro])"
     if test -n "$vc_files"; then
       echo "gl_VC_FILES([$vc_files])"
     fi
@@ -4927,7 +5148,7 @@ s,//*$,/,'
     echo "  m4_pattern_allow([^gl_ES\$])dnl a valid locale name"
     echo "  m4_pattern_allow([^gl_LIBOBJS\$])dnl a variable"
     echo "  m4_pattern_allow([^gl_LTLIBOBJS\$])dnl a variable"
-    echo "  AC_REQUIRE([AC_PROG_RANLIB])"
+    echo "  AC_REQUIRE([gl_PROG_AR_RANLIB])"
     if test -n "$uses_subdirs"; then
       echo "  AC_REQUIRE([AM_PROG_CC_C_O])"
     fi
@@ -4967,7 +5188,13 @@ s,//*$,/,'
     echo "  gl_m4_base='$m4base'"
     func_emit_initmacro_start $macro_prefix
     echo "  gl_source_base='$sourcebase'"
+    if test -n "$witness_c_macro"; then
+      echo "  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$witness_c_macro])"
+    fi
     func_emit_autoconf_snippets "$main_modules" func_verify_module true false true
+    if test -n "$witness_c_macro"; then
+      echo "  m4_popdef([gl_MODULE_INDICATOR_CONDITION])"
+    fi
     echo "  # End of code from modules"
     func_emit_initmacro_end $macro_prefix
     echo "  gltests_libdeps="
@@ -5243,7 +5470,16 @@ s,//*$,/,'
       echo "  - mention \"${val}\" in ${var} in ${dir}Makefile.am,"
     fi
   done
-  echo "  - invoke ${macro_prefix}_EARLY in $configure_ac, right after AC_PROG_CC,"
+  if grep '^ *AC_PROG_CC_STDC' "$configure_ac" > /dev/null; then
+    position_early_after=AC_PROG_CC_STDC
+  else
+    if grep '^ *AC_PROG_CC_C99' "$configure_ac" > /dev/null; then
+      position_early_after=AC_PROG_CC_C99
+    else
+      position_early_after=AC_PROG_CC
+    fi
+  fi
+  echo "  - invoke ${macro_prefix}_EARLY in $configure_ac, right after $position_early_after,"
   echo "  - invoke ${macro_prefix}_INIT in $configure_ac."
 }
 
@@ -5263,9 +5499,11 @@ s,//*$,/,'
 #                          excluded, blank otherwise
 # - excl_unportable_tests  true if tests that fail on some platforms should be
 #                          excluded, blank otherwise
+# - single_configure  true if a single configure file should be generated,
+#                     false for a separate configure file for the tests
 # - avoidlist       list of modules to avoid
-# - cond_dependencies  true if conditional dependencies shall be supported,
-#                      blank otherwise
+# - cond_dependencies  true if --conditional-dependencies was given, false if
+#                      --no-conditional-dependencies was given, blank otherwise
 # - libtool         true if --libtool was given, false if --no-libtool was
 #                   given, blank otherwise
 # - symbolic        true if files should be symlinked, copied otherwise
@@ -5350,6 +5588,7 @@ func_create_testdir ()
   testsbase=gltests
   macro_prefix=gl
   po_domain=
+  witness_c_macro=
   vc_files=
 
   # Determine final module list.
@@ -5358,18 +5597,42 @@ func_create_testdir ()
   if test $verbose -ge 0; then
     func_show_module_list
   fi
+  final_modules="$modules"
+
+  if $single_configure; then
+    # Determine main module list and tests-related module list separately.
+    func_modules_transitive_closure_separately
+  fi
+
+  if $single_configure; then
+    # Determine whether a $testsbase/libtests.a is needed.
+    func_determine_use_libtests
+  fi
 
   # Add the dummy module if needed.
-  func_modules_add_dummy
+  if $single_configure; then
+    func_modules_add_dummy_separately
+  else
+    func_modules_add_dummy
+  fi
 
   # Show banner notice of every module.
-  func_modules_notice
+  if $single_configure; then
+    modules="$main_modules"
+    func_modules_notice
+  else
+    func_modules_notice
+  fi
 
   # Determine final file list.
-  func_modules_to_filelist
-  if test $verbose -ge 0; then
-    echo "File list:"
-    echo "$files" | sed -e 's/^/  /'
+  if $single_configure; then
+    func_modules_to_filelist_separately
+  else
+    func_modules_to_filelist
+    if test $verbose -ge 0; then
+      echo "File list:"
+      echo "$files" | sed -e 's/^/  /'
+    fi
   fi
   # Add files for which the copy in gnulib is newer than the one that
   # "automake --add-missing --copy" would provide.
@@ -5384,6 +5647,7 @@ func_create_testdir ()
     s,^lib/,$rewritten$sourcebase/,
     s,^m4/,$rewritten$m4base/,
     s,^tests/,$rewritten$testsbase/,
+    s,^tests=lib/,$rewritten$testsbase/,
     s,^top/,$rewritten,
     s,^$rewritten,,"
 
@@ -5412,6 +5676,9 @@ func_create_testdir ()
     # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
     exec 5<&0 < "$tmp"/files
     while read g f; do
+      case "$f" in
+        tests=lib/*) f=`echo "$f" | sed -e 's,^tests=lib/,lib/,'` ;;
+      esac
       func_lookup_file "$f"
       if test -n "$lookedup_tmp"; then
         cp -p "$lookedup_file" "$testdir/$g"
@@ -5429,6 +5696,9 @@ func_create_testdir ()
     exec 0<&5 5<&-
   }
 
+  # Determine include_guard_prefix.
+  func_compute_include_guard_prefix
+
   # Create Makefile.ams that are for testing.
   for_test=true
 
@@ -5438,6 +5708,9 @@ func_create_testdir ()
   # Create $sourcebase/Makefile.am.
   mkdir -p "$testdir/$sourcebase"
   destfile="$sourcebase/Makefile.am"
+  if $single_configure; then
+    modules="$main_modules"
+  fi
   func_emit_lib_Makefile_am > "$testdir/$sourcebase/Makefile.am"
   any_uses_subdirs="$uses_subdirs"
 
@@ -5468,104 +5741,111 @@ 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 -e 's%[^/][^/]*//*%../%g'`"$auxdir"
-    # Create $testsbase/Makefile.am.
-    use_libtests=false
-    destfile="$testsbase/Makefile.am"
-    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 "AM_INIT_AUTOMAKE"
-     echo
-     echo "AC_CONFIG_HEADERS([config.h])"
-     echo
-     echo "AC_PROG_CC"
-     echo "AC_PROG_INSTALL"
-     echo "AC_PROG_MAKE_SET"
-     echo "AC_PROG_RANLIB"
-     echo
-     if test -n "$uses_subdirs"; then
-       echo "AM_PROG_CC_C_O"
+    if $single_configure; then
+      # Create $testsbase/Makefile.am.
+      destfile="$testsbase/Makefile.am"
+      modules="$testsrelated_modules"
+      func_emit_tests_Makefile_am "${macro_prefix}tests_WITNESS" > "$testdir/$testsbase/Makefile.am"
+    else
+      # Viewed from the $testsbase subdirectory, $auxdir is different.
+      saved_auxdir="$auxdir"
+      auxdir=`echo "$testsbase/" | sed -e 's%[^/][^/]*//*%../%g'`"$auxdir"
+      # Create $testsbase/Makefile.am.
+      use_libtests=false
+      destfile="$testsbase/Makefile.am"
+      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 "AM_INIT_AUTOMAKE"
        echo
-     fi
-     for module in $modules; do
-       func_verify_module
-       if test -n "$module"; then
-         case $module in
-           gnumakefile | maintainer-makefile)
-             # These modules are meant to be used only in the top-level directory.
-             ;;
-           *)
-             func_get_autoconf_early_snippet "$module"
-             ;;
-         esac
+       echo "AC_CONFIG_HEADERS([config.h])"
+       echo
+       echo "AC_PROG_CC"
+       echo "AC_PROG_INSTALL"
+       echo "AC_PROG_MAKE_SET"
+       echo "gl_PROG_AR_RANLIB"
+       echo
+       if test -n "$uses_subdirs"; then
+         echo "AM_PROG_CC_C_O"
+         echo
        fi
-     done \
-       | sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/'
-     if test "$libtool" = true; then
-       echo "LT_INIT([win32-dll])"
-       echo "LT_LANG([C++])"
-       echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])"
-       echo "gl_cond_libtool=true"
-     else
-       echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])"
-       echo "gl_cond_libtool=false"
-       echo "gl_libdeps="
-       echo "gl_ltlibdeps="
-     fi
-     # 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:
-     #   error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an AC_DEFUN'd macro
-     # but we want the AC_REQUIRE to have its normal meaning (provide one
-     # expansion of the required macro before the current point, and only one
-     # expansion total).
-     echo "AC_DEFUN([gl_INIT], ["
-     sed_replace_build_aux='
-       :a
-       /AC_CONFIG_FILES(.*:build-aux\/.*)/{
-         s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)|
-         ba
-       }'
-     echo "gl_m4_base='../$m4base'"
-     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.
-     echo "gl_source_base='../$sourcebase'"
-     func_emit_autoconf_snippets "$modules" func_verify_nontests_module false false false
-     echo "gl_source_base='.'"
-     func_emit_autoconf_snippets "$modules" func_verify_tests_module false false false
-     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
-       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\""
-       echo "  AC_SUBST([${libname_upper}_LTLIBDEPS])"
-     fi
-     echo "])"
-     func_emit_initmacro_done $macro_prefix $sourcebase # FIXME use $sourcebase or $testsbase?
-     echo
-     echo "gl_INIT"
-     echo
-     # Usually $testsbase/config.h will be a superset of config.h. Verify this
-     # by "merging" config.h into $testsbase/config.h; look out for gcc warnings.
-     echo "AH_TOP([#include \"../config.h\"])"
-     echo
-     echo "AC_CONFIG_FILES([Makefile])"
-     echo "AC_OUTPUT"
-    ) > "$testdir/$testsbase/configure.ac"
-    auxdir="$saved_auxdir"
+       for module in $modules; do
+         func_verify_module
+         if test -n "$module"; then
+           case $module in
+             gnumakefile | maintainer-makefile)
+               # These modules are meant to be used only in the top-level directory.
+               ;;
+             *)
+               func_get_autoconf_early_snippet "$module"
+               ;;
+           esac
+         fi
+       done \
+         | sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/'
+       if test "$libtool" = true; then
+         echo "LT_INIT([win32-dll])"
+         echo "LT_LANG([C++])"
+         echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])"
+         echo "gl_cond_libtool=true"
+       else
+         echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])"
+         echo "gl_cond_libtool=false"
+         echo "gl_libdeps="
+         echo "gl_ltlibdeps="
+       fi
+       # 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:
+       #   error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an AC_DEFUN'd macro
+       # but we want the AC_REQUIRE to have its normal meaning (provide one
+       # expansion of the required macro before the current point, and only one
+       # expansion total).
+       echo "AC_DEFUN([gl_INIT], ["
+       sed_replace_build_aux='
+         :a
+         /AC_CONFIG_FILES(.*:build-aux\/.*)/{
+           s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)|
+           ba
+         }'
+       echo "gl_m4_base='../$m4base'"
+       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.
+       echo "gl_source_base='../$sourcebase'"
+       func_emit_autoconf_snippets "$modules" func_verify_nontests_module false false false
+       echo "gl_source_base='.'"
+       func_emit_autoconf_snippets "$modules" func_verify_tests_module false false false
+       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
+         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\""
+         echo "  AC_SUBST([${libname_upper}_LTLIBDEPS])"
+       fi
+       echo "])"
+       func_emit_initmacro_done $macro_prefix $sourcebase # FIXME use $sourcebase or $testsbase?
+       echo
+       echo "gl_INIT"
+       echo
+       # Usually $testsbase/config.h will be a superset of config.h. Verify this
+       # by "merging" config.h into $testsbase/config.h; look out for gcc warnings.
+       echo "AH_TOP([#include \"../config.h\"])"
+       echo
+       echo "AC_CONFIG_FILES([Makefile])"
+       echo "AC_OUTPUT"
+      ) > "$testdir/$testsbase/configure.ac"
+      auxdir="$saved_auxdir"
+      subdirs_with_configure_ac="$subdirs_with_configure_ac $testsbase"
+    fi
     func_append subdirs " $testsbase"
-    subdirs_with_configure_ac="$subdirs_with_configure_ac $testsbase"
   fi
 
   # Create Makefile.am.
@@ -5601,14 +5881,18 @@ func_create_testdir ()
    echo "m4_pattern_allow([^gl_LIBOBJS\$])dnl a variable"
    echo "m4_pattern_allow([^gl_LTLIBOBJS\$])dnl a variable"
    echo
-   echo "AC_PROG_RANLIB"
+   echo "gl_PROG_AR_RANLIB"
    echo
    if test -n "$any_uses_subdirs"; then
      echo "AM_PROG_CC_C_O"
      echo
    fi
-   for module in $modules; do
-     func_verify_nontests_module
+   for module in $final_modules; do
+     if $single_configure; then
+       func_verify_module
+     else
+       func_verify_nontests_module
+     fi
      if test -n "$module"; then
        func_get_autoconf_early_snippet "$module"
      fi
@@ -5646,8 +5930,26 @@ func_create_testdir ()
    echo "gl_m4_base='$m4base'"
    func_emit_initmacro_start $macro_prefix
    echo "gl_source_base='$sourcebase'"
-   func_emit_autoconf_snippets "$modules" func_verify_nontests_module true false false
+   if $single_configure; then
+     func_emit_autoconf_snippets "$main_modules" func_verify_module true false false
+   else
+     func_emit_autoconf_snippets "$modules" func_verify_nontests_module true false false
+   fi
    func_emit_initmacro_end $macro_prefix
+   if $single_configure; then
+     echo "  gltests_libdeps="
+     echo "  gltests_ltlibdeps="
+     func_emit_initmacro_start ${macro_prefix}tests
+     echo "  gl_source_base='$testsbase'"
+     # Define a tests witness macro.
+     echo "  ${macro_prefix}tests_WITNESS=IN_GNULIB_TESTS"
+     echo "  AC_SUBST([${macro_prefix}tests_WITNESS])"
+     echo "  gl_module_indicator_condition=\$${macro_prefix}tests_WITNESS"
+     echo "  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [\$gl_module_indicator_condition])"
+     func_emit_autoconf_snippets "$testsrelated_modules" func_verify_module true false false
+     echo "  m4_popdef([gl_MODULE_INDICATOR_CONDITION])"
+     func_emit_initmacro_end ${macro_prefix}tests
+   fi
    # _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
@@ -5657,8 +5959,17 @@ func_create_testdir ()
      echo "  ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
      echo "  AC_SUBST([${libname_upper}_LTLIBDEPS])"
    fi
+   if $single_configure; then
+     if $use_libtests; then
+       echo "  LIBTESTS_LIBDEPS=\"\$gltests_libdeps\""
+       echo "  AC_SUBST([LIBTESTS_LIBDEPS])"
+     fi
+   fi
    echo "])"
    func_emit_initmacro_done $macro_prefix $sourcebase
+   if $single_configure; then
+     func_emit_initmacro_done ${macro_prefix}tests $testsbase
+   fi
    echo
    echo "gl_INIT"
    echo
@@ -5701,7 +6012,7 @@ func_create_testdir ()
    func_execute_command ${AUTOHEADER} || func_exit 1
    func_execute_command ${AUTOMAKE} --add-missing --copy || func_exit 1
   ) || func_exit 1
-  if test -n "$inctests"; then
+  if test -n "$inctests" && ! $single_configure; then
     # Create autogenerated files.
     (cd "$testdir/$testsbase" || func_exit 1
      # Do not use "${AUTORECONF} --force --install", because it may invoke
@@ -6064,7 +6375,8 @@ s/\([.*$]\)/[\1]/g'
                 #   inc_longrunning_tests, inc_privileged_tests,
                 #   inc_unportable_tests, inc_all_tests, avoidlist, sourcebase,
                 #   m4base, pobase, docbase, testsbase, inctests, libname, lgpl,
-                #   makefile_name, libtool, macro_prefix, po_domain, vc_files
+                #   makefile_name, libtool, macro_prefix, po_domain,
+                #   witness_c_macro, vc_files
                 # don't propagate from one directory to another.
                 (func_import) || func_exit 1
               done
@@ -6205,6 +6517,9 @@ s/\([.*$]\)/[\1]/g'
     ;;
 
   extract-dependencies )
+    if test -n "$avoidlist"; then
+      func_fatal_error "cannot combine --avoid and --extract-dependencies"
+    fi
     for module
     do
       func_verify_module