github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/engine/builder/i18n/msgfmt.go (about)

     1  package i18n
     2  
     3  import (
     4  	"github.com/metux/go-metabuild/engine/builder/base"
     5  	"github.com/metux/go-metabuild/spec"
     6  	"github.com/metux/go-metabuild/spec/target"
     7  	"github.com/metux/go-metabuild/util"
     8  	"github.com/metux/go-metabuild/util/fileutil"
     9  )
    10  
    11  type I18nMsgfmt struct {
    12  	base.BaseBuilder
    13  }
    14  
    15  // FIXME: scan for linguas
    16  func (b I18nMsgfmt) JobRun() error {
    17  	linguas := b.RequiredEntryStrList(target.KeyI18nLinguas)
    18  	podir := b.RequiredEntryStr(target.KeyI18nPoDir)
    19  	subdir := b.EntryStr(target.KeySourceDir)
    20  	inSuffix := b.RequiredEntryStr(target.KeySourceSuffix)
    21  	outSuffix := b.RequiredEntryStr(target.KeyOutputSuffix)
    22  	installdir := b.InstallDir()
    23  	typ := "--" + b.RequiredEntryStr(target.KeyI18nType)
    24  
    25  	perm := b.InstallPerm()
    26  
    27  	// write linguas file
    28  	util.ErrPanicf(fileutil.WriteFileLines(podir+"/LINGUAS", linguas), "failed writing LINGUAS file")
    29  
    30  	tmpdir := b.BuildConf.BuildTempDir(string(b.Type()))
    31  
    32  	for _, item := range b.FeaturedStrList(target.KeySource) {
    33  		infile := fileutil.MkPath(subdir, item+inSuffix)
    34  		tmpfile := fileutil.MkPath(tmpdir, item+inSuffix)
    35  		outfile := fileutil.MkPath(tmpdir, item+outSuffix)
    36  
    37  		// need to fix intltool specific syntax
    38  		lines := fileutil.ReadLines(infile)
    39  		for idx, l := range lines {
    40  			if len(l) > 0 && l[0] == '_' {
    41  				lines[idx] = l[1:]
    42  			}
    43  		}
    44  
    45  		fileutil.WriteFileLines(tmpfile, lines)
    46  
    47  		b.ExecAbort(append(b.BuilderCmd(), typ, "-d", podir, "--template", tmpfile, "-o", outfile), "")
    48  
    49  		b.InstallPkgFile(outfile, installdir, perm)
    50  	}
    51  	return nil
    52  }
    53  
    54  func MakeI18nMsgfmt(o spec.TargetObject, id string) I18nMsgfmt {
    55  	return I18nMsgfmt{base.BaseBuilder{o, id}}
    56  }