Improve Java support.

This commit is contained in:
Jelmer Vernooij 2021-03-04 16:10:38 +00:00
parent 8f39cc839b
commit da2605ab25
No known key found for this signature in database
GPG key ID: 579C160D4C9E23E8
5 changed files with 55 additions and 7 deletions

View file

@ -34,6 +34,7 @@ from buildlog_consultant.common import (
MissingPerlModule,
MissingXmlEntity,
MissingJDKFile,
MissingJDK,
MissingNodeModule,
MissingPhpClass,
MissingRubyGem,
@ -75,6 +76,7 @@ from .requirements import (
MavenArtifactRequirement,
GnomeCommonRequirement,
JDKFileRequirement,
JDKRequirement,
PerlModuleRequirement,
PerlFileRequirement,
AutoconfMacroRequirement,
@ -129,6 +131,8 @@ def problem_to_upstream_requirement(problem): # noqa: C901
return GnomeCommonRequirement()
elif isinstance(problem, MissingJDKFile):
return JDKFileRequirement(problem.jdk_path, problem.filename)
elif isinstance(problem, MissingJDK):
return JDKRequirement()
elif isinstance(problem, MissingGnomeCommonDependency):
if problem.package == "glib-gettext":
return BinaryRequirement("glib-gettextize")

View file

@ -262,20 +262,51 @@ class Gradle(BuildSystem):
name = "gradle"
def __init__(self, path):
def __init__(self, path, executable="gradle"):
self.path = path
self.executable = executable
def __repr__(self):
return "%s(%r)" % (type(self).__name__, self.path)
@classmethod
def exists(cls, path):
return (
os.path.exists(os.path.join(path, "build.gradle")) or
os.path.exists(os.path.join(path, "build.gradle.kts")))
@classmethod
def from_path(cls, path):
if os.path.exists(os.path.join(path, "gradlew")):
return cls(path, "./gradlew")
return cls(path)
def setup(self, resolver):
if not self.executable.startswith('./'):
resolver.install([BinaryRequirement(self.executable)])
def clean(self, session, resolver, fixers):
run_with_build_fixers(session, ["gradle", "clean"], fixers)
self.setup(resolver)
run_with_build_fixers(session, [self.executable, "clean"], fixers)
def build(self, session, resolver, fixers):
run_with_build_fixers(session, ["gradle", "build"], fixers)
self.setup(resolver)
run_with_build_fixers(session, [self.executable, "build"], fixers)
def test(self, session, resolver, fixers):
run_with_build_fixers(session, ["gradle", "test"], fixers)
self.setup(resolver)
run_with_build_fixers(session, [self.executable, "test"], fixers)
def dist(self, session, resolver, fixers, quiet=False):
self.setup(resolver)
run_with_build_fixers(session, [self.executable, "distTar"], fixers)
def install(self, session, resolver, fixers, install_target):
raise NotImplementedError
self.setup(resolver)
# TODO(jelmer): installDist just creates files under build/install/...
run_with_build_fixers(
session, [self.executable, "installDist"], fixers)
class Meson(BuildSystem):
@ -733,9 +764,9 @@ def detect_buildsystems(path, trust_package=False): # noqa: C901
logging.debug("Found Cargo.toml, assuming rust cargo package.")
yield Cargo("Cargo.toml")
if os.path.exists(os.path.join(path, "build.gradle")):
if Gradle.exists(path):
logging.debug("Found build.gradle, assuming gradle package.")
yield Gradle("build.gradle")
yield Gradle.from_path(path)
if os.path.exists(os.path.join(path, "meson.build")):
logging.debug("Found meson.build, assuming meson package.")

View file

@ -66,9 +66,10 @@ def run_with_build_fixers(session: Session, args: List[str], fixers: List[BuildF
logging.info("Running %r", args)
fixed_errors = []
while True:
retcode, lines = run_with_tee(session, args)
retcode, contents = run_with_tee(session, args)
if retcode == 0:
return
lines = ''.join(contents).splitlines(True)
match, error = find_build_failure_description(lines)
if error is None:
if match:

View file

@ -334,6 +334,12 @@ class JDKFileRequirement(Requirement):
return posixpath.join(self.jdk_path, self.filename)
class JDKRequirement(Requirement):
def __init__(self):
super(JDKRequirement, self).__init__("jdk")
class PerlFileRequirement(Requirement):
filename: str

View file

@ -50,6 +50,7 @@ from ..requirements import (
MavenArtifactRequirement,
GnomeCommonRequirement,
JDKFileRequirement,
JDKRequirement,
PerlModuleRequirement,
PerlFileRequirement,
AutoconfMacroRequirement,
@ -444,6 +445,10 @@ def resolve_jdk_file_req(apt_mgr, req):
return None
def resolve_jdk_req(apt_mgr, req):
return AptRequirement.simple('default-jdk')
def resolve_perl_module_req(apt_mgr, req):
DEFAULT_PERL_PATHS = ["/usr/share/perl5"]
@ -547,6 +552,7 @@ APT_REQUIREMENT_RESOLVERS = [
(MavenArtifactRequirement, resolve_maven_artifact_req),
(GnomeCommonRequirement, resolve_gnome_common_req),
(JDKFileRequirement, resolve_jdk_file_req),
(JDKRequirement, resolve_jdk_req),
(PerlModuleRequirement, resolve_perl_module_req),
(PerlFileRequirement, resolve_perl_file_req),
(AutoconfMacroRequirement, resolve_autoconf_macro_req),