mirror of
https://github.com/golang/go
synced 2024-11-05 18:36:08 +00:00
a538558003
R=bradfitz, dave, rsc, r CC=golang-dev https://golang.org/cl/10001045
170 lines
2.8 KiB
Text
170 lines
2.8 KiB
Text
# Copyright 2012 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.
|
|
|
|
# These function names are also known to
|
|
# (and are the plan for transitioning to) run.go.
|
|
|
|
# helper (not known to run.go)
|
|
# group file list by packages and return list of packages
|
|
# each package is a comma-separated list of go files.
|
|
pkgs() {
|
|
pkglist=$(grep -h '^package ' $* | awk '{print $2}' | sort -u)
|
|
for p in $pkglist
|
|
do
|
|
echo $(grep -l "^package $p\$" $*) | tr ' ' ,
|
|
done | sort
|
|
}
|
|
|
|
_match() {
|
|
case $1 in
|
|
*,*)
|
|
#echo >&2 "match comma separated $1"
|
|
first=$(echo $1 | sed 's/,.*//')
|
|
rest=$(echo $1 | sed 's/[^,]*,//')
|
|
if _match $first && _match $rest; then
|
|
return 0
|
|
fi
|
|
return 1
|
|
;;
|
|
'!'*)
|
|
#echo >&2 "match negation $1"
|
|
neg=$(echo $1 | sed 's/^!//')
|
|
if _match $neg; then
|
|
return 1
|
|
fi
|
|
return 0
|
|
;;
|
|
$GOARCH|$GOOS)
|
|
#echo >&2 "match GOARCH or GOOS $1"
|
|
return 0
|
|
;;
|
|
esac
|
|
return 1
|
|
}
|
|
|
|
# +build aborts execution if the supplied tags don't match,
|
|
# i.e. none of the tags (x or !x) matches GOARCH or GOOS.
|
|
+build() {
|
|
if (( $# == 0 )); then
|
|
return
|
|
fi
|
|
m=0
|
|
for tag; do
|
|
if _match $tag; then
|
|
m=1
|
|
fi
|
|
done
|
|
if [ $m = 0 ]; then
|
|
#echo >&2 no match
|
|
exit 0
|
|
fi
|
|
unset m
|
|
}
|
|
|
|
compile() {
|
|
$G $D/$F.go
|
|
}
|
|
|
|
compiledir() {
|
|
for pkg in $(pkgs $D/$F.dir/*.go)
|
|
do
|
|
$G -I . $(echo $pkg | tr , ' ') || return 1
|
|
done
|
|
}
|
|
|
|
errorcheckdir() {
|
|
lastzero=""
|
|
if [ "$1" = "-0" ]; then
|
|
lastzero="-0"
|
|
fi
|
|
pkgs=$(pkgs $D/$F.dir/*.go)
|
|
for pkg in $pkgs.last
|
|
do
|
|
zero="-0"
|
|
case $pkg in
|
|
*.last)
|
|
pkg=$(echo $pkg |sed 's/\.last$//')
|
|
zero=$lastzero
|
|
esac
|
|
errchk $zero $G -D . -I . -e $(echo $pkg | tr , ' ')
|
|
done
|
|
}
|
|
|
|
rundir() {
|
|
lastfile=""
|
|
for pkg in $(pkgs $D/$F.dir/*.go)
|
|
do
|
|
name=$(echo $pkg | sed 's/\.go.*//; s/.*\///')
|
|
$G -D . -I . -e $(echo $pkg | tr , ' ') || return 1
|
|
lastfile=$name
|
|
done
|
|
$L -o $A.out -L . $lastfile.$A
|
|
./$A.out
|
|
}
|
|
|
|
rundircmpout() {
|
|
lastfile=""
|
|
for pkg in $(pkgs $D/$F.dir/*.go)
|
|
do
|
|
name=$(echo $pkg | sed 's/\.go.*//; s/.*\///')
|
|
$G -D . -I . -e $(echo $pkg | tr , ' ') || return 1
|
|
lastfile=$name
|
|
done
|
|
$L -o $A.out -L . $lastfile.$A
|
|
./$A.out 2>&1 | cmp - $D/$F.out
|
|
}
|
|
|
|
build() {
|
|
$G $D/$F.go && $L $F.$A
|
|
}
|
|
|
|
runoutput() {
|
|
go run "$D/$F.go" "$@" > tmp.go
|
|
go run tmp.go
|
|
}
|
|
|
|
run() {
|
|
gofiles=""
|
|
ingo=true
|
|
while $ingo; do
|
|
case "$1" in
|
|
*.go)
|
|
gofiles="$gofiles $1"
|
|
shift
|
|
;;
|
|
*)
|
|
ingo=false
|
|
;;
|
|
esac
|
|
done
|
|
|
|
$G $D/$F.go $gofiles && $L $F.$A && ./$A.out "$@"
|
|
}
|
|
|
|
cmpout() {
|
|
$G $D/$F.go && $L $F.$A && ./$A.out 2>&1 | cmp - $D/$F.out
|
|
}
|
|
|
|
errorcheck() {
|
|
zero=""
|
|
if [ "$1" = "-0" ]; then
|
|
zero="-0"
|
|
shift
|
|
fi
|
|
errchk $zero $G -e $* $D/$F.go
|
|
}
|
|
|
|
errorcheckoutput() {
|
|
zero=""
|
|
if [ "$1" = "-0" ]; then
|
|
zero="-0"
|
|
shift
|
|
fi
|
|
go run "$D/$F.go" "$@" > tmp.go
|
|
errchk $zero $G -e tmp.go
|
|
}
|
|
|
|
skip() {
|
|
true
|
|
}
|