From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 28434138334 for ; Wed, 11 Sep 2019 17:28:06 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id E9F5DE0A6D; Wed, 11 Sep 2019 17:28:02 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 98B78E09BB for ; Wed, 11 Sep 2019 17:28:02 +0000 (UTC) Received: from whubbs1.gaikai.biz (unknown [100.42.103.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: williamh) by smtp.gentoo.org (Postfix) with ESMTPSA id B15FD34B0BC; Wed, 11 Sep 2019 17:28:01 +0000 (UTC) Received: (nullmailer pid 18937 invoked by uid 1000); Wed, 11 Sep 2019 17:22:29 -0000 From: William Hubbs To: gentoo-dev@lists.gentoo.org Cc: William Hubbs Subject: [gentoo-dev] [PATCH 1/3] go-module.eclass: introduce new eclass to handle go modules Date: Wed, 11 Sep 2019 12:21:26 -0500 Message-Id: <20190911172128.18885-2-williamh@gentoo.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190911172128.18885-1-williamh@gentoo.org> References: <20190911172128.18885-1-williamh@gentoo.org> Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Archives-Salt: d97a1be1-a12b-45bb-8d2a-9f8007621c15 X-Archives-Hash: 6d98227e5166abd184fcc8e7655177d2 Copyright: Sony Interactive Entertainment Inc. Signed-off-by: William Hubbs --- 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 +# @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 +# $ 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