diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-05-19 19:28:18 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-05-19 19:28:18 +0900 |
| commit | 548c96c7ec4a8c7c5abb4df1dac3d4a8671e2171 (patch) | |
| tree | a6f586def327ab9c434bd6ef3a083d3cc1605b88 /internal/rosa/rosa.go | |
| parent | 6e8bfa6c4c963ff6c7d417a1cc703e4504e1fb9d (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.go | 50 |
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 + `"` |
