github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/engine/builder/doc/man.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" 10 ) 11 12 type ManPages struct { 13 base.BaseBuilder 14 } 15 16 func (b ManPages) JobRun() error { 17 18 src := b.RequiredSources() 19 if len(src) != 1 { 20 panic("manpage target may only have exactly one source") 21 } 22 srcfile := src[0] 23 24 alias := b.EntryStrList(target.KeyManpageAlias) 25 compress := b.EntryStr(target.KeyManpageCompress) 26 27 mdir := b.InstallDir() + "man" + b.RequiredEntryStr(target.KeyManpageSection) 28 29 // FIXME: directly write compressed file instead of copying 30 switch compress { 31 case "": 32 // no compression 33 case "gz": 34 util.ErrPanicf(util.GzipCompress(srcfile, srcfile+".gz", b.InstallPerm()), "error compressing manpage") 35 srcfile = srcfile + ".gz" 36 default: 37 panic("unsupported man compression: " + compress) 38 } 39 40 b.InstallPkgFile(srcfile, mdir, b.InstallPerm()) 41 42 for _, a := range alias { 43 if compress != "" { 44 a = a + "." + compress 45 } 46 b.InstallPkgSymlink(filepath.Base(srcfile), a, mdir) 47 } 48 49 return nil 50 } 51 52 func MakeManPages(o spec.TargetObject, id string) ManPages { 53 return ManPages{base.BaseBuilder{o, id}} 54 }