Makefile.am (libgosrcdir): Define.
authorIan Lance Taylor <iant@golang.org>
Wed, 14 Jun 2017 19:26:21 +0000 (19:26 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 14 Jun 2017 19:26:21 +0000 (19:26 +0000)
* Makefile.am (libgosrcdir): Define.
(check-head, check-gccgo, check-go-tool): New targets.
(CHECK_ENV): Define.
(check): New target.
(mostlyclean-local): New target.
* Makefile.in: Rebuild.

From-SVN: r249203

gotools/ChangeLog
gotools/Makefile.am
gotools/Makefile.in

index d0390985bbe925d6a9ab0bee1de3dacbdfe3f801..8f9507561827feef6e59ffc11eec66ff939a1c19 100644 (file)
@@ -1,3 +1,12 @@
+2017-06-14  Ian Lance Taylor  <iant@golang.org>
+
+       * Makefile.am (libgosrcdir): Define.
+       (check-head, check-gccgo, check-go-tool): New targets.
+       (CHECK_ENV): Define.
+       (check): New target.
+       (mostlyclean-local): New target.
+       * Makefile.in: Rebuild.
+
 2017-06-13  Ian Lance Taylor  <iant@golang.org>
 
        PR go/80964
index ccadbd25a8835bdd8371c771379ab89ef35a5509..bde5e432531b9e8ae12b420b8c793147e27abbda 100644 (file)
@@ -42,7 +42,8 @@ AM_GOCFLAGS = -I $(libgodir)
 AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs
 GOLINK = $(GOCOMPILER) $(GOCFLAGS) $(AM_GOCFLAGS) $(LDFLAGS) $(AM_LDFLAGS) -o $@
 
-cmdsrcdir = $(srcdir)/../libgo/go/cmd
+libgosrcdir = $(srcdir)/../libgo/go
+cmdsrcdir = $(libgosrcdir)/cmd
 
 go_cmd_go_files = \
        $(cmdsrcdir)/go/alldocs.go \
@@ -131,6 +132,89 @@ install-exec-local: cgo$(EXEEXT)
 uninstall-local:
        rm -f $(DESTDIR)$(libexecsubdir)/cgo$(exeext)
 
+# 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.
+check-gccgo: Makefile
+       rm -f $@
+       echo "#!/bin/sh" > $@
+       abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
+       echo "$(GOCOMPILE)" '"$$@"' "-I $${abs_libgodir} -L $${abs_libgodir} -L $${abs_libgodir}/.libs" >> $@
+       chmod +x $@
+
+# CHECK_ENV sets up the environment to run the newly built go tool.
+CHECK_ENV = \
+       PATH=`echo $(abs_builddir):$${PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; \
+       export PATH; \
+       GCCGO="$(abs_builddir)/check-gccgo"; \
+       export GCCGO; \
+       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;
+
+# check-go-tools runs `go test cmd/go` in our environment.
+check-go-tool: go$(EXEEXT) check-head check-gccgo
+       rm -rf check-go-dir
+       $(MKDIR_P) check-go-dir/src/cmd/go
+       cp $(cmdsrcdir)/go/*.go check-go-dir/src/cmd/go/
+       cp $(libgodir)/zstdpkglist.go check-go-dir/src/cmd/go/
+       cp zdefaultcc.go check-go-dir/src/cmd/go/
+       cp -r $(cmdsrcdir)/go/testdata check-go-dir/src/cmd/go/
+       $(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.v) >& cmd_go-testlog || true
+       grep '^--- ' cmd_go-testlog | sed -e 's/^--- \(.*\) ([^)]*)$$/\1/'
+
+# The check targets runs the tests and assembles the output files.
+check: check-head check-go-tool
+       mv gotools.head gotools.sum
+       cp gotools.sum gotools.log
+       for file in cmd_go-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/' >> 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
+
 else
 
 # For a non-native build we have to build the programs using a
@@ -140,3 +224,6 @@ else
 # the go/build package.  Figure this out later.
 
 endif
+
+mostlyclean-local:
+       rm -rf check-go-dir
index 941a82336ac57e241738bb64cdd02ab25e422d24..9e42330c8be9d63e969de05d4de47415a3f0b04c 100644 (file)
@@ -261,7 +261,8 @@ GOCOMPILE = $(GOCOMPILER) $(GOCFLAGS)
 AM_GOCFLAGS = -I $(libgodir)
 AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs
 GOLINK = $(GOCOMPILER) $(GOCFLAGS) $(AM_GOCFLAGS) $(LDFLAGS) $(AM_LDFLAGS) -o $@
-cmdsrcdir = $(srcdir)/../libgo/go/cmd
+libgosrcdir = $(srcdir)/../libgo/go
+cmdsrcdir = $(libgosrcdir)/cmd
 go_cmd_go_files = \
        $(cmdsrcdir)/go/alldocs.go \
        $(cmdsrcdir)/go/bug.go \
@@ -319,6 +320,21 @@ MOSTLYCLEANFILES = zdefaultcc.go s-zdefaultcc
 @NATIVE_TRUE@bin_PROGRAMS = go$(EXEEXT) gofmt$(EXEEXT)
 @NATIVE_TRUE@noinst_PROGRAMS = cgo$(EXEEXT)
 @NATIVE_TRUE@man_MANS = go.1 gofmt.1
+
+# CHECK_ENV sets up the environment to run the newly built go tool.
+@NATIVE_TRUE@CHECK_ENV = \
+@NATIVE_TRUE@  PATH=`echo $(abs_builddir):$${PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; \
+@NATIVE_TRUE@  export PATH; \
+@NATIVE_TRUE@  GCCGO="$(abs_builddir)/check-gccgo"; \
+@NATIVE_TRUE@  export GCCGO; \
+@NATIVE_TRUE@  GCCGOTOOLDIR="$(abs_builddir)"; \
+@NATIVE_TRUE@  export GCCGOTOOLDIR; \
+@NATIVE_TRUE@  GO_TESTING_GOTOOLS=yes; \
+@NATIVE_TRUE@  export GO_TESTING_GOTOOLS; \
+@NATIVE_TRUE@  abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
+@NATIVE_TRUE@  LD_LIBRARY_PATH=`echo $${abs_libgodir}/.libs:$${LD_LIBRARY_PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; \
+@NATIVE_TRUE@  export LD_LIBRARY_PATH;
+
 all: all-am
 
 .SUFFIXES:
@@ -629,7 +645,8 @@ maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-local
 
 pdf: pdf-am
 
@@ -655,9 +672,10 @@ uninstall-man: uninstall-man1
        install-man install-man1 install-pdf install-pdf-am install-ps \
        install-ps-am install-strip installcheck installcheck-am \
        installdirs maintainer-clean maintainer-clean-generic \
-       mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
-       ps ps-am tags uninstall uninstall-am uninstall-binPROGRAMS \
-       uninstall-local uninstall-man uninstall-man1
+       mostlyclean mostlyclean-compile mostlyclean-generic \
+       mostlyclean-local pdf pdf-am ps ps-am tags uninstall \
+       uninstall-am uninstall-binPROGRAMS uninstall-local \
+       uninstall-man uninstall-man1
 
 
 zdefaultcc.go: s-zdefaultcc; @true
@@ -685,12 +703,84 @@ s-zdefaultcc: Makefile
 @NATIVE_TRUE@uninstall-local:
 @NATIVE_TRUE@  rm -f $(DESTDIR)$(libexecsubdir)/cgo$(exeext)
 
+# 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.
+@NATIVE_TRUE@check-head:
+@NATIVE_TRUE@  @echo "Test Run By $${USER} on `date`" > gotools.head
+@NATIVE_TRUE@  @echo "Native configuration is $(host_triplet)" >> gotools.head
+@NATIVE_TRUE@  @echo >> gotools.head
+@NATIVE_TRUE@  @echo "         === gotools tests ===" >> gotools.head
+@NATIVE_TRUE@  @echo >> gotools.head
+
+# check-gccgo is a little shell script that executes gccgo with the
+# options to pick up the newly built libgo.
+@NATIVE_TRUE@check-gccgo: Makefile
+@NATIVE_TRUE@  rm -f $@
+@NATIVE_TRUE@  echo "#!/bin/sh" > $@
+@NATIVE_TRUE@  abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
+@NATIVE_TRUE@  echo "$(GOCOMPILE)" '"$$@"' "-I $${abs_libgodir} -L $${abs_libgodir} -L $${abs_libgodir}/.libs" >> $@
+@NATIVE_TRUE@  chmod +x $@
+
+# check-go-tools runs `go test cmd/go` in our environment.
+@NATIVE_TRUE@check-go-tool: go$(EXEEXT) check-head check-gccgo
+@NATIVE_TRUE@  rm -rf check-go-dir
+@NATIVE_TRUE@  $(MKDIR_P) check-go-dir/src/cmd/go
+@NATIVE_TRUE@  cp $(cmdsrcdir)/go/*.go check-go-dir/src/cmd/go/
+@NATIVE_TRUE@  cp $(libgodir)/zstdpkglist.go check-go-dir/src/cmd/go/
+@NATIVE_TRUE@  cp zdefaultcc.go check-go-dir/src/cmd/go/
+@NATIVE_TRUE@  cp -r $(cmdsrcdir)/go/testdata check-go-dir/src/cmd/go/
+@NATIVE_TRUE@  $(CHECK_ENV) \
+@NATIVE_TRUE@  GOPATH=`cd check-go-dir && $(PWD_COMMAND)`; \
+@NATIVE_TRUE@  export GOPATH; \
+@NATIVE_TRUE@  (cd check-go-dir/src/cmd/go && $(abs_builddir)/go$(EXEEXT) test -test.short -test.v) >& cmd_go-testlog || true
+@NATIVE_TRUE@  grep '^--- ' cmd_go-testlog | sed -e 's/^--- \(.*\) ([^)]*)$$/\1/'
+
+# The check targets runs the tests and assembles the output files.
+@NATIVE_TRUE@check: check-head check-go-tool
+@NATIVE_TRUE@  mv gotools.head gotools.sum
+@NATIVE_TRUE@  cp gotools.sum gotools.log
+@NATIVE_TRUE@  for file in cmd_go-testlog; do \
+@NATIVE_TRUE@    testname=`echo $${file} | sed -e 's/-testlog//' -e 's|_|/|'`; \
+@NATIVE_TRUE@    echo "Running $${testname}" >> gotools.sum; \
+@NATIVE_TRUE@    echo "Running $${testname}" >> gotools.log; \
+@NATIVE_TRUE@    sed -e 's/^--- \(.*\) ([^)]*)$$/\1/' < $${file} >> gotools.log; \
+@NATIVE_TRUE@    grep '^--- ' $${file} | sed -e 's/^--- \(.*\) ([^)]*)$$/\1/' -e 's/SKIP/UNTESTED/' >> gotools.sum; \
+@NATIVE_TRUE@  done
+@NATIVE_TRUE@  @echo >> gotools.sum
+@NATIVE_TRUE@  @echo "         === gotools Summary ===" >> gotools.sum
+@NATIVE_TRUE@  pass=`grep -c '^PASS' gotools.sum`; \
+@NATIVE_TRUE@  if test "$${pass}" -ne "0"; then \
+@NATIVE_TRUE@    echo "# of expected passes            $${pass}" >> gotools.sum; \
+@NATIVE_TRUE@  fi
+@NATIVE_TRUE@  fail=`grep -c '^FAIL' gotools.sum`; \
+@NATIVE_TRUE@  if test "$${fail}" -ne "0"; then \
+@NATIVE_TRUE@    echo "# of unexpected failures        $${fail}" >> gotools.sum; \
+@NATIVE_TRUE@  fi
+@NATIVE_TRUE@  untested=`grep -c '^UNTESTED' gotools.sum`; \
+@NATIVE_TRUE@  if test "$${untested}" -ne "0"; then \
+@NATIVE_TRUE@    echo "# of untested testcases         $${untested}" >> gotools.sum; \
+@NATIVE_TRUE@  fi
+@NATIVE_TRUE@  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
+@NATIVE_TRUE@  echo >> gotools.log
+@NATIVE_TRUE@  echo "runtest completed at `date`" >> gotools.log
+@NATIVE_TRUE@  if grep '^FAIL' gotools.sum >/dev/null 2>&1; then exit 1; fi
+
+@NATIVE_TRUE@.PHONY: check check-head check-go-tool
+
 # 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.
 
+mostlyclean-local:
+       rm -rf check-go-dir
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT: