View | Details | Raw Unified | Return to bug 205282 | Differences between
and this patch

Collapse All | Expand All

(-)Mk2/Uses/go.mk (+115 lines)
Line 0 Link Here
1
# $FreeBSD$
2
#
3
# Provide support for NodeJS based projects
4
#
5
# Feature:	go
6
# Usage:	USES=go
7
#
8
# MAINTAINER: portmgr@FreeBSD.org
9
10
# GO_MAIN_PATH           : where is the main part of the project,
11
#                          main distfile is extracted there and build
12
#                          is performed
13
# GO_EXTRA_PATH          : additional directory to perform the build in
14
# GO_ARGS                : arguments to supply to the go command
15
# GO_TAGS                : tags to use with the go command
16
# GO_PATCH_FLAGS         : C/C++ go-files that need to have the CFLAGS or LDFLAGS set
17
# GO_PATCH_FLAGS_CFLAGS  : CFLAGS to supply to GO_PATCH_FLAGS
18
# GO_PATCH_FLAGS_LDFLAGS : LDFLAGS to supply to GO_PATCH_FLAGS
19
#
20
# Port's Makefile should supply these items:
21
# * base go packages in GO_BASE in the form: commit-tag:package ...
22
# * (optional) the list of packages from GitHub in GH_TUPLE variable
23
#   account:project:tagname:group:gh (with suffix :gh)
24
# * (optional) the list of go modules in the form
25
#   account:project:tagname:group:version#:pkg (with suffix :pkg)
26
#
27
# Framework installs one executable: ${LOCALBASE}/libexec/${PORTNAME}.
28
# In post-install port is expected to add symbolic links or services
29
# that use this executable.
30
#
31
32
.if !defined(_INCLUDE_USES_GO_MK)
33
_INCLUDE_USES_GO_MK=	yes
34
35
# depends
36
BUILD_DEPENDS+=		go:${PORTSDIR}/lang/go
37
RUN_DEPENDS+=		go:${PORTSDIR}/lang/go
38
39
# commands
40
GO_CMD?=		${LOCALBASE}/bin/go
41
42
GO_MAIN_PATH?=		github.com/${GH_TUPLE:M*\:*\:*:C@:[^:]+$@@:C@:@/@}
43
GO_MAIN_BUILD_PATH?=	${GO_MAIN_PATH}
44
45
# internal variables
46
_GO_DIR?=		${PORTNAME}-${PORTVERSION}
47
_GO_DO_FAIL?=		return 1
48
GO_PATCH_FLAGS_CFLAGS?=	${CFLAGS} -I${LOCALBASE}/include
49
GO_PATCH_FLAGS_LDFLAGS?=${LDFLAGS} -L${LOCALBASE}/lib
50
51
# paths and environment
52
WRKSRC=			${WRKDIR}/${_GO_DIR}
53
GOPATH:=		${WRKSRC}
54
GO_ENV+=		GOPATH=${GOPATH}
55
.for opt in ${OPTIONS_FILE_SET}
56
GO_TAGS+=		${${opt}_GO_TAGS}
57
.endfor
58
.if defined(GO_TAGS)
59
GO_ARGS+=		-tags="${GO_TAGS}"
60
.endif
61
62
# distfiles
63
.for _GO_BASE_ONE in ${GO_BASE}
64
#MASTER_SITES+=		https://go.googlesource.com/${_GO_BASE_ONE:C@.*:@@}/+archive/${_GO_BASE_ONE:C@:.*@@}.tar.gz?dummy=/:golang-${_GO_BASE_ONE:C@.*:@@}
65
MASTER_SITES+=		https://codeload.github.com/golang/${_GO_BASE_ONE:C@.*:@@}/tar.gz/${_GO_BASE_ONE:C@:.*@@}?dummy=/:golang-${_GO_BASE_ONE:C@.*:@@}
66
#https://codeload.github.com/coreos/etcd/tar.gz/v2.2.2?dummy=/coreos-etcd-v2.2.2_GH0.tar.gz
67
#DISTFILES+=		golang-${_GO_BASE_ONE:C@.*:@@}-${_GO_BASE_ONE:C@:.*@@}.tgz:golang-${_GO_BASE_ONE:C@.*:@@}
68
DISTFILES+=		golang-${_GO_BASE_ONE:C@.*:@@}-${_GO_BASE_ONE:C@:.*@@}.tar.gz:golang-${_GO_BASE_ONE:C@.*:@@}
69
.endfor
70
71
# targets
72
_GO_GH_TUPLE_GH=	${GH_TUPLE:M*\:*\:*\:*\:gh:C@:gh@@}
73
_GO_GH_TUPLE_PKG=	${GH_TUPLE:M*\:pkg:C@:pkg$@@}
74
75
do-extract:
76
	@${MKDIR} ${WRKDIR}/${_GO_DIR} && \
