# Makefile for gotools
#   Copyright (C) 2015-2016 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

ACLOCAL_AMFLAGS = -I ../config

gcc_version := $(shell $(GCC_FOR_TARGET) -dumpversion)

libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)

mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs
PWD_COMMAND = $${PWDCMD-pwd}
STAMP = echo timestamp >

libgodir = ../$(target_noncanonical)/libgo
LIBGODEP = $(libgodir)/libgo.la

LIBGOTOOL = $(libgodir)/libgotool.a

if NATIVE
# Use the compiler we just built.
GOCOMPILER = $(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET)
else
GOCOMPILER = $(GOC)
endif

GOCFLAGS = $(CFLAGS_FOR_TARGET)
GOCOMPILE = $(GOCOMPILER) $(GOCFLAGS)

AM_GOCFLAGS = -I $(libgodir)
AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs
GOLINK = $(GOCOMPILER) $(GOCFLAGS) $(AM_GOCFLAGS) $(LDFLAGS) $(AM_LDFLAGS) -o $@

libgosrcdir = $(srcdir)/../libgo/go
cmdsrcdir = $(libgosrcdir)/cmd
libgomiscdir = $(srcdir)/../libgo/misc

go_cmd_go_files = \
	$(cmdsrcdir)/go/alldocs.go \
	$(cmdsrcdir)/go/go11.go \
	$(cmdsrcdir)/go/main.go

go_cmd_gofmt_files = \
	$(cmdsrcdir)/gofmt/doc.go \
	$(cmdsrcdir)/gofmt/gofmt.go \
	$(cmdsrcdir)/gofmt/internal.go \
	$(cmdsrcdir)/gofmt/rewrite.go \
	$(cmdsrcdir)/gofmt/simplify.go

go_cmd_cgo_files = \
	$(cmdsrcdir)/cgo/ast.go \
	$(cmdsrcdir)/cgo/doc.go \
	$(cmdsrcdir)/cgo/gcc.go \
	$(cmdsrcdir)/cgo/godefs.go \
	$(cmdsrcdir)/cgo/main.go \
	$(cmdsrcdir)/cgo/out.go \
	$(cmdsrcdir)/cgo/util.go

go_cmd_vet_files = \
	$(cmdsrcdir)/vet/asmdecl.go \
	$(cmdsrcdir)/vet/assign.go \
	$(cmdsrcdir)/vet/atomic.go \
	$(cmdsrcdir)/vet/bool.go \
	$(cmdsrcdir)/vet/buildtag.go \
	$(cmdsrcdir)/vet/cgo.go \
	$(cmdsrcdir)/vet/composite.go \
	$(cmdsrcdir)/vet/copylock.go \
	$(cmdsrcdir)/vet/deadcode.go \
	$(cmdsrcdir)/vet/dead.go \
	$(cmdsrcdir)/vet/doc.go \
	$(cmdsrcdir)/vet/httpresponse.go \
	$(cmdsrcdir)/vet/lostcancel.go \
	$(cmdsrcdir)/vet/main.go \
	$(cmdsrcdir)/vet/method.go \
	$(cmdsrcdir)/vet/nilfunc.go \
	$(cmdsrcdir)/vet/print.go \
	$(cmdsrcdir)/vet/rangeloop.go \
	$(cmdsrcdir)/vet/shadow.go \
	$(cmdsrcdir)/vet/shift.go \
	$(cmdsrcdir)/vet/structtag.go \
	$(cmdsrcdir)/vet/tests.go \
	$(cmdsrcdir)/vet/types.go \
	$(cmdsrcdir)/vet/unsafeptr.go \
	$(cmdsrcdir)/vet/unused.go

go_cmd_buildid_files = \
	$(cmdsrcdir)/buildid/buildid.go \
	$(cmdsrcdir)/buildid/doc.go

go_cmd_test2json_files = \
	$(cmdsrcdir)/test2json/main.go

GCCGO_INSTALL_NAME := $(shell echo gccgo|sed '$(program_transform_name)')
GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)')
GXX_INSTALL_NAME := $(shell echo g++|sed '$(program_transform_name)')

zdefaultcc.go: s-zdefaultcc; @true
s-zdefaultcc: Makefile
	echo 'package main' > zdefaultcc.go.tmp
	echo 'func defaultGCCGO(goos, goarch string) string { return "$(bindir)/$(GCCGO_INSTALL_NAME)" }' >> zdefaultcc.go.tmp
	echo 'func defaultCC(goos, goarch string) string { return "$(GCC_INSTALL_NAME)" }' >> zdefaultcc.go.tmp
	echo 'func defaultCXX(goos, goarch string) string { return "$(GXX_INSTALL_NAME)" }' >> zdefaultcc.go.tmp
	echo 'const defaultPkgConfig = "pkg-config"' >> zdefaultcc.go.tmp
	$(SHELL) $(srcdir)/../move-if-change zdefaultcc.go.tmp zdefaultcc.go
	$(STAMP) $@ 

