diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-08-03 22:46:06 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-08-03 22:46:06 +0000 |
commit | 9c26dfd08a1374c6c1137ad13b9bfe402c66d299 (patch) | |
tree | 38f3f1c3dbee66f77aa716bd1022a2c9a6b1781d /libgo | |
parent | ac2c96ab1233e1c3dcd29a4854ae4eb7d0f68199 (diff) | |
download | gcc-9c26dfd08a1374c6c1137ad13b9bfe402c66d299.tar.gz |
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
Diffstat (limited to 'libgo')
-rwxr-xr-x | libgo/testsuite/gotest | 94 |
1 files changed, 49 insertions, 45 deletions
diff --git a/libgo/testsuite/gotest b/libgo/testsuite/gotest index 79e02e2a1ea..1f19bb5809c 100755 --- a/libgo/testsuite/gotest +++ b/libgo/testsuite/gotest @@ -313,56 +313,60 @@ x) esac if test x$tag1 != xnonmatchingtag -a x$tag2 != xnonmatchingtag; then - taglines=`sed '/^package /q' < $f | fgrep '// +build '` - if test "$taglines" = ""; then - omatch=true - else - omatch=false - fi - for tags in $taglines; do - match=false - for tag in $tags; do - reverse=false - case $tag in - "!"*) - reverse=true - tag=`echo $tag | sed -e 's/^!//'` - ;; - esac - - case $tag in - "//" | "+build") - ;; - $goos | $goarch | cgo) - match=true - ;; - *,*) - match=true - for ctag in `echo $tag | sed -e 's/,/ /g'`; do - case $ctag in - $goos | $goarch | cgo) - ;; - *) - match=false - ;; - esac - done - ;; - esac - - if test "$reverse" = true; then - if test "$match" = true; then + tags=`sed '/^package /q' < $f | fgrep '// +build '` + omatch=true + first=true + match=false + for tag in $tags; do + reverse=false + case $tag in + "!"*) + reverse=true + tag=`echo $tag | sed -e 's/^!//'` + ;; + esac + + case $tag in + "//") + ;; + "+build") + if test "$first" = "true"; then + first=false + elif test "$match" = "false"; then + omatch=false + fi + match=false + ;; + $goos | $goarch | cgo) + match=true + ;; + *,*) + match=true + for ctag in `echo $tag | sed -e 's/,/ /g'`; do + case $ctag in + $goos | $goarch | cgo) + ;; + *) match=false - else - match=true - fi + ;; + esac + done + ;; + esac + + if test "$reverse" = true; then + if test "$match" = true; then + match=false + else + match=true fi - done - if test "$match" = "true"; then - omatch=true fi done + if test "$match" = "false" -a "$first" = "false"; then + omatch=false + fi + if test "$omatch" = "true"; then gofiles="$gofiles $f" fi |