forked from rosa/hakurei
105 lines
2.3 KiB
Go
105 lines
2.3 KiB
Go
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,
|
|
})...)
|
|
}
|