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 |