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  }