Handle perl predeclared functions.
This commit is contained in:
parent
7629a1932e
commit
d906ec1d1c
3 changed files with 42 additions and 0 deletions
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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),
|
||||
|
|
Loading…
Add table
Reference in a new issue