1
0
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:
Emmanuel T Odeke 2019-11-02 20:11:45 -07:00 committed by Emmanuel Odeke
parent d415e1c6f9
commit 423eeaeda5
3 changed files with 15 additions and 6 deletions

View File

@ -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:], " "))

View File

@ -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)
}

View File

@ -1,3 +1,5 @@
// +build tag
// Code generated by golang.org/x/tools/cmd/bundle. DO NOT EDIT.
// $ bundle