You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.7 KiB
119 lines
3.7 KiB
# Copyright 1999-2015 Gentoo Foundation
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
# @ECLASS: golang-vcs-snapshot.eclass
|
|
# @MAINTAINER:
|
|
# William Hubbs <williamh@gentoo.org>
|
|
# @SUPPORTED_EAPIS: 5 6 7
|
|
# @BLURB: support eclass for unpacking VCS snapshot tarballs for
|
|
# software written in the Go programming language
|
|
# @DESCRIPTION:
|
|
# This eclass provides a convenience src_unpack() which unpacks the
|
|
# first tarball mentioned in SRC_URI to its appropriate location in
|
|
# ${WORKDIR}/${P}, treating ${WORKDIR}/${P} as a go workspace.
|
|
# Also, it provides a downstream method of vendoring packages.
|
|
#
|
|
# The location where the tarball is extracted is defined as
|
|
# ${WORKDIR}/${P}/src/${EGO_PN}. The location of vendored packages is
|
|
# defined as ${WORKDIR}/${P}/src/${EGO_PN%/*}/vendor to match Go's
|
|
# vendoring setup.
|
|
#
|
|
# The typical use case is VCS snapshots coming from github, bitbucket
|
|
# and similar services.
|
|
#
|
|
# Please note that this eclass currently handles only tarballs
|
|
# (.tar.gz), but support for more formats may be added in the future.
|
|
#
|
|
# @EXAMPLE:
|
|
#
|
|
# @CODE
|
|
# EGO_PN=github.com/user/package
|
|
# EGO_VENDOR=(
|
|
# "github.com/xenolf/lego 6cac0ea7d8b28c889f709ec7fa92e92b82f490dd"
|
|
# "golang.org/x/crypto 453249f01cfeb54c3d549ddb75ff152ca243f9d8 github.com/golang/crypto"
|
|
# )
|
|
#
|
|
# inherit golang-vcs-snapshot
|
|
#
|
|
# SRC_URI="https://github.com/example/${PN}/tarball/v${PV} -> ${P}.tar.gz
|
|
# ${EGO_VENDOR_URI}"
|
|
# @CODE
|
|
#
|
|
# The above example will extract the tarball to
|
|
# ${WORKDIR}/${P}/src/github.com/user/package
|
|
# and add the vendored tarballs to ${WORKDIR}/src/${EGO_PN}/vendor
|
|
|
|
inherit golang-base
|
|
|
|
case ${EAPI:-0} in
|
|
5|6|7) ;;
|
|
*) die "${ECLASS} API in EAPI ${EAPI} not yet established."
|
|
esac
|
|
|
|
EXPORT_FUNCTIONS src_unpack
|
|
|
|
# @ECLASS-VARIABLE: EGO_VENDOR
|
|
# @DESCRIPTION:
|
|
# This variable contains a list of vendored packages.
|
|
# The items of this array are strings that contain the
|
|
# import path and the git commit hash for a vendored package.
|
|
# If the import path does not start with github.com, the third argument
|
|
# can be used to point to a github repository.
|
|
|
|
declare -arg EGO_VENDOR
|
|
|
|
_golang-vcs-snapshot_set_vendor_uri() {
|
|
EGO_VENDOR_URI=
|
|
local lib
|
|
for lib in "${EGO_VENDOR[@]}"; do
|
|
lib=(${lib})
|
|
if [[ -n ${lib[2]} ]]; then
|
|
EGO_VENDOR_URI+=" https://${lib[2]}/archive/${lib[1]}.tar.gz -> ${lib[2]//\//-}-${lib[1]}.tar.gz"
|
|
else
|
|
EGO_VENDOR_URI+=" https://${lib[0]}/archive/${lib[1]}.tar.gz -> ${lib[0]//\//-}-${lib[1]}.tar.gz"
|
|
fi
|
|
done
|
|
readonly EGO_VENDOR_URI
|
|
}
|
|
|
|
_golang-vcs-snapshot_set_vendor_uri
|
|
unset -f _golang-vcs-snapshot_set_vendor_uri
|
|
|
|
_golang-vcs-snapshot_dovendor() {
|
|
local VENDOR_PATH=$1 VENDORPN=$2 TARBALL=$3
|
|
rm -fr "${VENDOR_PATH}/${VENDORPN}" || die
|
|
mkdir -p "${VENDOR_PATH}/${VENDORPN}" || die
|
|
tar -C "${VENDOR_PATH}/${VENDORPN}" -x --strip-components 1\
|
|
-f "${DISTDIR}"/${TARBALL} || die
|
|
}
|
|
|
|
# @FUNCTION: golang-vcs-snapshot_src_unpack
|
|
# @DESCRIPTION:
|
|
# Extract the first archive from ${A} to the appropriate location for GOPATH.
|
|
golang-vcs-snapshot_src_unpack() {
|
|
local lib vendor_path x
|
|
ego_pn_check
|
|
set -- ${A}
|
|
x="$1"
|
|
mkdir -p "${WORKDIR}/${P}/src/${EGO_PN%/...}" || die
|
|
tar -C "${WORKDIR}/${P}/src/${EGO_PN%/...}" -x --strip-components 1 \
|
|
-f "${DISTDIR}/${x}" || die
|
|
|
|
if [[ -n "${EGO_VENDOR}" ]]; then
|
|
vendor_path="${WORKDIR}/${P}/src/${EGO_PN%/...}/vendor"
|
|
mkdir -p "${vendor_path}" || die
|
|
for lib in "${EGO_VENDOR[@]}"; do
|
|
lib=(${lib})
|
|
if [[ -n ${lib[2]} ]]; then
|
|
einfo "Vendoring ${lib[0]} ${lib[2]//\//-}-${lib[1]}.tar.gz"
|
|
_golang-vcs-snapshot_dovendor "${vendor_path}" ${lib[0]} \
|
|
${lib[2]//\//-}-${lib[1]}.tar.gz
|
|
else
|
|
einfo "Vendoring ${lib[0]} ${lib[0]//\//-}-${lib[1]}.tar.gz"
|
|
_golang-vcs-snapshot_dovendor "${vendor_path}" ${lib[0]} \
|
|
${lib[0]//\//-}-${lib[1]}.tar.gz
|
|
fi
|
|
done
|
|
fi
|
|
}
|