@@ -24,6 +24,7 @@ import (
2424 "strings"
2525 "syscall"
2626
27+ "github.com/goplus/gogen"
2728 "github.com/goplus/mod/modcache"
2829 "github.com/goplus/mod/modfetch"
2930 "github.com/goplus/mod/xgomod"
@@ -35,13 +36,15 @@ const (
3536 autoGenFile = "xgo_autogen.go"
3637 autoGenTestFile = "xgo_autogen_test.go"
3738 autoGen2TestFile = "xgo_autogen2_test.go"
39+ autoGenPrefix = "xgo_autogen_"
3840)
3941
4042type GenFlags int
4143
4244const (
4345 GenFlagCheckOnly GenFlags = 1 << iota
4446 GenFlagSingleFile
47+ GenFlagMultiFiles
4548 GenFlagPrintError
4649 GenFlagPrompt
4750)
@@ -166,7 +169,7 @@ func genGoSingleFile(file string, extn int, conf *Config, flags GenFlags) (err e
166169}
167170
168171func genGoIn (dir string , conf * Config , genTestPkg bool , flags GenFlags , gen ... * bool ) (err error ) {
169- out , test , err := LoadDir (dir , conf , genTestPkg , (flags & GenFlagPrompt ) != 0 )
172+ out , test , err := LoadDir (dir , conf , genTestPkg , (flags & GenFlagPrompt ) != 0 , ( flags & GenFlagMultiFiles ) != 0 )
170173 if err != nil {
171174 if NotFound (err ) { // no XGo source files
172175 return nil
@@ -177,10 +180,18 @@ func genGoIn(dir string, conf *Config, genTestPkg bool, flags GenFlags, gen ...*
177180 return nil
178181 }
179182 os .MkdirAll (dir , 0755 )
180- file := filepath .Join (dir , autoGenFile )
181- err = out .WriteFile (file )
182- if err != nil {
183- return errors .NewWith (err , `out.WriteFile(file)` , - 2 , "(*gogen.Package).WriteFile" , out , file )
183+
184+ if flags & GenFlagMultiFiles != 0 {
185+ err = writeMultiFiles (out , dir )
186+ if err != nil {
187+ return errors .NewWith (err , `writeMultiFiles(out, dir)` , - 2 , "(*gogen.Package).WriteFile" , out , dir )
188+ }
189+ } else {
190+ file := filepath .Join (dir , autoGenFile )
191+ err = out .WriteFile (file )
192+ if err != nil {
193+ return errors .NewWith (err , `out.WriteFile(file)` , - 2 , "(*gogen.Package).WriteFile" , out , file )
194+ }
184195 }
185196 if gen != nil { // say `xgo_autogen.go generated`
186197 * gen [0 ] = true
@@ -204,6 +215,29 @@ func genGoIn(dir string, conf *Config, genTestPkg bool, flags GenFlags, gen ...*
204215 return
205216}
206217
218+ func writeMultiFiles (pkg * gogen.Package , dir string ) error {
219+ names := make (map [string ]string )
220+ pkg .ForEachFile (func (fname string , file * gogen.File ) {
221+ if fname == "" {
222+ names [fname ] = autoGenFile
223+ } else {
224+ _ , name := filepath .Split (fname )
225+ name = name [:len (name )- len (filepath .Ext (name ))]
226+ if strings .HasSuffix (name , "_test" ) {
227+ return
228+ }
229+ names [fname ] = autoGenPrefix + name + ".go"
230+ }
231+ })
232+ for fname , file := range names {
233+ err := pkg .WriteFile (filepath .Join (dir , file ), fname )
234+ if err != nil {
235+ return err
236+ }
237+ }
238+ return nil
239+ }
240+
207241// -----------------------------------------------------------------------------
208242
209243const (
0 commit comments