package rosa import ( "slices" "hakurei.app/internal/pkg" ) var _perl = H("perl") // 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, })...) }