summaryrefslogtreecommitdiff
path: root/pygnulib
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2022-08-08 00:02:59 +0200
committerBruno Haible <bruno@clisp.org>2022-08-08 00:02:59 +0200
commit276c20ee288873b519be96ffe9b3a98bfe3bb8f1 (patch)
tree1648246619f6c15f657968ae8160acac3eab4634 /pygnulib
parentd528738ac3449ce1c4897882e6032eb3a3e929e2 (diff)
downloadgnulib-276c20ee288873b519be96ffe9b3a98bfe3bb8f1.tar.gz
gnulib-tool.py: Fix --extract-dependencies result.
* pygnulib/GLModuleSystem.py (GLModule.getDependencies): Return a snippet, not a list. Implement dependency of ${module}-tests on ${module}. (GLModule.getDependenciesWithoutConditions, GLModule.getDependenciesWithConditions): New methods. (GLModuleTable.transitive_closure): Call getDependenciesWithConditions. * pygnulib/GLEmiter.py (GLEmiter.autoconfSnippets): Call getDependenciesWithoutConditions. * gnulib-tool.py (main) [--extract-dependencies]: Update.
Diffstat (limited to 'pygnulib')
-rw-r--r--pygnulib/GLEmiter.py4
-rw-r--r--pygnulib/GLModuleSystem.py83
2 files changed, 63 insertions, 24 deletions
diff --git a/pygnulib/GLEmiter.py b/pygnulib/GLEmiter.py
index 61cabc92fa..a02b44bdd5 100644
--- a/pygnulib/GLEmiter.py
+++ b/pygnulib/GLEmiter.py
@@ -309,9 +309,7 @@ class GLEmiter(object):
emit += self.autoconfSnippet(module, fileassistant, toplevel,
disable_libtool, disable_gettext, replace_auxdir, ' ')
emit += ' %s=true\n' % shellvar
- dependencies = module.getDependencies()
- depmodules = [ pair[0]
- for pair in dependencies ]
+ depmodules = module.getDependenciesWithoutConditions()
# Intersect dependencies with the modules list.
depmodules = [ dep
for dep in depmodules
diff --git a/pygnulib/GLModuleSystem.py b/pygnulib/GLModuleSystem.py
index 14bc089b27..19d13d213b 100644
--- a/pygnulib/GLModuleSystem.py
+++ b/pygnulib/GLModuleSystem.py
@@ -452,33 +452,74 @@ class GLModule(object):
return self.cache['files']
def getDependencies(self):
- '''GLModule.getDependencies() -> list
+ '''GLModule.getDependencies() -> str
- Return list of dependencies.
+ Return list of dependencies, as a snippet.
GLConfig: localpath.'''
if 'dependencies' not in self.cache:
+ result = ''
+ # ${module}-tests implicitly depends on ${module}, if that module exists.
+ if self.isTests():
+ main_module = subend('-tests', '', self.getName())
+ if self.modulesystem.exists(main_module):
+ result += '%s\n' % main_module
+ # Then the explicit dependencies listed in the module description.
snippet = self.sections.get('Depends-on', '')
- modules = [ line.strip()
- for line in snippet.split('\n')
- if line.strip() ]
- modules = [ module
- for module in modules
- if not module.startswith('#') ]
- result = list()
- for line in modules:
- split = [ part
- for part in line.split(' ')
- if part.strip() ]
- if len(split) == 1:
- module = line.strip()
- condition = None
- else: # if len(split) != 1
- module = split[0]
- condition = split[1]
- result += [tuple([self.modulesystem.find(module), condition])]
+ # Remove comment lines.
+ snippet = re.compile('^#.*$[\n]', re.M).sub('', snippet)
+ result += snippet
self.cache['dependencies'] = result
return self.cache['dependencies']
+ def getDependenciesWithoutConditions(self):
+ '''GLModule.getDependenciesWithoutConditions() -> list
+
+ Return list of dependencies, as a list of GLModule objects.
+ GLConfig: localpath.'''
+ if 'dependenciesWithoutCond' not in self.cache:
+ snippet = self.getDependencies()
+ lines = [ line.strip()
+ for line in snippet.split('\n')
+ if line.strip() ]
+ pattern = re.compile(' *\\[.*$')
+ lines = [ pattern.sub('', line)
+ for line in lines ]
+ result = [ self.modulesystem.find(module)
+ for module in lines
+ if module != '' ]
+ self.cache['dependenciesWithoutCond'] = result
+ return self.cache['dependenciesWithoutCond']
+
+ def getDependenciesWithConditions(self):
+ '''GLModule.getDependenciesWithConditions() -> list
+
+ Return list of dependencies, as a list of pairs (GLModule object, condition).
+ The "true" condition is denoted by None.
+ GLConfig: localpath.'''
+
+ if 'dependenciesWithCond' not in self.cache:
+ snippet = self.getDependencies()
+ lines = [ line.strip()
+ for line in snippet.split('\n')
+ if line.strip() ]
+ pattern = re.compile(' *\\[')
+ result = []
+ for line in lines:
+ match = pattern.search(line)
+ if match:
+ module = line[0 : match.start()]
+ condition = line[match.end() :]
+ condition = subend(']', '', condition)
+ else:
+ module = line
+ condition = None
+ if module != '':
+ if condition == 'true':
+ condition = None
+ result.append(tuple([self.modulesystem.find(module), condition]))
+ self.cache['dependenciesWithCond'] = result
+ return self.cache['dependenciesWithCond']
+
def getAutoconfEarlySnippet(self):
'''GLModule.getAutoconfEarlySnippet() -> str
@@ -798,7 +839,7 @@ class GLModuleTable(object):
if not pattern.findall(automake_snippet):
self.addUnconditional(module)
conditional = self.isConditional(module)
- dependencies = module.getDependencies()
+ dependencies = module.getDependenciesWithConditions()
depmodules = [ pair[0]
for pair in dependencies ]
conditions = [ pair[1]