diff options
author | Dmitri Goutnik <dmgk@FreeBSD.org> | 2022-05-13 18:34:15 +0000 |
---|---|---|
committer | Dmitri Goutnik <dmgk@FreeBSD.org> | 2022-05-13 18:38:01 +0000 |
commit | d71b4ca7752864918dea9b92e7f65c15deb3d290 (patch) | |
tree | 8bbf5380b21dfec870cf1cc58010ca04e63bd74a /Mk | |
parent | d1b86dc8c66c8928a2ccf4f58abff5771e0f8738 (diff) | |
download | ports-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.mk | 29 |
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) |