Here is a patch fixing another item in gnulib-tool.py.TODO. It is more
complex than the original since the change uncovered a few issues.

When changing GLModule.isTests() to check the Applicability of the
module:

  File "/home/collin/.local/src/gnulib/pygnulib/GLModuleSystem.py", line 501, 
in getApplicability
    if self.isTests():
       ^^^^^^^^^^^^^^
RecursionError: maximum recursion depth exceeded

Which is interesting, but an easy fix. We can't use GLModule.isTests()
there since it depends on the result of GLModule.getApplicability().
This matches 'func_get_applicability' in gnulib-tool.sh which just
tests that the name ends with '-tests'.

Then running Emacs merge-gnulib script, there are many added diff
lines because of the gen-header and snippet/* modules. This is because
after the change that this patch is following the function names are
slightly misleading since:

         GLModule.isNonTests() != (not GLModule.isTests())

Instead we have 3 separate unique operations in gnulib-tool.sh:

1. func_verify_tests_module
2. func_verify_nontests_module
3. case "$module" in *-tests ) ... ;;

Which are equivalent to the following in Python:

1. GLModule.isTests()
2. GLModule.isNonTests()
3. GLModule.getName().endswith('-tests')

I think I found all of them. Luckily there are only a few
'Applicability: all' modules, so it should be easy to tell if this
issue pops up again.

Collin
From 059a70104a83ad033974fc13433cb1994683b994 Mon Sep 17 00:00:00 2001
From: Collin Funk <collin.fu...@gmail.com>
Date: Sun, 17 Mar 2024 20:09:12 -0700
Subject: [PATCH] gnulib-tool.py: Follow gnulib-tool changes, part 64.

Follow gnulib-tool change
2021-12-25  Bruno Haible  <br...@clisp.org>
gnulib-tool: Respect applicability 'all' without --single-configure.

* pygnulib/GLModuleSystem.py (GLModule.isTests): Treat modules with
applicability 'all' like 'tests' modules, not like 'main' modules.
(GLModule.isNonTests): Treat all modules not ending in '-tests' as
non-test modules.
(GLModule.getApplicability): Don't use GLModule.isTests(). Because it
depends on the result of this function, using it would cause a
RecursionError exception.
(GLModule.getDependencies): Respect the difference between
module.isTests(), module.isNonTests(), and
module.getName().endswith('-tests').
(GLModule.getAutomakeSnippet_Unconditional, GLModule.getLicense)
(GLModuleTable.add_dummy): Likewise.
* pygnulib/GLEmiter.py (GLEmiter.lib_Makefile_am): Likewise.
---
 ChangeLog                  | 20 ++++++++++++++++++++
 gnulib-tool.py.TODO        | 11 -----------
 pygnulib/GLEmiter.py       |  4 ++--
 pygnulib/GLModuleSystem.py | 14 +++++++-------
 4 files changed, 29 insertions(+), 20 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index a54938bcc8..6b6cd48157 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2024-03-17  Collin Funk  <collin.fu...@gmail.com>
+
+	gnulib-tool.py: Follow gnulib-tool changes, part 64.
+	Follow gnulib-tool change
+	2021-12-25  Bruno Haible  <br...@clisp.org>
+	gnulib-tool: Respect applicability 'all' without --single-configure.
+	* pygnulib/GLModuleSystem.py (GLModule.isTests): Treat modules with
+	applicability 'all' like 'tests' modules, not like 'main' modules.
+	(GLModule.isNonTests): Treat all modules not ending in '-tests' as
+	non-test modules.
+	(GLModule.getApplicability): Don't use GLModule.isTests(). Because it
+	depends on the result of this function, using it would cause a
+	RecursionError exception.
+	(GLModule.getDependencies): Respect the difference between
+	module.isTests(), module.isNonTests(), and
+	module.getName().endswith('-tests').
+	(GLModule.getAutomakeSnippet_Unconditional, GLModule.getLicense)
+	(GLModuleTable.add_dummy): Likewise.
+	* pygnulib/GLEmiter.py (GLEmiter.lib_Makefile_am): Likewise.
+
 2024-03-17  Bruno Haible  <br...@clisp.org>
 
 	gnulib-tool.py: Handle empty lists of lines consistently.
diff --git a/gnulib-tool.py.TODO b/gnulib-tool.py.TODO
index 8178b2fbfd..976439e2be 100644
--- a/gnulib-tool.py.TODO
+++ b/gnulib-tool.py.TODO
@@ -88,17 +88,6 @@ Date:   Sat Dec 25 14:30:57 2021 +0100
 
 --------------------------------------------------------------------------------
 
-commit 83948c64d10c77fb964e6523a9524729d6a66f32
-Author: Bruno Haible <br...@clisp.org>
-Date:   Sat Dec 25 12:19:13 2021 +0100
-
-    gnulib-tool: Respect applicability 'all' without --single-configure.
-
-    * gnulib-tool (func_verify_tests_module): Treat modules with
-    applicability 'all' like 'tests' modules, not like 'main' modules.
-
---------------------------------------------------------------------------------
-
 commit 4bdc327dbda59dcdbfa0f983a4f35c4a4ec3578c
 Author: Bruno Haible <br...@clisp.org>
 Date:   Sun Dec 19 12:49:16 2021 +0100
diff --git a/pygnulib/GLEmiter.py b/pygnulib/GLEmiter.py
index 97a5b5f62e..f4db15481f 100644
--- a/pygnulib/GLEmiter.py
+++ b/pygnulib/GLEmiter.py
@@ -797,7 +797,7 @@ AC_DEFUN([%V1%_LIBSOURCES], [
         # Compute allsnippets variable.
         allsnippets = ''
         for module in modules:
-            if not module.isTests():
+            if module.isNonTests():
                 # Get conditional snippet, edit it and save to amsnippet1.
                 amsnippet1 = module.getAutomakeSnippet_Conditional()
                 amsnippet1 = amsnippet1.replace('lib_LIBRARIES', 'lib%_LIBRARIES')
@@ -985,7 +985,7 @@ AC_DEFUN([%V1%_LIBSOURCES], [
             # the link dependencies of all modules.
             links = [ module.getLink()
                       for module in modules
-                      if not module.isTests() ]
+                      if module.isNonTests() ]
             lines = [ line
                       for link in links
                       for line in link.split('\n')
diff --git a/pygnulib/GLModuleSystem.py b/pygnulib/GLModuleSystem.py
index 13d03d3af8..2c5f36b6b0 100644
--- a/pygnulib/GLModuleSystem.py
+++ b/pygnulib/GLModuleSystem.py
@@ -308,14 +308,14 @@ class GLModule(object):
         '''GLModule.isTests() -> bool
 
         Check whether module is a -tests version of module.'''
-        result = self.getName().endswith('-tests')
+        result = self.getApplicability() != 'main'
         return result
 
     def isNonTests(self):
         '''GLModule.isTests() -> bool
 
         Check whether module is not a -tests version of module.'''
-        result = not self.isTests()
+        result = not self.getName().endswith('-tests')
         return result
 
     def getTestsName(self):
@@ -498,7 +498,7 @@ class GLModule(object):
             result = result.strip()
             if not result:
                 # The default is 'main' or 'tests', depending on the module's name.
-                if self.isTests():
+                if self.getName().endswith('-tests'):
                     result = 'tests'
                 else:
                     result = 'main'
@@ -529,7 +529,7 @@ class GLModule(object):
         if 'dependencies' not in self.cache:
             result = ''
             # ${module}-tests implicitly depends on ${module}, if that module exists.
-            if self.isTests():
+            if self.getName().endswith('-tests'):
                 main_module = subend('-tests', '', self.getName())
                 if self.modulesystem.exists(main_module):
                     result += '%s\n' % main_module
@@ -631,7 +631,7 @@ class GLModule(object):
         ac_version = self.config['ac_version']
         result = ''
         if 'makefile-unconditional' not in self.cache:
-            if self.isTests():
+            if self.getName().endswith('-tests'):
                 files = self.getFiles()
                 extra_files = filter_filelist(constants.NL, files,
                                               'tests/', '', 'tests/', '').split(constants.NL)
@@ -713,7 +713,7 @@ class GLModule(object):
         if 'license' not in self.cache:
             license = self.getLicense_Raw().strip()
             # Warn if the License field is missing.
-            if not self.isTests():
+            if not self.getName().endswith('-tests'):
                 if not license:
                     if self.config['errors']:
                         raise GLError(18, str(self))
@@ -1076,7 +1076,7 @@ class GLModuleTable(object):
         # Determine whether any module provides a lib_SOURCES augmentation.
         have_lib_sources = False
         for module in modules:
-            if not module.isTests():
+            if module.isNonTests():
                 if conddeps and self.isConditional(module):
                     # Ignore conditional modules, since they are not guaranteed to
                     # contribute to lib_SOURCES.
-- 
2.44.0

Reply via email to