diff --git a/ognibuild/buildsystem.py b/ognibuild/buildsystem.py index 17dd76f..e5718f8 100644 --- a/ognibuild/buildsystem.py +++ b/ognibuild/buildsystem.py @@ -42,6 +42,8 @@ from .requirements import ( OctavePackageRequirement, PhpPackageRequirement, MavenArtifactRequirement, + GoRequirement, + GoPackageRequirement, ) from .fix_build import run_with_build_fixers from .session import which @@ -1165,6 +1167,26 @@ class Golang(BuildSystem): def clean(self, session, resolver, fixers): session.check_call(["go", "clean"]) + def get_declared_dependencies(self, session, fixers=None): + go_mod_path = os.path.join(self.path, 'go.mod') + if not os.path.exists(go_mod_path): + with open(go_mod_path, 'r') as f: + for line in f: + parts = line.strip().split(' ') + if not parts: + continue + if parts[0] == 'go': + yield "build", GoRequirement(parts[1]) + elif parts[0] == 'require': + yield "build", GoPackageRequirement( + parts[1], parts[2] if len(parts) > 2 else None) + elif parts[0] in ('module', 'exclude', 'replace'): + pass + else: + logging.warning( + 'Unknown directive %s in go.mod', + parts[0]) + @classmethod def probe(cls, path): if os.path.exists(os.path.join(path, 'go.mod')): diff --git a/ognibuild/requirements.py b/ognibuild/requirements.py index 729e77b..2b0efaa 100644 --- a/ognibuild/requirements.py +++ b/ognibuild/requirements.py @@ -271,10 +271,21 @@ class RubyGemRequirement(Requirement): class GoPackageRequirement(Requirement): package: str + version: Optional[str] - def __init__(self, package: str): - super(GoPackageRequirement, self).__init__("go") + def __init__(self, package: str, version: Optional[str] = None): + super(GoPackageRequirement, self).__init__("go-package") self.package = package + self.version = version + + +class GoRequirement(Requirement): + + version: Optional[str] + + def __init__(self, version: Optional[str] = None): + super(GoPackageRequirement, self).__init__("go") + self.version = version class DhAddonRequirement(Requirement): diff --git a/ognibuild/resolver/apt.py b/ognibuild/resolver/apt.py index ce160f3..1bc4f78 100644 --- a/ognibuild/resolver/apt.py +++ b/ognibuild/resolver/apt.py @@ -39,6 +39,7 @@ from ..requirements import ( ValaPackageRequirement, RubyGemRequirement, GoPackageRequirement, + GoRequirement, DhAddonRequirement, PhpClassRequirement, PhpPackageRequirement, @@ -306,6 +307,10 @@ def resolve_go_package_req(apt_mgr, req): ) +def resolve_go_req(apt_mgr, req): + return [AptRequirement.simple('golang-%s' % req.version)] + + def resolve_dh_addon_req(apt_mgr, req): paths = [posixpath.join("/usr/share/perl5", req.path)] return find_reqs_simple(apt_mgr, paths) @@ -556,6 +561,7 @@ APT_REQUIREMENT_RESOLVERS = [ (ValaPackageRequirement, resolve_vala_package_req), (RubyGemRequirement, resolve_ruby_gem_req), (GoPackageRequirement, resolve_go_package_req), + (GoRequirement, resolve_go_req), (DhAddonRequirement, resolve_dh_addon_req), (PhpClassRequirement, resolve_php_class_req), (PhpPackageRequirement, resolve_php_package_req),