dependencies/base: Make the ConfigTool Dependency more flexible

pull/6544/head
Dylan Baker 5 years ago
parent 9f358ab54a
commit f6e50da49a
  1. 23
      mesonbuild/dependencies/base.py
  2. 4
      mesonbuild/dependencies/ui.py

@ -384,19 +384,32 @@ class NotFoundDependency(Dependency):
class ConfigToolDependency(ExternalDependency):
"""Class representing dependencies found using a config tool."""
"""Class representing dependencies found using a config tool.
Takes the following extra keys in kwargs that it uses internally:
:tools List[str]: A list of tool names to use
:version_arg str: The argument to pass to the tool to get it's version
:returncode_value int: The value of the correct returncode
Because some tools are stupid and don't return 0
"""
tools = None
tool_name = None
version_arg = '--version'
__strip_version = re.compile(r'^[0-9][0-9.]+')
def __init__(self, name, environment, kwargs, language: T.Optional[str] = None):
super().__init__('config-tool', environment, kwargs, language=language)
self.name = name
# You may want to overwrite the class version in some cases
self.tools = listify(kwargs.get('tools', self.tools))
if not self.tool_name:
self.tool_name = self.tools[0]
if 'version_arg' in kwargs:
self.version_arg = kwargs['version_arg']
req_version = kwargs.get('version', None)
tool, version = self.find_config(req_version)
tool, version = self.find_config(req_version, kwargs.get('returncode_value', 0))
self.config = tool
self.is_found = self.report_config(version, req_version)
if not self.is_found:
@ -415,7 +428,7 @@ class ConfigToolDependency(ExternalDependency):
return m.group(0).rstrip('.')
return version
def find_config(self, versions=None):
def find_config(self, versions=None, returncode: int = 0):
"""Helper method that searches for config tool binaries in PATH and
returns the one that best matches the given version requirements.
"""
@ -444,10 +457,10 @@ class ConfigToolDependency(ExternalDependency):
continue
tool = potential_bin.get_command()
try:
p, out = Popen_safe(tool + ['--version'])[:2]
p, out = Popen_safe(tool + [self.version_arg])[:2]
except (FileNotFoundError, PermissionError):
continue
if p.returncode != 0:
if p.returncode != returncode:
continue
out = self._sanitize_version(out.strip())

@ -79,13 +79,13 @@ class GnuStepDependency(ConfigToolDependency):
['--gui-libs' if 'gui' in self.modules else '--base-libs'],
'link_args'))
def find_config(self, versions=None):
def find_config(self, versions=None, returncode: int = 0):
tool = [self.tools[0]]
try:
p, out = Popen_safe(tool + ['--help'])[:2]
except (FileNotFoundError, PermissionError):
return (None, None)
if p.returncode != 0:
if p.returncode != returncode:
return (None, None)
self.config = tool
found_version = self.detect_version()

Loading…
Cancel
Save