aboutsummaryrefslogtreecommitdiff
path: root/Mk
diff options
context:
space:
mode:
authorDmitri Goutnik <dmgk@FreeBSD.org>2022-05-13 18:34:15 +0000
committerDmitri Goutnik <dmgk@FreeBSD.org>2022-05-13 18:38:01 +0000
commitd71b4ca7752864918dea9b92e7f65c15deb3d290 (patch)
tree8bbf5380b21dfec870cf1cc58010ca04e63bd74a /Mk
parentd1b86dc8c66c8928a2ccf4f58abff5771e0f8738 (diff)
downloadports-d71b4ca7752864918dea9b92e7f65c15deb3d290.tar.gz
ports-d71b4ca7752864918dea9b92e7f65c15deb3d290.zip
Mk/Uses/go.mk: Block modules download when CLEAN_FETCH_ENV is defined
Additionally, stop overriding post-fetch and post-extract targets. PR: 258474 Differential Revision: https://reviews.freebsd.org/D35145
Diffstat (limited to 'Mk')
-rw-r--r--Mk/Uses/go.mk29
1 files changed, 21 insertions, 8 deletions
diff --git a/Mk/Uses/go.mk b/Mk/Uses/go.mk
index b73e198e29fe..39585e0c9946 100644
--- a/Mk/Uses/go.mk
+++ b/Mk/Uses/go.mk
@@ -128,6 +128,8 @@ GO_ENV+= GOPATH="${GO_GOPATH}" \
. if defined(GO_MODULE)
GO_MODNAME= ${GO_MODULE:C/^([^@]*)(@([^@]*)?)/\1/}
. if empty(DISTFILES:Mgo.mod\:*) && empty(DISTFILES:Mgo.mod)
+# Unless already setup for download by other means,
+# arrange to pull go.mod and distribution archive from GOPROXY.
GO_MODVERSION= ${GO_MODULE:C/^([^@]*)(@([^@]*)?)/\2/:M@*:S/^@//:S/^$/${DISTVERSIONFULL}/}
GO_MODFILE= ${GO_MODVERSION}.mod
GO_DISTFILE= ${GO_MODVERSION}.zip
@@ -162,26 +164,37 @@ _USES_POST+= go
.if defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_GO_POST_MK)
_INCLUDE_USES_GO_POST_MK= yes
-. if !target(post-fetch) && ${go_ARGS:Mmodules} && defined(GO_MODULE)
-post-fetch:
+. if ${go_ARGS:Mmodules} && defined(GO_MODULE)
+_USES_fetch+= 200:go-pre-fetch 800:go-post-fetch
+# Check that pkg can be installed or is already available,
+# otherwise it will be impossible to install go and fetch dependencies.
+go-pre-fetch:
+. if defined(CLEAN_FETCH_ENV) && !exists(${PKG_BIN})
+ @${ECHO_MSG} "===> CLEAN_FETCH_ENV is defined, cannot download Go modules (pkg and go are required)"; \
+ exit 1
+. endif
+# Download all required build dependencies to GOMODCACHE.
+go-post-fetch:
@${ECHO_MSG} "===> Fetching ${GO_MODNAME} dependencies";
@(cd ${DISTDIR}/${DIST_SUBDIR}; \
[ -e go.mod ] || ${RLN} ${GO_MODFILE} go.mod; \
${SETENV} ${GO_ENV} GOPROXY=${GO_GOPROXY} ${GO_CMD} mod download -x all)
. endif
-. if !target(post-extract)
-. if empty(go_ARGS)
-post-extract:
+_USES_extract+= 800:go-post-extract
+. if empty(go_ARGS)
+# Legacy (GOPATH) build mode, setup directory structure expected by Go for the main module.
+go-post-extract:
@${MKDIR} ${GO_WRKSRC:H}
@${LN} -sf ${WRKSRC} ${GO_WRKSRC}
-. elif ${go_ARGS:Mmodules} && defined(GO_MODULE)
-post-extract:
+. elif ${go_ARGS:Mmodules} && defined(GO_MODULE)
+# Module-aware build mode. Although not strictly necessary (all build dependencies should be
+# already in MODCACHE), vendor them so we can patch them if needed.
+go-post-extract:
@${ECHO_MSG} "===> Tidying ${GO_MODNAME} dependencies";
@(cd ${GO_WRKSRC}; ${SETENV} ${GO_ENV} GOPROXY=${GO_MODCACHE} ${GO_CMD} mod tidy -e)
@${ECHO_MSG} "===> Vendoring ${GO_MODNAME} dependencies";
@(cd ${GO_WRKSRC}; ${SETENV} ${GO_ENV} GOPROXY=${GO_MODCACHE} ${GO_CMD} mod vendor -e)
-. endif
. endif
. if !target(do-build) && empty(go_ARGS:Mno_targets)