Handle perl predeclared functions.

This commit is contained in:
Jelmer Vernooij 2021-03-30 19:33:54 +01:00
parent 7629a1932e
commit d906ec1d1c
No known key found for this signature in database
GPG key ID: 579C160D4C9E23E8
3 changed files with 42 additions and 0 deletions

View file

@ -61,6 +61,7 @@ from buildlog_consultant.common import (
MissingLibtool,
MissingQt,
MissingX11,
MissingPerlPredeclared,
)
from .fix_build import BuildFixer
@ -101,6 +102,7 @@ from .requirements import (
LibtoolRequirement,
VagueDependencyRequirement,
IntrospectionTypelibRequirement,
PerlPreDeclaredRequirement,
)
from .resolver import UnsatisfiedRequirements
@ -173,6 +175,8 @@ def problem_to_upstream_requirement(problem): # noqa: C901
return LibtoolRequirement()
elif isinstance(problem, UnknownCertificateAuthority):
return CertificateAuthorityRequirement(problem.url)
elif isinstance(problem, MissingPerlPredeclared):
return PerlPreDeclaredRequirement(problem.name)
elif isinstance(problem, MissingSetupPyCommand):
if problem.command == "test":
return PythonPackageRequirement("setuptools")

View file

@ -192,6 +192,32 @@ class NodePackageRequirement(Requirement):
return "%s(%r)" % (type(self).__name__, self.package)
class PerlPreDeclaredRequirement(Requirement):
name: str
# TODO(jelmer): Can we obtain this information elsewhere?
KNOWN_MODULES = {
'auto_set_repository': 'Module::Install::Repository',
'author_tests': 'Module::Install::AuthorTests',
'readme_from': 'Module::Install::ReadmeFromPod',
'catalyst': 'Module::Install::Catalyst',
'githubmeta': 'Module::Install::GithubMeta',
'use_ppport': 'Module::Install::XSUtil',
}
def __init__(self, name):
super(PerlPreDeclaredRequirement, self).__init__("perl-predeclared")
self.name = name
def lookup_module(self):
module = self.KNOWN_MODULES[self.name]
return PerlModuleRequirement(module=module)
def __repr__(self):
return "%s(%r)" % (type(self).__name__, self.name)
class NodeModuleRequirement(Requirement):
module: str

View file

@ -68,6 +68,7 @@ from ..requirements import (
CertificateAuthorityRequirement,
LibtoolRequirement,
VagueDependencyRequirement,
PerlPreDeclaredRequirement,
IntrospectionTypelibRequirement,
)
@ -117,6 +118,16 @@ class AptRequirement(Requirement):
return False
def resolve_perl_predeclared_req(apt_mgr, req):
try:
req = req.lookup_module()
except KeyError:
logging.warning(
'Unable to map predeclared function %s to a perl module', req.name)
return None
return resolve_perl_module_req(apt_mgr, req)
def find_package_names(
apt_mgr: AptManager, paths: List[str], regex: bool = False, case_insensitive=False
) -> List[str]:
@ -639,6 +650,7 @@ APT_REQUIREMENT_RESOLVERS = [
(AptRequirement, resolve_apt_req),
(BinaryRequirement, resolve_binary_req),
(VagueDependencyRequirement, resolve_vague_dep_req),
(PerlPreDeclaredRequirement, resolve_perl_predeclared_req),
(PkgConfigRequirement, resolve_pkg_config_req),
(PathRequirement, resolve_path_req),
(CHeaderRequirement, resolve_c_header_req),