mirror of
https://github.com/golang/go
synced 2024-11-14 07:40:21 -07:00
1499c78281
This CL changes the behavior of 'make install' and 'make test' in the src/cmd directory and the src/pkg directory to have each recursive make clean up after itself immediately. It does the same in test/run, removing $F.$A and $A.out (the common byproducts) between runs. On machines with slow disks and aggressive kernel caching, cleaning up immediately can mean that the intermediate objects never get written to disk. This change eliminates almost all the disk waiting during all.bash on my laptop (a Thinkpad X201s with an SSD running Linux). 147.50u 19.95s 277.34r before 148.53u 21.64s 179.59r after R=golang-dev, r, iant2 CC=golang-dev https://golang.org/cl/4413042
137 lines
2.9 KiB
Bash
Executable File
137 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright 2009 The Go Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style
|
|
# license that can be found in the LICENSE file.
|
|
|
|
eval $(gomake --no-print-directory -f ../src/Make.inc go-env)
|
|
|
|
export E=
|
|
|
|
case X"$GOARCH" in
|
|
Xamd64)
|
|
export A=6
|
|
;;
|
|
X386)
|
|
export A=8
|
|
;;
|
|
Xarm)
|
|
export A=5
|
|
export E="$GORUN"
|
|
;;
|
|
*)
|
|
echo 1>&2 run: unsupported '$GOARCH'
|
|
exit 1
|
|
esac
|
|
|
|
case X"$GOOS" in
|
|
Xnacl)
|
|
export E=${GORUN:-$GOROOT/misc/nacl/naclrun}
|
|
esac
|
|
|
|
export G=${A}g
|
|
export L=${A}l
|
|
export GOTRACEBACK=0
|
|
export LANG=C
|
|
unset GREP_OPTIONS # in case user has a non-standard set
|
|
|
|
failed=0
|
|
|
|
PATH=/bin:/usr/bin:/usr/local/bin:${GOBIN:-$GOROOT/bin}:`pwd`
|
|
|
|
RUNFILE=/tmp/gorun-$$-$USER
|
|
TMP1FILE=/tmp/gotest1-$$-$USER
|
|
TMP2FILE=/tmp/gotest2-$$-$USER
|
|
|
|
# don't run the machine out of memory: limit individual processes to 4GB.
|
|
# on thresher, 3GB suffices to run the tests; with 2GB, peano fails.
|
|
ulimit -v 4000000
|
|
|
|
# no core files please
|
|
ulimit -c 0
|
|
|
|
true >pass.out >times.out
|
|
|
|
exclude=false # exclude nothing
|
|
golden=golden.out
|
|
|
|
filterout() {
|
|
grep '^'"$2"'$' $1 >/dev/null
|
|
}
|
|
|
|
for dir in . ken chan interface nilptr syntax fixedbugs bugs
|
|
do
|
|
echo
|
|
echo '==' $dir'/'
|
|
for i in $(ls $dir/*.go 2>/dev/null)
|
|
do (
|
|
if $exclude $i; then
|
|
exit 0 # continues for loop
|
|
fi
|
|
export F=$(basename $i .go)
|
|
export D=$dir
|
|
sed '/^\/\//!q' $i | sed 's@//@@; $d' |sed 's|./\$A.out|$E &|g' >$RUNFILE
|
|
if ! { time -p bash -c "bash $RUNFILE >$TMP1FILE 2>&1" ; } 2>$TMP2FILE
|
|
then
|
|
echo
|
|
echo "===========" $i
|
|
cat $TMP1FILE
|
|
echo >&2 fail: $i
|
|
echo "# $i # fail" >>pass.out
|
|
elif test -s $TMP1FILE
|
|
then
|
|
echo
|
|
echo "===========" $i
|
|
cat $TMP1FILE
|
|
if grep -q '^BUG' $TMP1FILE
|
|
then
|
|
if [ $dir != bugs ]
|
|
then
|
|
echo >&2 bug: $i
|
|
fi
|
|
echo "# $i # fail, BUG" >>pass.out
|
|
else
|
|
echo $i >>pass.out
|
|
fi
|
|
elif [ $dir = "bugs" ]
|
|
then
|
|
echo $i succeeded with no output.
|
|
else
|
|
echo $i >>pass.out
|
|
fi
|
|
echo $(awk 'NR==1{print $2}' $TMP2FILE) $D/$F >>times.out
|
|
rm -f $F.$A $A.out
|
|
) done
|
|
done | # clean up some stack noise
|
|
egrep -v '^(r[0-9a-z]+|[cfg]s) +0x' |
|
|
sed '/tmp.*Bus error/s/.*Bus/Bus/; /tmp.*Trace.BPT/s/.*Trace/Trace/
|
|
s!'$RUNFILE'!$RUNFILE!g
|
|
s/^PC=0x[0-9a-f]*/pc: xxx/
|
|
s/^pc: 0x[0-9a-f]*/pc: xxx/
|
|
s/PC=0x[0-9a-f]*/PC=xxx/
|
|
/^Trace\/breakpoint trap/d
|
|
/^Trace\/BPT trap/d
|
|
/RUNFILE/ s/line 1: *[0-9]*/line 1: PID/
|
|
/^\$RUNFILE: line 1: PID Trace\/breakpoint trap/d
|
|
/Fault in NaCl untrusted code/d
|
|
/Segmentation fault/d
|
|
/^qemu: uncaught target signal 11 (Segmentation fault) - exiting/d' > run.out
|
|
|
|
rm -f $RUNFILE $TMP1FILE $TMP2FILE *.$A *.a $A.out
|
|
diffmsg=""
|
|
if ! diff $golden run.out
|
|
then
|
|
diffmsg="; test output differs"
|
|
failed=1
|
|
fi
|
|
|
|
notinbugs=$(sed '/^== bugs/q' run.out | grep -c '^BUG')
|
|
inbugs=$(sed '1,/^== bugs/d' run.out | grep -c '^BUG')
|
|
|
|
echo 2>&1 $inbugs known bugs';' $notinbugs unexpected bugs$diffmsg
|
|
|
|
if [ "$failed" != "0" ]; then
|
|
echo FAILED
|
|
fi
|
|
|
|
exit $failed
|