MOSTLYCLEANFILES = \
	zdefaultcc.go s-zdefaultcc \
	check-gccgo check-gcc gotools.head *-testlog gotools.sum gotools.log \
	*.sent

mostlyclean-local:
	-chmod -R u+w check-go-dir
	rm -rf check-go-dir check-runtime-dir cgo-test-dir carchive-test-dir

if NATIVE

# For a native build we build the programs using the newly built libgo
# and install them as regular programs.

bin_PROGRAMS = go$(EXEEXT) gofmt$(EXEEXT)
noinst_PROGRAMS = cgo$(EXEEXT) vet$(EXEEXT) buildid$(EXEEXT) test2json$(EXEEXT)
man_MANS = go.1 gofmt.1

go$(EXEEXT): $(go_cmd_go_files) $(LIBGOTOOL) $(LIBGODEP)
	$(GOLINK) $(go_cmd_go_files) $(LIBGOTOOL) $(LIBS) $(NET_LIBS)
gofmt$(EXEEXT): $(go_cmd_gofmt_files) $(LIBGODEP)
	$(GOLINK) $(go_cmd_gofmt_files) $(LIBS) $(NET_LIBS)
cgo$(EXEEXT): $(go_cmd_cgo_files) zdefaultcc.go $(LIBGOTOOL) $(LIBGODEP)
	$(GOLINK) $(go_cmd_cgo_files) zdefaultcc.go $(LIBGOTOOL) $(LIBS) $(NET_LIBS)
vet$(EXEEXT): $(go_cmd_vet_files) $(LIBGOTOOL) $(LIBGODEP)
	$(GOLINK) $(go_cmd_vet_files) $(LIBGOTOOL) $(LIBS) $(NET_LIBS)
buildid$(EXEEXT): $(go_cmd_buildid_files) $(LIBGOTOOL) $(LIBGODEP)
	$(GOLINK) $(go_cmd_buildid_files) $(LIBGOTOOL) $(LIBS) $(NET_LIBS)
test2json$(EXEEXT): $(go_cmd_test2json_files) $(LIBGOTOOL) $(LIBGODEP)
	$(GOLINK) $(go_cmd_test2json_files) $(LIBGOTOOL) $(LIBS) $(NET_LIBS)

install-exec-local: $(noinst_PROGRAMS)
	$(MKDIR_P) $(DESTDIR)$(libexecsubdir)
	for f in $(noinst_PROGRAMS); do \
	  rm -f $(DESTDIR)$(libexecsubdir)/$$f; \
	  $(INSTALL_PROGRAM) $$f $(DESTDIR)$(libexecsubdir)/$$f; \
	done

uninstall-local:
	for f in $(noinst_PROGRAMS); do \
	  rm -f $(DESTDIR)$(libexecsubdir)/$$f; \
	done

GOTESTFLAGS =

# Number of seconds before tests time out.
GOTOOLS_TEST_TIMEOUT = 480

# Run tests using the go tool, and frob the output to look like that
# generated by DejaGNU.  The main output of this is two files:
# gotools.sum and gotools.log.

# check-head starts generating the log files in DejaGNU format.  This
# is a separate target so that the date is approximately when we start
# running the tests.
check-head:
	@echo "Test Run By $${USER} on `date`" > gotools.head
	@echo "Native configuration is $(host_triplet)" >> gotools.head
	@echo >> gotools.head
	@echo "		=== gotools tests ===" >> gotools.head
	@echo >> gotools.head

# check-gccgo is a little shell script that executes gccgo with the
# options to pick up the newly built libgo and libstdc++.
check-gccgo: Makefile
	rm -f $@ $@.tmp
	echo "#!/bin/sh" > $@.tmp
	abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
	echo "$(GOCOMPILE)" '"$$@"' "-I $${abs_libgodir} -L $${abs_libgodir} -L $${abs_libgodir}/.libs -B$${abs_libgodir}/../libstdc++-v3/src/.libs -B$${abs_libgodir}/../libstdc++-v3/libsupc++/.libs" >> $@.tmp
	chmod +x $@.tmp
	mv -f $@.tmp $@

