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