summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/manual/adding-packages-golang.txt13
-rw-r--r--package/pkg-golang.mk26
2 files changed, 26 insertions, 13 deletions
diff --git a/docs/manual/adding-packages-golang.txt b/docs/manual/adding-packages-golang.txt
index b6d1f5e6b4..efcf696867 100644
--- a/docs/manual/adding-packages-golang.txt
+++ b/docs/manual/adding-packages-golang.txt
@@ -86,7 +86,18 @@ therefore only use a few of them, or none.
* +FOO_BUILD_TARGETS+ can be used to pass the list of targets that
should be built. If +FOO_BUILD_TARGETS+ is not specified, it
- defaults to +.+.
+ defaults to +.+. We then have two cases:
+
+** +FOO_BUILD_TARGETS+ is +.+. In this case, we assume only one binary
+ will be produced, and that by default we name it after the package
+ name. If that is not appropriate, the name of the produced binary
+ can be overridden using +FOO_BIN_NAME+.
+
+** +FOO_BUILD_TARGETS+ is not +.+. In this case, we iterate over the
+ values to build each target, and for each produced a binary that is
+ the non-directory component of the target. For example if
+ +FOO_BUILD_TARGETS = cmd/docker cmd/dockerd+ the binaries produced
+ are +docker+ and +dockerd+.
* +FOO_INSTALL_BINS+ can be used to pass the list of binaries that
should be installed in +/usr/bin+ on the target. If
diff --git a/package/pkg-golang.mk b/package/pkg-golang.mk
index f51b2ee2e0..342d17fbd9 100644
--- a/package/pkg-golang.mk
+++ b/package/pkg-golang.mk
@@ -62,12 +62,16 @@ $(2)_DEPENDENCIES += host-go
$(2)_BUILD_TARGETS ?= .
-$(2)_INSTALL_BINS ?= $(1)
+# If the build target is just ".", then we assume the binary to be
+# produced is named after the package. If however, a build target has
+# been specified, we assume that the binaries to be produced are named
+# after each build target building them (below in <pkg>_BUILD_CMDS).
+ifeq ($$($(2)_BUILD_TARGETS),.)
+$(2)_BIN_NAME ?= $(1)
+endif
-# The go build/install command installs the binaries inside
-# gopath/bin/linux_GOARCH/ when cross compilation is enabled. We set this
-# variable here to be used by packages if needed.
-$(2)_BINDIR = $$($(2)_WORKSPACE)/bin/linux_$$(GO_GOARCH)
+$(2)_BINDIR = bin
+$(2)_INSTALL_BINS ?= $(1)
# Source files in Go should be extracted in a precise folder in the hierarchy
# of GOPATH. It usually resolves around domain/vendor/software. By default, we
@@ -84,17 +88,13 @@ $(2)_SRC_PATH = $$(@D)/$$($(2)_WORKSPACE)/src/$$($(2)_SRC_SUBDIR)
# file.
ifndef $(2)_CONFIGURE_CMDS
define $(2)_CONFIGURE_CMDS
- mkdir -p $$(@D)/$$($(2)_WORKSPACE)/bin
mkdir -p $$(dir $$($(2)_SRC_PATH))
ln -sf $$(@D) $$($(2)_SRC_PATH)
endef
endif
-# Build step. Only define it if not already defined by the package .mk file. We
-# use the install command instead of build command here because the install
-# command just moves the package binaries into <workspace>/bin/linux_GOARCH/.
-# This leverages the go build infrastructure for building and installing
-# multiple binaries.
+# Build step. Only define it if not already defined by the package .mk
+# file.
ifndef $(2)_BUILD_CMDS
define $(2)_BUILD_CMDS
$$(foreach d,$$($(2)_BUILD_TARGETS),\
@@ -102,7 +102,9 @@ define $(2)_BUILD_CMDS
$$(GO_TARGET_ENV) \
GOPATH="$$(@D)/$$($(2)_WORKSPACE)" \
$$($(2)_GO_ENV) \
- $$(GO_BIN) install -v $$($(2)_BUILD_OPTS) ./$$(d)
+ $$(GO_BIN) build -v $$($(2)_BUILD_OPTS) \
+ -o $$(@D)/$$($(2)_BINDIR)/$$(or $$($(2)_BIN_NAME),$$(notdir $$(d))) \
+ ./$$(d)
)
endef
endif
OpenPOWER on IntegriCloud