# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2.

#
# Original Author: The Chromium OS Authors <chromium-os-dev@chromium.org>
# Purpose: Library for supporting the Go programming language in Chromium OS.
#

# @ECLASS-VARIABLE: CROS_GO_WORKSPACE
# @DESCRIPTION:
# Path to the Go workspace, default is ${S}

# @ECLASS-VARIABLE: CROS_GO_BINARIES
# @DESCRIPTION:
# Go executable binaries to build and install
# Package paths are relative to ${CROS_GO_WORKSPACE}/src
# Each path must contain a package "main". The last component
# of the package path will become the name of the executable.
# The executable name can be overridden by appending a colon
# to the package path, followed by an alternate name.
# For example:
#   CROS_GO_BINARIES=(
#     "golang.org/x/tools/cmd/godoc"
#     "golang.org/x/tools/cmd/vet:govet"
#   )
# will build and install "godoc" and "govet" binaries.

# @ECLASS-VARIABLE: CROS_GO_PACKAGES
# @DESCRIPTION:
# Go packages to install in /usr/lib/gopath
# Package paths are relative to ${CROS_GO_WORKSPACE}/src
# Packages are installed in /usr/lib/gopath such that they
# can be imported later from Go code using the exact paths
# listed here. For example:
#   CROS_GO_PACKAGES=(
#     "golang.org/x/tools/go/types"
#   )
# will install package files
#   from "${CROS_GO_WORKSPACE}/src/golang.org/x/tools/go/types"
#   to "/usr/lib/gopath/src/golang.org/x/tools/go/types"
# and other Go projects can use the package with
#   import "golang.org/x/tools/go/types"

inherit toolchain-funcs

DEPEND="dev-lang/go"

cros_go() {
	local workspace="${CROS_GO_WORKSPACE:-${S}}"
	GOPATH="${workspace}:${SYSROOT}/usr/lib/gopath" \
		$(tc-getGO) "$@" || die
}

cros-go_src_compile() {
	local bin
	for bin in "${CROS_GO_BINARIES[@]}" ; do
		local name="${bin##*/}"
		name="${name#*:}"
		bin="${bin%:*}"
		cros_go build -v -o "${name}" "${bin}"
	done
}

cros-go_src_install() {
	local workspace="${CROS_GO_WORKSPACE:-${S}}"

	local bin
	for bin in "${CROS_GO_BINARIES[@]}" ; do
		local name="${bin##*/}"
		name="${name#*:}"
		dobin "${name}"
	done

	local pkg
	for pkg in "${CROS_GO_PACKAGES[@]}" ; do
		local pkgdir="${workspace}/src/${pkg}"
		[[ -d "${pkgdir}" ]] || die "Package not found: \"${pkg}\""
		(
			# Run in sub-shell so we do not modify env.
			insinto "/usr/lib/gopath/src/${pkg}"
			local file
			while read -d $'\0' -r file ; do
				doins "${file}"
			done < <(find "${pkgdir}" -maxdepth 1 ! -type d -print0)
		)
	done
}

EXPORT_FUNCTIONS src_compile src_install
