# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=5
EGO_PN="golang.org/x/tools/..."

if [[ ${PV} = *9999* ]]; then
	inherit golang-vcs
else
	EGIT_COMMIT="1330b28"
	ARCHIVE_URI="https://github.com/golang/tools/archive/${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz"
	KEYWORDS="~amd64"
	inherit golang-vcs-snapshot
fi
inherit golang-build

DESCRIPTION="Go Tools"
HOMEPAGE="https://godoc.org/golang.org/x/tools"
SRC_URI="${ARCHIVE_URI}
	http://golang.org/favicon.ico -> go-favicon.ico"
LICENSE="BSD"
SLOT="0"
IUSE=""
DEPEND="dev-go/go-net:=
	!<dev-lang/go-1.5"
RDEPEND=""

src_prepare() {
	local go_src="${EGO_PN%/...}"
	# disable broken tests
	sed -e 's:TestWeb(:_\0:' \
		-i src/${go_src}/cmd/godoc/godoc_test.go || die
	sed -e 's:TestVet(:_\0:' \
		-i src/${go_src}/cmd/vet/vet_test.go || die
	sed -e 's:TestImport(:_\0:' \
		-i src/${go_src}/go/gcimporter/gcimporter_test.go || die
	sed -e 's:TestImportStdLib(:_\0:' \
		-i src/${go_src}/go/importer/import_test.go || die
	sed -e 's:TestStdlib(:_\0:' \
		-i src/${go_src}/go/loader/stdlib_test.go || die
	sed -e 's:TestStdlib(:_\0:' \
		-i src/${go_src}/go/ssa/stdlib_test.go || die
	sed -e 's:TestGorootTest(:_\0:' \
		-e 's:TestFoo(:_\0:' \
		-e 's:TestTestmainPackage(:_\0:' \
		-i src/${go_src}/go/ssa/interp/interp_test.go || die
	sed -e 's:TestBar(:_\0:' \
		-e 's:TestFoo(:_\0:' \
		-i src/${go_src}/go/ssa/interp/testdata/a_test.go || die
	sed -e 's:TestCheck(:_\0:' \
		-i src/${go_src}/go/types/check_test.go || die
	sed -e 's:TestStdlib(:_\0:' \
		-e 's:TestStdFixed(:_\0:' \
		-e 's:TestStdKen(:_\0:' \
		-i src/${go_src}/go/types/stdlib_test.go || die
	sed -e 's:TestRepoRootForImportPath(:_\0:' \
		-i src/${go_src}/go/vcs/vcs_test.go || die

	# Add favicon to the godoc web interface (bug 551030)
	cp "${DISTDIR}"/go-favicon.ico "src/${go_src}/godoc/static/favicon.ico" ||
		die
	sed -e 's:"example.html",:\0\n\t"favicon.ico",:' \
		-i src/${go_src}/godoc/static/makestatic.go || die
	sed -e 's:<link type="text/css":<link rel="icon" type="image/png" href="/lib/godoc/favicon.ico">\n\0:' \
		-i src/${go_src}/godoc/static/godoc.html || die
}

src_compile() {
	# Generate static.go with favicon included
	pushd src/golang.org/x/tools/godoc/static >/dev/null || die
	go run makestatic.go || die
	popd >/dev/null

	golang-build_src_compile
}

src_test() {
	# Create a writable GOROOT in order to avoid sandbox violations.
	cp -sR "$(go env GOROOT)" "${T}/goroot" || die
	mkdir -p "${T}/goroot/test" || die
	GOROOT="${T}/goroot" golang-build_src_test
	rm -rf "${T}/goroot"
}

src_install() {
	# Create a writable GOROOT in order to avoid sandbox violations.
	cp -sR "$(go env GOROOT)" "${T}/goroot" || die

	GOROOT="${T}/goroot" golang-build_src_install

	# bug 558818: install binaries in $GOROOT/bin to avoid file collisions
	exeinto "$(go env GOROOT)/bin"
	doexe bin/* "${T}/goroot/bin/godoc"
	dodir /usr/bin
	ln "${ED}$(go env GOROOT)/bin/godoc" "${ED}usr/bin/godoc" || die

	rm "${D}"$(go env GOROOT)/bin/{cover,vet} || die
}
