github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/engine/builder/c/library_pkgconfig.go (about) 1 package c 2 3 import ( 4 "strings" 5 6 "github.com/metux/go-metabuild/spec/target" 7 "github.com/metux/go-metabuild/util/compiler" 8 ) 9 10 type BuilderCLibraryPkgConfig struct { 11 BaseCBuilder 12 } 13 14 func (b BuilderCLibraryPkgConfig) JobRun() error { 15 libname := b.RequiredEntryStr(target.KeyPkgLibname) 16 17 requires := []string{} 18 for _, pi := range b.AllImports() { 19 if !pi.Private { 20 requires = append(requires, pi.PkgSpec) 21 } 22 } 23 24 pkginfo := compiler.PkgConfigInfo{ 25 Name: b.RequiredEntryStr(target.KeyPkgName), 26 Version: b.RequiredEntryStr(target.KeyPkgVersion), 27 Description: b.RequiredEntryStr(target.KeyPkgDescription), 28 SharedLdflags: []string{"-L${sharedlibdir}", "-l" + libname}, 29 SharedCflags: []string{"-I${includedir}"}, /* add cflags ? */ 30 StaticLdflags: []string{"-L${libdir}", "-l" + libname}, 31 StaticCflags: []string{"-I${includedir}"}, /* add cflags ? */ 32 Requires: requires, 33 Variables: map[string]string{ 34 "prefix": b.RequiredEntryStr(target.KeyPkgPrefix), 35 "exec_prefix": b.RequiredEntryStr(target.KeyPkgExecPrefix), 36 "libdir": b.RequiredEntryStr(target.KeyPkgLibdir), 37 "includedir": b.RequiredEntryStr(target.KeyPkgIncludedir), 38 "sharedlibdir": b.RequiredEntryStr(target.KeyPkgSharedLibdir), 39 "archive": b.RequiredEntryStr(target.KeyPkgArchive), 40 }, 41 } 42 43 pcfile := b.RequiredEntryStr(target.KeyFile) 44 45 if err := pkginfo.Write(pcfile); err != nil { 46 return err 47 } 48 49 if b.InstallPkgFileAuto() { 50 // write pkgconf dependencies 51 pkgdeps := []string{} 52 for _, x := range requires { 53 // we may have either "<name>" or "<name> >= <ver>" 54 f := strings.Fields(x) 55 if len(f) < 1 { 56 b.Logf("WARN: empty pkgconfig req line\n") 57 } else if len(f) < 3 { 58 pkgdeps = append(pkgdeps, f[0]) 59 } else { 60 pkgdeps = append(pkgdeps, f[0]+" "+f[2]) 61 } 62 } 63 b.WritePkgMeta(pcfile+".pcdep", strings.Join(pkgdeps, "\n")) 64 } 65 66 return nil 67 }