When using gnulib-tool --create-testdir, the option --single-configure is
most useful, because
  - it cuts down the time to 'configure' the testdir,
  - it makes the testdir closer to
    'gnulib-tool --tests-base=... --with-tests --import ...'
    invocations.

With this patch, '--single-configure' becomes active by default.


2025-06-16  Bruno Haible  <br...@clisp.org>

        gnulib-tool: Default to --single-configure. New option --two-configures.
        * gnulib-tool.sh: single_configure now defaults to false. New option
        --two-configures. Stop documenting option --single-configure.
        * pygnulib/GLInfo.py (GLInfo.usage): Document option --two-configures.
        Stop documenting option --single-configure.
        * pygnulib/GLTestDir.py (GLTestDir.execute): Update comment.
        * pygnulib/main.py (main): single_configure now defaults to false.
        New option --two-configures.
        * doc/transversal.texi: Update.
        * HACKING: Update.

diff --git a/HACKING b/HACKING
index f31ed70cc3..e8bbc49c1a 100644
--- a/HACKING
+++ b/HACKING
@@ -117,7 +117,7 @@ Maintaining high quality
 ========================
 
 It is a good idea to occasionally create a testdir of all of Gnulib:
-  $ rm -rf ../testdir-all; ./gnulib-tool --create-testdir --dir=../testdir-all 
--with-c++-tests --without-privileged-tests --single-configure `./all-modules`
+  $ rm -rf ../testdir-all; ./gnulib-tool --create-testdir --dir=../testdir-all 
--with-c++-tests --without-privileged-tests `./all-modules`
 and test this directory on various platforms:
   - Linux/glibc systems,
   - Linux/musl systems,
diff --git a/doc/transversal.texi b/doc/transversal.texi
index 6c814a9a8f..9140753540 100644
--- a/doc/transversal.texi
+++ b/doc/transversal.texi
@@ -29,7 +29,8 @@
 single @code{configure} file.  This is because the question ``is module
 B present?'' does not have a unique answer in such situations.
 @code{gnulib-tool} has support for these techniques in the situation of
-@code{--create-testdir --single-configure}, which basically has two
+@code{--create-testdir} (without option @code{--two-configures}),
+which basically has two
 @code{gnulib-tool} invocations, one for a set of modules that end up in
 @code{gllib}, and one for the set of modules that end up in
 @code{gltests}.  But you should be aware that this does not cover the
diff --git a/gnulib-tool.sh b/gnulib-tool.sh
index 040bfb4eb0..e0a8cbba82 100755
--- a/gnulib-tool.sh
+++ b/gnulib-tool.sh
@@ -323,8 +323,8 @@ Options for --import, --add/remove-import:
 
 Options for --create-[mega]testdir, --[mega]test:
 
-      --single-configure    Generate a single configure file, not a separate
-                            configure file for the tests directory.
+      --two-configures      Generate a separate configure file for the tests
+                            directory, not a single configure file.
 
 Options for --import, --add/remove-import, --update,
             --create-[mega]testdir, --[mega]test:
@@ -1145,7 +1145,7 @@ func_determine_path_separator
 #                          otherwise
 # - excl_unportable_tests  true if --without-unportable-tests was given, blank
 #                          otherwise
-# - single_configure  true if --single-configure was given, false otherwise
+# - single_configure  false if --two-configures was given, true otherwise
 # - avoidlist       list of modules to avoid, from --avoid
 # - cond_dependencies  true if --conditional-dependencies was given, false if
 #                      --no-conditional-dependencies was given, blank otherwise
@@ -1195,7 +1195,7 @@ func_determine_path_separator
   excl_longrunning_tests=
   excl_privileged_tests=
   excl_unportable_tests=
-  single_configure=false
+  single_configure=
   avoidlist=
   cond_dependencies=
   lgpl=
@@ -1239,7 +1239,7 @@ func_determine_path_separator
       --create-megatestdir | --create-megatestdi | --create-megatestd | 
--create-megatest | --create-megates | --create-megate | --create-megat | 
--create-mega | --create-meg | --create-me | --create-m )
         mode=create-megatestdir
         shift ;;
-      --test | --tes | --te | --t )
+      --test | --tes | --te )
         mode=test
         shift ;;
       --megatest | --megates | --megate | --megat | --mega | --meg | --me | 
--m )
@@ -1392,6 +1392,9 @@ func_determine_path_separator
       --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 ;;
+      --two-configures | --two-configure | --two-configur | --two-configu | 
--two-config | --two-confi | --two-conf | --two-con | --two-co | --two-c | 
--two- | --two | --tw)
+        single_configure=false
+        shift ;;
       --single-configure | --single-configur | --single-configu | 
