| // Copyright 2018 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package imports |
| |
| import ( |
| "cmd/go/internal/cfg" |
| "sync" |
| ) |
| |
| var ( |
| tags map[string]bool |
| tagsOnce sync.Once |
| ) |
| |
| // Tags returns a set of build tags that are true for the target platform. |
| // It includes GOOS, GOARCH, the compiler, possibly "cgo", |
| // release tags like "go1.13", and user-specified build tags. |
| func Tags() map[string]bool { |
| tagsOnce.Do(func() { |
| tags = loadTags() |
| }) |
| return tags |
| } |
| |
| func loadTags() map[string]bool { |
| tags := map[string]bool{ |
| cfg.BuildContext.GOOS: true, |
| cfg.BuildContext.GOARCH: true, |
| cfg.BuildContext.Compiler: true, |
| } |
| if cfg.BuildContext.CgoEnabled { |
| tags["cgo"] = true |
| } |
| for _, tag := range cfg.BuildContext.BuildTags { |
| tags[tag] = true |
| } |
| for _, tag := range cfg.BuildContext.ReleaseTags { |
| tags[tag] = true |
| } |
| return tags |
| } |
| |
| var ( |
| anyTags map[string]bool |
| anyTagsOnce sync.Once |
| ) |
| |
| // AnyTags returns a special set of build tags that satisfy nearly all |
| // build tag expressions. Only "ignore" and malformed build tag requirements |
| // are considered false. |
| func AnyTags() map[string]bool { |
| anyTagsOnce.Do(func() { |
| anyTags = map[string]bool{"*": true} |
| }) |
| return anyTags |
| } |