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  }