diff options
author | Bruno Haible <bruno@clisp.org> | 2022-08-08 00:02:59 +0200 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2022-08-08 00:02:59 +0200 |
commit | 276c20ee288873b519be96ffe9b3a98bfe3bb8f1 (patch) | |
tree | 1648246619f6c15f657968ae8160acac3eab4634 /pygnulib | |
parent | d528738ac3449ce1c4897882e6032eb3a3e929e2 (diff) | |
download | gnulib-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.py | 4 | ||||
-rw-r--r-- | pygnulib/GLModuleSystem.py | 83 |
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] |