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  }