github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/engine/builder/doc/yelp.go (about) 1 package doc 2 3 import ( 4 "path/filepath" 5 6 "github.com/metux/go-metabuild/engine/builder/base" 7 "github.com/metux/go-metabuild/spec" 8 "github.com/metux/go-metabuild/spec/target" 9 "github.com/metux/go-metabuild/util/fileutil" 10 ) 11 12 type Yelp struct { 13 base.BaseBuilder 14 } 15 16 func (b Yelp) installFiles(files []string) { 17 installdir := b.InstallDir() 18 fmode := b.InstallPerm() 19 for _, e := range files { 20 b.InstallPkgFile(e, installdir, fmode) 21 } 22 } 23 24 func (b Yelp) instDir(dir string, suffix string) error { 25 entries, err := fileutil.ListDir(dir, suffix) 26 if err != nil { 27 return err 28 } 29 30 b.installFiles(entries) 31 return nil 32 } 33 34 func (b Yelp) JobRun() error { 35 src := b.RequiredSourceAbs() 36 format := b.RequiredEntryStr(target.KeyOutputFormat) 37 includes := b.EntryPathList(target.KeyIncludeDir) 38 outdir := b.BuildConf.BuildTempDir("yelp/" + b.MyId() + "/" + format) 39 40 c := append(b.BuilderCmd(), format, "-o", outdir) 41 for _, d := range includes { 42 c = append(c, "-p", d) 43 } 44 c = append(c, src) 45 46 b.ExecAbort(c, filepath.Dir(src)) 47 48 if b.WantInstall() { 49 if err := b.instDir(outdir, ""); err != nil { 50 return err 51 } 52 for _, d := range includes { 53 if err := b.instDir(d, ".png"); err != nil { 54 return err 55 } 56 } 57 } 58 59 return nil 60 } 61 62 func (b Yelp) JobPrepare(id string) error { 63 return nil 64 } 65 66 func MakeYelp(o spec.TargetObject, id string) Yelp { 67 return Yelp{base.BaseBuilder{o, id}} 68 }