golang: Move module cache into DL_DIR
This also adds a config option GOLANG_MOD_CACHE_WORLD_READABLE; if enabled, chmod is run after a Go package build to make all files/directories in the module cache world-readable. Signed-off-by: Jeffery To <jeffery.to@gmail.com>
This commit is contained in:
parent
4674564e42
commit
3dd55b504c
4 changed files with 80 additions and 6 deletions
48
lang/golang/golang-build.sh
Normal file
48
lang/golang/golang-build.sh
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
log() {
|
||||||
|
# shellcheck disable=SC2039
|
||||||
|
local IFS=" "
|
||||||
|
printf '%s\n' "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
# shellcheck disable=SC2039
|
||||||
|
local IFS=" "
|
||||||
|
printf 'Error: %s\n' "$*" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
cache_cleanup() {
|
||||||
|
if ! [ -d "$GO_MOD_CACHE_DIR" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# in case go is called without -modcacherw
|
||||||
|
find "$GO_MOD_CACHE_DIR" -type d -not -perm -u+w -exec chmod u+w '{}' +
|
||||||
|
|
||||||
|
if [ -n "$CONFIG_GOLANG_MOD_CACHE_WORLD_READABLE" ]; then
|
||||||
|
find "$GO_MOD_CACHE_DIR" -type d -not -perm -go+rx -exec chmod go+rx '{}' +
|
||||||
|
find "$GO_MOD_CACHE_DIR" -not -type d -not -perm -go+r -exec chmod go+r '{}' +
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$#" -lt 1 ]; then
|
||||||
|
log_error "Missing command"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
command="$1"
|
||||||
|
shift 1
|
||||||
|
|
||||||
|
case "$command" in
|
||||||
|
cache_cleanup)
|
||||||
|
cache_cleanup
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_error "Invalid command \"$command\""
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
|
@ -186,6 +186,7 @@ GO_PKG_TARGET_VARS= \
|
||||||
GO_PKG_BUILD_VARS= \
|
GO_PKG_BUILD_VARS= \
|
||||||
GOPATH=$(GO_PKG_BUILD_DIR) \
|
GOPATH=$(GO_PKG_BUILD_DIR) \
|
||||||
GOCACHE=$(GO_PKG_CACHE_DIR) \
|
GOCACHE=$(GO_PKG_CACHE_DIR) \
|
||||||
|
GOMODCACHE=$(GO_MOD_CACHE_DIR) \
|
||||||
GOENV=off
|
GOENV=off
|
||||||
|
|
||||||
GO_PKG_DEFAULT_VARS= \
|
GO_PKG_DEFAULT_VARS= \
|
||||||
|
@ -226,7 +227,7 @@ GoPackage/has_binaries=$(call GoPackage/is_dir_not_empty,$(GO_PKG_BUILD_BIN_DIR)
|
||||||
define GoPackage/Build/Configure
|
define GoPackage/Build/Configure
|
||||||
( \
|
( \
|
||||||
cd $(PKG_BUILD_DIR) ; \
|
cd $(PKG_BUILD_DIR) ; \
|
||||||
mkdir -p $(GO_PKG_BUILD_DIR)/bin $(GO_PKG_BUILD_DIR)/src $(GO_PKG_CACHE_DIR) ; \
|
mkdir -p $(GO_PKG_BUILD_DIR)/bin $(GO_PKG_BUILD_DIR)/src $(GO_PKG_CACHE_DIR) $(GO_MOD_CACHE_DIR) ; \
|
||||||
\
|
\
|
||||||
files=$$$$($(FIND) ./ \
|
files=$$$$($(FIND) ./ \
|
||||||
-type d -a \( -path './.git' -o -path './$(GO_PKG_WORK_DIR_NAME)' \) -prune -o \
|
-type d -a \( -path './.git' -o -path './$(GO_PKG_WORK_DIR_NAME)' \) -prune -o \
|
||||||
|
@ -303,9 +304,12 @@ define GoPackage/Build/Compile
|
||||||
( \
|
( \
|
||||||
cd $(GO_PKG_BUILD_DIR) ; \
|
cd $(GO_PKG_BUILD_DIR) ; \
|
||||||
export $(GO_PKG_VARS) ; \
|
export $(GO_PKG_VARS) ; \
|
||||||
|
if [ -f "$(PKG_BUILD_DIR)/go.mod" ] ; then \
|
||||||
|
modargs="$(GO_MOD_ARGS)" ; \
|
||||||
|
fi ; \
|
||||||
\
|
\
|
||||||
echo "Finding targets" ; \
|
echo "Finding targets" ; \
|
||||||
targets=$$$$(go list $(GO_PKG_BUILD_PKG)) ; \
|
targets=$$$$(go list $$$$modargs $(GO_PKG_BUILD_PKG)) ; \
|
||||||
for pattern in $(GO_PKG_EXCLUDES); do \
|
for pattern in $(GO_PKG_EXCLUDES); do \
|
||||||
targets=$$$$(echo "$$$$targets" | grep -v "$$$$pattern") ; \
|
targets=$$$$(echo "$$$$targets" | grep -v "$$$$pattern") ; \
|
||||||
done ; \
|
done ; \
|
||||||
|
@ -319,7 +323,7 @@ define GoPackage/Build/Compile
|
||||||
\
|
\
|
||||||
if [ "$(strip $(GO_PKG_SOURCE_ONLY))" != 1 ]; then \
|
if [ "$(strip $(GO_PKG_SOURCE_ONLY))" != 1 ]; then \
|
||||||
echo "Building targets" ; \
|
echo "Building targets" ; \
|
||||||
go install $(GO_PKG_INSTALL_ARGS) $(1) $$$$targets ; \
|
go install $(GO_PKG_INSTALL_ARGS) $$$$modargs $(1) $$$$targets ; \
|
||||||
retval=$$$$? ; \
|
retval=$$$$? ; \
|
||||||
echo ; \
|
echo ; \
|
||||||
\
|
\
|
||||||
|
@ -328,9 +332,9 @@ define GoPackage/Build/Compile
|
||||||
echo ; \
|
echo ; \
|
||||||
fi ; \
|
fi ; \
|
||||||
\
|
\
|
||||||
echo "Cleaning module download cache (golang/go#27455)" ; \
|
if [ "$$$$retval" -ne 0 ]; then \
|
||||||
go clean -modcache ; \
|
$(call Go/CacheCleanup) ; \
|
||||||
echo ; \
|
fi ; \
|
||||||
fi ; \
|
fi ; \
|
||||||
exit $$$$retval ; \
|
exit $$$$retval ; \
|
||||||
)
|
)
|
||||||
|
@ -362,6 +366,7 @@ endef
|
||||||
ifneq ($(strip $(GO_PKG)),)
|
ifneq ($(strip $(GO_PKG)),)
|
||||||
Build/Configure=$(call GoPackage/Build/Configure)
|
Build/Configure=$(call GoPackage/Build/Configure)
|
||||||
Build/Compile=$(call GoPackage/Build/Compile)
|
Build/Compile=$(call GoPackage/Build/Compile)
|
||||||
|
Hooks/Compile/Post+=Go/CacheCleanup
|
||||||
Build/InstallDev=$(call GoPackage/Build/InstallDev,$(1))
|
Build/InstallDev=$(call GoPackage/Build/InstallDev,$(1))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -219,3 +219,20 @@ ifneq ($(filter $(GO_OS_ARCH),$(GO_PIE_SUPPORTED_OS_ARCH)),)
|
||||||
GO_TARGET_PIE_SUPPORTED:=1
|
GO_TARGET_PIE_SUPPORTED:=1
|
||||||
GO_TARGET_PIE_INSTALL_SUFFIX:=$(call go_pie_install_suffix,$(GO_OS_ARCH))
|
GO_TARGET_PIE_INSTALL_SUFFIX:=$(call go_pie_install_suffix,$(GO_OS_ARCH))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
# General build info
|
||||||
|
|
||||||
|
GO_MOD_CACHE_DIR:=$(DL_DIR)/go-mod-cache
|
||||||
|
|
||||||
|
GO_MOD_ARGS= \
|
||||||
|
-modcacherw
|
||||||
|
|
||||||
|
GO_GENERAL_BUILD_CONFIG_VARS= \
|
||||||
|
CONFIG_GOLANG_MOD_CACHE_WORLD_READABLE="$(CONFIG_GOLANG_MOD_CACHE_WORLD_READABLE)" \
|
||||||
|
GO_MOD_CACHE_DIR="$(GO_MOD_CACHE_DIR)"
|
||||||
|
|
||||||
|
define Go/CacheCleanup
|
||||||
|
$(GENERAL_BUILD_CONFIG_VARS) \
|
||||||
|
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh cache_cleanup
|
||||||
|
endef
|
||||||
|
|
|
@ -12,4 +12,8 @@ config GOLANG_EXTERNAL_BOOTSTRAP_ROOT
|
||||||
|
|
||||||
Leave blank to compile the default bootstrap Go.
|
Leave blank to compile the default bootstrap Go.
|
||||||
|
|
||||||
|
config GOLANG_MOD_CACHE_WORLD_READABLE
|
||||||
|
bool "Ensure Go module cache is world-readable"
|
||||||
|
default n
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
Loading…
Reference in a new issue