aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-05-21 15:02:53 +0900
committerOphestra <cat@gensokyo.uk>2026-05-21 15:05:12 +0900
commit1acb5b010507dd2246b77b8c856612b86cb2eda4 (patch)
tree0b199678e21b7fa89a34500539a65e31fffb3f1d
parent40b33f9fc7d171124ac5369312fb8b6a956161ca (diff)
internal/rosa: extra inputs in alternative path
This works around particularly unwieldy build systems. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--internal/rosa/azalea/evaluate.go3
-rw-r--r--internal/rosa/state.go16
2 files changed, 17 insertions, 2 deletions
diff --git a/internal/rosa/azalea/evaluate.go b/internal/rosa/azalea/evaluate.go
index d57f5cac..3658ad6d 100644
--- a/internal/rosa/azalea/evaluate.go
+++ b/internal/rosa/azalea/evaluate.go
@@ -142,6 +142,8 @@ var (
IdentInputs = unique.Make(Ident("inputs"))
// IdentRuntime has the same semantics as [IdentInputs].
IdentRuntime = unique.Make(Ident("runtime"))
+ // IdentExtra has the same semantics as [IdentInputs].
+ IdentExtra = unique.Make(Ident("extra"))
// IdentSource is a special argument in a package declaration where an
// assignment of a [Val] with a single [Ident] passes through the evaluator.
IdentSource = unique.Make(Ident("source"))
@@ -291,6 +293,7 @@ func evaluateAny(d PF, s []Frame, expr, rp any) bool {
for _, special := range [...]unique.Handle[Ident]{
IdentInputs,
IdentRuntime,
+ IdentExtra,
} {
if slices.Contains(names, special) {
if len(names) != 1 || len(arg.V) != 1 || arg.R {
diff --git a/internal/rosa/state.go b/internal/rosa/state.go
index 7cdf7cb5..8c087f32 100644
--- a/internal/rosa/state.go
+++ b/internal/rosa/state.go
@@ -926,7 +926,7 @@ func (ctx *evalContext) pf(
sourceA any
helper Helper
- inputs, runtimes azalea.Array
+ inputs, runtimes, extra azalea.Array
)
if err = args.Apply(map[unique.Handle[azalea.Ident]]any{
k("description"): &meta.Description,
@@ -952,14 +952,17 @@ func (ctx *evalContext) pf(
k("exec"): &helper,
k("inputs"): &inputs,
k("runtime"): &runtimes,
+ k("extra"): &extra,
}); err != nil {
return
}
- var inputsH P
+ var inputsH, extraH P
if inputsH, err = toHandles(inputs); err != nil {
return
} else if meta.Dependencies, err = toHandles(runtimes); err != nil {
return
+ } else if extraH, err = toHandles(extra); err != nil {
+ return
}
meta.ID = int(anitya)
@@ -981,6 +984,15 @@ func (ctx *evalContext) pf(
})
}
+ for _, h := range extraH {
+ _, a := ctx.t.MustLoad(h)
+ attr.Paths = append(attr.Paths, pkg.Path(
+ AbsUsrSrc.Append("extra", h.String()),
+ attr.Writable,
+ a,
+ ))
+ }
+
for _, pair := range files {
var pathname *check.Absolute
if pathname, err = check.NewAbs(pair[0]); err != nil {