gotest: multiple +build lines must all be true

The code that handled +build lines did not correctly require them to all
    be true.  While looking into this I discovered that multiple +build
    lines were mishandled in a different way, because the shell does not
    preseve line breaks in backquoted data.  Look for the +build token to
    tell us when we are switching from one +build line to another.
    
    Reviewed-on: https://go-review.googlesource.com/25460

From-SVN: r239100
This commit is contained in:
Ian Lance Taylor 2016-08-03 22:46:06 +00:00
parent ac2c96ab12
commit 9c26dfd08a
2 changed files with 50 additions and 46 deletions

View File

@ -1,4 +1,4 @@
0fb416a7bed076bdfef168480789bb2994a58de3 3096ac81185edacbf800783f0f803d1c419dccdd
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

@ -313,56 +313,60 @@ x)
esac esac
if test x$tag1 != xnonmatchingtag -a x$tag2 != xnonmatchingtag; then if test x$tag1 != xnonmatchingtag -a x$tag2 != xnonmatchingtag; then
taglines=`sed '/^package /q' < $f | fgrep '// +build '` tags=`sed '/^package /q' < $f | fgrep '// +build '`
if test "$taglines" = ""; then omatch=true
omatch=true first=true
else match=false
omatch=false for tag in $tags; do
fi reverse=false
for tags in $taglines; do case $tag in
match=false "!"*)
for tag in $tags; do reverse=true
reverse=false tag=`echo $tag | sed -e 's/^!//'`
case $tag in ;;
"!"*) esac
reverse=true
tag=`echo $tag | sed -e 's/^!//'`
;;
esac
case $tag in case $tag in
"//" | "+build") "//")
;; ;;
$goos | $goarch | cgo) "+build")
match=true if test "$first" = "true"; then
;; first=false
*,*) elif test "$match" = "false"; then
match=true omatch=false
for ctag in `echo $tag | sed -e 's/,/ /g'`; do fi
case $ctag in match=false
$goos | $goarch | cgo) ;;
;; $goos | $goarch | cgo)
*) match=true
match=false ;;
;; *,*)
esac match=true
done for ctag in `echo $tag | sed -e 's/,/ /g'`; do
;; case $ctag in
esac $goos | $goarch | cgo)
;;
if test "$reverse" = true; then *)
if test "$match" = true; then match=false
match=false ;;
else esac
match=true done
fi ;;
esac
if test "$reverse" = true; then
if test "$match" = true; then
match=false
else
match=true
fi fi
done
if test "$match" = "true"; then
omatch=true
fi fi
done done
if test "$match" = "false" -a "$first" = "false"; then
omatch=false
fi
if test "$omatch" = "true"; then if test "$omatch" = "true"; then
gofiles="$gofiles $f" gofiles="$gofiles $f"
fi fi