@@ -41,8 +41,11 @@ func GoBuild(debugname string, pkgs []string, buildflags string) error {
41
41
42
42
// GoBuildCombinedOutput builds non-test files in 'pkgs' with the specified 'buildflags'
43
43
// and writes the output at 'debugname'.
44
- func GoBuildCombinedOutput (debugname string , pkgs []string , buildflags string ) (string , []byte , error ) {
45
- args := goBuildArgs (debugname , pkgs , buildflags , false )
44
+ func GoBuildCombinedOutput (debugname string , pkgs []string , buildflags interface {}) (string , []byte , error ) {
45
+ args , err := goBuildArgs2 (debugname , pkgs , buildflags , false )
46
+ if err != nil {
47
+ return "" , nil , err
48
+ }
46
49
return gocommandCombinedOutput ("build" , args ... )
47
50
}
48
51
@@ -55,8 +58,11 @@ func GoTestBuild(debugname string, pkgs []string, buildflags string) error {
55
58
56
59
// GoTestBuildCombinedOutput builds test files 'pkgs' with the specified 'buildflags'
57
60
// and writes the output at 'debugname'.
58
- func GoTestBuildCombinedOutput (debugname string , pkgs []string , buildflags string ) (string , []byte , error ) {
59
- args := goBuildArgs (debugname , pkgs , buildflags , true )
61
+ func GoTestBuildCombinedOutput (debugname string , pkgs []string , buildflags interface {}) (string , []byte , error ) {
62
+ args , err := goBuildArgs2 (debugname , pkgs , buildflags , true )
63
+ if err != nil {
64
+ return "" , nil , err
65
+ }
60
66
return gocommandCombinedOutput ("test" , args ... )
61
67
}
62
68
@@ -84,6 +90,36 @@ func goBuildArgs(debugname string, pkgs []string, buildflags string, isTest bool
84
90
return args
85
91
}
86
92
93
+ // goBuildArgs2 is like goBuildArgs, but takes either string, []string, or []interface{}.
94
+ func goBuildArgs2 (debugname string , pkgs []string , buildflags interface {}, isTest bool ) ([]string , error ) {
95
+ var args []string
96
+ switch buildflags := buildflags .(type ) {
97
+ case string :
98
+ return goBuildArgs (debugname , pkgs , buildflags , false ), nil
99
+ case nil :
100
+ case []string :
101
+ args = append (args , buildflags ... )
102
+ case []interface {}:
103
+ for _ , flag := range buildflags {
104
+ switch flag := flag .(type ) {
105
+ case string :
106
+ args = append (args , flag )
107
+ default :
108
+ return nil , fmt .Errorf ("invalid buildflags element type %T (%q)" , flag , flag )
109
+ }
110
+ }
111
+ default :
112
+ return nil , fmt .Errorf ("invalid buildflags type %T" , buildflags )
113
+ }
114
+
115
+ args = append (args , "-o" , debugname )
116
+ if isTest {
117
+ args = append ([]string {"-c" }, args ... )
118
+ }
119
+ args = append (args , "-gcflags" , "all=-N -l" )
120
+ return append (args , pkgs ... ), nil
121
+ }
122
+
87
123
func gocommandRun (command string , args ... string ) error {
88
124
_ , goBuild := gocommandExecCmd (command , args ... )
89
125
goBuild .Stderr = os .Stdout
0 commit comments