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 }