From 06dffe0d90136e051ba908bdde851c30ebe865b7 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Mon, 6 Oct 2014 14:50:58 -0700 Subject: go/build: do not consider "android.go" to be android-specific 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 issue 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://codereview.appspot.com/147690043 --- src/go/build/build.go | 12 ++++++++++++ src/go/build/build_test.go | 4 ++++ 2 files changed, 16 insertions(+) (limited to 'src/go') diff --git a/src/go/build/build.go b/src/go/build/build.go index 5e11c9b9c..3ac798083 100644 --- a/src/go/build/build.go +++ b/src/go/build/build.go @@ -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] diff --git a/src/go/build/build_test.go b/src/go/build/build_test.go index 004010113..23ce89b4b 100644 --- a/src/go/build/build_test.go +++ b/src/go/build/build_test.go @@ -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) { -- cgit v1.2.1