pkgsrc-wip/go/go-module.mk

95 lines
2.9 KiB
Makefile

# $NetBSD: go-package.mk,v 1.21 2018/11/30 18:38:19 rillig Exp $
#
# This file implements common logic for compiling Go programs in pkgsrc.
#
# === Package-settable variables ===
#
# GO_BUILD_PATTERN (optional)
# Argument used for 'go install'.
# In most cases, the default is fine.
#
# Default:
# "...", which means all files below the top-level directory.
#
# GO_MODULE_FILES (optional)
# List of dependency files to be downloaded from the Go module proxy.
# Can be filled out from the output of "make show-go-modules".
#
# Keywords: go golang
#
# Implementation notes
#
# The compiled Go code is tied to a specific compiler version, and the
# compilation is fast. So the plan is:
#
# 1. Compile everything.
# 2. Install binaries into bin/.
# 3. Install source code and packages into a separate gopkg tree.
#
# We implement buildlink by creating a separate tree during the build and
# linking only the packages explicitly mentioned in dependencies there.
#
# All packages build-depend on the default Go release. Go packages should be
# revbumped when that package is updated.
#
.include "../../lang/go/version.mk"
GO_BUILD_PATTERN?= ...
MAKE_JOBS_SAFE= no
INSTALLATION_DIRS+= bin
USE_TOOLS+= pax
BUILD_DEPENDS+= ${GO_PACKAGE_DEP}
PRINT_PLIST_AWK+= /^@pkgdir bin$$/ { next; }
MAKE_ENV+= GO111MODULE=on GOPATH=${WRKDIR}/.gopath GOPROXY=file://${WRKDIR}/.goproxy
MAKE_ENV+= GOCACHE=${WRKDIR}/.cache/go-build
.if !target(do-build)
do-build:
${RUN} cd ${WRKSRC} && ${_ULIMIT_CMD} ${PKGSRC_SETENV} ${MAKE_ENV} ${GO} install -v ${GO_BUILD_PATTERN}
.endif
.if !target(do-test)
do-test:
${RUN} cd ${WRKSRC} && ${_ULIMIT_CMD} ${PKGSRC_SETENV} ${TEST_ENV} ${MAKE_ENV} ${GO} test -v ${GO_BUILD_PATTERN}
.endif
.if !target(do-install)
do-install:
${RUN} cd ${WRKDIR}/.gopath && [ ! -d bin ] || ${PAX} -rw bin ${DESTDIR}${PREFIX}
.endif
.PHONY: show-go-modules
show-go-modules: ${WRKDIR}/.extract_done
${RUN} cd ${WRKSRC} && ${PKGSRC_SETENV} ${MAKE_ENV} ${GO} get -d
${RUN} cd ${WRKDIR}/.gopath/pkg/mod/cache/download && ${FIND} . -type f -name "*.mod" | ${SED} -e 's/\.\//GO_MODULE_FILES+= /'
${RUN} cd ${WRKDIR}/.gopath/pkg/mod/cache/download && ${FIND} . -type f -name "*.zip" | ${SED} -e 's/\.\//GO_MODULE_FILES+= /'
DISTFILES?= ${DEFAULT_DISTFILES}
.for i in ${GO_MODULE_FILES}
DISTFILES+= ${i:S/\//_/g}
SITES.${i:S/\//_/g}= -https://proxy.golang.org/${i}
.endfor
post-extract:
.for i in ${GO_MODULE_FILES}
${MKDIR} ${WRKDIR}/.goproxy/${i:H}
cp ${DISTDIR}/${DIST_SUBDIR}/${i:S/\//_/g} ${WRKDIR}/.goproxy/${i}
.endfor
_VARGROUPS+= go
_PKG_VARS.go= GO_BUILD_PATTERN
_USER_VARS.go= GO_VERSION_DEFAULT
_SYS_VARS.go= GO GO_VERSION GOVERSSUFFIX GOARCH GOCHAR \
GOOPT GOTOOLDIR GO_PLATFORM
_DEF_VARS.go= GO14_VERSION GO19_VERSION GO110_VERSION \
GO111_VERSION INSTALLATION_DIRS MAKE_JOBS_SAFE \
NOT_FOR_PLATFORM ONLY_FOR_PLATFORM SSP_SUPPORTED \
WRKSRC
_USE_VARS.go= GO_PACKAGE_DEP
_SORTED_VARS.go= INSTALLATION_DIRS *_FOR_PLATFORM