Try even harder.

This commit is contained in:
Jelmer Vernooij 2021-04-09 17:37:08 +01:00
parent dc9909553a
commit f7a258a510
4 changed files with 49 additions and 7 deletions

View file

@ -64,6 +64,7 @@ from buildlog_consultant.common import (
MissingPerlPredeclared,
MissingLatexFile,
MissingCargoCrate,
MissingStaticLibrary,
)
from buildlog_consultant.apt import UnsatisfiedAptDependencies
@ -108,6 +109,7 @@ from .requirements import (
PerlPreDeclaredRequirement,
LatexPackageRequirement,
CargoCrateRequirement,
StaticLibraryRequirement,
)
from .resolver import UnsatisfiedRequirements
@ -139,6 +141,8 @@ def problem_to_upstream_requirement(problem): # noqa: C901
return RPackageRequirement(problem.package, problem.minimum_version)
elif isinstance(problem, MissingNodeModule):
return NodeModuleRequirement(problem.module)
elif isinstance(problem, MissingStaticLibrary):
return StaticLibraryRequirement(problem.library, problem.filename)
elif isinstance(problem, MissingNodePackage):
return NodePackageRequirement(problem.package)
elif isinstance(problem, MissingLatexFile):

View file

@ -1473,13 +1473,16 @@ class PerlBuildTiny(BuildSystem):
def get_declared_dependencies(self, session, fixers=None):
self.setup(session, fixers)
try:
run_with_build_fixers(session, ["./Build", "distmeta"], fixers)
except UnidentifiedError as e:
if "No such action 'distmeta'" in e.lines:
pass
else:
raise
if self.minilla:
pass # Minilla doesn't seem to have a way to just regenerate the metadata :(
else:
try:
run_with_build_fixers(session, ["./Build", "distmeta"], fixers)
except UnidentifiedError as e:
if "No such action 'distmeta'" in e.lines:
pass
else:
raise
try:
with open(os.path.join(self.path, 'META.yml'), 'r') as f:
yield from _declared_deps_from_meta_yml(f)

View file

@ -460,6 +460,18 @@ class LibraryRequirement(Requirement):
self.library = library
class StaticLibraryRequirement(Requirement):
library: str
filename: str
def __init__(self, library: str, filename: str):
super(StaticLibraryRequirement, self).__init__("static-lib")
self.library = library
self.filename = filename
class RubyFileRequirement(Requirement):
filename: str

View file

@ -47,6 +47,7 @@ from ..requirements import (
NodeModuleRequirement,
NodePackageRequirement,
LibraryRequirement,
StaticLibraryRequirement,
RubyFileRequirement,
XmlEntityRequirement,
SprocketsFileRequirement,
@ -335,6 +336,19 @@ def resolve_vague_dep_req(apt_mgr, req):
options.append(AptRequirement.simple(vague_map[name], minimum_version=req.minimum_version))
for x in req.expand():
options.extend(resolve_requirement_apt(apt_mgr, x))
# Try even harder
if not options:
options.extend(find_reqs_simple(
apt_mgr,
[
posixpath.join("/usr/lib", ".*", "pkgconfig", re.escape(req.module) + ".*\\.pc"),
posixpath.join("/usr/lib/pkgconfig", re.escape(req.module) + "-.*\\.pc")
],
regex=True,
case_insensitive=True,
minimum_version=req.minimum_version
))
return options
@ -469,6 +483,14 @@ def resolve_library_req(apt_mgr, req):
return find_reqs_simple(apt_mgr, paths, regex=True)
def resolve_static_library_req(apt_mgr, req):
paths = [
posixpath.join("/usr/lib/%s$" % re.escape(req.filename)),
posixpath.join("/usr/lib/.*/%s$" % re.escape(req.filename)),
]
return find_reqs_simple(apt_mgr, paths, regex=True)
def resolve_ruby_file_req(apt_mgr, req):
paths = [posixpath.join("/usr/lib/ruby/vendor_ruby/%s.rb" % req.filename)]
reqs = find_reqs_simple(apt_mgr, paths, regex=False)
@ -697,6 +719,7 @@ APT_REQUIREMENT_RESOLVERS = [
(NodeModuleRequirement, resolve_node_module_req),
(NodePackageRequirement, resolve_node_package_req),
(LibraryRequirement, resolve_library_req),
(StaticLibraryRequirement, resolve_static_library_req),
(RubyFileRequirement, resolve_ruby_file_req),
(XmlEntityRequirement, resolve_xml_entity_req),
(SprocketsFileRequirement, resolve_sprockets_file_req),