dependencies/base: Make the ConfigTool Dependency more flexible
This commit is contained in:
parent
9f358ab54a
commit
f6e50da49a
|
@ -384,19 +384,32 @@ class NotFoundDependency(Dependency):
|
||||||
|
|
||||||
class ConfigToolDependency(ExternalDependency):
|
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
|
tools = None
|
||||||
tool_name = None
|
tool_name = None
|
||||||
|
version_arg = '--version'
|
||||||
__strip_version = re.compile(r'^[0-9][0-9.]+')
|
__strip_version = re.compile(r'^[0-9][0-9.]+')
|
||||||
|
|
||||||
def __init__(self, name, environment, kwargs, language: T.Optional[str] = None):
|
def __init__(self, name, environment, kwargs, language: T.Optional[str] = None):
|
||||||
super().__init__('config-tool', environment, kwargs, language=language)
|
super().__init__('config-tool', environment, kwargs, language=language)
|
||||||
self.name = name
|
self.name = name
|
||||||
|
# You may want to overwrite the class version in some cases
|
||||||
self.tools = listify(kwargs.get('tools', self.tools))
|
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)
|
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.config = tool
|
||||||
self.is_found = self.report_config(version, req_version)
|
self.is_found = self.report_config(version, req_version)
|
||||||
if not self.is_found:
|
if not self.is_found:
|
||||||
|
@ -415,7 +428,7 @@ class ConfigToolDependency(ExternalDependency):
|
||||||
return m.group(0).rstrip('.')
|
return m.group(0).rstrip('.')
|
||||||
return version
|
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
|
"""Helper method that searches for config tool binaries in PATH and
|
||||||
returns the one that best matches the given version requirements.
|
returns the one that best matches the given version requirements.
|
||||||
"""
|
"""
|
||||||
|
@ -444,10 +457,10 @@ class ConfigToolDependency(ExternalDependency):
|
||||||
continue
|
continue
|
||||||
tool = potential_bin.get_command()
|
tool = potential_bin.get_command()
|
||||||
try:
|
try:
|
||||||
p, out = Popen_safe(tool + ['--version'])[:2]
|
p, out = Popen_safe(tool + [self.version_arg])[:2]
|
||||||
except (FileNotFoundError, PermissionError):
|
except (FileNotFoundError, PermissionError):
|
||||||
continue
|
continue
|
||||||
if p.returncode != 0:
|
if p.returncode != returncode:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
out = self._sanitize_version(out.strip())
|
out = self._sanitize_version(out.strip())
|
||||||
|
|
|
@ -79,13 +79,13 @@ class GnuStepDependency(ConfigToolDependency):
|
||||||
['--gui-libs' if 'gui' in self.modules else '--base-libs'],
|
['--gui-libs' if 'gui' in self.modules else '--base-libs'],
|
||||||
'link_args'))
|
'link_args'))
|
||||||
|
|
||||||
def find_config(self, versions=None):
|
def find_config(self, versions=None, returncode: int = 0):
|
||||||
tool = [self.tools[0]]
|
tool = [self.tools[0]]
|
||||||
try:
|
try:
|
||||||
p, out = Popen_safe(tool + ['--help'])[:2]
|
p, out = Popen_safe(tool + ['--help'])[:2]
|
||||||
except (FileNotFoundError, PermissionError):
|
except (FileNotFoundError, PermissionError):
|
||||||
return (None, None)
|
return (None, None)
|
||||||
if p.returncode != 0:
|
if p.returncode != returncode:
|
||||||
return (None, None)
|
return (None, None)
|
||||||
self.config = tool
|
self.config = tool
|
||||||
found_version = self.detect_version()
|
found_version = self.detect_version()
|
||||||
|
|
Loading…
Reference in New Issue