Index: head/Mk/Uses/go.mk =================================================================== --- head/Mk/Uses/go.mk +++ head/Mk/Uses/go.mk @@ -12,8 +12,8 @@ # in modules-aware mode. # no_targets Indicates that Go is needed at build time as a part of # make/CMake build. This will setup build environment like -# GO_ENV, GO_BUILDFLAGS but will not create post-extract, do-build -# and do-install targets. +# GO_ENV, GO_BUILDFLAGS but will not create post-extract and +# do-{build,install,test} targets. # run Indicates that Go is needed at run time and adds it to # RUN_DEPENDS. # @@ -21,20 +21,20 @@ # # 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. If not set explicitly and GH_SUBDIR or -# GL_SUBDIR is present, GO_PKGNAME will be inferred from it. +# is the directory that will be created in ${GOPATH}/src. 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 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. +# The packages to build. The default value is ${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}. # +# GO_TESTTARGET +# The packages to test. The default value is `./...` (the current package +# and all subpackages). +# # CGO_CFLAGS # Additional CFLAGS variables to be passed to the C compiler by the `go` # command @@ -46,6 +46,9 @@ # GO_BUILDFLAGS # Additional build arguments to be passed to the `go build` command # +# GO_TESTFLAGS +# Additional build arguments to be passed to the `go test` command +# # GO_PORT # The Go port to use. By default this is lang/go but can be set # to lang/go-devel in make.conf for testing with future Go versions. @@ -72,12 +75,15 @@ GO_PKGNAME= ${PORTNAME} . endif .endif + GO_TARGET?= ${GO_PKGNAME} +GO_TESTTARGET?= ./... GO_BUILDFLAGS+= -v -buildmode=exe .if !defined(WITH_DEBUG) && empty(GO_BUILDFLAGS:M-ldflags*) GO_BUILDFLAGS+= -ldflags=-s .endif +GO_TESTFLAGS+= -v CGO_ENABLED?= 1 CGO_CFLAGS+= -I${LOCALBASE}/include @@ -98,12 +104,12 @@ .if ${go_ARGS:Mmodules} GO_BUILDFLAGS+= -mod=vendor +GO_TESTFLAGS+= -mod=vendor GO_WRKSRC= ${WRKSRC} GO_ENV+= GOPATH="" \ GOBIN="${GO_WRKDIR_BIN}" .else -GO_WRKDIR_SRC= ${WRKDIR}/src -GO_WRKSRC= ${GO_WRKDIR_SRC}/${GO_PKGNAME} +GO_WRKSRC= ${WRKDIR}/src/${GO_PKGNAME} GO_ENV+= GOPATH="${WRKDIR}" \ GOBIN="" .endif @@ -158,6 +164,15 @@ ${ECHO_MSG} "===> Installing $${src} as $${dst}"; \ ${INSTALL_PROGRAM} ${GO_WRKDIR_BIN}/$${src} $${dst}; \ done +.endif + +.if !target(do-test) && empty(go_ARGS:Mno_targets) +do-test: + (cd ${GO_WRKSRC}; \ + for t in ${GO_TESTTARGET}; do \ + ${ECHO_MSG} "===> Testing $${t}"; \ + ${SETENV} ${MAKE_ENV} ${GO_ENV} ${GO_CMD} test ${GO_TESTFLAGS} $${t}; \ + done) .endif # Helper targets for port maintainers