139 lines
5 KiB
Makefile
139 lines
5 KiB
Makefile
# $NetBSD: go-dep.mk,v 1.2 2019/09/10 20:01:06 rillig Exp $
|
|
#
|
|
# This file implements dep (https://github.com/golang/dep) support in pkgsrc.
|
|
#
|
|
# === Package-settable variables ===
|
|
#
|
|
# GO_DEPS
|
|
# This is a list of dependencies of the format url:sha[:dir]. These
|
|
# dependencies can be generated using the print-go-deps helper target
|
|
# against an extracted WRKSRC, which parses the Godeps file contained in
|
|
# the source that would normally be used by dep.
|
|
#
|
|
# Currently only GitHub URLs are supported, so if a Godeps dependency
|
|
# uses a different URL, the equivalent GitHub URL needs to be calculated
|
|
# and the original URL added as the optional :dir argument. This file
|
|
# contains a list of GODEP_REDIRECTS which translates common redirects,
|
|
# and additions to this list are encouraged.
|
|
#
|
|
# The print-go-deps target will reduce SHA strings to the first 8
|
|
# characters to avoid long lines, but the extracted archive will use the
|
|
# full SHA.
|
|
#
|
|
# Examples:
|
|
# github.com/golang/protobuf:92554152
|
|
# github.com/collectd/go-collectd:2ce14454:collectd.org
|
|
# github.com/uber-go/atomic:8474b86a:go.uber.org/atomic
|
|
# github.com/golang/time:26559e0f:golang.org/x/time
|
|
#
|
|
# GODEP_REDIRECTS
|
|
# Maps a URL or subset of a URL to its GitHub equivalent. URLs that are
|
|
# likely to be used across multiple packages should be added to this
|
|
# file, otherwise add them to the individual package Makefile.
|
|
#
|
|
# Examples:
|
|
# collectd.org=github.com/collectd/go-collectd
|
|
# golang.org/x=github.com/golang
|
|
#
|
|
# Keywords: go golang deps go-deps print-go-deps
|
|
|
|
_VARGROUPS+= godeps
|
|
_PKG_VARS.godeps= GO_DEPS GODEP_REDIRECTS
|
|
_USE_VARS.godeps= PKGNAME_NOREV \
|
|
MASTER_SITE_GITHUB DEFAULT_DISTFILES \
|
|
WRKDIR BUILDLINK_DIR DESTDIR PREFIX \
|
|
TEST_ENV
|
|
_DEF_VARS.godeps= DISTFILES DIST_SUBDIR MAKE_ENV \
|
|
${GO_DEPS:@dep@ \
|
|
${:U GODEP_URL GODEP_SHA GODEP_DIR GODEP_TGZ \
|
|
:@var@${var}.${dep} @} \
|
|
SITES.${GODEP_TGZ.${dep}} @} \
|
|
PRINT_PLIST_AWK
|
|
_IGN_VARS.godeps= _GODEP_AWK _GO_DIST_BASE
|
|
_LISTED_VARS.godeps= GO_DEPS GODEP_REDIRECTS DISTFILES *_ENV
|
|
|
|
#
|
|
# When using GO_DEPS a lot of additional distfiles will be added with just SHAs
|
|
# for their filename. Setting DIST_SUBDIR is required to keep things sensible.
|
|
#
|
|
DIST_SUBDIR= ${PKGNAME_NOREV}
|
|
|
|
#
|
|
# For now fetching via GitHub is mandatory.
|
|
#
|
|
DISTFILES?= ${DEFAULT_DISTFILES}
|
|
.for dep in ${GO_DEPS}
|
|
GODEP_URL.${dep}:= ${dep:C/:/ /g:[1]}
|
|
GODEP_SHA.${dep}:= ${dep:C/:/ /g:[2]}
|
|
GODEP_DIR.${dep}:= ${dep:C/:/ /g:[3]}
|
|
. if empty(GODEP_DIR.${dep})
|
|
GODEP_DIR.${dep}:= ${GODEP_URL.${dep}}
|
|
. endif
|
|
GODEP_TGZ.${dep}:= ${GODEP_SHA.${dep}}.tar.gz
|
|
SITES.${GODEP_TGZ.${dep}}:= ${MASTER_SITE_GITHUB}${GODEP_URL.${dep}:S,github.com/,,}/archive/
|
|
DISTFILES+= ${GODEP_TGZ.${dep}}
|
|
|
|
.PHONY: post-extract-${GODEP_URL.${dep}}
|
|
post-extract: post-extract-${GODEP_URL.${dep}}
|
|
post-extract-${GODEP_URL.${dep}}:
|
|
# We can't use :H here as the GODEP_DIR might just be a host.name
|
|
@${MKDIR} `${DIRNAME} ${WRKDIR}/src/${GODEP_DIR.${dep}}`
|
|
# The * glob is used as we shorten the SHA to 8 characters to keep
|
|
# GO_DEPS lines a reasonable length, but the extracted distfile uses
|
|
# the full SHA.
|
|
@${MV} ${WRKDIR}/${GODEP_URL.${dep}:T}-${GODEP_SHA.${dep}}* \
|
|
${WRKDIR}/src/${GODEP_DIR.${dep}}
|
|
.endfor
|
|
|
|
#
|
|
# Non-GitHub sites which are listed in Godeps files but redirect to GitHub. We
|
|
# fetch them from GitHub but move the source to the expected directory name.
|
|
#
|
|
GODEP_REDIRECTS+= collectd.org=github.com/collectd/go-collectd
|
|
GODEP_REDIRECTS+= go.uber.org=github.com/uber-go
|
|
GODEP_REDIRECTS+= go4.org=github.com/go4org/go4
|
|
GODEP_REDIRECTS+= golang.org/x=github.com/golang
|
|
GODEP_REDIRECTS+= google.golang.org/appengine=github.com/golang/appengine
|
|
GODEP_REDIRECTS+= google.golang.org/genproto=github.com/google/go-genproto
|
|
GODEP_REDIRECTS+= google.golang.org/grpc=github.com/grpc/grpc-go
|
|
GODEP_REDIRECTS+= gopkg.in/DATA-DOG/go-sqlmock.v1=github.com/DATA-DOG/go-sqlmock
|
|
GODEP_REDIRECTS+= gopkg.in/check.v1=github.com/go-check/check
|
|
GODEP_REDIRECTS+= gopkg.in/mgo.v2=github.com/go-mgo/mgo
|
|
GODEP_REDIRECTS+= gopkg.in/tomb.v2=github.com/go-tomb/tomb
|
|
GODEP_REDIRECTS+= gopkg.in/yaml.v2=github.com/go-yaml/yaml
|
|
GODEP_REDIRECTS+= honnef.co/go/tools=github.com/dominikh/go-tools
|
|
|
|
.for url in ${GODEP_REDIRECTS}
|
|
_GODEP_FROM.${url}:= ${url:C/=/ /g:[1]}
|
|
_GODEP_TO.${url}:= ${url:C/=/ /g:[2]}
|
|
.endfor
|
|
|
|
#
|
|
# Add a print-go-deps target to aid GO_DEPS generation. This depends on the
|
|
# current format of the Gopkg.lock file which may change.
|
|
#
|
|
_GODEP_AWK+= BEGIN { name=""; rev=""; dir=""; }
|
|
_GODEP_AWK+= $$1 == "name" { \
|
|
gsub(/\"/, "", $$NF); \
|
|
${GODEP_REDIRECTS:@url@ \
|
|
if (match($$NF, "^${_GODEP_FROM.${url}}")) { \
|
|
dir=$$NF; \
|
|
gsub("^${_GODEP_FROM.${url}}", \
|
|
"${_GODEP_TO.${url}}", $$NF); \
|
|
}@} \
|
|
name = $$NF; \
|
|
}
|
|
_GODEP_AWK+= $$1 == "revision" { \
|
|
gsub(/\"/, "", $$NF); \
|
|
rev = substr($$NF, 1, 8); \
|
|
}
|
|
_GODEP_AWK+= name && rev { \
|
|
printf("GO_DEPS+=\t%s:%s%s\n", \
|
|
name, rev, \
|
|
(dir) ? ":" dir : ""); \
|
|
name=""; rev=""; dir=""; \
|
|
}
|
|
|
|
.PHONY: print-go-deps
|
|
print-go-deps:
|
|
${RUN} ${AWK} ${_GODEP_AWK:Q} ${WRKSRC}/Gopkg.lock
|