github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/engine/autoconf/probe/distro.go (about) 1 package probe 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/metux/go-metabuild/util/cmd" 8 "github.com/metux/go-metabuild/util/distro" 9 ) 10 11 type ProbeTargetDistro struct { 12 ProbeBase 13 } 14 15 // FIXME: support crosscompile 16 // FIXME: support sysroot 17 func (p ProbeTargetDistro) probeDEB() error { 18 out, err := cmd.RunOutOne([]string{"dpkg", "--print-architecture"}, true) 19 if err != nil { 20 return err 21 } 22 p.BuildConf.SetTargetDistArch(out) 23 return nil 24 } 25 26 // FIXME: support RPM 27 func (p ProbeTargetDistro) probeRPM() error { 28 p.Logf("WARN: RPM not implemented yet") 29 return nil 30 } 31 32 // FIXME: support other OS'es besides Linux 33 // FIXME: check globalconf for supported distros ? (id vs idlike) 34 // FIXME: allow overriding via env 35 func (p ProbeTargetDistro) Probe() error { 36 inf, err := distro.DistroDetect("") 37 if err != nil { 38 return fmt.Errorf("failed to detect distro -- missing /etc/os-release") 39 } 40 41 p.Check.BuildConf.SetTargetDist(strings.ToLower(inf.IdLike)) 42 43 targetdist := p.Check.BuildConf.TargetDistro() 44 pkgfmt := targetdist.PackageFormat() 45 46 switch pkgfmt { 47 case distro.PkgFormatDEB: 48 return p.probeDEB() 49 case distro.PkgFormatRPM: 50 return p.probeRPM() 51 } 52 53 p.Logf("WARN: cant detect packaging format -- %s", pkgfmt) 54 return nil 55 } 56 57 func MakeProbeTargetDistro(chk Check) ProbeTargetDistro { 58 return ProbeTargetDistro{MakeProbeBase(chk)} 59 }