internal/rosa/perl: Makefile.PL helper

This can be invoked from azalea.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-05-19 03:24:27 +09:00
parent a7877844bf
commit 8092492018
4 changed files with 53 additions and 18 deletions

View File

@@ -7,6 +7,9 @@ import (
"hakurei.app/internal/pkg"
)
// Perl is the perl interpreter used by [MakeMakerHelper].
var Perl = H("perl")
// newViaPerlModuleBuild installs a perl module via Build.PL.
func (t Toolchain) newViaPerlModuleBuild(
name, version string,
@@ -54,6 +57,51 @@ func init() {
})
}
// 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,
@@ -62,22 +110,8 @@ func (t Toolchain) newViaPerlMakeMaker(
extra ...ArtifactH,
) pkg.Artifact {
return t.NewPackage("perl-"+name, version, source, &PackageAttr{
// uses source tree as scratch space
Writable: true,
Chmod: true,
EnterSource: true,
Patches: patches,
}, &MakeHelper{
OmitDefaults: true,
InPlace: true,
ConfigureName: "perl Makefile.PL",
Configure: []KV{
{"PREFIX", "/system"},
},
Check: []string{"test"},
}, slices.Concat(extra, P{
}, (*MakeMakerHelper)(nil), slices.Concat(extra, P{
Perl,
})...)
}