]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: add -importmap option
authorRuss Cox <rsc@golang.org>
Tue, 9 Jun 2015 19:08:59 +0000 (12:08 -0700)
committerRuss Cox <rsc@golang.org>
Fri, 19 Jun 2015 18:50:12 +0000 (18:50 +0000)
The -importmap option takes an argument of the form old=new
and specifies that import "old" should be interpreted as if it said
import "new". The option may be repeated to specify multiple mappings.

This option is here to support the go command's new -vendor flag.

Change-Id: I31b4ed4249b549982a720bf61bb230462b33c59b
Reviewed-on: https://go-review.googlesource.com/10922
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/compile/doc.go
src/cmd/compile/internal/gc/lex.go

index ca7c03bb79b9de17fff47d1c41eeff4c95cc4049..6025f32d33153c8c7797a442ba6acd8ed9131db0 100644 (file)
@@ -54,6 +54,9 @@ Flags:
                Remove the limit on the number of errors reported (default limit is 10).
        -h
                Halt with a stack trace at the first error detected.
+       -importmap old=new
+               Interpret import "old" as import "new" during compilation.
+               The option may be repeated to add multiple mappings.
        -installsuffix suffix
                Look for packages in $GOROOT/pkg/$GOOS_$GOARCH_suffix
                instead of $GOROOT/pkg/$GOOS_$GOARCH.
index 33e1bedb0d9a4d9ee441423ad7b115cb595d09d9..b5106c6c3d64246e4798e7eab1bd3a804e5c4354 100644 (file)
@@ -214,6 +214,7 @@ func Main() {
        obj.Flagcount("g", "debug code generation", &Debug['g'])
        obj.Flagcount("h", "halt on error", &Debug['h'])
        obj.Flagcount("i", "debug line number stack", &Debug['i'])
+       obj.Flagfn1("importmap", "add `definition` of the form source=actual to import map", addImportMap)
        obj.Flagstr("installsuffix", "set pkg directory `suffix`", &flag_installsuffix)
        obj.Flagcount("j", "debug runtime-initialized variables", &Debug['j'])
        obj.Flagcount("l", "disable inlining", &Debug['l'])
@@ -501,6 +502,20 @@ func Main() {
        Flusherrors()
 }
 
+var importMap = map[string]string{}
+
+func addImportMap(s string) {
+       if strings.Count(s, "=") != 1 {
+               log.Fatal("-importmap argument must be of the form source=actual")
+       }
+       i := strings.Index(s, "=")
+       source, actual := s[:i], s[i+1:]
+       if source == "" || actual == "" {
+               log.Fatal("-importmap argument must be of the form source=actual; source and actual must be non-empty")
+       }
+       importMap[source] = actual
+}
+
 func saveerrors() {
        nsavederrors += nerrors
        nerrors = 0
@@ -687,6 +702,11 @@ func importfile(f *Val, line int) {
        }
 
        path_ := f.U.(string)
+
+       if mapped, ok := importMap[path_]; ok {
+               path_ = mapped
+       }
+
        if islocalname(path_) {
                if path_[0] == '/' {
                        Yyerror("import path cannot be absolute path")