--single-config | --single-confi | --single-conf | --single-con | --single-co | 
--single-c | --single- | --single | --singl | --sing | --sin | --si)
         single_configure=true
         shift ;;
@@ -1553,7 +1556,7 @@ func_determine_path_separator
   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" 
\
-       || test "$single_configure" != false; then
+       || test -n "$single_configure"; then
       echo "gnulib-tool: invalid options for '$mode' mode" 1>&2
       echo "Try 'gnulib-tool --help' for more information." 1>&2
       func_exit 1
@@ -1616,6 +1619,10 @@ func_determine_path_separator
   esac
   # Now the only possible values of "$inctests" are true and false
   # (or blank but then it is irrelevant).
+  # Canonicalize the single_configure variable.
+  if test -z "$single_configure"; then
+    single_configure=true
+  fi
 
   # Determine the minimum supported autoconf version from the project's
   # configure.ac.
@@ -6571,8 +6578,8 @@ func_create_testdir ()
   # Canonicalize the list of specified modules.
   specified_modules=`for m in $specified_modules; do echo $m; done | LC_ALL=C 
sort -u`
 
-  # Test modules which invoke AC_CONFIG_FILES cannot be used with
-  # --with-tests --single-configure. Avoid them.
+  # Test modules which invoke AC_CONFIG_FILES cannot be used with --with-tests
+  # (without --two-configures). Avoid them.
   if $inctests && $single_configure; then
     avoidlist="$avoidlist havelib-tests"
   fi
diff --git a/pygnulib/GLInfo.py b/pygnulib/GLInfo.py
index e99613ea98..76c6f23aa6 100644
--- a/pygnulib/GLInfo.py
+++ b/pygnulib/GLInfo.py
@@ -302,8 +302,8 @@ def usage(self) -> str:
 
 Options for --create-[mega]testdir, --[mega]test:
 
-      --single-configure    Generate a single configure file, not a separate
-                            configure file for the tests directory.
+      --two-configures      Generate a separate configure file for the tests
+                            directory, not a single configure file.
 
 Options for --import, --add/remove-import, --update,
             --create-[mega]testdir, --[mega]test:
diff --git a/pygnulib/GLTestDir.py b/pygnulib/GLTestDir.py
index 50b54aae07..3410d0bfb7 100644
--- a/pygnulib/GLTestDir.py
+++ b/pygnulib/GLTestDir.py
@@ -169,8 +169,8 @@ def execute(self) -> None:
                     modules.add(module)
         specified_modules = sorted(modules)
 
-        # Test modules which invoke AC_CONFIG_FILES cannot be used with
-        # --with-tests --single-configure. Avoid them.
+        # Test modules which invoke AC_CONFIG_FILES cannot be used with 
--with-tests
+        # (without --two-configures). Avoid them.
         inctests = self.config.checkInclTestCategory(TESTS['tests'])
         if inctests and self.config.checkSingleConfigure():
             self.config.addAvoid('havelib-tests')
diff --git a/pygnulib/main.py b/pygnulib/main.py
index 77eed3d4ff..e0f088c907 100644
--- a/pygnulib/main.py
+++ b/pygnulib/main.py
@@ -482,7 +482,11 @@ def main(temp_directory: str) -> None:
                         dest='vc_files',
                         default=None,
                         action='store_false')
-    # single-configure
+    # two-configures, single-configure
+    parser.add_argument('--two-configures',
+                        dest='single_configure',
+                        default=None,
+                        action='store_false')
     parser.add_argument('--single-configure',
                         dest='single_configure',
                         default=None,
@@ -703,7 +707,7 @@ def main(temp_directory: str) -> None:
     if ((mode in ['import', 'add-import', 'remove-import']
          and (cmdargs.excl_cxx_tests or cmdargs.excl_longrunning_tests
               or cmdargs.excl_privileged_tests or cmdargs.excl_unportable_tests
-              or cmdargs.single_configure))
+              or cmdargs.single_configure != None))
         or (mode == 'update'
             and (cmdargs.localpath != None or cmdargs.libname != None
                  or cmdargs.sourcebase != None or cmdargs.m4base != None
@@ -853,6 +857,9 @@ def main(temp_directory: str) -> None:
     copymode = cmdargs.copymode
     lcopymode = cmdargs.lcopymode
     single_configure = cmdargs.single_configure
+    # Canonicalize the single_configure variable.
+    if single_configure == None:
+        single_configure = True
 
     # Create pygnulib configuration.
     config = GLConfig(




Reply via email to