Copyright: Sony Interactive Entertainment Inc. Signed-off-by: William Hubbs <willi...@gentoo.org> --- eclass/go-module.eclass | 76 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 eclass/go-module.eclass
diff --git a/eclass/go-module.eclass b/eclass/go-module.eclass new file mode 100644 index 00000000000..7009fcd3beb --- /dev/null +++ b/eclass/go-module.eclass @@ -0,0 +1,76 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: go-module.eclass +# @MAINTAINER: +# William Hubbs <willi...@gentoo.org> +# @SUPPORTED_EAPIS: 7 +# @BLURB: basic eclass for building software written in the go +# programming language that uses go modules. +# @DESCRIPTION: +# This eclass provides a convenience src_prepare() phase and some basic +# settings needed for all software written in the go programming +# language that uses go modules. +# +# You will know the software you are packaging uses modules because +# it will have files named go.sum and go.mod in its top-level source +# directory. If it does not have these files, use the golang-* eclasses. +# +# If the software you are packaging uses modules, the next question is +# whether it has a directory named "vendor" at the top-level of the source tree. +# +# If it doesn't, you need to create a tarball of what would be in the +# vendor directory and mirror it locally. This is done with the +# following commands if upstream is using a git repository: +# +# @CODE: +# +# $ cd /my/clone/of/upstream +# $ git checkout <release> +# $ go mod vendor +# $ tar cvf project-version-vendor.tar.gz vendor +# +# @CODE: +# +# Other than this, all you need to do is inherit this eclass then +# make sure the exported src_prepare function is run. + +case ${EAPI:-0} in + 7) ;; + *) die "${ECLASS} API in EAPI ${EAPI} not yet established." +esac + +if [[ -z ${_GO_MODULE} ]]; then + +_GO_MODULE=1 + +BDEPEND=">=dev-lang/go-1.12" + +# Do not download dependencies from the internet +# make build output verbose by default +export GOFLAGS="-mod=vendor -v -x" + +# Do not complain about CFLAGS etc since go projects do not use them. +QA_FLAGS_IGNORED='.*' + +# Upstream does not support stripping go packages +RESTRICT="strip" + +EXPORT_FUNCTIONS src_prepare + +# @FUNCTION: go-module_src_prepare +# @DESCRIPTION: +# Run a default src_prepare then move our provided vendor directory to +# the appropriate spot if upstream doesn't provide a vendor directory. +go-module_src_prepare() { + default + # Use the upstream provided vendor directory if it exists. + [[ -d vendor ]] && return + # If we are not providing a mirror of a vendor directory we created + # manually, return since there may be nothing to vendor. + [[ ! -d ../vendor ]] && return + # At this point, we know we are providing a vendor mirror. + mv ../vendor . || die "Unable to move ../vendor directory" +} + +fi -- 2.21.0