# check-gcc is a little shell script that executes the newly built gcc
# with the options to pick up the newly built libgo and libstdc++.
check-gcc: Makefile
	rm -f $@ $@.tmp
	echo "#!/bin/sh" > $@.tmp
	abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
	echo "$(GCC_FOR_TARGET)" '"$$@"' "-L $${abs_libgodir} -L $${abs_libgodir}/.libs -B$${abs_libgodir}/../libstdc++-v3/src/.libs -B$${abs_libgodir}/../libstdc++-v3/libsupc++/.libs" >> $@.tmp
	chmod +x $@.tmp
	mv -f $@.tmp $@

# CHECK_ENV sets up the environment to run the newly built go tool.
# If you change this, change ECHO_ENV, below.
# The fl shell variable is used to avoid having FAIL appear
# in the log unnecessarily.
CHECK_ENV = \
	PATH=`echo $(abs_builddir):$${PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; \
	export PATH; \
	GCCGO="$(abs_builddir)/check-gccgo"; \
	export GCCGO; \
	CC="$(abs_builddir)/check-gcc"; \
	export CC; \
	GCCGOTOOLDIR="$(abs_builddir)"; \
	export GCCGOTOOLDIR; \
	GO_TESTING_GOTOOLS=yes; \
	export GO_TESTING_GOTOOLS; \
	abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
	LD_LIBRARY_PATH=`echo $${abs_libgodir}/.libs:$${LD_LIBRARY_PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; \
	export LD_LIBRARY_PATH; \
	GOROOT=$${abs_libgodir}; \
	export GOROOT; \
	GOCACHE=$(abs_builddir)/gocache-test; \
	export GOCACHE; \
	fl1="FA"; fl2="IL"; fl="$${fl1}$${fl2}";

# ECHO_ENV is a variant of CHECK_ENV to put into a testlog file.
# It assumes that abs_libgodir is set.
ECHO_ENV = PATH=`echo $(abs_builddir):$${PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'` GCCGO='$(abs_builddir)/check-gccgo' CC='$(abs_builddir)/check-gcc' GCCGOTOOLDIR='$(abs_builddir)' GO_TESTING_GOTOOLS=yes LD_LIBRARY_PATH=`echo $${abs_libgodir}/.libs:$${LD_LIBRARY_PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'` GOROOT=`echo $${abs_libgodir} GOCACHE='$(abs_builddir)/gocache-test'`

# check-go-tool runs `go test cmd/go` in our environment.
check-go-tool: go$(EXEEXT) $(noinst_PROGRAMS) check-head check-gccgo check-gcc
	-chmod -R u+w check-go-dir
	rm -rf check-go-dir cmd_go-testlog
	$(MKDIR_P) check-go-dir/src/cmd/go
	cp $(cmdsrcdir)/go/*.go check-go-dir/src/cmd/go/
	cp -r $(cmdsrcdir)/go/internal check-go-dir/src/cmd/go/
	cp $(libgodir)/zdefaultcc.go check-go-dir/src/cmd/go/internal/cfg/
	cp -r $(cmdsrcdir)/go/testdata check-go-dir/src/cmd/go/
	cp -r $(cmdsrcdir)/internal check-go-dir/src/cmd/
	cp $(libgodir)/objabi.go check-go-dir/src/cmd/internal/objabi/
	@abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
	abs_checkdir=`cd check-go-dir && $(PWD_COMMAND)`; \
	echo "cd check-go-dir/src/cmd/go && $(ECHO_ENV) GOPATH=$${abs_checkdir} $(abs_builddir)/go$(EXEEXT) test -test.short -test.timeout=$(GOTOOLS_TEST_TIMEOUT)s -test.v" > cmd_go-testlog
	$(CHECK_ENV) \
	GOPATH=`cd check-go-dir && $(PWD_COMMAND)`; \
	export GOPATH; \
	(cd check-go-dir/src/cmd/go && $(abs_builddir)/go$(EXEEXT) test -test.short -test.timeout=$(GOTOOLS_TEST_TIMEOUT)s -test.v) >> cmd_go-testlog 2>&1 || echo "--- $${fl}: go test cmd/go (0.00s)" >> cmd_go-testlog
	grep '^--- ' cmd_go-testlog | sed -e 's/^--- \(.*\) ([^)]*)$$/\1/' | sort -k 2

# check-runtime runs `go test runtime` in our environment.
# The runtime package is also tested as part of libgo,
# but the runtime tests use the go tool heavily, so testing
# here too will catch more problems.
check-runtime: go$(EXEEXT) $(noinst_PROGRAMS) check-head check-gccgo check-gcc
	rm -rf check-runtime-dir runtime-testlog
	$(MKDIR_P) check-runtime-dir
	@abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
	LD_LIBRARY_PATH=`echo $${abs_libgodir}/.libs:$${LD_LIBRARY_PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; \
	GOARCH=`$(abs_builddir)/go$(EXEEXT) env GOARCH`; \
	GOOS=`$(abs_builddir)/go$(EXEEXT) env GOOS`; \
	files=`$(SHELL) $(libgosrcdir)/../match.sh --goarch=$${GOARCH} --goos=$${GOOS} --srcdir=$(libgosrcdir)/runtime --extrafiles="$(libgodir)/runtime_sysinfo.go $(libgodir)/sigtab.go" --tag=libffi`; \
	echo "$(ECHO_ENV) GC='$(abs_builddir)/check-gccgo -fgo-compiling-runtime' GOARCH=$${GOARCH} GOOS=$${GOOS} $(SHELL) $(libgosrcdir)/../testsuite/gotest --goarch=$${GOARCH} --goos=$${GOOS} --basedir=$(libgosrcdir)/.. --srcdir=$(libgosrcdir)/runtime --pkgpath=runtime --pkgfiles='$${files}' $(GOTESTFLAGS) -test.timeout=$(GOTOOLS_TEST_TIMEOUT)s -test.v" > runtime-testlog
	$(CHECK_ENV) \
	GC="$${GCCGO} -fgo-compiling-runtime"; \
	export GC; \
	GOARCH=`$(abs_builddir)/go$(EXEEXT) env GOARCH`; \
	GOOS=`$(abs_builddir)/go$(EXEEXT) env GOOS`; \
	files=`$(SHELL) $(libgosrcdir)/../match.sh --goarch=$${GOARCH} --goos=$${GOOS} --srcdir=$(libgosrcdir)/runtime --extrafiles="$(libgodir)/runtime_sysinfo.go $(libgodir)/sigtab.go" --tag=libffi`; \
	$(SHELL) $(libgosrcdir)/../testsuite/gotest --goarch=$${GOARCH} --goos=$${GOOS} --basedir=$(libgosrcdir)/.. --srcdir=$(libgosrcdir)/runtime --pkgpath=runtime --pkgfiles="$${files}" $(GOTESTFLAGS) -test.timeout=$(GOTOOLS_TEST_TIMEOUT)s -test.v >> runtime-testlog 2>&1 || echo "--- $${fl}: go test runtime (0.00s)" >> runtime-testlog
	grep '^--- ' runtime-testlog | sed -e 's/^--- \(.*\) ([^)]*)$$/\1/' | sort -k 2

# check-cgo-test runs `go test misc/cgo/test` in our environment.
check-cgo-test: go$(EXEEXT) $(noinst_PROGRAMS) check-head check-gccgo check-gcc
	rm -rf cgo-test-dir cgo-testlog
	$(MKDIR_P) cgo-test-dir/misc/cgo
	cp -r $(libgomiscdir)/cgo/test cgo-test-dir/misc/cgo/
	@abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
	echo "cd cgo-test-dir/misc/cgo/test && $(ECHO_ENV) GOTRACEBACK=2 $(abs_builddir)/go$(EXEEXT) test -test.short -test.timeout=$(GOTOOLS_TEST_TIMEOUT)s -test.v" > cgo-testlog
	$(CHECK_ENV) \
	GOTRACEBACK=2; \
	export GOTRACEBACK; \
	(cd cgo-test-dir/misc/cgo/test && $(abs_builddir)/go$(EXEEXT) test -test.short -test.timeout=$(GOTOOLS_TEST_TIMEOUT)s -test.v) >> cgo-testlog 2>&1 || echo "--- $${fl}: go test misc/cgo/test (0.00s)" >> cgo-testlog
	grep '^--- ' cgo-testlog | sed -e 's/^--- \(.*\) ([^)]*)$$/\1/' | sort -k 2

# check-carchive-test runs `go test misc/cgo/testcarchive/carchive_test.go`
# in our environment.
check-carchive-test: go$(EXEEXT) $(noinst_PROGRAMS) check-head check-gccgo check-gcc
	rm -rf carchive-test-dir carchive-testlog
	$(MKDIR_P) carchive-test-dir/misc/cgo
	cp -r $(libgomiscdir)/cgo/testcarchive carchive-test-dir/misc/cgo/
	@abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
	echo "cd carchive-test-dir/misc/cgo/testcarchive && $(ECHO_ENV) LIBRARY_PATH=`echo $${abs_libgodir}/.libs` $(abs_builddir)/go$(EXEEXT) test -test.timeout=$(GOTOOLS_TEST_TIMEOUT)s -test.v carchive_test.go" > carchive-testlog
	$(CHECK_ENV) \
	LIBRARY_PATH=`echo $${abs_libgodir}/.libs:$${LIBRARY_PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; \
	export LIBRARY_PATH; \
	(cd carchive-test-dir/misc/cgo/testcarchive && $(abs_builddir)/go$(EXEEXT) test -test.timeout=$(GOTOOLS_TEST_TIMEOUT)s -test.v carchive_test.go) >> carchive-testlog 2>&1 || echo "--- $${fl}: go test misc/cgo/testcarchive (0.00s)" >> carchive-testlog
	grep '^--- ' carchive-testlog | sed -e 's/^--- \(.*\) ([^)]*)$$/\1/' | sort -k 2

# check-vet runs `go test cmd/vet` in our environment.
check-vet: go$(EXEEXT) $(noinst_PROGRAMS) check-head check-gccgo check-gcc
	rm -rf check-vet-dir cmd_vet-testlog
	$(MKDIR_P) check-vet-dir/src/cmd/internal
	cp -r $(cmdsrcdir)/vet check-vet-dir/src/cmd/
	cp -r $(cmdsrcdir)/internal/objabi check-vet-dir/src/cmd/internal
	cp $(libgodir)/objabi.go check-vet-dir/src/cmd/internal/objabi/
	@abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
	abs_checkdir=`cd check-vet-dir && $(PWD_COMMAND)`; \
	echo "cd check-vet-dir/src/cmd/vet && $(ECHO_ENV) GOPATH=$${abs_checkdir} $(abs_builddir)/go$(EXEEXT) test -test.short -test.timeout=$(GOTOOLS_TEST_TIMEOUT)s -test.v" > cmd_vet-testlog
	$(CHECK_ENV) \
	GOPATH=`cd check-vet-dir && $(PWD_COMMAND)`; \
	export GOPATH; \
	(cd check-vet-dir/src/cmd/vet && $(abs_builddir)/go$(EXEEXT) test -test.short -test.timeout=$(GOTOOLS_TEST_TIMEOUT)s -test.v) >> cmd_vet-testlog 2>&1 || echo "--- $${fl}: go test cmd/vet (0.00s)" >> cmd_vet-testlog
	grep '^--- ' cmd_vet-testlog | sed -e 's/^--- \(.*\) ([^)]*)$$/\1/' | sort -k 2

# The check targets runs the tests and assembles the output files.
check: check-head check-go-tool check-runtime check-cgo-test check-carchive-test check-vet
	@mv gotools.head gotools.sum
	@cp gotools.sum gotools.log
	@for file in cmd_go-testlog runtime-testlog cgo-testlog carchive-testlog cmd_vet-testlog; do \
	  testname=`echo $${file} | sed -e 's/-testlog//' -e 's|_|/|'`; \
	  echo "Running $${testname}" >> gotools.sum; \
	  echo "Running $${testname}" >> gotools.log; \
	  sed -e 's/^--- \(.*\) ([^)]*)$$/\1/' < $${file} >> gotools.log; \
	  grep '^--- ' $${file} | sed -e 's/^--- \(.*\) ([^)]*)$$/\1/' -e 's/SKIP/UNTESTED/' | sort -k 2 >> gotools.sum; \
	done
	@echo >> gotools.sum
	@echo "		=== gotools Summary ===" >> gotools.sum
	@pass=`grep -c '^PASS' gotools.sum`; \
	if test "$${pass}" -ne "0"; then \
	  echo "# of expected passes		$${pass}" >> gotools.sum; \
	fi
	@fail=`grep -c '^FAIL' gotools.sum`; \
	if test "$${fail}" -ne "0"; then \
	  echo "# of unexpected failures	$${fail}" >> gotools.sum; \
	fi
	@untested=`grep -c '^UNTESTED' gotools.sum`; \
	if test "$${untested}" -ne "0"; then \
	  echo "# of untested testcases		$${untested}" >> gotools.sum; \
	fi
	@echo `echo $(GOC_FOR_TARGET) | sed -e 's/ .*//'`  `$(GOC_FOR_TARGET) -v 2>&1 | grep " version" | sed -n -e 's/.* \(version.*$$\)/\1/p'` >> gotools.sum
	@echo >> gotools.log
	@echo "runtest completed at `date`" >> gotools.log
	@if grep '^FAIL' gotools.sum >/dev/null 2>&1; then exit 1; fi

.PHONY: check check-head check-go-tool check-runtime check-cgo-test check-carchive-test check-vet

else

# For a non-native build we have to build the programs using a
# previously built host (or build -> host) Go compiler.  We should
# only do this if such a compiler is available.  We also need to get
# the right values for GOARCH and GOOS in the default build context in
# the go/build package.  Figure this out later.

endif
