]> Cypherpunks repositories - gostls13.git/commitdiff
go/build: do not consider "android.go" to be android-specific
authorRob Pike <r@golang.org>
Mon, 6 Oct 2014 21:50:58 +0000 (14:50 -0700)
committerRob Pike <r@golang.org>
Mon, 6 Oct 2014 21:50:58 +0000 (14:50 -0700)
A file name must have a non-empty underscore-separated
prefix before its suffix matches GOOS. This is what the
documentation already said but is not what the code did.

Fixes #8838.

This needs to be called out in the release notes.
The he single affected file
        code.google.com/p/go.text/collate/tools/colcmp/darwin.go
could use a renaming but works because it has a build tag inside.

LGTM=adg, rsc
R=golang-codereviews, adg, rsc
CC=golang-codereviews
https://golang.org/cl/147690043

src/go/build/build.go
src/go/build/build_test.go

index 5e11c9b9c50cda134aa2ee7771808cc0d3441808..3ac79808330803461731905fdee4ecfcec49fe71 100644 (file)
@@ -1291,6 +1291,18 @@ func (ctxt *Context) goodOSArchFile(name string, allTags map[string]bool) bool {
        if dot := strings.Index(name, "."); dot != -1 {
                name = name[:dot]
        }
+
+       // Before Go 1.4, a file called "linux.go" would be equivalent to having a
+       // build tag "linux" in that file. For Go 1.4 and beyond, we require this
+       // auto-tagging to apply only to files with a non-empty prefix, so
+       // "foo_linux.go" is tagged but "linux.go" is not. This allows new operating
+       // sytems, such as android, to arrive without breaking existing code with
+       // innocuous source code in "android.go". The easiest fix: files without
+       // underscores are always included.
+       if !strings.ContainsRune(name, '_') {
+               return true
+       }
+
        l := strings.Split(name, "_")
        if n := len(l); n > 0 && l[n-1] == "test" {
                l = l[:n-1]
index 0040101134a61efbb8fbb9855d3f440e0710a0ca..23ce89b4bdf28379eb4903c6fd6ad422efb7f63f 100644 (file)
@@ -173,6 +173,10 @@ var matchFileTests = []struct {
        {ctxtAndroid, "foo_linux.go", "", true},
        {ctxtAndroid, "foo_android.go", "", true},
        {ctxtAndroid, "foo_plan9.go", "", false},
+       {ctxtAndroid, "android.go", "", true},
+       {ctxtAndroid, "plan9.go", "", true},
+       {ctxtAndroid, "arm.s", "", true},
+       {ctxtAndroid, "amd64.s", "", true},
 }
 
 func TestMatchFile(t *testing.T) {