mirror of
https://github.com/golang/go
synced 2024-11-18 04:04:49 -07:00
cmd/bundle: add -tags flag
Adds a "-tags" flag that'll allow build tags to be passed in and added to the very top of the generated and bundled file. For example, when generating h2_bundle.go for net/http, we'll now be able to do: bundle -tags '!nethttpomithttp2' -o h2_bundle.go -prefix http2 golang.org/x/net/http2 Updates golang/go#35082 Change-Id: I55edd7227aec8641b60ba560c79e0d50d0692d52 Reviewed-on: https://go-review.googlesource.com/c/tools/+/205017 Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
d415e1c6f9
commit
423eeaeda5
@ -7,7 +7,7 @@
|
||||
//
|
||||
// Usage:
|
||||
//
|
||||
// bundle [-o file] [-dst path] [-pkg name] [-prefix p] [-import old=new] <src>
|
||||
// bundle [-o file] [-dst path] [-pkg name] [-prefix p] [-import old=new] [-tags build_constraints] <src>
|
||||
//
|
||||
// The src argument specifies the import path of the package to bundle.
|
||||
// The bundling of a directory of source files into a single source file
|
||||
@ -33,6 +33,7 @@
|
||||
// corresponding symbols.
|
||||
// Bundle also must write a package declaration in the output and must
|
||||
// choose a name to use in that declaration.
|
||||
// Build constraints for the generated file can be specified using the -tags option.
|
||||
// If the -package option is given, bundle uses that name.
|
||||
// Otherwise, if the -dst option is given, bundle uses the last
|
||||
// element of the destination import path.
|
||||
@ -59,12 +60,14 @@
|
||||
// Bundle golang.org/x/net/http2 for inclusion in net/http,
|
||||
// prefixing all identifiers by "http2" instead of "http2_",
|
||||
// and rewriting the import "golang.org/x/net/http2/hpack"
|
||||
// to "internal/golang.org/x/net/http2/hpack":
|
||||
// to "internal/golang.org/x/net/http2/hpack", and also include
|
||||
// a "!nethttpomithttp2" build constraint:
|
||||
//
|
||||
// cd $GOROOT/src/net/http
|
||||
// bundle -o h2_bundle.go \
|
||||
// -prefix http2 \
|
||||
// -import golang.org/x/net/http2/hpack=internal/golang.org/x/net/http2/hpack \
|
||||
// -tags '!nethttpomithttp2' \
|
||||
// golang.org/x/net/http2
|
||||
//
|
||||
// Two ways to update the http2 bundle:
|
||||
@ -107,6 +110,7 @@ var (
|
||||
pkgName = flag.String("pkg", "", "set destination package `name` (default taken from current directory)")
|
||||
prefix = flag.String("prefix", "&_", "set bundled identifier prefix to `p` (default is \"&_\", where & stands for the original name)")
|
||||
underscore = flag.Bool("underscore", false, "rewrite golang.org/x/* to internal/x/* imports; temporary workaround for golang.org/issue/16333")
|
||||
buildTags = flag.String("tags", "", "the build constraints to be inserted into the generated file")
|
||||
|
||||
importMap = map[string]string{}
|
||||
)
|
||||
@ -160,7 +164,7 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
code, err := bundle(args[0], *dstPath, *pkgName, *prefix)
|
||||
code, err := bundle(args[0], *dstPath, *pkgName, *prefix, *buildTags)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@ -189,7 +193,7 @@ func isStandardImportPath(path string) bool {
|
||||
|
||||
var ctxt = &build.Default
|
||||
|
||||
func bundle(src, dst, dstpkg, prefix string) ([]byte, error) {
|
||||
func bundle(src, dst, dstpkg, prefix, buildTags string) ([]byte, error) {
|
||||
// Load the initial package.
|
||||
conf := loader.Config{ParserMode: parser.ParseComments, Build: ctxt}
|
||||
conf.TypeCheckFuncBodies = func(p string) bool { return p == src }
|
||||
@ -237,9 +241,12 @@ func bundle(src, dst, dstpkg, prefix string) ([]byte, error) {
|
||||
}
|
||||
|
||||
var out bytes.Buffer
|
||||
if buildTags != "" {
|
||||
fmt.Fprintf(&out, "// +build %s\n\n", buildTags)
|
||||
}
|
||||
|
||||
fmt.Fprintf(&out, "// Code generated by golang.org/x/tools/cmd/bundle. DO NOT EDIT.\n")
|
||||
if *outputFile != "" {
|
||||
if *outputFile != "" && buildTags == "" {
|
||||
fmt.Fprintf(&out, "//go:generate bundle %s\n", strings.Join(os.Args[1:], " "))
|
||||
} else {
|
||||
fmt.Fprintf(&out, "// $ bundle %s\n", strings.Join(os.Args[1:], " "))
|
||||
|
@ -41,7 +41,7 @@ func TestBundle(t *testing.T) {
|
||||
})
|
||||
|
||||
os.Args = os.Args[:1] // avoid e.g. -test=short in the output
|
||||
out, err := bundle("initial", "github.com/dest", "dest", "prefix")
|
||||
out, err := bundle("initial", "github.com/dest", "dest", "prefix", "tag")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
2
cmd/bundle/testdata/out.golden
vendored
2
cmd/bundle/testdata/out.golden
vendored
@ -1,3 +1,5 @@
|
||||
// +build tag
|
||||
|
||||
// Code generated by golang.org/x/tools/cmd/bundle. DO NOT EDIT.
|
||||
// $ bundle
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user