aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-02-24 22:35:00 +0900
committerOphestra <cat@gensokyo.uk>2026-02-24 23:09:55 +0900
commitf7f80f95b9df0e2d9fb0ad60ef10b6043616528c (patch)
tree0b1c32eb277c58acc8cceb363f9c92c4d5cf21ef
parent6ea6c794fbbc4c38b9d723ead17959c90eb47e95 (diff)
internal/rosa/perl: various perl module artifacts
This change includes helpers for both Makefile.PL and Build.PL as well as various modules. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--internal/rosa/all.go20
-rw-r--r--internal/rosa/perl.go198
2 files changed, 217 insertions, 1 deletions
diff --git a/internal/rosa/all.go b/internal/rosa/all.go
index 381d887b..bc1a8ca6 100644
--- a/internal/rosa/all.go
+++ b/internal/rosa/all.go
@@ -73,6 +73,16 @@ const (
Packaging
Patch
Perl
+ PerlLocaleGettext
+ PerlMIMECharset
+ PerlModuleBuild
+ PerlPodParser
+ PerlSGMLS
+ PerlTermReadKey
+ PerlTextCharWidth
+ PerlTextWrapI18N
+ PerlUnicodeGCString
+ PerlYAMLTiny
PkgConfig
Pluggy
Procps
@@ -199,6 +209,16 @@ func ResolveName(name string) (p PArtifact, ok bool) {
"packaging": Packaging,
"patch": Patch,
"perl": Perl,
+ "Locale::gettext": PerlLocaleGettext,
+ "MIME::Charset": PerlMIMECharset,
+ "Module::Build": PerlModuleBuild,
+ "Pod::Parser": PerlPodParser,
+ "SGMLS": PerlSGMLS,
+ "Term::ReadKey": PerlTermReadKey,
+ "Text::CharWidth": PerlTextCharWidth,
+ "Text::WrapI18N": PerlTextWrapI18N,
+ "Unicode::GCString": PerlUnicodeGCString,
+ "YAML::Tiny": PerlYAMLTiny,
"pkg-config": PkgConfig,
"pluggy": Pluggy,
"procps": Procps,
diff --git a/internal/rosa/perl.go b/internal/rosa/perl.go
index ef8d6968..e5b4a468 100644
--- a/internal/rosa/perl.go
+++ b/internal/rosa/perl.go
@@ -1,6 +1,10 @@
package rosa
-import "hakurei.app/internal/pkg"
+import (
+ "slices"
+
+ "hakurei.app/internal/pkg"
+)
func (t Toolchain) newPerl() pkg.Artifact {
const (
@@ -37,3 +41,195 @@ make \
)))
}
func init() { artifactsF[Perl] = Toolchain.newPerl }
+
+// newViaPerlModuleBuild installs a perl module via Build.PL.
+func (t Toolchain) newViaPerlModuleBuild(
+ name, version string,
+ source pkg.Artifact,
+ patches [][2]string,
+ extra ...pkg.Artifact,
+) pkg.Artifact {
+ if name == "" || version == "" {
+ panic("names must be non-empty")
+ }
+ return t.New("perl-"+name, 0, slices.Concat(extra, []pkg.Artifact{
+ t.Load(Perl),
+ }), nil, nil, `
+cd /usr/src/`+name+`
+perl Build.PL --prefix=/system
+./Build build
+./Build test
+./Build install --destdir=/work
+`, pkg.Path(AbsUsrSrc.Append(name), true, t.NewPatchedSource(
+ "perl-"+name, version, source, false, patches...,
+ )))
+}
+
+func (t Toolchain) newPerlModuleBuild() pkg.Artifact {
+ const (
+ version = "0.4234"
+ checksum = "ZKxEFG4hE1rqZt52zBL2LRZBMkYzhjb5-cTBXcsyA52EbPeeYyVxU176yAea8-Di"
+ )
+ return t.newViaPerlModuleBuild("Module-Build", version, pkg.NewHTTPGetTar(
+ nil, "https://cpan.metacpan.org/authors/id/L/LE/LEONT/"+
+ "Module-Build-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ ), nil)
+}
+func init() { artifactsF[PerlModuleBuild] = Toolchain.newPerlModuleBuild }
+
+// newViaPerlMakeMaker installs a perl module via Makefile.PL.
+func (t Toolchain) newViaPerlMakeMaker(
+ name, version string,
+ source pkg.Artifact,
+ patches [][2]string,
+ extra ...pkg.Artifact,
+) pkg.Artifact {
+ return t.NewViaMake("perl-"+name, version, t.NewPatchedSource(
+ "perl-"+name, version, source, false, patches...,
+ ), &MakeAttr{
+ Writable: true,
+ OmitDefaults: true,
+ SkipConfigure: true,
+ InPlace: true,
+
+ ScriptEarly: `
+cd /usr/src/perl-` + name + `
+perl Makefile.PL PREFIX=/system
+`,
+ CheckName: "test",
+ }, slices.Concat(extra, []pkg.Artifact{
+ t.Load(Perl),
+ })...)
+}
+
+func (t Toolchain) newPerlLocaleGettext() pkg.Artifact {
+ const (
+ version = "1.07"
+ checksum = "cFq4BKFD1MWSoa7lsrPjpdo9kzPqd0jlRcBFUyL1L1isw8m3D_Sge_ff0MAu_9J3"
+ )
+ return t.newViaPerlMakeMaker("Locale::gettext", version, pkg.NewHTTPGetTar(
+ nil, "https://cpan.metacpan.org/authors/id/P/PV/PVANDRY/"+
+ "Locale-gettext-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ ), nil)
+}
+func init() { artifactsF[PerlLocaleGettext] = Toolchain.newPerlLocaleGettext }
+
+func (t Toolchain) newPerlPodParser() pkg.Artifact {
+ const (
+ version = "1.67"
+ checksum = "RdURu9mOfExk_loCp6abxlcQV3FycSNbTqhRS9i6JUqnYfGGEgercK30g0gjYyqe"
+ )
+ return t.newViaPerlMakeMaker("Pod::Parser", version, pkg.NewHTTPGetTar(
+ nil, "https://cpan.metacpan.org/authors/id/M/MA/MAREKR/"+
+ "Pod-Parser-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ ), nil)
+}
+func init() { artifactsF[PerlPodParser] = Toolchain.newPerlPodParser }
+
+func (t Toolchain) newPerlSGMLS() pkg.Artifact {
+ const (
+ version = "1.1"
+ checksum = "aZijn4MUqD-wfyZgdcCruCwl4SgDdu25cNmJ4_UvdAk9a7uz4gzMQdoeB6DQ6QOy"
+ )
+ return t.newViaPerlMakeMaker("SGMLS", version, pkg.NewHTTPGetTar(
+ nil, "https://cpan.metacpan.org/authors/id/R/RA/RAAB/"+
+ "SGMLSpm-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ ), nil)
+}
+func init() { artifactsF[PerlSGMLS] = Toolchain.newPerlSGMLS }
+
+func (t Toolchain) newPerlTermReadKey() pkg.Artifact {
+ const (
+ version = "2.38"
+ checksum = "qerL8Xo7kD0f42PZoiEbmE8Roc_S9pOa27LXelY4DN_0UNy_u5wLrGHI8utNlaiI"
+ )
+ return t.newViaPerlMakeMaker("Term::ReadKey", version, pkg.NewHTTPGetTar(
+ nil, "https://cpan.metacpan.org/authors/id/J/JS/JSTOWE/"+
+ "TermReadKey-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ ), nil)
+}
+func init() { artifactsF[PerlTermReadKey] = Toolchain.newPerlTermReadKey }
+
+func (t Toolchain) newPerlTextCharWidth() pkg.Artifact {
+ const (
+ version = "0.04"
+ checksum = "G2p5RHU4_HiZ23ZusBA_enTlVMxz0J4esUx4CGcOPhY6xYTbp-aXWRN6lYZpzBw2"
+ )
+ return t.newViaPerlMakeMaker("Text::CharWidth", version, pkg.NewHTTPGetTar(
+ nil, "https://cpan.metacpan.org/authors/id/K/KU/KUBOTA/"+
+ "Text-CharWidth-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ ), nil)
+}
+func init() { artifactsF[PerlTextCharWidth] = Toolchain.newPerlTextCharWidth }
+
+func (t Toolchain) newPerlTextWrapI18N() pkg.Artifact {
+ const (
+ version = "0.06"
+ checksum = "Vmo89qLgxUqyQ6QmWJVqu60aQAUjrNKRjFQSXGnvClxofzRjiCa6idzPgJ4VkixM"
+ )
+ return t.newViaPerlMakeMaker("Text::WrapI18N", version, pkg.NewHTTPGetTar(
+ nil, "https://cpan.metacpan.org/authors/id/K/KU/KUBOTA/"+
+ "Text-WrapI18N-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ ), nil,
+ t.Load(PerlTextCharWidth),
+ )
+}
+func init() { artifactsF[PerlTextWrapI18N] = Toolchain.newPerlTextWrapI18N }
+
+func (t Toolchain) newPerlMIMECharset() pkg.Artifact {
+ const (
+ version = "1.013.1"
+ checksum = "Ou_ukcrOa1cgtE3mptinb-os3bdL1SXzbRDFZQF3prrJj-drc3rp_huay7iDLJol"
+ )
+ return t.newViaPerlMakeMaker("MIME::Charset", version, pkg.NewHTTPGetTar(
+ nil, "https://cpan.metacpan.org/authors/id/N/NE/NEZUMI/"+
+ "MIME-Charset-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ ), nil)
+}
+func init() { artifactsF[PerlMIMECharset] = Toolchain.newPerlMIMECharset }
+
+func (t Toolchain) newPerlUnicodeGCString() pkg.Artifact {
+ const (
+ version = "2019.001"
+ checksum = "ZHVkh7EDgAUHnTpvXsnPAuWpgNoBImtY_9_8TIbo2co_WgUwEb0MtXPhI8pAZ5OH"
+ )
+ return t.newViaPerlMakeMaker("Unicode::GCString", version, pkg.NewHTTPGetTar(
+ nil, "https://cpan.metacpan.org/authors/id/N/NE/NEZUMI/"+
+ "Unicode-LineBreak-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ ), nil,
+ t.Load(PerlMIMECharset),
+ )
+}
+func init() { artifactsF[PerlUnicodeGCString] = Toolchain.newPerlUnicodeGCString }
+
+func (t Toolchain) newPerlYAMLTiny() pkg.Artifact {
+ const (
+ version = "1.76"
+ checksum = "V1MV4KPym1LxSw8CRXqPR3K-l1hGHbT5Ob4t-9xju6R9X_CWyw6hI8wsMaNdHdBY"
+ )
+ return t.newViaPerlMakeMaker("YAML::Tiny", version, pkg.NewHTTPGetTar(
+ nil, "https://cpan.metacpan.org/authors/id/E/ET/ETHER/"+
+ "YAML-Tiny-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ ), nil)
+}
+func init() { artifactsF[PerlYAMLTiny] = Toolchain.newPerlYAMLTiny }