1
0
mirror of https://github.com/golang/go synced 2024-09-24 13:30:13 -06:00

go/build: reject directory with only cgo files if cgo not in use

The old test for "no Go files" was p.Name == "", meaning we never
saw a Go package statement. That test fails if there are cgo files
that we parsed (and recorded the package name) but then chose
not to use (because cgo is not available).

Test the actual file lists instead.

Fixes #6078.

R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/13661043
This commit is contained in:
Russ Cox 2013-09-11 13:25:30 -04:00
parent fdaf88ea5b
commit 611b182190
3 changed files with 21 additions and 1 deletions

View File

@ -167,6 +167,19 @@ elif ! grep testdata/shadow/root1/src/foo testdata/err >/dev/null; then
fi fi
unset GOPATH unset GOPATH
TEST go install fails with no buildable files
export GOPATH=$(pwd)/testdata
export CGO_ENABLED=0
if ./testgo install cgotest 2>testdata/err; then
echo "go install cgotest succeeded unexpectedly"
elif ! grep 'no buildable Go source files' testdata/err >/dev/null; then
echo "go install cgotest did not report 'no buildable Go source files'"
cat testdata/err
ok=false
fi
unset CGO_ENABLED
unset GOPATH
# Test that without $GOBIN set, binaries get installed # Test that without $GOBIN set, binaries get installed
# into the GOPATH bin directory. # into the GOPATH bin directory.
TEST install into GOPATH TEST install into GOPATH

5
src/cmd/go/testdata/src/cgotest/m.go vendored Normal file
View File

@ -0,0 +1,5 @@
package cgotest
import "C"
var _ C.int

View File

@ -747,6 +747,8 @@ Found:
allTags["cgo"] = true allTags["cgo"] = true
if ctxt.CgoEnabled { if ctxt.CgoEnabled {
p.CgoFiles = append(p.CgoFiles, name) p.CgoFiles = append(p.CgoFiles, name)
} else {
p.IgnoredGoFiles = append(p.IgnoredGoFiles, name)
} }
} else if isXTest { } else if isXTest {
p.XTestGoFiles = append(p.XTestGoFiles, name) p.XTestGoFiles = append(p.XTestGoFiles, name)
@ -756,7 +758,7 @@ Found:
p.GoFiles = append(p.GoFiles, name) p.GoFiles = append(p.GoFiles, name)
} }
} }
if p.Name == "" { if len(p.GoFiles)+len(p.CgoFiles)+len(p.TestGoFiles)+len(p.XTestGoFiles) == 0 {
return p, &NoGoError{p.Dir} return p, &NoGoError{p.Dir}
} }