aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/rosa.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-05-19 19:28:18 +0900
committerOphestra <cat@gensokyo.uk>2026-05-19 19:28:18 +0900
commit548c96c7ec4a8c7c5abb4df1dac3d4a8671e2171 (patch)
treea6f586def327ab9c434bd6ef3a083d3cc1605b88 /internal/rosa/rosa.go
parent6e8bfa6c4c963ff6c7d417a1cc703e4504e1fb9d (diff)
internal/rosa/package: migrate make
This also introduces the generic helper for unusual build scripts. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/rosa/rosa.go')
-rw-r--r--internal/rosa/rosa.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/internal/rosa/rosa.go b/internal/rosa/rosa.go
index 44a463af..584678f5 100644
--- a/internal/rosa/rosa.go
+++ b/internal/rosa/rosa.go
@@ -544,6 +544,56 @@ cd '/usr/src/` + name + `/'
)
}
+// GenericHelper directly passes build script segments for invocations of
+// one-off build scripts too specific to fit into any other [Helper]
+// implementation, but can still benefit from [Toolchain.NewPackage].
+type GenericHelper struct {
+ // Whether to create and enter a directory in TMPDIR.
+ EnterTemp bool
+
+ // Concatenated for [Toolchain].
+ Build, Check, Install string
+}
+
+var _ Helper = new(GenericHelper)
+
+// extra is a noop.
+func (*GenericHelper) extra(int) P { return nil }
+
+// wantsChmod returns false.
+func (*GenericHelper) wantsChmod() bool { return false }
+
+// wantsWrite returns false.
+func (*GenericHelper) wantsWrite() bool { return false }
+
+// scriptEarly returns the zero value.
+func (*GenericHelper) scriptEarly() string { return "" }
+
+// createDir returns false.
+func (*GenericHelper) createDir() bool { return false }
+
+// wantsDir requests a new directory in TMPDIR, or the source directory otherwise.
+func (attr *GenericHelper) wantsDir() string {
+ if attr != nil && attr.EnterTemp {
+ return `"$(mktemp -d)"`
+ }
+ return ""
+}
+
+// script concatenates specified segments.
+func (attr *GenericHelper) script(t Toolchain, _ string) string {
+ if attr == nil {
+ attr = new(GenericHelper)
+ }
+
+ script := attr.Build
+ if t.opts&OptSkipCheck == 0 {
+ script += attr.Check
+ }
+ script += attr.Install
+ return script
+}
+
const (
// jobsE is expression for preferred job count set by [pkg].
jobsE = `"$` + pkg.EnvJobs + `"`