diff --git a/package/pkg-golang.mk b/package/pkg-golang.mk index d07242310d..35bcb1673b 100644 --- a/package/pkg-golang.mk +++ b/package/pkg-golang.mk @@ -42,12 +42,13 @@ define inner-golang-package $(2)_BUILD_OPTS += \ -ldflags "$$($(2)_LDFLAGS)" \ + -modcacherw \ -tags "$$($(2)_TAGS)" \ -trimpath \ -p $(PARALLEL_JOBS) # Target packages need the Go compiler on the host. -$(2)_DEPENDENCIES += host-go +$(2)_DOWNLOAD_DEPENDENCIES += host-go $(2)_BUILD_TARGETS ?= . @@ -81,6 +82,16 @@ define $(2)_GEN_GOMOD endef $(2)_POST_PATCH_HOOKS += $(2)_GEN_GOMOD +$(2)_DOWNLOAD_POST_PROCESS = go +$(2)_DL_ENV = \ + $(HOST_GO_COMMON_ENV) \ + GOPROXY=direct \ + BR_GOMOD=$$($(2)_GOMOD) + +# Due to vendoring, it is pretty likely that not all licenses are +# listed in <pkg>_LICENSE. +$(2)_LICENSE += , vendored dependencies licenses probably not listed + # Build step. Only define it if not already defined by the package .mk # file. ifndef $(2)_BUILD_CMDS diff --git a/support/download/go-post-process b/support/download/go-post-process new file mode 100755 index 0000000000..be202a4c0f --- /dev/null +++ b/support/download/go-post-process @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +. "${0%/*}/helpers" + +# Parse our options +while getopts "n:o:" OPT; do + case "${OPT}" in + o) output="${OPTARG}";; + n) base_name="${OPTARG}";; + :) error "option '%s' expects a mandatory argument\n" "${OPTARG}";; + \?) error "unknown option '%s'\n" "${OPTARG}";; + esac +done + +# Already vendored tarball, nothing to do +if tar tf "${output}" | grep -q "^[^/]*/vendor" ; then + exit 0 +fi + +post_process_unpack "${base_name}" "${output}" + +# Do the Go vendoring +pushd "${base_name}" > /dev/null + +if [ ! -f go.mod ]; then + echo "ERROR: no vendor/ folder and no go.mod, aborting" + exit 1 +fi + +go mod vendor -v -modcacherw +popd > /dev/null + +post_process_repack $(pwd) "${base_name}" "${output}"