From 1acb5b010507dd2246b77b8c856612b86cb2eda4 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Thu, 21 May 2026 15:02:53 +0900 Subject: [PATCH] internal/rosa: extra inputs in alternative path This works around particularly unwieldy build systems. Signed-off-by: Ophestra --- internal/rosa/azalea/evaluate.go | 3 +++ internal/rosa/state.go | 16 ++++++++++++++-- 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 {