Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 Sep 2019 08:20:38 +0000 (UTC)
From:      Tobias Kortkamp <tobik@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r512001 - head/Mk/Uses
Message-ID:  <201909140820.x8E8KcIT052119@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: tobik
Date: Sat Sep 14 08:20:38 2019
New Revision: 512001
URL: https://svnweb.freebsd.org/changeset/ports/512001

Log:
  Mk/Uses/go.mk: Allow naming output executable in GO_TARGET
  
  - Allow GO_TARGET to be specified as a tuple in the form package:output
  - Rework build/install targets
  
  PR:		240535
  Submitted by:	Dmitri Goutnik <dg@syrec.org>
  Exp-run by:	antoine
  Differential Revision:	https://reviews.freebsd.org/D21562

Modified:
  head/Mk/Uses/go.mk

Modified: head/Mk/Uses/go.mk
==============================================================================
--- head/Mk/Uses/go.mk	Sat Sep 14 07:29:45 2019	(r512000)
+++ head/Mk/Uses/go.mk	Sat Sep 14 08:20:38 2019	(r512001)
@@ -20,23 +20,27 @@
 # You can set the following variables to control the process.
 #
 # GO_PKGNAME
-#	The name of the package. When building in GOPATH mode, this is
-#	the directory that will be created in GOPATH/src and seen by the
-#	`go` command. When building in modules-aware mode, no directories
-#	will be created and GO_PKGNAME value will be only used as a default
-#	for GO_TARGET. If not set explicitly and GH_SUBDIR is present,
-#	GO_PKGNAME will be inferred from GH_SUBDIR.
+#	The name of the package when building in GOPATH mode.  This
+#	is the directory that will be created in GOPATH/src and seen
+#	by the `go` command.  If not set explicitly and GH_SUBDIR or
+#	GL_SUBDIR is present, GO_PKGNAME will be inferred from it.
+#	It is not needed when building in modules-aware mode.
 #
 # GO_TARGET
-#	The names of the package(s) to build. If not set explicitly,
-#	defaults to GO_PKGNAME.
+#	The packages to build.  If not set explicitly, defaults to
+#	GO_PKGNAME.  GO_TARGET can also be a tuple in the form
+#	package:path where path can be either a simple filename or a
+#	full path starting with ${PREFIX}.  Specifying a full path
+#	like ${PREFIX}/sbin/binary will install the resulting binary
+#	as ${PREFIX}/sbin/binary.  Using just simple filename is a
+#	shortcut to installing it as ${PREFIX}/bin/filename.
 #
 # CGO_CFLAGS
-#	Addional CFLAGS variables to be passed to the C compiler by the `go`
+#	Additional CFLAGS variables to be passed to the C compiler by the `go`
 #	command
 #
 # CGO_LDFLAGS
-#	Addional LDFLAGS variables to be passed to the C compiler by the `go`
+#	Additional LDFLAGS variables to be passed to the C compiler by the `go`
 #	command
 #
 # GO_BUILDFLAGS
@@ -61,6 +65,8 @@ IGNORE=	USES=go has invalid arguments: ${go_ARGS:Nmodu
 .if empty(GO_PKGNAME)
 .  if !empty(GH_SUBDIR)
 GO_PKGNAME=	${GH_SUBDIR:S|^src/||}
+.  elif !empty(GL_SUBDIR)
+GO_PKGNAME=	${GL_SUBDIR:S|^src/||}
 .  else
 GO_PKGNAME=	${PORTNAME}
 .  endif
@@ -116,14 +122,31 @@ post-extract:
 .if !target(do-build) && empty(go_ARGS:Mno_targets)
 do-build:
 	(cd ${GO_WRKSRC}; \
-		${SETENV} ${MAKE_ENV} ${GO_ENV} ${GO_CMD} install ${GO_BUILDFLAGS} ${GO_TARGET:S/^${PORTNAME}$/./})
+	for t in ${GO_TARGET}; do \
+		out=$$(${BASENAME} $$(${ECHO_CMD} $${t} | \
+			${SED} -Ee 's/^[^:]*:([^:]+).*$$/\1/' -e 's/^\.$$/${PORTNAME}/')); \
+		pkg=$$(${ECHO_CMD} $${t} | \
+			${SED} -Ee 's/^([^:]*).*$$/\1/' -e 's/^${PORTNAME}$$/./'); \
+		${ECHO_MSG} "===>  Building $${out} from $${pkg}"; \
+		${SETENV} ${MAKE_ENV} ${GO_ENV} ${GO_CMD} build ${GO_BUILDFLAGS} \
+			-o ${GO_WRKDIR_BIN}/$${out} \
+			$${pkg}; \
+	done)
 .endif
 
 .if !target(do-install) && empty(go_ARGS:Mno_targets)
 do-install:
-.for _TARGET in ${GO_TARGET}
-	${INSTALL_PROGRAM} ${GO_WRKDIR_BIN}/${_TARGET:T:S/^.$/${PORTNAME}/} ${STAGEDIR}${PREFIX}/bin
-.endfor
+	for t in ${GO_TARGET}; do \
+		dst=$$(${ECHO_CMD} $${t} | \
+			${SED} -Ee 's/^[^:]*:([^:]+).*$$/\1/' -e 's/^\.$$/${PORTNAME}/'); \
+		src=$$(${BASENAME} $${dst}); \
+		case $${dst} in \
+			/*) dst=${STAGEDIR}$${dst}; ${MKDIR} $$(${DIRNAME} $${dst}) ;; \
+			 *) dst=${STAGEDIR}${PREFIX}/bin/$${src} ;; \
+		esac; \
+		${ECHO_MSG} "===>  Installing $${src} as $${dst}"; \
+		${INSTALL_PROGRAM} ${GO_WRKDIR_BIN}/$${src} $${dst}; \
+	done
 .endif
 
 # Helper targets for port maintainers



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909140820.x8E8KcIT052119>