package rosa import ( "slices" "hakurei.app/internal/pkg" ) // Perl is the perl interpreter used by [MakeMakerHelper]. var Perl = H("perl") func init() { const ( version = "0.4234" checksum = "ZKxEFG4hE1rqZt52zBL2LRZBMkYzhjb5-cTBXcsyA52EbPeeYyVxU176yAea8-Di" ) meta := Metadata{ Name: "perl-Module::Build", Description: "build and install Perl modules", Website: "https://metacpan.org/release/Module-Build", Version: version, Dependencies: P{ Perl, }, } native.MustRegister(meta.Name, func(t Toolchain) (*Metadata, pkg.Artifact) { return &meta, t.New(meta.Name, 0, t.Append(nil, Perl, ), nil, nil, ` cd /usr/src/Module-Build perl Build.PL --prefix=/system ./Build build ./Build test ./Build install --destdir=/work `, pkg.Path(AbsUsrSrc.Append("Module-Build"), true, t.NewPatchedSource( meta.Name, version, newFromCPAN( "LEONT", "Module-Build", version, checksum, ), false, ))) }) } // MakeMakerHelper is the [Perl] MakeMaker helper. type MakeMakerHelper struct { // Whether to skip the check target. SkipCheck bool } // extra returns perl. func (*MakeMakerHelper) extra(int) P { return P{Perl, Make} } // wantsChmod returns true. func (*MakeMakerHelper) wantsChmod() bool { return true } // wantsWrite returns true. func (*MakeMakerHelper) wantsWrite() bool { return true } // scriptEarly is a noop. func (*MakeMakerHelper) scriptEarly() string { return "" } // createDir returns false. func (*MakeMakerHelper) createDir() bool { return false } // wantsDir returns the zero value. func (*MakeMakerHelper) wantsDir() string { return "" } // script generates Makefile.PL-based build and test commands. func (attr *MakeMakerHelper) script(t Toolchain, _ string) string { if attr == nil { attr = new(MakeMakerHelper) } script := `perl Makefile.PL \ PREFIX=/system make \ ` + jobsFlagE if !attr.SkipCheck && t.opts&OptSkipCheck == 0 { script += ` make \ ` + jobsFlagE + ` \ test ` } script += "make DESTDIR=/work install\n" return script } // newViaPerlMakeMaker installs a perl module via Makefile.PL. func (t Toolchain) newViaPerlMakeMaker( name, version string, source pkg.Artifact, patches []KV, extra ...ArtifactH, ) pkg.Artifact { return t.NewPackage("perl-"+name, version, source, &PackageAttr{ Patches: patches, }, (*MakeMakerHelper)(nil), slices.Concat(extra, P{ Perl, })...) }