github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/engine/builder/factory.go (about) 1 package builder 2 3 import ( 4 "fmt" 5 6 "github.com/metux/go-metabuild/engine/builder/c" 7 "github.com/metux/go-metabuild/engine/builder/composite" 8 "github.com/metux/go-metabuild/engine/builder/data" 9 "github.com/metux/go-metabuild/engine/builder/doc" 10 "github.com/metux/go-metabuild/engine/builder/exec" 11 "github.com/metux/go-metabuild/engine/builder/gen" 12 "github.com/metux/go-metabuild/engine/builder/i18n" 13 "github.com/metux/go-metabuild/spec" 14 "github.com/metux/go-metabuild/spec/target" 15 "github.com/metux/go-metabuild/util/jobs" 16 ) 17 18 func CreateBuilder(o target.TargetObject) (jobs.Job, error) { 19 id := o.MyId() 20 21 switch t := spec.Key(o.RequiredEntryStr(target.KeyBuilderDriver)); t { 22 23 /* plain C or C++ */ 24 case target.TypeCExecutable: 25 return c.MakeBuilderCExecutable(o, id), nil 26 case target.TypeCLibrary: 27 return c.MakeCLibrary(o, id), nil 28 29 /* data files */ 30 case target.TypeDataMisc: 31 return data.MakeDataMisc(o, id), nil 32 case target.TypeDataDesktop: 33 return data.MakeDataDesktop(o, id), nil 34 case target.TypeDataPixmap: 35 return data.MakeDataMisc(o, id), nil 36 37 /* locales */ 38 case target.TypeI18nPo: 39 return i18n.MakeI18nPo(o, id), nil 40 case target.TypeI18nMsgfmt: 41 return i18n.MakeI18nMsgfmt(o, id), nil 42 43 /* documentation */ 44 case target.TypeDocMan: 45 return doc.MakeManPages(o, id), nil 46 case target.TypeDocMisc: 47 return doc.MakeDocMisc(o, id), nil 48 case target.TypeDocYelp: 49 return doc.MakeYelp(o, id), nil 50 51 /* generators */ 52 case target.TypeGenGlibResource: 53 return gen.MakeGlibResource(o, id), nil 54 case target.TypeGenGlibMarshal: 55 return gen.MakeGlibMarshal(o, id), nil 56 case target.TypeXdtCSource: 57 return gen.MakeXdtCSource(o, id), nil 58 case target.TypeXxdCSource: 59 return gen.MakeXxdCSource(o, id), nil 60 61 /* composite */ 62 case target.TypeCGlibMarshal: 63 return composite.MakeGlibMarshal(o, id), nil 64 case target.TypeCGlibResource: 65 return composite.MakeGlibResource(o, id), nil 66 67 /* exec */ 68 case target.TypeExecBasic: 69 return exec.MakeExecBasic(o, id), nil 70 71 default: 72 return nil, fmt.Errorf("unsupported builder driver: %s", t) 73 } 74 }