77
	cd ${WRKDIR}/${_GO_DIR} && \
78
	${MKDIR} src/${GO_MAIN_PATH} && \
79
	${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${DISTDIR}/${DISTFILES:N*\:*} ${EXTRACT_AFTER_ARGS} \
80
	  -C src/${GO_MAIN_PATH} --strip 1 && \
81
	${ECHO} ${_GO_GH_TUPLE_GH:M*\:*\:*\:*:C@:@ @g} | xargs -n4 \
82
	  ${SH} -c 'acc=$$0;proj=$$1;h=$$2;grp=$$3; df=$$(echo ${DISTFILES} | tr " " "\\n" | grep ":$${grp}$$" | ${SED} -e "s/:.*//g"); \
83
	    '"${MKDIR} src/github.com/"'$$acc'"/"'$$proj'"; \
84
	    ${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} "'${DISTDIR}/$${df}'" ${EXTRACT_AFTER_ARGS} -C src/github.com/"'$$acc'"/"'$$proj'" --strip 1" && \
85
	${ECHO} ${_GO_GH_TUPLE_PKG:M*\:*\:*\:*:C@:@ @g} | xargs -n5 \
86
	  ${SH} -c 'acc=$$0;proj=$$1;h=$$2;grp=$$3;vers=$$4; df=$$(echo ${DISTFILES} | tr " " "\\n" | grep ":$${grp}$$" | ${SED} -e "s/:.*//g"); \
87
	    '"${MKDIR} src/gopkg.in/"'$${proj}.$${vers}'"; \
88
	    ${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} "'${DISTDIR}/$${df}'" ${EXTRACT_AFTER_ARGS} -C src/gopkg.in/"'$${proj}.$${vers}'" --strip 1" && \
89
	${ECHO} ${GO_BASE} | ${SED} -e 's/:/ /g' | xargs -n2 \
90
	  ${SH} -c 'pkg=$$1; df=$$(echo ${DISTFILES} | tr " " "\\n" | grep ":golang-$${pkg}$$" | ${SED} -e "s/:.*//g"); \
91
	    '"${MKDIR} src/golang.org/x/"'$$pkg'"; \
92
	    ${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} "'${DISTDIR}/$${df}'" ${EXTRACT_AFTER_ARGS} -C src/golang.org/x/"'$${pkg} --strip 1'
93
94
_USES_patch+= 750:go-patch-cflags
95
go-patch-cflags:
96
.for gofile in ${GO_PATCH_FLAGS}
97
	@${AWK} '/^\/\*([^*]|\*[^\/])*$$/ {print;print "#cgo CFLAGS: ${GO_PATCH_FLAGS_CFLAGS}";print "#cgo LDFLAGS: ${GO_PATCH_FLAGS_LDFLAGS}"} /^([^\/]|\/[^*]).*$$/ {print} /^$$/ {print}' \
98
	< ${WRKSRC}/${gofile} > ${WRKSRC}/${gofile}.new && \
99
	${MV} ${WRKSRC}/${gofile}.new ${WRKSRC}/${gofile}
100
.endfor
101
102
do-build:
103
	@for dir in ${GO_MAIN_BUILD_PATH} ${GO_EXTRA_PATH}; do \
104
	  ${ECHO} "===>  Building in the Go directory $$dir" && \
105
	  (cd ${GOPATH}/src/$$dir && \
106
	   ${GO_ENV} ${GO_CMD} build ${GO_ARGS}) || ${_GO_DO_FAIL}; \
107
	done
108
109
.if !target(do-install)
110
do-install:
111
	${MKDIR} ${STAGEDIR}${LOCALBASE}/libexec/${PORTNAME}
112
	${INSTALL_PROGRAM} ${WRKSRC}/src/${GO_MAIN_PATH}/${PORTNAME} ${STAGEDIR}${LOCALBASE}/libexec/${PORTNAME}/
113
114
.endif
115
.endif

Return to bug 205282