diff options
136 files changed, 749 insertions, 707 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..86dded4b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,11 @@ +# Contributing to Rosa OS + +## No LLM / AI policy + +Use of so-called generative AI/LLMs is strictly forbidden +for **all** contributions: + +* Patches, in any form (merge requests, email etc) +* Bug reports +* Comments, on both the issue and pull request trackers +* **Everything**, really diff --git a/cmd/app/lock.go b/cmd/app/lock.go index 5a22efba..88068381 100644 --- a/cmd/app/lock.go +++ b/cmd/app/lock.go @@ -6,6 +6,7 @@ import ( "os" "strconv" "strings" + "syscall" "hakurei.app/check" "hakurei.app/fhs" @@ -57,7 +58,7 @@ func informTemplate(base *check.Absolute, name string, mutable bool) (func() err var s hst.State for eh := range entries { s = hst.State{} - if _, err := eh.Load(&s); err != nil { + if _, err := eh.Load(&s, syscall.Kill); err != nil { return nil, err } diff --git a/cmd/dist/VERSION b/cmd/dist/VERSION index a9e3e23c..f10bec9e 100644 --- a/cmd/dist/VERSION +++ b/cmd/dist/VERSION @@ -1 +1 @@ -v0.4.7 +v0.4.8 diff --git a/cmd/hakurei/command.go b/cmd/hakurei/command.go index 374d521c..76004d4f 100644 --- a/cmd/hakurei/command.go +++ b/cmd/hakurei/command.go @@ -351,7 +351,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr if !flagNoStore { var sc hst.Paths env.CopyPaths().Copy(&sc, new(outcome.Hsu).MustID(nil)) - entry = tryIdentifier(msg, name, outcome.NewStore(&sc)) + entry = tryIdentifier(msg, syscall.Kill, name, outcome.NewStore(&sc)) } if entry == nil { @@ -380,7 +380,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr var sc hst.Paths env.CopyPaths().Copy(&sc, new(outcome.Hsu).MustID(nil)) - entry := tryIdentifier(msg, args[0], outcome.NewStore(&sc)) + entry := tryIdentifier(msg, syscall.Kill, args[0], outcome.NewStore(&sc)) if entry == nil { log.Fatalf("%q does not match any active instance", args[0]) } @@ -395,7 +395,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr c.NewCommand("ps", "List active instances", func(args []string) error { var sc hst.Paths env.CopyPaths().Copy(&sc, new(outcome.Hsu).MustID(nil)) - printPs(msg, os.Stdout, time.Now().UTC(), outcome.NewStore(&sc), flagShort, flagJSON) + printPs(msg, syscall.Kill, os.Stdout, time.Now().UTC(), outcome.NewStore(&sc), flagShort, flagJSON) return errSuccess }).Flag(&flagShort, "short", command.BoolFlag(false), "Print instance id") } diff --git a/cmd/hakurei/parse.go b/cmd/hakurei/parse.go index 31d0dfa6..09721fad 100644 --- a/cmd/hakurei/parse.go +++ b/cmd/hakurei/parse.go @@ -99,7 +99,12 @@ func shortIdentifierString(s string) string { // tryIdentifier attempts to match [hst.State] from a [hex] representation of // [hst.ID] or a prefix of its lower half. -func tryIdentifier(msg message.Msg, name string, s *store.Store) *hst.State { +func tryIdentifier( + msg message.Msg, + kill store.KillFunc, + name string, + s *store.Store, +) *hst.State { const ( likeShort = 1 << iota likeFull @@ -145,7 +150,7 @@ func tryIdentifier(msg message.Msg, name string, s *store.Store) *hst.State { if strings.HasPrefix(eh.ID.String()[len(hst.ID{}):], name) { var entry hst.State - if _, err := eh.Load(&entry); err != nil { + if _, err := eh.Load(&entry, kill); err != nil { msg.GetLogger().Println(getMessage("cannot load state entry:", err)) continue } @@ -168,7 +173,7 @@ func tryIdentifier(msg message.Msg, name string, s *store.Store) *hst.State { if eh.ID == likelyID { var entry hst.State - if _, err := eh.Load(&entry); err != nil { + if _, err := eh.Load(&entry, kill); err != nil { msg.GetLogger().Println(getMessage("cannot load state entry:", err)) continue } diff --git a/cmd/hakurei/parse_test.go b/cmd/hakurei/parse_test.go index 1a574966..6f8a2299 100644 --- a/cmd/hakurei/parse_test.go +++ b/cmd/hakurei/parse_test.go @@ -108,7 +108,7 @@ func TestTryIdentifier(t *testing.T) { t.Run(tc.name, func(t *testing.T) { t.Parallel() - got := tryIdentifier(msg, tc.s, store.New(base)) + got := tryIdentifier(msg, nil, tc.s, store.New(base)) if !reflect.DeepEqual(got, tc.want) { t.Errorf("tryIdentifier: %#v, want %#v", got, tc.want) } diff --git a/cmd/hakurei/print.go b/cmd/hakurei/print.go index 780dc55b..2ac626e7 100644 --- a/cmd/hakurei/print.go +++ b/cmd/hakurei/print.go @@ -170,7 +170,14 @@ func printShowInstance( } // printPs writes a representation of active instances to output. -func printPs(msg message.Msg, output io.Writer, now time.Time, s *store.Store, short, flagJSON bool) { +func printPs( + msg message.Msg, + kill store.KillFunc, + output io.Writer, + now time.Time, + s *store.Store, + short, flagJSON bool, +) { f := func(a func(eh *store.EntryHandle)) { entries, copyError := s.All() for eh := range entries { @@ -184,7 +191,7 @@ func printPs(msg message.Msg, output io.Writer, now time.Time, s *store.Store, s if short { // short output requires identifier only var identifiers []*hst.ID f(func(eh *store.EntryHandle) { - if _, err := eh.Load(nil); err != nil { // passes through decode error + if _, err := eh.Load(nil, kill); err != nil { // passes through decode error msg.GetLogger().Println(getMessage("cannot validate state entry header:", err)) return } @@ -206,7 +213,7 @@ func printPs(msg message.Msg, output io.Writer, now time.Time, s *store.Store, s var instances []*hst.State f(func(eh *store.EntryHandle) { var state hst.State - if _, err := eh.Load(&state); err != nil { // passes through decode error + if _, err := eh.Load(&state, kill); err != nil { // passes through decode error msg.GetLogger().Println(getMessage("cannot load state entry:", err)) return } diff --git a/cmd/hakurei/print_test.go b/cmd/hakurei/print_test.go index a6e213c2..310fc885 100644 --- a/cmd/hakurei/print_test.go +++ b/cmd/hakurei/print_test.go @@ -770,7 +770,7 @@ func TestPrintPs(t *testing.T) { var printBuf, logBuf bytes.Buffer msg := message.New(log.New(&logBuf, "check: ", 0)) msg.SwapVerbose(true) - printPs(msg, &printBuf, testTime, s, tc.short, tc.json) + printPs(msg, nil, &printBuf, testTime, s, tc.short, tc.json) if got := printBuf.String(); got != tc.want { t.Errorf("printPs:\n%s\nwant\n%s", got, tc.want) return diff --git a/cmd/mbf/info.go b/cmd/mbf/info.go index a4bc7c02..d8691f60 100644 --- a/cmd/mbf/info.go +++ b/cmd/mbf/info.go @@ -56,9 +56,9 @@ func commandInfo( mustPrintln("website : " + strings.TrimSuffix(meta.Website, "/")) } - if len(meta.Dependencies) > 0 { + if len(meta.Runtimes) > 0 { mustPrint("depends on :") - for _, d := range meta.Dependencies { + for _, d := range meta.Runtimes { _meta, _ := rosa.MustLoad(d) s := _meta.Name if _meta.Version != rosa.Unversioned { diff --git a/internal/outcome/process.go b/internal/outcome/process.go index 614b22fc..599af8f2 100644 --- a/internal/outcome/process.go +++ b/internal/outcome/process.go @@ -303,7 +303,7 @@ func (k *outcome) main(msg message.Msg, identifierFd int) { ) for eh := range entries { var et hst.Enablements - if et, err = eh.Load(nil); err != nil { + if et, err = eh.Load(nil, syscall.Kill); err != nil { perror(err, "read state header of instance "+eh.ID.String()) } else { rt |= et diff --git a/internal/rosa/azalea/evaluate.go b/internal/rosa/azalea/evaluate.go index b35a056a..cb5e8d12 100644 --- a/internal/rosa/azalea/evaluate.go +++ b/internal/rosa/azalea/evaluate.go @@ -200,12 +200,15 @@ func (e EvaluationError) Error() string { } var ( - // IdentInputs is a special array argument in a package declaration whose + + // IdentTools is a special array argument in a package declaration whose // values of [Ident] are kept as is when passed to a [PF]. + IdentTools = unique.Make(Ident("tools")) + // IdentInputs has the same semantics as [IdentTools]. IdentInputs = unique.Make(Ident("inputs")) - // IdentRuntime has the same semantics as [IdentInputs]. + // IdentRuntime has the same semantics as [IdentTools]. IdentRuntime = unique.Make(Ident("runtime")) - // IdentExtra has the same semantics as [IdentInputs]. + // IdentExtra has the same semantics as [IdentTools]. 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. @@ -356,6 +359,7 @@ func evaluateAny(d PF, s []Frame, expr, rp any) bool { farg := FArg{R: arg.R} if e.Package { for _, special := range [...]unique.Handle[Ident]{ + IdentTools, IdentInputs, IdentRuntime, IdentExtra, @@ -365,7 +369,13 @@ func evaluateAny(d PF, s []Frame, expr, rp any) bool { panic(ErrInvalidSpecial) } farg.K = names[0] - if err := storeE(&farg.V, arg.V[0]); err != nil { + + v := arg.V[0] + if p, _ok := v.(Ident); _ok && p == "nil" { + v = Nil{} + } + + if err := storeE(&farg.V, v); err != nil { panic(err) } fargs = append(fargs, farg) diff --git a/internal/rosa/cmake.go b/internal/rosa/cmake.go index 8a67f4bc..f9e5e38c 100644 --- a/internal/rosa/cmake.go +++ b/internal/rosa/cmake.go @@ -34,14 +34,17 @@ type CMakeHelper struct { var _ Helper = new(CMakeHelper) -// extra returns the cmake handle alongside either ninja or make. -func (attr *CMakeHelper) extra() P { +// tools returns the cmake handle alongside either ninja or make. +func (attr *CMakeHelper) tools() P { if attr != nil && attr.Make { return P{_cmake, _make} } return P{_cmake, _ninja} } +// inputs is a noop. +func (*CMakeHelper) inputs() P { return nil } + // wantsChmod returns false. func (*CMakeHelper) wantsChmod() bool { return false } diff --git a/internal/rosa/llvm.go b/internal/rosa/llvm.go index 0882e7d8..6d1dcf0b 100644 --- a/internal/rosa/llvm.go +++ b/internal/rosa/llvm.go @@ -54,7 +54,7 @@ func init() { Description: "a collection of modular and reusable compiler and toolchain technologies", Website: "https://llvm.org", - Dependencies: P{ + Runtimes: P{ _zlib, _zstd, _musl, diff --git a/internal/rosa/make.go b/internal/rosa/make.go index 710225a2..1c0e52d6 100644 --- a/internal/rosa/make.go +++ b/internal/rosa/make.go @@ -51,8 +51,8 @@ type MakeHelper struct { var _ Helper = new(MakeHelper) -// extra returns make and other optional dependencies. -func (attr *MakeHelper) extra() P { +// tools returns make and other optional dependencies. +func (attr *MakeHelper) tools() P { if attr == nil || !attr.OmitDefaults { return P{ _make, @@ -64,6 +64,9 @@ func (attr *MakeHelper) extra() P { return P{_make} } +// inputs is a noop. +func (*MakeHelper) inputs() P { return nil } + // wantsChmod returns whether the build system needs to be generated. func (attr *MakeHelper) wantsChmod() bool { return attr != nil && attr.Generate != "" diff --git a/internal/rosa/meson.go b/internal/rosa/meson.go index 65e9fde9..97262fbb 100644 --- a/internal/rosa/meson.go +++ b/internal/rosa/meson.go @@ -34,14 +34,17 @@ type MesonHelper struct { var _ Helper = new(MesonHelper) -// extra returns hardcoded meson runtime dependencies. -func (attr *MesonHelper) extra() P { +// tools returns hardcoded meson runtime dependencies. +func (attr *MesonHelper) tools() P { if !attr.isPython() { return P{_muon} } return P{_meson} } +// inputs is a noop. +func (*MesonHelper) inputs() P { return nil } + // wantsChmod returns false. func (*MesonHelper) wantsChmod() bool { return false } diff --git a/internal/rosa/package/acl/package.az b/internal/rosa/package/acl/package.az index 6908ff88..0e06f227 100644 --- a/internal/rosa/package/acl/package.az +++ b/internal/rosa/package/acl/package.az @@ -17,11 +17,8 @@ package attr { populateUsrBin = true; exec = make {}; - inputs = [ - perl, - - kernel-headers, - ]; + tools = [ perl ]; + inputs = [ kernel-headers ]; } package acl { @@ -43,5 +40,4 @@ package acl { }; inputs = [ attr, kernel-headers ]; - runtime = [ attr ]; } diff --git a/internal/rosa/package/argp-standalone.az b/internal/rosa/package/argp-standalone.az index 13433ac8..c8a2943e 100644 --- a/internal/rosa/package/argp-standalone.az +++ b/internal/rosa/package/argp-standalone.az @@ -21,5 +21,6 @@ install -D -m755 libargp.a /work/system/lib/libargp.a `; }; - inputs = [ diffutils ]; + tools = [ diffutils ]; + unlikely = true; } diff --git a/internal/rosa/package/awk.az b/internal/rosa/package/awk.az index 2b2dc4a4..b572f7a4 100644 --- a/internal/rosa/package/awk.az +++ b/internal/rosa/package/awk.az @@ -23,7 +23,7 @@ package awk { install = "install -vD a.out /work/system/bin/awk"; }; - inputs = [ + tools = [ m4, byacc, diffutils, diff --git a/internal/rosa/package/bison.az b/internal/rosa/package/bison.az index 67aed088..9a75032e 100644 --- a/internal/rosa/package/bison.az +++ b/internal/rosa/package/bison.az @@ -26,5 +26,5 @@ package bison { ]; }; - inputs = [ m4 ]; + tools = [ m4 ]; } diff --git a/internal/rosa/package/buildcatrust.az b/internal/rosa/package/buildcatrust.az index 362ec13c..4c9f94ff 100644 --- a/internal/rosa/package/buildcatrust.az +++ b/internal/rosa/package/buildcatrust.az @@ -15,5 +15,4 @@ package buildcatrust { exec = pip {}; inputs = [ python-flit-core ]; - runtime = [ python ]; } diff --git a/internal/rosa/package/cairo.az b/internal/rosa/package/cairo.az index 46102c19..7ffbb304 100644 --- a/internal/rosa/package/cairo.az +++ b/internal/rosa/package/cairo.az @@ -30,18 +30,9 @@ package cairo { test = false; }; - inputs = [ - awk, - - zlib, - libpng, - fontconfig, - freetype, - pixman, - xcb, - ]; + tools = [ awk ]; - runtime = [ + inputs = [ zlib, libpng, fontconfig, diff --git a/internal/rosa/package/check.az b/internal/rosa/package/check.az index 8b4d6268..2598483f 100644 --- a/internal/rosa/package/check.az +++ b/internal/rosa/package/check.az @@ -16,5 +16,5 @@ package check { }; }; - inputs = [ coreutils ]; + tools = [ coreutils ]; } diff --git a/internal/rosa/package/connman/package.az b/internal/rosa/package/connman/package.az index e4b09aa5..0d8eb5af 100644 --- a/internal/rosa/package/connman/package.az +++ b/internal/rosa/package/connman/package.az @@ -16,22 +16,17 @@ package connman { generate = "./bootstrap"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, - - dbus, - iptables, - gnutls, - readline, - kernel-headers, ]; - runtime = [ + inputs = [ dbus, iptables, gnutls, readline, + kernel-headers, ]; } diff --git a/internal/rosa/package/cryptsetup.az b/internal/rosa/package/cryptsetup.az index 94a9309e..0886d222 100644 --- a/internal/rosa/package/cryptsetup.az +++ b/internal/rosa/package/cryptsetup.az @@ -20,24 +20,19 @@ package cryptsetup { }; }; - inputs = [ + tools = [ bash, gettext, coreutils, - - popt, - lvm2, - json-c, - e2fsprogs, - argp-standalone, - kernel-headers, ]; - runtime = [ + inputs = [ popt, lvm2, json-c, e2fsprogs, openssl, + argp-standalone, + kernel-headers, ]; } diff --git a/internal/rosa/package/curl.az b/internal/rosa/package/curl.az index eee21bdd..a54deccc 100644 --- a/internal/rosa/package/curl.az +++ b/internal/rosa/package/curl.az @@ -3,10 +3,10 @@ package curl { website = "https://curl.se"; anitya = 381; - version# = "8.21.0"; + version# = "8.22.0"; source = remoteTar { url = "https://curl.se/download/curl-"+version+".tar.bz2"; - checksum = "lJSm8bVjS0OmsarEdbvejdQdvXsb7yGarlr6oMtA9FW1EXOga8zZxa1LPtfaq_qX"; + checksum = "zeIqlmHElDa3IPLZq86ICRxn1YoiXlNCdx30BuahcUToYqjSuyvu8AtRqbzKH_06"; compress = bzip2; }; @@ -28,17 +28,14 @@ package curl { ]; }; - inputs = [ + tools = [ perl, python, pkg-config, diffutils, - - libpsl, - openssl, ]; - runtime = [ + inputs = [ zlib, zstd, libpsl, diff --git a/internal/rosa/package/dbus.az b/internal/rosa/package/dbus.az index aacf2f81..4d2dd6ec 100644 --- a/internal/rosa/package/dbus.az +++ b/internal/rosa/package/dbus.az @@ -29,11 +29,6 @@ package dbus { glib, libexpat, ]; - - runtime = [ - glib, - libexpat, - ]; } package xdg-dbus-proxy { diff --git a/internal/rosa/package/dtc.az b/internal/rosa/package/dtc.az index e894ad48..62f58560 100644 --- a/internal/rosa/package/dtc.az +++ b/internal/rosa/package/dtc.az @@ -22,7 +22,7 @@ package dtc { }; }; - inputs = [ + tools = [ flex, bison, m4, diff --git a/internal/rosa/package/e2fsprogs.az b/internal/rosa/package/e2fsprogs.az index 5e799de3..833d6e14 100644 --- a/internal/rosa/package/e2fsprogs.az +++ b/internal/rosa/package/e2fsprogs.az @@ -17,12 +17,12 @@ package e2fsprogs { }; }; - inputs = [ + tools = [ perl, gzip, bzip2, diffutils, - - kernel-headers, ]; + + inputs = [ kernel-headers ]; } diff --git a/internal/rosa/package/elfutils/package.az b/internal/rosa/package/elfutils/package.az index 89db25ff..5f35670e 100644 --- a/internal/rosa/package/elfutils/package.az +++ b/internal/rosa/package/elfutils/package.az @@ -27,10 +27,12 @@ package elfutils { check = nil; }; - inputs = [ + tools = [ m4, pkgconf, + ]; + inputs = [ zlib, bzip2, zstd, @@ -39,12 +41,4 @@ package elfutils { musl-obstack, kernel-headers, ]; - - runtime = [ - zlib, - bzip2, - zstd, - musl-fts, - musl-obstack, - ]; } diff --git a/internal/rosa/package/fcft.az b/internal/rosa/package/fcft.az index 51e742fe..55b4b80c 100644 --- a/internal/rosa/package/fcft.az +++ b/internal/rosa/package/fcft.az @@ -19,10 +19,4 @@ package fcft { utf8proc, tllist, ]; - - runtime = [ - pixman, - fontconfig, - utf8proc, - ]; } diff --git a/internal/rosa/package/firmware.az b/internal/rosa/package/firmware.az index a1cc64b3..f04b39e9 100644 --- a/internal/rosa/package/firmware.az +++ b/internal/rosa/package/firmware.az @@ -37,7 +37,7 @@ package firmware { install = "make " + jobsFlagE + " " + loadFlagE + " DESTDIR=/work/system dedup"; }; - inputs = [ + tools = [ parallel, rdfind, zstd, diff --git a/internal/rosa/package/flex.az b/internal/rosa/package/flex.az index 2358b1d3..78bba323 100644 --- a/internal/rosa/package/flex.az +++ b/internal/rosa/package/flex.az @@ -14,5 +14,5 @@ package flex { exec = make {}; - inputs = [ m4 ]; + tools = [ m4 ]; } diff --git a/internal/rosa/package/fontconfig.az b/internal/rosa/package/fontconfig.az index 07c4499e..ad46b158 100644 --- a/internal/rosa/package/fontconfig.az +++ b/internal/rosa/package/fontconfig.az @@ -15,7 +15,7 @@ package fontconfig { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, @@ -23,13 +23,9 @@ package fontconfig { gperf, gzip, python, - - zlib, - libexpat, - freetype, ]; - runtime = [ + inputs = [ zlib, libexpat, freetype, diff --git a/internal/rosa/package/foot.az b/internal/rosa/package/foot.az index e3166db7..90d3cbe3 100644 --- a/internal/rosa/package/foot.az +++ b/internal/rosa/package/foot.az @@ -3,27 +3,23 @@ package foot { website = "https://codeberg.org/dnkl/foot"; anitya = 141611; - version# = "1.27.0"; + version# = "1.28.0"; source = remoteTar { url = "https://codeberg.org/dnkl/foot/releases/download/"+version+ "/foot-"+version+".tar.gz"; - checksum = "22rG3rMuQI8Ae2XTcZgOJ-6AbF7Taex8XpgvD6Fyg1Mn5Va67FfUcK3tRaq61TFg"; + checksum = "w16syUlOAYlsJZ-a4QY9dfu4ph3yFypw05RXocNmTrefghzmT-HhV1O89QPAj5mV"; compress = gzip; }; exec = meson {}; - inputs = [ - ncurses, + tools = [ ncurses ]; + inputs = [ xkbcommon, tllist, fcft, + wayland-protocols, kernel-headers, ]; - - runtime = [ - xkbcommon, - fcft, - ]; } diff --git a/internal/rosa/package/fuse/package.az b/internal/rosa/package/fuse/package.az index 398fe0df..31000e07 100644 --- a/internal/rosa/package/fuse/package.az +++ b/internal/rosa/package/fuse/package.az @@ -26,9 +26,6 @@ package fuse { test = false; }; - inputs = [ - python-pytest, - - kernel-headers, - ]; + tools = [ python-pytest ]; + inputs = [ kernel-headers ]; } diff --git a/internal/rosa/package/gawk/package.az b/internal/rosa/package/gawk/package.az index adb6761b..18215337 100644 --- a/internal/rosa/package/gawk/package.az +++ b/internal/rosa/package/gawk/package.az @@ -19,7 +19,7 @@ package gawk { exec = make {}; - inputs = [ + tools = [ diffutils, util-linux, ]; diff --git a/internal/rosa/package/gcc/package.az b/internal/rosa/package/gcc/package.az index e9a908bc..b6dc9692 100644 --- a/internal/rosa/package/gcc/package.az +++ b/internal/rosa/package/gcc/package.az @@ -12,8 +12,7 @@ package binutils { patches = [ "binutils-remove-unused.patch" ]; exec = make {}; - - inputs = [ bash ]; + tools = [ bash ]; } package gcc { @@ -69,21 +68,15 @@ ln -s system/lib /work/ check = nil; }; - inputs = [ - binutils, + tools = [ binutils ]; - mpc, - zlib, - libucontext, - kernel-headers, - ]; - - runtime = [ + inputs = [ binutils, mpc, zlib, zstd, libucontext, + kernel-headers, ]; } diff --git a/internal/rosa/package/git.az b/internal/rosa/package/git.az index 6eee0d43..07abe88e 100644 --- a/internal/rosa/package/git.az +++ b/internal/rosa/package/git.az @@ -79,23 +79,19 @@ disable_test t7527-builtin-fsmonitor install`; }; - inputs = [ + tools = [ // test suite hangs on mksh bash, diffutils, autoconf, gettext, - - zlib, - curl, - libexpat, - kernel-headers, ]; - runtime = [ + inputs = [ zlib, curl, libexpat, + kernel-headers, ]; } diff --git a/internal/rosa/package/glib/package.az b/internal/rosa/package/glib/package.az index fc0ad64b..14ff0450 100644 --- a/internal/rosa/package/glib/package.az +++ b/internal/rosa/package/glib/package.az @@ -23,16 +23,12 @@ package glib { skipTests = [ "gio" ]; }; - inputs = [ + tools = [ python-packaging, bash, - - pcre2, - libffi, - zlib, ]; - runtime = [ + inputs = [ pcre2, libffi, zlib, diff --git a/internal/rosa/package/glslang.az b/internal/rosa/package/glslang.az index 39674f98..3cbd4fa0 100644 --- a/internal/rosa/package/glslang.az +++ b/internal/rosa/package/glslang.az @@ -21,7 +21,7 @@ package glslang { }; }; - inputs = [ + tools = [ python, bash, diffutils, diff --git a/internal/rosa/package/gnu.az b/internal/rosa/package/gnu.az index b3ed798c..3eb48ab5 100644 --- a/internal/rosa/package/gnu.az +++ b/internal/rosa/package/gnu.az @@ -22,11 +22,8 @@ chmod +w tests/test-c32ispunct.sh && echo '#!/bin/sh' > tests/test-c32ispunct.sh defaults = false; }; - inputs = [ - diffutils, - - kernel-headers, - ]; + tools = [ diffutils ]; + inputs = [ kernel-headers ]; } package autoconf { @@ -51,7 +48,7 @@ package autoconf { ]; }; - inputs = [ + tools = [ m4, perl, bash, @@ -90,7 +87,7 @@ test_disable '#!/bin/sh' t/pr9.sh exec = make {}; - inputs = [ + tools = [ grep, gzip, autoconf, @@ -122,7 +119,7 @@ package libtool { ]; }; - inputs = [ + tools = [ m4, diffutils, ]; @@ -166,12 +163,8 @@ test_disable '#!/bin/sh' testsuite/read-error-stale-errno.sh `; exec = make {}; - - inputs = [ - diffutils, - - kernel-headers, - ]; + tools = [ diffutils ]; + inputs = [ kernel-headers ]; } package diffutils { @@ -248,8 +241,7 @@ test_disable 'int main(){return 0;}' gnulib-tests/test-c32ispunct.c `; exec = make {}; - - inputs = [ diffutils ]; + tools = [ diffutils ]; } package gettext { @@ -283,13 +275,13 @@ touch gettext-tools/autotools/archive.dir.tar exec = make {}; - inputs = [ + tools = [ diffutils, gzip, sed, - - kernel-headers, ]; + + inputs = [ kernel-headers ]; } package findutils { @@ -314,7 +306,7 @@ echo 'int main(){return 0;}' > tests/xargs/test-sigusr.c exec = make {}; - inputs = [ + tools = [ diffutils, sed, ]; @@ -377,12 +369,12 @@ test_disable 'int main(){return 0;}' gnulib-tests/test-lchown.c }; }; - inputs = [ + tools = [ perl, bash, - - kernel-headers, ]; + + inputs = [ kernel-headers ]; } package tar { @@ -413,7 +405,7 @@ package tar { ]; }; - inputs = [ + tools = [ diffutils, gzip, @@ -439,7 +431,7 @@ package texinfo { check = nil; }; - inputs = [ perl ]; + tools = [ perl ]; runtime = [ perl, @@ -461,7 +453,7 @@ package gperf { exec = make {}; - inputs = [ diffutils ]; + tools = [ diffutils ]; } package bc { @@ -482,9 +474,7 @@ package bc { exec = make {}; - inputs = [ - texinfo, - ]; + tools = [ texinfo ]; } package libiconv { @@ -507,17 +497,17 @@ package parallel { website = "https://www.gnu.org/software/parallel"; anitya = 5448; - version# = "20260722"; + version# = "20260822"; source = remoteTar { url = "https://mirrors.kernel.org/gnu/parallel/parallel-"+version+".tar.bz2"; - checksum = "liG9pBSRqUPqDuRXmnJPoVh-G53lDKkkO8GGabSxQnSho4b9BD0EaJDdScgVhnwj"; + checksum = "zf-5ZEpAZ073coMSyOY7NRmXwCRPWvpjbjOMOvirU9fHlU0WWovwss-bAMrh0q_G"; compress = bzip2; }; bin = [ "bash" ]; exec = make {}; - inputs = [ + tools = [ perl, bash, ]; @@ -546,10 +536,7 @@ test_disable 'int main(){return 0;}' tests/test-c32ispunct.c `; exec = make {}; - - inputs = [ - diffutils, - ]; + tools = [ diffutils ]; } package libtasn1 { @@ -587,7 +574,6 @@ package readline { }; inputs = [ ncurses ]; - runtime = [ ncurses ]; } package gmp { @@ -609,7 +595,7 @@ package gmp { exec = make {}; - inputs = [ m4 ]; + tools = [ m4 ]; } package mpfr { @@ -628,7 +614,6 @@ package mpfr { exec = make {}; inputs = [ gmp ]; - runtime = [ gmp ]; } package mpc { @@ -652,13 +637,11 @@ package mpc { generate = "autoreconf -vfi"; }; - inputs = [ + tools = [ automake, libtool, texinfo, - - mpfr, ]; - runtime = [ mpfr ]; + inputs = [ mpfr ]; } diff --git a/internal/rosa/package/gnutls/package.az b/internal/rosa/package/gnutls/package.az index 833b614f..9ab17176 100644 --- a/internal/rosa/package/gnutls/package.az +++ b/internal/rosa/package/gnutls/package.az @@ -40,7 +40,7 @@ echo 'int main(){return 0;}' > tests/mini-dtls-fragments.c }; }; - inputs = [ + tools = [ gzip, automake, libtool, @@ -54,20 +54,15 @@ echo 'int main(){return 0;}' > tests/mini-dtls-fragments.c diffutils, nss-cacert, - libev, - zlib, - zstd, - p11-kit, - nettle, - libunistring, - kernel-headers, ]; - runtime = [ + inputs = [ zlib, zstd, p11-kit, nettle, + libev, libunistring, + kernel-headers, ]; } diff --git a/internal/rosa/package/go/package.az b/internal/rosa/package/go.az index d06720b5..89d3732d 100644 --- a/internal/rosa/package/go/package.az +++ b/internal/rosa/package/go.az @@ -3,13 +3,12 @@ package go { website = "https://go.dev"; anitya = 1227; - version# = "1.27.0"; + version# = "1.27.1"; source = remoteTar { url = "https://go.dev/dl/go"+version+".src.tar.gz"; - checksum = "Ookl2vP6KMfJuxaxX6nXZ1gnL43wZPl5GjpVsrI7IJiB4b3xr1PbnbYIOJ8v5jzG"; + checksum = "Jw7OCTZbixLPF0E2WafFBh6DnxbsElvEg_RsMGkrzAmi0pyJTI3eQqLJsvXlVtbK"; compress = gzip; }; - patches = [ "820480.patch" ]; env = [ "CC=cc", @@ -54,5 +53,5 @@ ln -s \ `; }; - inputs = [ bash, go-bootstrap ]; + tools = [ bash, go-bootstrap ]; } diff --git a/internal/rosa/package/go/820480.patch b/internal/rosa/package/go/820480.patch deleted file mode 100644 index 05459a80..00000000 --- a/internal/rosa/package/go/820480.patch +++ /dev/null @@ -1,24 +0,0 @@ -From fa10bbcce5635dd533ba933252e9dabd8a7f5e2a Mon Sep 17 00:00:00 2001 -From: David Chase <drchase@google.com> -Date: Mon, 24 Aug 2026 15:20:40 -0400 -Subject: [PATCH] simd/archsimd: added PMULL gate on carryless multiply test - -Fixes #80991. - -Change-Id: I637de72acbb338c4c3b0a47f4a5520c33fe81fd2 ---- - -diff --git a/src/simd/archsimd/internal/simd_test/simd_arm64_test.go b/src/simd/archsimd/internal/simd_test/simd_arm64_test.go -index f009488..7836fc8 100644 ---- a/src/simd/archsimd/internal/simd_test/simd_arm64_test.go -+++ b/src/simd/archsimd/internal/simd_test/simd_arm64_test.go -@@ -22,6 +22,9 @@ - } - - func TestClMul(t *testing.T) { -+ if !archsimd.ARM64.PMULL() { -+ t.Skip("no carryless multiply") -+ } - var x = archsimd.LoadUint64x2([]uint64{1, 5}) - var y = archsimd.LoadUint64x2([]uint64{3, 9}) - diff --git a/internal/rosa/package/hakurei.az b/internal/rosa/package/hakurei.az index 24a2a7c9..4e9a8d2c 100644 --- a/internal/rosa/package/hakurei.az +++ b/internal/rosa/package/hakurei.az @@ -2,11 +2,11 @@ package hakurei-source { description = "hakurei source tree"; exclude = true; - version# = "0.4.7"; + version# = "0.4.8"; output = remoteGit { url = "https://git.gensokyo.uk/rosa/hakurei.git"; tag = "v"+version; - checksum = "gQs-fBuPsYjGEBgxe3pSiqa7aMrqUkimi6iyjrhR6YKrOiZLfd4bFwiB9V8k3cKO"; + checksum = "B6aoojyXblZ7eYwdc3Ak3wDbBpu63j8S79Gpiul9Obb8diqzBIJ2qNCgWVH6qLsc"; }; } @@ -61,11 +61,14 @@ mkdir -p /work/system/bin/ `; }; - inputs = [ + tools = [ go, pkgconf, net-tools, + acl, + ]; + inputs = [ libseccomp, acl, fuse, @@ -74,6 +77,8 @@ mkdir -p /work/system/bin/ wayland-protocols, kernel-headers, ]; + + runtime = nil; } package hakurei-dist { @@ -102,11 +107,14 @@ DESTDIR=/work "./${NAME}.sh" `; }; - inputs = [ + tools = [ go, pkgconf, net-tools, + acl, + ]; + inputs = [ libseccomp, acl, fuse, @@ -115,6 +123,8 @@ DESTDIR=/work "./${NAME}.sh" wayland-protocols, kernel-headers, ]; + + runtime = nil; } package earlyinit { @@ -145,5 +155,5 @@ go build -trimpath -v -o /work/ -ldflags="-s -w echo`; }; - inputs = [ go ]; + tools = [ go ]; } diff --git a/internal/rosa/package/harfbuzz.az b/internal/rosa/package/harfbuzz.az index 20b000b7..7e10f0f2 100644 --- a/internal/rosa/package/harfbuzz.az +++ b/internal/rosa/package/harfbuzz.az @@ -23,9 +23,4 @@ package harfbuzz { zlib, cairo, ]; - - runtime = [ - zlib, - cairo, - ]; } diff --git a/internal/rosa/package/hwdata.az b/internal/rosa/package/hwdata.az index b826953c..57bde7e8 100644 --- a/internal/rosa/package/hwdata.az +++ b/internal/rosa/package/hwdata.az @@ -3,11 +3,11 @@ package hwdata { website = "https://github.com/vcrhonek/hwdata"; anitya = 5387; - version# = "0.410"; + version# = "0.411"; source = remoteGitHub { suffix = "vcrhonek/hwdata"; tag = "v"+version; - checksum = "w1fbTz8NR7C6SYOupqTyNZGJHa_cDRAsGs4guZ3LddqlmawgEP_CWFw9-OYFKJ1q"; + checksum = "5YWsZC8NgZShWWHmC66xqEkTJLAUYJoDt8kmstJyLWfsNqAWAhJZGkVUfgqbTv-6"; }; writable = true; @@ -20,4 +20,6 @@ package hwdata { // lspci: Unknown option 'A' (see "lspci --help") check = nil; }; + + unlikely = true; } diff --git a/internal/rosa/package/images/package.az b/internal/rosa/package/images/package.az index 5c67fbaa..631f5622 100644 --- a/internal/rosa/package/images/package.az +++ b/internal/rosa/package/images/package.az @@ -14,7 +14,7 @@ package initramfs-image { "zstd > /work/initramfs.zst"; }; - inputs = [ + tools = [ zstd, gen_init_cpio, ]; @@ -40,5 +40,5 @@ package system-image { build = "mksquashfs /mnt/system /work/system.img"; }; - inputs = [ squashfs-tools ]; + tools = [ squashfs-tools ]; } diff --git a/internal/rosa/package/ipmitool.az b/internal/rosa/package/ipmitool.az index 4a6dd38b..90e6c3c2 100644 --- a/internal/rosa/package/ipmitool.az +++ b/internal/rosa/package/ipmitool.az @@ -30,11 +30,10 @@ package ipmitool { generate = "./bootstrap"; }; - inputs = [ + tools = [ automake, libtool, - - readline, ]; - runtime = [ readline ]; + + inputs = [ readline ]; } diff --git a/internal/rosa/package/iproute2.az b/internal/rosa/package/iproute2.az index 3a5829df..0730e9b3 100644 --- a/internal/rosa/package/iproute2.az +++ b/internal/rosa/package/iproute2.az @@ -3,11 +3,11 @@ package iproute2 { website = "https://wiki.linuxfoundation.org/networking/iproute2"; anitya = 1392; - version# = "7.1.0"; + version# = "7.2.0"; source = remoteTar { url = "https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/"+ "snapshot/iproute2-"+version+".tar.gz"; - checksum = "yc6NdF6GtFUpKtKg6xwF_yxYGyj0eqFQW8RGsgBzKrOiVlE2bpVQlfeZf_ca5wJL"; + checksum = "VECMJeSm-lHWpyJqnI-1CeHFejAgi_mb8LJjMGIx5rqww6AlZii3g_tUGPLu4npo"; compress = gzip; }; @@ -33,23 +33,18 @@ package iproute2 { check = nil; }; - inputs = [ + tools = [ pkgconf, m4, byacc, flex, - - libbpf, - libmnl, - db, - libcap, - kernel-headers, ]; - runtime = [ + inputs = [ libbpf, libmnl, db, libcap, + kernel-headers, ]; } diff --git a/internal/rosa/package/kernel/amd64.config b/internal/rosa/package/kernel/amd64.config index d560bdb8..b52bfbd4 100644 --- a/internal/rosa/package/kernel/amd64.config +++ b/internal/rosa/package/kernel/amd64.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 6.18.47 Kernel Configuration +# Linux/x86 6.18.49 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 23.1.0" CONFIG_GCC_VERSION=0 diff --git a/internal/rosa/package/kernel/arm64.config b/internal/rosa/package/kernel/arm64.config index c8658775..9c6951b7 100644 --- a/internal/rosa/package/kernel/arm64.config +++ b/internal/rosa/package/kernel/arm64.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 6.18.47 Kernel Configuration +# Linux/arm64 6.18.49 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 23.1.0" CONFIG_GCC_VERSION=0 diff --git a/internal/rosa/package/kernel/package.az b/internal/rosa/package/kernel/package.az index e2f6339e..f2be2890 100644 --- a/internal/rosa/package/kernel/package.az +++ b/internal/rosa/package/kernel/package.az @@ -3,11 +3,11 @@ package kernel-source { website = "https://kernel.org"; exclude = true; - version# = "6.18.48"; + version# = "6.18.49"; output = remoteTar { url = "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/"+ "snapshot/linux-"+version+".tar.gz"; - checksum = "XzcqKk0ODA4tTjl5tVQdckuLHVnITGalDH_EIYUC8WHimc7O6bbews-vFRHUK01m"; + checksum = "J0FT9987a7mlYBGcACXWeTsmfScbS8FM_JAG9LLl917UdlcFRP_UDj73yR82bvGR"; compress = gzip; }; } @@ -48,9 +48,11 @@ cat \ amd64 = "uwTZX3iLp6iPsR0-F0Jz2aUviLMMqv4xGQHoKeemo2HrNLD7fDlIDqqYT--i_5HJ"; arm64 = "A9EWzTGEChVLJVm5BP1GzpibdUddXUN2hIjAGkD-KQr5sc6RuEeIQle8VAiAYUqp"; - riscv64 = "IB1oG3tEAN15wjYl8S5ekYXVFYN7-rb3m2f1Kdi58dGqnrIBTG2r1qb1utb5D1lb"; + riscv64 = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; }; - inputs = [ rsync ]; + + tools = [ rsync ]; + unlikely = true; } package kernel { @@ -127,7 +129,7 @@ rm -v "/work/system/lib/modules/$(make -f /usr/src/kernel/Makefile kernelversion `; }; - inputs = [ + tools = [ flex, bison, m4, @@ -141,13 +143,19 @@ rm -v "/work/system/lib/modules/$(make -f /usr/src/kernel/Makefile kernelversion bash, python, - xz, - gzip, kmod, elfutils, util-linux, + ]; + + inputs = [ + xz, + gzip, kernel-headers, ]; + + runtime = nil; + unlikely = true; } package gen_init_cpio { diff --git a/internal/rosa/package/kmod.az b/internal/rosa/package/kmod.az index c56ba846..732d3340 100644 --- a/internal/rosa/package/kmod.az +++ b/internal/rosa/package/kmod.az @@ -31,10 +31,4 @@ package kmod { openssl, kernel-headers, ]; - - runtime = [ - zlib, - zstd, - openssl, - ]; } diff --git a/internal/rosa/package/libaio.az b/internal/rosa/package/libaio.az index 5b7072eb..ee408872 100644 --- a/internal/rosa/package/libaio.az +++ b/internal/rosa/package/libaio.az @@ -29,9 +29,10 @@ package libaio { install = "make prefix=/work/system install"; }; - inputs = [ + tools = [ bash, e2fsprogs, - kernel-headers, ]; + + inputs = [ kernel-headers ]; } diff --git a/internal/rosa/package/libarchive/package.az b/internal/rosa/package/libarchive/package.az index cb6c080f..b06daaf3 100644 --- a/internal/rosa/package/libarchive/package.az +++ b/internal/rosa/package/libarchive/package.az @@ -17,7 +17,7 @@ package libarchive { exec = cmake {}; - runtime = [ + inputs = [ zlib, zstd, ]; diff --git a/internal/rosa/package/libbpf.az b/internal/rosa/package/libbpf.az index 9a10bc45..33df95e4 100644 --- a/internal/rosa/package/libbpf.az +++ b/internal/rosa/package/libbpf.az @@ -26,6 +26,4 @@ package libbpf { elfutils, kernel-headers, ]; - - runtime = [ elfutils ]; } diff --git a/internal/rosa/package/libbsd.az b/internal/rosa/package/libbsd.az index 4acc520b..27d2fc77 100644 --- a/internal/rosa/package/libbsd.az +++ b/internal/rosa/package/libbsd.az @@ -14,10 +14,11 @@ package libbsd { generate = "echo '" + version + "' > .dist-version && ./autogen"; }; - inputs = [ + tools = [ automake, libtool, - - libmd, ]; + + inputs = [ libmd ]; + runtime = nil; } diff --git a/internal/rosa/package/libcap.az b/internal/rosa/package/libcap.az index be48ed01..86bdc63a 100644 --- a/internal/rosa/package/libcap.az +++ b/internal/rosa/package/libcap.az @@ -29,7 +29,7 @@ package libcap { check = [ "CC=cc", "test" ]; }; - inputs = [ + tools = [ bash, diffutils, ]; diff --git a/internal/rosa/package/libdisplay-info.az b/internal/rosa/package/libdisplay-info.az index da563d01..8780bc10 100644 --- a/internal/rosa/package/libdisplay-info.az +++ b/internal/rosa/package/libdisplay-info.az @@ -12,10 +12,6 @@ package libdisplay-info { }; exec = meson {}; - - inputs = [ - diffutils, - - hwdata, - ]; + tools = [ diffutils ]; + inputs = [ hwdata ]; } diff --git a/internal/rosa/package/libdrm.az b/internal/rosa/package/libdrm.az index efa6f166..6491da28 100644 --- a/internal/rosa/package/libdrm.az +++ b/internal/rosa/package/libdrm.az @@ -17,13 +17,13 @@ package libdrm { }; }; - inputs = [ + tools = [ // symbols check fail with llvm nm binutils, + ]; + inputs = [ libpciaccess, kernel-headers, ]; - - runtime = [ libpciaccess ]; } diff --git a/internal/rosa/package/libepoxy.az b/internal/rosa/package/libepoxy.az index f8762a00..4c0efab0 100644 --- a/internal/rosa/package/libepoxy.az +++ b/internal/rosa/package/libepoxy.az @@ -21,4 +21,6 @@ package libepoxy { libglvnd, libX11, ]; + + runtime = nil; } diff --git a/internal/rosa/package/libevdev.az b/internal/rosa/package/libevdev.az index bb6ffc16..85c9b674 100644 --- a/internal/rosa/package/libevdev.az +++ b/internal/rosa/package/libevdev.az @@ -17,10 +17,10 @@ package libevdev { }; }; - inputs = [ + tools = [ check, bash, - - kernel-headers, ]; + + inputs = [ kernel-headers ]; } diff --git a/internal/rosa/package/libexpat.az b/internal/rosa/package/libexpat.az index 20e4f510..acb8445b 100644 --- a/internal/rosa/package/libexpat.az +++ b/internal/rosa/package/libexpat.az @@ -3,7 +3,7 @@ package libexpat { website = "https://libexpat.github.io"; anitya = 770; - version# = "2.8.3"; + version# = "2.8.4"; source = remoteGitHubRelease { suffix = "libexpat/libexpat"; tag = "R_"+replace { @@ -12,11 +12,11 @@ package libexpat { new = "_"; }; name = "expat-"+version+".tar.bz2"; - checksum = "prHQc14YY3Gp6BfflneNcVyRXM-AxFCqiigxrGL9TT1sGhVODvI_9JNR2xnZlZSj"; + checksum = "Nbi2wl8U9KHf3LVLczfAb5Kqr7HFv_myReVjxKXUkfhToWfL-pP2o44fDpWHJ4ig"; compress = bzip2; }; exec = make {}; - inputs = [ bash ]; + tools = [ bash ]; } diff --git a/internal/rosa/package/libgd.az b/internal/rosa/package/libgd.az index 8ce41894..b1b7b327 100644 --- a/internal/rosa/package/libgd.az +++ b/internal/rosa/package/libgd.az @@ -21,5 +21,4 @@ package libgd { exec = make {}; inputs = [ zlib ]; - runtime = [ zlib ]; } diff --git a/internal/rosa/package/libglvnd.az b/internal/rosa/package/libglvnd.az index 02ce0bd7..dbcf198b 100644 --- a/internal/rosa/package/libglvnd.az +++ b/internal/rosa/package/libglvnd.az @@ -25,14 +25,12 @@ trap 'kill $XVFB_PID && wait $XVFB_PID' EXIT `; }; - inputs = [ + tools = [ // symbols check fail with llvm nm binutils, // test suite wants X server xserver, - - libXext, ]; - runtime = [ libXext ]; + inputs = [ libXext ]; } diff --git a/internal/rosa/package/libinput.az b/internal/rosa/package/libinput.az index 4cb1b764..aeb54f77 100644 --- a/internal/rosa/package/libinput.az +++ b/internal/rosa/package/libinput.az @@ -20,18 +20,15 @@ package libinput { }; }; - inputs = [ + tools = [ bash, diffutils, python-pytest, - - libudev-zero, - libevdev, - kernel-headers, ]; - runtime = [ + inputs = [ libudev-zero, libevdev, + kernel-headers, ]; } diff --git a/internal/rosa/package/libliftoff.az b/internal/rosa/package/libliftoff.az index 16e34aed..a1c23fd8 100644 --- a/internal/rosa/package/libliftoff.az +++ b/internal/rosa/package/libliftoff.az @@ -17,4 +17,6 @@ package libliftoff { libdrm, kernel-headers, ]; + + runtime = nil; } diff --git a/internal/rosa/package/libmd.az b/internal/rosa/package/libmd.az index 1cdc4b65..e618d11e 100644 --- a/internal/rosa/package/libmd.az +++ b/internal/rosa/package/libmd.az @@ -15,7 +15,7 @@ package libmd { preMake = "\ninstall -D /usr/src/libmd/src/helper.c src/helper.c\n"; }; - inputs = [ + tools = [ automake, libtool, ]; diff --git a/internal/rosa/package/libpng.az b/internal/rosa/package/libpng.az index 9fdea1d6..4711cbce 100644 --- a/internal/rosa/package/libpng.az +++ b/internal/rosa/package/libpng.az @@ -23,5 +23,4 @@ package libpng { exec = make {}; inputs = [ zlib ]; - runtime = [ zlib ]; } diff --git a/internal/rosa/package/libpsl.az b/internal/rosa/package/libpsl.az index 2a45cf20..343a2bf6 100644 --- a/internal/rosa/package/libpsl.az +++ b/internal/rosa/package/libpsl.az @@ -21,7 +21,7 @@ test_disable 'int main(){return 0;}' tests/test-is-public-builtin.c exec = make {}; - inputs = [ + tools = [ pkgconf, python, ]; diff --git a/internal/rosa/package/libseccomp.az b/internal/rosa/package/libseccomp.az index 37231185..9089db83 100644 --- a/internal/rosa/package/libseccomp.az +++ b/internal/rosa/package/libseccomp.az @@ -15,11 +15,11 @@ package libseccomp { bin = [ "bash" ]; exec = make {}; - inputs = [ + tools = [ bash, diffutils, gperf, - - kernel-headers, ]; + + inputs = [ kernel-headers ]; } diff --git a/internal/rosa/package/libtirpc.az b/internal/rosa/package/libtirpc.az index a05b75df..0b12a92e 100644 --- a/internal/rosa/package/libtirpc.az +++ b/internal/rosa/package/libtirpc.az @@ -25,12 +25,16 @@ package libtirpc { }; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + ]; + inputs = [ libbsd, kernel-headers, ]; + + runtime = nil; } diff --git a/internal/rosa/package/libva.az b/internal/rosa/package/libva.az index 5cb3a9b4..463220d6 100644 --- a/internal/rosa/package/libva.az +++ b/internal/rosa/package/libva.az @@ -25,11 +25,4 @@ package libva { wayland, kernel-headers, ]; - - runtime = [ - libdrm, - libXfixes, - libglvnd, - wayland, - ]; } diff --git a/internal/rosa/package/libxml2.az b/internal/rosa/package/libxml2.az index 39146e8b..a169c0e4 100644 --- a/internal/rosa/package/libxml2.az +++ b/internal/rosa/package/libxml2.az @@ -3,12 +3,12 @@ package libxml2 { website = "https://gitlab.gnome.org/GNOME/libxml2"; anitya = 1783; - version# = "2.15.3"; + version# = "2.15.4"; source = remoteGitLab { domain = "gitlab.gnome.org"; suffix = "GNOME/libxml2"; ref = "v"+version; - checksum = "oJy74htGlEpf70KPvpW18fYJo0RQQkCXZRwqUz6NoXborS3HCq3Nm4gsyaSeNmUH"; + checksum = "zDpmFcO_u6FU91sjvOiySGIx6tFVomhxC3GXfBYR_sDXBCs4WFIEY_9NyQ24-zfO"; }; // can't create shell.out: Read-only file system @@ -16,7 +16,7 @@ package libxml2 { exec = meson {}; - inputs = [ + tools = [ git, diffutils, ]; diff --git a/internal/rosa/package/libxslt.az b/internal/rosa/package/libxslt.az index 34ba7a71..8518c325 100644 --- a/internal/rosa/package/libxslt.az +++ b/internal/rosa/package/libxslt.az @@ -18,14 +18,12 @@ package libxslt { check = nil; }; - inputs = [ + tools = [ automake, libtool, python, pkgconf, - - libxml2, ]; - runtime = [ libxml2 ]; + inputs = [ libxml2 ]; } diff --git a/internal/rosa/package/lit.az b/internal/rosa/package/lit.az index 846b5fe6..dc02bdbb 100644 --- a/internal/rosa/package/lit.az +++ b/internal/rosa/package/lit.az @@ -11,5 +11,4 @@ package lit { }; inputs = [ python-setuptools ]; - runtime = [ python ]; } diff --git a/internal/rosa/package/lm_sensors.az b/internal/rosa/package/lm_sensors.az index 8edc2447..2b6b58dc 100644 --- a/internal/rosa/package/lm_sensors.az +++ b/internal/rosa/package/lm_sensors.az @@ -24,8 +24,7 @@ package lm_sensors { install = "make DESTDIR=/work PREFIX=/system install"; }; - inputs = [ - perl, + tools = [ perl-Test-Cmd, m4, diff --git a/internal/rosa/package/lua/package.az b/internal/rosa/package/lua/package.az index ab74dfdd..54d5abe6 100644 --- a/internal/rosa/package/lua/package.az +++ b/internal/rosa/package/lua/package.az @@ -33,4 +33,6 @@ sed \ ../lua.pc > /work/system/lib/pkgconfig/lua.pc `; }; + + unlikely = true; } diff --git a/internal/rosa/package/lvm2/package.az b/internal/rosa/package/lvm2/package.az index bb683509..3a363b54 100644 --- a/internal/rosa/package/lvm2/package.az +++ b/internal/rosa/package/lvm2/package.az @@ -19,10 +19,12 @@ package lvm2 { check = nil; }; - inputs = [ - pkgconf, + tools = [ pkgconf ]; + inputs = [ libaio, kernel-headers, ]; + + runtime = nil; } diff --git a/internal/rosa/package/mesa/package.az b/internal/rosa/package/mesa/package.az index 7967e3d7..8db6462e 100644 --- a/internal/rosa/package/mesa/package.az +++ b/internal/rosa/package/mesa/package.az @@ -4,12 +4,12 @@ package mesa { anitya = 1970; latest = anityaFallback; - version# = "26.2.1"; + version# = "26.2.2"; source = remoteGitLab { domain = "gitlab.freedesktop.org"; suffix = "mesa/mesa"; ref = "mesa-"+version; - checksum = "WZYAysQFZt8KMFAxQheKFZHarR1isgOeSw4LyfqAcmaHwXMCLiVao6eGuEuhJTJv"; + checksum = "5mIdojhazcdAgbLW1v4d-7P5pIhu9wnGS3ek1QhJIPMJyFWhfKhiZCsd53WAHt1_"; }; patches = [ "include.patch" ]; diff --git a/internal/rosa/package/meson/package.az b/internal/rosa/package/meson/package.az index 6fd06923..78fa2035 100644 --- a/internal/rosa/package/meson/package.az +++ b/internal/rosa/package/meson/package.az @@ -43,7 +43,7 @@ python3 ./run_project_tests.py \ `; }; - inputs = [ + tools = [ python-setuptools, pkg-config, cmake, diff --git a/internal/rosa/package/mksh.az b/internal/rosa/package/mksh.az index 6e728285..878bba83 100644 --- a/internal/rosa/package/mksh.az +++ b/internal/rosa/package/mksh.az @@ -31,7 +31,7 @@ ln -vs ../system/bin/sh /work/bin/ `; }; - inputs = [ + tools = [ perl, coreutils, ]; diff --git a/internal/rosa/package/muon.az b/internal/rosa/package/muon.az index 512844a9..dc183591 100644 --- a/internal/rosa/package/muon.az +++ b/internal/rosa/package/muon.az @@ -53,10 +53,7 @@ sed -i '/common.220 fs module/d' subprojects/meson-tests/meson.build install = "./muon install -d /work\n"; }; - inputs = [ - python-early, - kernel-headers, - ]; - + tools = [ python-early ]; + inputs = [ kernel-headers ]; runtime = [ pkg-config ]; } diff --git a/internal/rosa/package/musl-fts.az b/internal/rosa/package/musl-fts.az index cce1ea1f..195928f5 100644 --- a/internal/rosa/package/musl-fts.az +++ b/internal/rosa/package/musl-fts.az @@ -18,7 +18,7 @@ package musl-fts { generate = "./bootstrap.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, diff --git a/internal/rosa/package/musl-obstack.az b/internal/rosa/package/musl-obstack.az index 218a718d..95388e33 100644 --- a/internal/rosa/package/musl-obstack.az +++ b/internal/rosa/package/musl-obstack.az @@ -18,7 +18,7 @@ package musl-obstack { generate = "./bootstrap.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, diff --git a/internal/rosa/package/musl/package.az b/internal/rosa/package/musl/package.az index 3207ecde..c264c782 100644 --- a/internal/rosa/package/musl/package.az +++ b/internal/rosa/package/musl/package.az @@ -29,7 +29,7 @@ package musl-headers { install = "# headers installed during make"; }; - inputs = [ coreutils ]; + tools = [ coreutils ]; } package musl { @@ -61,5 +61,5 @@ rmdir -v /work/lib `; }; - inputs = [ coreutils ]; + tools = [ coreutils ]; } diff --git a/internal/rosa/package/ncurses.az b/internal/rosa/package/ncurses.az index 189d8fb5..b4d8e26e 100644 --- a/internal/rosa/package/ncurses.az +++ b/internal/rosa/package/ncurses.az @@ -29,5 +29,5 @@ find /work/system/lib \ `; }; - inputs = [ pkg-config ]; + tools = [ pkg-config ]; } diff --git a/internal/rosa/package/net-tools/package.az b/internal/rosa/package/net-tools/package.az index 62a50289..0f2ac828 100644 --- a/internal/rosa/package/net-tools/package.az +++ b/internal/rosa/package/net-tools/package.az @@ -25,9 +25,6 @@ package net-tools { check = nil; }; - inputs = [ - bash, - - kernel-headers, - ]; + tools = [ bash ]; + inputs = [ kernel-headers ]; } diff --git a/internal/rosa/package/netfilter/package.az b/internal/rosa/package/netfilter/package.az index 3dea2b87..5e5e1624 100644 --- a/internal/rosa/package/netfilter/package.az +++ b/internal/rosa/package/netfilter/package.az @@ -22,6 +22,8 @@ package libmnl { libbsd, kernel-headers, ]; + + runtime = nil; } package libnftnl { @@ -29,11 +31,11 @@ package libnftnl { website = "https://www.netfilter.org/projects/libnftnl"; anitya = 1681; - version# = "1.3.1"; + version# = "1.3.2"; source = remoteGit { url = "https://git.netfilter.org/libnftnl.git"; tag = "libnftnl-"+version; - checksum = "91ou66K-I17iX6DB6hiQkhhC_v4DFW5iDGzwjVRNbJNEmKqowLZBlh3FY-ZDO0r9"; + checksum = "bW_GokelPejp2SKOo_OgFFYjf-7rn3GL6x1Z4kZb9NkfZe20WrRLNjQWVxxS9oII"; }; env = [ @@ -47,16 +49,16 @@ package libnftnl { }; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + ]; + inputs = [ libmnl, kernel-headers, ]; - - runtime = [ libmnl ]; } package iptables { @@ -92,16 +94,16 @@ chmod +w /etc/ && ln -s ../usr/src/iptables/etc/ethertypes /etc/ `; }; - inputs = [ + tools = [ automake, libtool, pkgconf, bash, python, + ]; + inputs = [ libnftnl, kernel-headers, ]; - - runtime = [ libnftnl ]; } diff --git a/internal/rosa/package/nettle.az b/internal/rosa/package/nettle.az index 1ce1f9ec..e30696a2 100644 --- a/internal/rosa/package/nettle.az +++ b/internal/rosa/package/nettle.az @@ -12,12 +12,10 @@ package nettle { exec = make {}; - inputs = [ + tools = [ m4, diffutils, - - gmp, ]; - runtime = [ gmp ]; + inputs = [ gmp ]; } diff --git a/internal/rosa/package/ninja.az b/internal/rosa/package/ninja.az index 2c1bd8b3..da5fa715 100644 --- a/internal/rosa/package/ninja.az +++ b/internal/rosa/package/ninja.az @@ -33,7 +33,7 @@ mkdir -p /work/system/bin/ cp ninja /work/system/bin/`; }; - inputs = [ + tools = [ python-early, bash, ]; diff --git a/internal/rosa/package/noto.az b/internal/rosa/package/noto.az index 64d27a58..7481b5e7 100644 --- a/internal/rosa/package/noto.az +++ b/internal/rosa/package/noto.az @@ -3,11 +3,11 @@ package noto { website = "https://fonts.google.com/noto"; anitya = 10671; - version# = "2026.08.01"; + version# = "2026.09.01"; source = remoteGitHub { suffix = "notofonts/notofonts.github.io"; tag = "noto-monthly-release-"+version; - checksum = "xTuvGQBtw9FWrbMQ0OHC-EVpUWYwLxNHPtaind_t6nP37En0r8orIY9N0X_YrPH7"; + checksum = "ZITq5IyZNZovca3t7snPndDgjdzbCeBIoGYpY7bbnR-w9oAiz1vkN9zwRWz5JJw5"; }; enterSource = true; @@ -28,5 +28,5 @@ rename -v 's/\[.*\]//' $DEST/* `; }; - inputs = [ rename ]; + tools = [ rename ]; } diff --git a/internal/rosa/package/nss.az b/internal/rosa/package/nss.az index 32110d04..fb9c1a33 100644 --- a/internal/rosa/package/nss.az +++ b/internal/rosa/package/nss.az @@ -32,7 +32,7 @@ buildcatrust \ `; }; - inputs = [ + tools = [ bash, buildcatrust, diff --git a/internal/rosa/package/openssl.az b/internal/rosa/package/openssl.az index 907d394a..cb76d0fa 100644 --- a/internal/rosa/package/openssl.az +++ b/internal/rosa/package/openssl.az @@ -38,11 +38,15 @@ package openssl { ]; }; - inputs = [ + tools = [ perl, coreutils, + ]; + inputs = [ zlib, kernel-headers, ]; + + runtime = nil; } diff --git a/internal/rosa/package/p11-kit.az b/internal/rosa/package/p11-kit.az index bb96c4dd..3fa9ceb7 100644 --- a/internal/rosa/package/p11-kit.az +++ b/internal/rosa/package/p11-kit.az @@ -17,14 +17,12 @@ package p11-kit { }; }; - inputs = [ + tools = [ coreutils, diffutils, - - libtasn1, ]; - runtime = [ + inputs = [ libffi, libtasn1, ]; diff --git a/internal/rosa/package/pango/package.az b/internal/rosa/package/pango/package.az index e1d91a7d..d1b78387 100644 --- a/internal/rosa/package/pango/package.az +++ b/internal/rosa/package/pango/package.az @@ -28,11 +28,4 @@ package pango { fribidi, harfbuzz, ]; - - runtime = [ - glib, - cairo, - fribidi, - harfbuzz, - ]; } diff --git a/internal/rosa/package/pcre2.az b/internal/rosa/package/pcre2.az index 27f21bf7..85f603a9 100644 --- a/internal/rosa/package/pcre2.az +++ b/internal/rosa/package/pcre2.az @@ -3,12 +3,12 @@ package pcre2 { website = "https://pcre2project.github.io/pcre2"; anitya = 5832; - version# = "10.47"; + version# = "10.48"; source = remoteGitHubRelease { suffix = "PCRE2Project/pcre2"; tag = "pcre2-"+version; name = "pcre2-"+version+".tar.bz2"; - checksum = "IbC24vVayju6nB9EhrBPSDexk22wDecdpyrjgC3nCZXkwTnUjq4CD2q5sopqu6CW"; + checksum = "3HorftFDryXBh8JLSbEVWpU3OtSF_wUhtNZNCRvCDiGlBsMU150CxrDFKE8lVo6x"; compress = bzip2; }; @@ -23,5 +23,5 @@ package pcre2 { }; }; - inputs = [ diffutils ]; + tools = [ diffutils ]; } diff --git a/internal/rosa/package/perl.az b/internal/rosa/package/perl.az index c2539ee3..8d21c8ca 100644 --- a/internal/rosa/package/perl.az +++ b/internal/rosa/package/perl.az @@ -81,8 +81,8 @@ perl Build.PL --prefix=/system `; }; + tools = [ perl ]; inputs = [ perl ]; - runtime = [ perl ]; } package perl-Locale-gettext { @@ -99,8 +99,6 @@ package perl-Locale-gettext { }; exec = makeMaker {}; - - runtime = [ perl ]; } package perl-Pod-Parser { @@ -117,8 +115,6 @@ package perl-Pod-Parser { }; exec = makeMaker {}; - - runtime = [ perl ]; } package perl-SGMLS { @@ -136,8 +132,6 @@ package perl-SGMLS { }; exec = makeMaker {}; - - runtime = [ perl ]; } package perl-Term-ReadKey { @@ -154,8 +148,6 @@ package perl-Term-ReadKey { }; exec = makeMaker {}; - - runtime = [ perl ]; } package perl-Text-CharWidth { @@ -172,8 +164,6 @@ package perl-Text-CharWidth { }; exec = makeMaker {}; - - runtime = [ perl ]; } package perl-Text-WrapI18N { @@ -192,7 +182,6 @@ package perl-Text-WrapI18N { exec = makeMaker {}; inputs = [ perl-Text-CharWidth ]; - runtime = [ perl-Text-CharWidth ]; } package perl-MIME-Charset { @@ -209,8 +198,6 @@ package perl-MIME-Charset { }; exec = makeMaker {}; - - runtime = [ perl ]; } package perl-Unicode-LineBreak { @@ -229,7 +216,6 @@ package perl-Unicode-LineBreak { exec = makeMaker {}; inputs = [ perl-MIME-Charset ]; - runtime = [ perl-MIME-Charset ]; } package perl-YAML-Tiny { @@ -246,8 +232,6 @@ package perl-YAML-Tiny { }; exec = makeMaker {}; - - runtime = [ perl ]; } package perl-Test-Cmd { @@ -264,6 +248,4 @@ package perl-Test-Cmd { }; exec = makeMaker {}; - - runtime = [ perl ]; } diff --git a/internal/rosa/package/pipewire.az b/internal/rosa/package/pipewire.az index 1cbdeda9..06153a9f 100644 --- a/internal/rosa/package/pipewire.az +++ b/internal/rosa/package/pipewire.az @@ -3,12 +3,12 @@ package wireplumber { website = "https://gitlab.freedesktop.org/pipewire/wireplumber"; anitya = 235056; - version# = "0.5.16"; + version# = "0.5.17"; source = remoteGitLab { domain = "gitlab.freedesktop.org"; suffix = "pipewire/wireplumber"; ref = version; - checksum = "Ftt6s3tt5eDlJPizOWsvjHRfOQezVHOp3sDATJr2_B6MORbFW9XgWSHUNdy-dIp0"; + checksum = "2vWxpOqnQmOlgMlNLYMu9ebPbF2y3W_eqDFM_bwAtCwnHhYE0S4kM8MkpFuXyVlu"; }; // OSError: [Errno 30] Read-only file system: '../../usr/src/wireplumber/po/conf.pot' @@ -30,11 +30,6 @@ package wireplumber { glib, pipewire, ]; - - runtime = [ - glib, - pipewire, - ]; } package pipewire { @@ -66,6 +61,4 @@ package pipewire { kernel-headers, ]; - - runtime = [ dbus ]; } diff --git a/internal/rosa/package/pkg-config.az b/internal/rosa/package/pkg-config.az index 6bde89b7..b8e91958 100644 --- a/internal/rosa/package/pkg-config.az +++ b/internal/rosa/package/pkg-config.az @@ -19,7 +19,7 @@ package pkg-config { }; }; - inputs = [ + tools = [ automake, libtool, ]; diff --git a/internal/rosa/package/popt.az b/internal/rosa/package/popt.az index 964533a8..c063bcb0 100644 --- a/internal/rosa/package/popt.az +++ b/internal/rosa/package/popt.az @@ -14,7 +14,7 @@ package popt { generate = "./autogen.sh"; }; - inputs = [ + tools = [ gzip, automake, libtool, diff --git a/internal/rosa/package/procps.az b/internal/rosa/package/procps.az index 23ba5c80..5152076b 100644 --- a/internal/rosa/package/procps.az +++ b/internal/rosa/package/procps.az @@ -18,7 +18,7 @@ package procps { }; }; - inputs = [ + tools = [ automake, gettext, libtool, diff --git a/internal/rosa/package/python/package.az b/internal/rosa/package/python/package.az index 525cb8c2..aef3ecda 100644 --- a/internal/rosa/package/python/package.az +++ b/internal/rosa/package/python/package.az @@ -56,24 +56,18 @@ package python { postInstall = "ln -s python3 /work/system/bin/python"; }; + tools = [ pkg-config ]; + inputs = [ zlib, bzip2, libffi, openssl, - pkg-config, xz, kernel-headers, ]; - - runtime = [ - zlib, - bzip2, - libffi, - openssl, - ]; } package python-early { @@ -138,12 +132,6 @@ package python-early { kernel-headers, ]; - - runtime = [ - zlib, - bzip2, - libffi, - ]; } package python-setuptools { @@ -165,7 +153,7 @@ package python-setuptools { check = nil; }; - runtime = [ python ]; + unlikely = true; } package python-wheel { @@ -188,8 +176,6 @@ package python-wheel { python-flit-core, python-setuptools, ]; - - runtime = [ python ]; } package python-vcs-versioning { @@ -197,11 +183,11 @@ package python-vcs-versioning { website = "https://setuptools-scm.readthedocs.io/en/latest"; anitya = 389421; - version# = "2.3.1"; + version# = "2.3.4"; source = remoteGitHub { suffix = "pypa/setuptools-scm"; tag = "vcs-versioning-v"+version; - checksum = "rcbu8LlWlY6jmhC95pfnEKgGQuRxHY8_Pvo2jjmlJWSlyHSs1tFIRQ_FoMfi8YXo"; + checksum = "TljjSQUxo07jMzfaVyieXD8dS_olgwEA2_RndGeIjlsdKWSa2oYZ5laMRjdgnXJS"; }; env = [ @@ -219,11 +205,6 @@ package python-vcs-versioning { python-setuptools, python-packaging, ]; - - runtime = [ - python-setuptools, - python-packaging, - ]; } package python-setuptools-scm { @@ -231,11 +212,11 @@ package python-setuptools-scm { website = "https://setuptools-scm.readthedocs.io/en/latest"; anitya = 7874; - version# = "10.2.1"; + version# = "10.2.3"; source = remoteGitHub { suffix = "pypa/setuptools-scm"; tag = "setuptools-scm-v"+version; - checksum = "XnfdKDHzgtY3imPPz1lA1H0QHnjXlN5ZI-er0I-kfUq4w_a6RzUq8FCOJNBOkpK1"; + checksum = "C76_jiIc_XanEZrpxLb47B3YArtmlt7HcpEOo0wZ5Z4mCFJb2HLIgOSOiRSfttpW"; }; env = [ @@ -258,6 +239,8 @@ package python-setuptools-scm { python-setuptools, python-vcs-versioning, ]; + + unlikely = true; } package python-flit-core { @@ -279,7 +262,7 @@ package python-flit-core { check = nil; }; - runtime = [ python ]; + unlikely = true; } package python-packaging { @@ -300,7 +283,6 @@ package python-packaging { }; inputs = [ python-flit-core ]; - runtime = [ python ]; } package python-pathspec { @@ -321,7 +303,6 @@ package python-pathspec { }; inputs = [ python-flit-core ]; - runtime = [ python ]; } package python-trove-classifiers { @@ -342,7 +323,6 @@ package python-trove-classifiers { }; inputs = [ python-setuptools ]; - runtime = [ python ]; } package python-pluggy { @@ -367,7 +347,6 @@ package python-pluggy { }; inputs = [ python-setuptools-scm ]; - runtime = [ python ]; } package python-poetry-core { @@ -386,6 +365,8 @@ package python-poetry-core { // pytest circular dependency check = nil; }; + + unlikely = true; } package python-tomlkit { @@ -435,13 +416,7 @@ package python-hatchling { python-tomlkit, ]; - runtime = [ - python-packaging, - python-pathspec, - python-trove-classifiers, - python-pluggy, - python-tomlkit, - ]; + unlikely = true; } package python-pygments { @@ -462,7 +437,6 @@ package python-pygments { }; inputs = [ python-hatchling ]; - runtime = [ python ]; } package python-iniconfig { @@ -487,7 +461,6 @@ package python-iniconfig { }; inputs = [ python-setuptools-scm ]; - runtime = [ python ]; } package python-pytest { @@ -519,13 +492,6 @@ package python-pytest { python-setuptools-scm, ]; - - runtime = [ - python-iniconfig, - python-packaging, - python-pluggy, - python-pygments, - ]; } package python-markupsafe { @@ -546,7 +512,6 @@ package python-markupsafe { }; inputs = [ python-setuptools ]; - runtime = [ python ]; } package python-mako { @@ -576,8 +541,6 @@ package python-mako { python-setuptools, ]; - - runtime = [ python-markupsafe ]; } package python-pyyaml { @@ -598,7 +561,6 @@ package python-pyyaml { }; inputs = [ python-setuptools ]; - runtime = [ python ]; } package python-pycparser { @@ -621,5 +583,4 @@ ln -s clang /system/bin/gcc exec = pip {}; inputs = [ python-setuptools ]; - runtime = [ python ]; } diff --git a/internal/rosa/package/qemu/package.az b/internal/rosa/package/qemu/package.az index e18794ca..3e7b8fcf 100644 --- a/internal/rosa/package/qemu/package.az +++ b/internal/rosa/package/qemu/package.az @@ -62,7 +62,7 @@ sed -i \ ]; }; - inputs = [ + tools = [ bash, python-setuptools, python-wheel, @@ -70,22 +70,17 @@ sed -i \ ninja, pkgconf, diffutils, - openssl, - xz, - flex, bison, m4, - - glib, - zstd, dtc, - kernel-headers, ]; - runtime = [ + inputs = [ + xz, glib, zstd, + kernel-headers, ]; } diff --git a/internal/rosa/package/rdfind.az b/internal/rosa/package/rdfind.az index 5c16548d..7d737eab 100644 --- a/internal/rosa/package/rdfind.az +++ b/internal/rosa/package/rdfind.az @@ -15,5 +15,4 @@ package rdfind { exec = make {}; inputs = [ nettle ]; - runtime = [ nettle ]; } diff --git a/internal/rosa/package/rename.az b/internal/rosa/package/rename.az index 9e98ae0f..f6c36204 100644 --- a/internal/rosa/package/rename.az +++ b/internal/rosa/package/rename.az @@ -12,6 +12,4 @@ package rename { }; exec = makeMaker {}; - - runtime = [ perl ]; } diff --git a/internal/rosa/package/spirv.az b/internal/rosa/package/spirv.az index cefa4d0a..79ac5a8d 100644 --- a/internal/rosa/package/spirv.az +++ b/internal/rosa/package/spirv.az @@ -36,13 +36,8 @@ package spirv-tools { }; }; - inputs = [ - python, - - spirv-headers, - ]; - - runtime = [ spirv-headers ]; + tools = [ python ]; + inputs = [ spirv-headers ]; } package spirv-llvm-translator { @@ -50,11 +45,11 @@ package spirv-llvm-translator { website = "https://github.com/KhronosGroup/SPIRV-LLVM-Translator"; anitya = 227273; - version# = "23.1.0"; + version# = "23.1.1"; source = remoteGitHub { suffix = "KhronosGroup/SPIRV-LLVM-Translator"; tag = "v"+version; - checksum = "bKflf64sXw0NDhtqE_gT5cHrQV9JNZsAhvpTkDImp01xcyTXWPYoNB1CsbzGgFxh"; + checksum = "8Sr087sQcaGw1yOodbRQAOv5bBj_QpxbOWGN75xxKqhRcuAUvdPZ9a009nlXZRwK"; }; // litArgs emits shell syntax @@ -157,12 +152,10 @@ package spirv-llvm-translator { }; }; - inputs = [ + tools = [ bash, lit, - - spirv-tools, ]; - runtime = [ spirv-tools ]; + inputs = [ spirv-tools ]; } diff --git a/internal/rosa/package/squashfs-tools.az b/internal/rosa/package/squashfs-tools.az index b266e3fe..145c1cb9 100644 --- a/internal/rosa/package/squashfs-tools.az +++ b/internal/rosa/package/squashfs-tools.az @@ -34,15 +34,9 @@ package squashfs-tools { install = "make INSTALL_PREFIX=/work/system install"; }; - inputs = [ - sed, + tools = [ sed ]; - zstd, - gzip, - zlib, - ]; - - runtime = [ + inputs = [ zstd, gzip, zlib, diff --git a/internal/rosa/package/stage0.az b/internal/rosa/package/stage0.az index e415bbbe..d79851ef 100644 --- a/internal/rosa/package/stage0.az +++ b/internal/rosa/package/stage0.az @@ -19,7 +19,7 @@ tar -vc -C /stage0 . | \ `; }; - inputs = [ zstd ]; + tools = [ zstd ]; } package stage0-dist { diff --git a/internal/rosa/package/strace/package.az b/internal/rosa/package/strace/package.az index 7e46147d..6173ae38 100644 --- a/internal/rosa/package/strace/package.az +++ b/internal/rosa/package/strace/package.az @@ -25,11 +25,11 @@ package strace { }; }; - inputs = [ + tools = [ bash, gawk, automake, - - kernel-headers, ]; + + inputs = [ kernel-headers ]; } diff --git a/internal/rosa/package/sway/package.az b/internal/rosa/package/sway/package.az index 6ff1b365..cd7f1f7f 100644 --- a/internal/rosa/package/sway/package.az +++ b/internal/rosa/package/sway/package.az @@ -21,12 +21,4 @@ package sway { wlroots, kernel-headers, ]; - - runtime = [ - json-c, - pcre2, - pango, - libinput, - wlroots, - ]; } diff --git a/internal/rosa/package/tamago.az b/internal/rosa/package/tamago.az index e0aca055..d784c85a 100644 --- a/internal/rosa/package/tamago.az +++ b/internal/rosa/package/tamago.az @@ -3,11 +3,11 @@ package tamago { website = "https://github.com/usbarmory/tamago-go"; anitya = 388872; - version# = "1.27.0"; + version# = "1.27.1"; source = remoteGitHub { suffix = "usbarmory/tamago-go"; tag = "tamago-go"+version; - checksum = "PV8a5fccqZifVUG7HJ6jTFk_0x6YIu1BSgYByCdJoTllm4NuQc9-Ngk_nuS7Nb3i"; + checksum = "TaWPzqqBMuhGslUm9CQvShJRjfONbFEr51mcM5zFlopYhYA6Tb58g8wRPc5a5lQ0"; }; env = [ @@ -43,5 +43,5 @@ set -u install = "../bin/go tool dist banner # print build info"; }; - inputs = [ bash, go ]; + tools = [ bash, go ]; } diff --git a/internal/rosa/package/tllist.az b/internal/rosa/package/tllist.az index a02196b8..acce550e 100644 --- a/internal/rosa/package/tllist.az +++ b/internal/rosa/package/tllist.az @@ -12,4 +12,6 @@ package tllist { }; exec = meson {}; + + unlikely = true; } diff --git a/internal/rosa/package/toybox.az b/internal/rosa/package/toybox.az index f54db3d2..bd3dc966 100644 --- a/internal/rosa/package/toybox.az +++ b/internal/rosa/package/toybox.az @@ -60,12 +60,12 @@ ln -s ../../system/bin/env /work/usr/bin `; }; - inputs = [ + tools = [ bash, gzip, - - kernel-headers, ]; + + inputs = [ kernel-headers ]; } package toybox-early { @@ -125,10 +125,10 @@ ln -s ../../system/bin/env /work/usr/bin `; }; - inputs = [ + tools = [ bash, gzip, - - kernel-headers, ]; + + inputs = [ kernel-headers ]; } diff --git a/internal/rosa/package/unzip.az b/internal/rosa/package/unzip.az index 6fda9763..3bc8ae8b 100644 --- a/internal/rosa/package/unzip.az +++ b/internal/rosa/package/unzip.az @@ -29,7 +29,7 @@ mv unzip /work/system/bin/ `; }; - inputs = [ + tools = [ make, coreutils, ]; diff --git a/internal/rosa/package/util-linux/a323dddbcd1ed05a10e7e870b3e1a48b4ed44a43.patch b/internal/rosa/package/util-linux/a323dddbcd1ed05a10e7e870b3e1a48b4ed44a43.patch new file mode 100644 index 00000000..36d6f968 --- /dev/null +++ b/internal/rosa/package/util-linux/a323dddbcd1ed05a10e7e870b3e1a48b4ed44a43.patch @@ -0,0 +1,35 @@ +From a323dddbcd1ed05a10e7e870b3e1a48b4ed44a43 Mon Sep 17 00:00:00 2001 +From: Karel Zak <kzak@redhat.com> +Date: Wed, 2 Sep 2026 13:32:27 +0200 +Subject: [PATCH] libmount: add missing fileutils.h include to hook_idmap.c + +The hook_idmap.c uses RESOLVE_NO_SYMLINKS (added by commit fb8e26535) +but does not include fileutils.h, which provides the fallback #define +for this constant. + +On Fedora (glibc 2.40+), this is masked because glibc's +<bits/fcntl-linux.h> transitively includes <linux/openat2.h>, which +defines RESOLVE_NO_SYMLINKS. On Ubuntu (and other distros with older +glibc), <fcntl.h> does not pull in openat2.h, so the build fails: + + hook_idmap.c:335:33: error: 'RESOLVE_NO_SYMLINKS' undeclared + +Fixes: fb8e26535 ("libmount: pin source path with openat2() for restricted users") +Signed-off-by: Karel Zak <kzak@redhat.com> +(cherry picked from commit 7e2e010874b10b3aabdc3c4c844c9ffc46a4a374) +--- + libmount/src/hook_idmap.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libmount/src/hook_idmap.c b/libmount/src/hook_idmap.c +index 77494e29810..2c697b17154 100644 +--- a/libmount/src/hook_idmap.c ++++ b/libmount/src/hook_idmap.c +@@ -23,6 +23,7 @@ + + #include "strutils.h" + #include "all-io.h" ++#include "fileutils.h" + #include "namespace.h" + + #include "mountP.h" diff --git a/internal/rosa/package/util-linux.az b/internal/rosa/package/util-linux/package.az index 405f2ab7..1317e50f 100644 --- a/internal/rosa/package/util-linux.az +++ b/internal/rosa/package/util-linux/package.az @@ -5,7 +5,7 @@ package util-linux { // release candidates confuse Anitya latest = anityaFallback; - version# = "2.42.2"; + version# = "2.42.3"; source = remoteTar { url = "https://www.kernel.org/pub/linux/utils/util-linux/"+ "v"+join { @@ -19,9 +19,10 @@ package util-linux { }; sep = "."; }+"/util-linux-"+version+".tar.gz"; - checksum = "Z4IZapPCKQP37aeWMDhxcvuOCy-IR_aHZvfUEMZ0T7trwC1znZACKH_3ddqXwBCg"; + checksum = "VQ3NCM4kt0-TTrdJElBfckXNCGBv6UfXGTRm1poQ0XP0WBND4eG-O7n5Ly_a-Iw_"; compress = gzip; }; + patches = [ "a323dddbcd1ed05a10e7e870b3e1a48b4ed44a43.patch" ]; bin = [ "bash" ]; exec = make { @@ -50,12 +51,10 @@ package util-linux { check = nil; }; - inputs = [ - bash, + tools = [ bash ]; + inputs = [ ncurses, kernel-headers, ]; - - runtime = [ ncurses ]; } diff --git a/internal/rosa/package/vim.az b/internal/rosa/package/vim.az index 1ea7883c..81e1cab3 100644 --- a/internal/rosa/package/vim.az +++ b/internal/rosa/package/vim.az @@ -28,5 +28,4 @@ package vim { }; inputs = [ ncurses ]; - runtime = [ ncurses ]; } diff --git a/internal/rosa/package/wayland.az b/internal/rosa/package/wayland.az index b4d755a1..3b240994 100644 --- a/internal/rosa/package/wayland.az +++ b/internal/rosa/package/wayland.az @@ -25,16 +25,12 @@ echo 'int main(){}' > tests/sanity-test.c }; }; - inputs = [ + tools = [ awk, diffutils, - - libffi, - libexpat, - libxml2, ]; - runtime = [ + inputs = [ libffi, libexpat, libxml2, @@ -57,4 +53,6 @@ package wayland-protocols { exec = meson {}; inputs = [ wayland ]; + runtime = nil; + unlikely = true; } diff --git a/internal/rosa/package/wlroots.az b/internal/rosa/package/wlroots.az index 62593779..7cfeb261 100644 --- a/internal/rosa/package/wlroots.az +++ b/internal/rosa/package/wlroots.az @@ -24,6 +24,7 @@ package wlroots { libglvnd, hwdata, wayland, + wayland-protocols, xwayland, libxcb-wm, xkbcommon, @@ -34,15 +35,6 @@ package wlroots { kernel-headers, ]; - runtime = [ - mesa, - libglvnd, - wayland, - libxcb-wm, - xkbcommon, - pixman, - seatd, - libinput, - libliftoff, - ]; + join = true; + runtime = [ wayland-protocols ]; } diff --git a/internal/rosa/package/x.az b/internal/rosa/package/x.az index a36febd0..73b82981 100644 --- a/internal/rosa/package/x.az +++ b/internal/rosa/package/x.az @@ -12,6 +12,7 @@ package util-macros { }; exec = make {}; + unlikely = true; } package libxtrans { @@ -31,13 +32,15 @@ package libxtrans { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, - - util-macros, ]; + + inputs = [ util-macros ]; + + unlikely = true; } package xorgproto { @@ -57,12 +60,14 @@ package xorgproto { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, pkgconf, - - util-macros, ]; + + inputs = [ util-macros ]; + + unlikely = true; } package libXau { @@ -102,7 +107,7 @@ package xcb-proto { exec = make {}; - inputs = [ python ]; + tools = [ python ]; } package xcb { @@ -119,15 +124,12 @@ package xcb { exec = make {}; - inputs = [ + tools = [ python, pkgconf, - - xcb-proto, - libXau, ]; - runtime = [ + inputs = [ xcb-proto, libXau, ]; @@ -146,14 +148,8 @@ package libxcb-keysyms { }; exec = make {}; - - inputs = [ - pkgconf, - - xcb, - ]; - - runtime = [ xcb ]; + tools = [ pkgconf ]; + inputs = [ xcb ]; } package libxcb-wm { @@ -170,14 +166,12 @@ package libxcb-wm { exec = make {}; - inputs = [ + tools = [ m4, pkgconf, - - xcb, ]; - runtime = [ xcb ]; + inputs = [ xcb ]; } package libxcb-util { @@ -195,14 +189,12 @@ package libxcb-util { exec = make {}; - inputs = [ - pkgconf, + tools = [ pkgconf ]; + inputs = [ util-macros, xcb, ]; - - runtime = [ xcb ]; } package libxcb-image { @@ -218,14 +210,8 @@ package libxcb-image { }; exec = make {}; - - inputs = [ - pkgconf, - - libxcb-util, - ]; - - runtime = [ libxcb-util ]; + tools = [ pkgconf ]; + inputs = [ libxcb-util ]; } package libxcb-render-util { @@ -243,14 +229,12 @@ package libxcb-render-util { exec = make {}; - inputs = [ - pkgconf, + tools = [ pkgconf ]; + inputs = [ util-macros, xcb, ]; - - runtime = [ xcb ]; } package libX11 { @@ -275,18 +259,18 @@ package libX11 { }; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + ]; + inputs = [ util-macros, libxtrans, xorgproto, xcb, ]; - - runtime = [ xcb ]; } package libXext { @@ -306,16 +290,16 @@ package libXext { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + ]; + inputs = [ util-macros, libX11, ]; - - runtime = [ libX11 ]; } package libXfixes { @@ -335,17 +319,17 @@ package libXfixes { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + ]; + inputs = [ util-macros, xorgproto, libX11, ]; - - runtime = [ libX11 ]; } package libXrender { @@ -365,16 +349,16 @@ package libXrender { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + ]; + inputs = [ util-macros, libX11, ]; - - runtime = [ libX11 ]; } package libxshmfence { @@ -394,11 +378,13 @@ package libxshmfence { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + ]; + inputs = [ util-macros, xorgproto, ]; @@ -421,17 +407,17 @@ package libXxf86vm { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + ]; + inputs = [ util-macros, libXext, xorgproto, ]; - - runtime = [ libXext ]; } package libXrandr { @@ -451,21 +437,18 @@ package libXrandr { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + ]; + inputs = [ util-macros, libXext, libXrender, xorgproto, ]; - - runtime = [ - libXext, - libXrender, - ]; } package font-util { @@ -485,13 +468,13 @@ package font-util { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, - - util-macros, ]; + + inputs = [ util-macros ]; } package libfontenc { @@ -511,13 +494,15 @@ package libfontenc { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + font-util, + ]; + inputs = [ util-macros, - font-util, xorgproto, ]; } @@ -538,7 +523,6 @@ package libxkbfile { exec = meson {}; inputs = [ libX11 ]; - runtime = [ libX11 ]; } package xkbcomp { @@ -558,17 +542,17 @@ package xkbcomp { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, byacc, + ]; + inputs = [ util-macros, libxkbfile, ]; - - runtime = [ libxkbfile ]; } package libXfont2 { @@ -588,22 +572,19 @@ package libXfont2 { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + ]; + inputs = [ util-macros, freetype, xorgproto, libxtrans, libfontenc, ]; - - runtime = [ - freetype, - libfontenc, - ]; } package libxcvt { @@ -639,11 +620,13 @@ package libXdmcp { generate = "NOCONFIGURE=1 ./autogen.sh"; }; - inputs = [ + tools = [ automake, libtool, pkgconf, + ]; + inputs = [ util-macros, xorgproto, ]; @@ -663,8 +646,7 @@ package xkeyboard-config { }; exec = meson {}; - - inputs = [ perl ]; + tools = [ perl ]; } package libpciaccess { @@ -687,7 +669,6 @@ package libpciaccess { }; inputs = [ zlib ]; - runtime = [ zlib ]; } package xserver { @@ -719,9 +700,9 @@ package xserver { }; }; - inputs = [ - awk, + tools = [ awk ]; + inputs = [ xorgproto, libxtrans, libxshmfence, @@ -730,7 +711,6 @@ package xserver { xkbcomp, xkeyboard-config, libXfont2, - dbus, font-util, libxcvt, libXext, @@ -789,10 +769,12 @@ package xwayland { }; }; - inputs = [ + tools = [ bash, awk, + ]; + inputs = [ mesa, libglvnd, libepoxy, diff --git a/internal/rosa/package/xkbcommon.az b/internal/rosa/package/xkbcommon.az index a07d4d94..d6eb1512 100644 --- a/internal/rosa/package/xkbcommon.az +++ b/internal/rosa/package/xkbcommon.az @@ -21,17 +21,12 @@ package xkbcommon { }; }; - inputs = [ + tools = [ m4, bison, - - libxml2, - wayland, - wayland-protocols, - xkeyboard-config, ]; - runtime = [ + inputs = [ libxml2, wayland, wayland-protocols, diff --git a/internal/rosa/package/xz.az b/internal/rosa/package/xz.az index a02916b4..0a186c28 100644 --- a/internal/rosa/package/xz.az +++ b/internal/rosa/package/xz.az @@ -14,5 +14,7 @@ package xz { exec = make {}; - inputs = [ diffutils ]; + tools = [ diffutils ]; + + unlikely = true; } diff --git a/internal/rosa/package/zstd.az b/internal/rosa/package/zstd.az index ec1e21b1..29e2c51f 100644 --- a/internal/rosa/package/zstd.az +++ b/internal/rosa/package/zstd.az @@ -24,7 +24,7 @@ ZSTD_BIN=/cure/programs/zstd /usr/src/zstd/tests/playTests.sh `; }; - inputs = [ + tools = [ make, diffutils, ]; diff --git a/internal/rosa/perl.go b/internal/rosa/perl.go index a828609b..705b1b8d 100644 --- a/internal/rosa/perl.go +++ b/internal/rosa/perl.go @@ -2,14 +2,19 @@ package rosa var _perl = H("perl") +var _ Helper = new(MakeMakerHelper) + // MakeMakerHelper builds projects using the included MakeMaker script. type MakeMakerHelper struct { // Whether to skip the check target. SkipCheck bool } -// extra returns perl. -func (*MakeMakerHelper) extra() P { return P{_perl, _make} } +// tools returns perl and make. +func (*MakeMakerHelper) tools() P { return P{_perl, _make} } + +// inputs returns perl. +func (*MakeMakerHelper) inputs() P { return P{_perl} } // wantsChmod returns true. func (*MakeMakerHelper) wantsChmod() bool { return true } diff --git a/internal/rosa/python.go b/internal/rosa/python.go index 96f7714c..54022bd7 100644 --- a/internal/rosa/python.go +++ b/internal/rosa/python.go @@ -25,14 +25,17 @@ type PipHelper struct { var _ Helper = new(PipHelper) -// extra returns python, or pytest if defaults are assumed. -func (attr *PipHelper) extra() P { +// tools returns python and pytest if defaults are assumed. +func (attr *PipHelper) tools() P { if attr == nil || (!attr.SkipCheck && attr.Check == "") { - return P{_pythonPyTest} + return P{_python, _pythonPyTest} } return P{_python} } +// inputs returns python. +func (*PipHelper) inputs() P { return P{_python} } + // wantsChmod returns true. func (*PipHelper) wantsChmod() bool { return true } diff --git a/internal/rosa/rosa.go b/internal/rosa/rosa.go index 1ad15100..beffb3ff 100644 --- a/internal/rosa/rosa.go +++ b/internal/rosa/rosa.go @@ -277,10 +277,12 @@ function apply { // helperInPlace is a special directory value for omitting the cd statement. const helperInPlace = "\x00" -// Helper is a build system helper for [Toolchain.NewPackage]. +// Helper is a build system helper for [Toolchain.New]. type Helper interface { - // extra returns helper-specific dependencies. - extra() P + // tools returns helper-specific tool handles. + tools() P + // inputs returns helper-specific input handles. + inputs() P // wantsChmod returns whether the source directory should be made writable. wantsChmod() bool @@ -335,6 +337,8 @@ type PackageAttr struct { // Whether to create [pkg.KindExecNet] instead of [pkg.KindExec]. HostNet bool + // Native utilities used by the build process. + Tools P // Unregistered extras. Extra []pkg.Artifact // Passed through to [Toolchain.New], before source. @@ -362,7 +366,7 @@ func (t Toolchain) appendHandle(a []pkg.Artifact, pv pa, p ArtifactH) []pkg.Arti pv[p] = struct{}{} meta, u := t.MustLoad(p) - for _, d := range meta.Dependencies { + for _, d := range meta.Runtimes { a = t.appendHandle(a, pv, d) } return append(a, u) @@ -393,7 +397,7 @@ func (t Toolchain) New( source pkg.Artifact, attr *PackageAttr, helper Helper, - extra ...ArtifactH, + inputs ...ArtifactH, ) pkg.Artifact { if attr == nil { attr = new(PackageAttr) @@ -411,7 +415,10 @@ func (t Toolchain) New( rn = name + "-" + version } - root := make([]pkg.Artifact, 0, 1<<3+len(attr.Extra)+len(extra)) + root := make([]pkg.Artifact, 0, 1<<3+ + len(attr.Extra)+ + len(attr.Tools)+ + len(inputs)) root = append(root, attr.Extra...) const lcMessages = "LC_MESSAGES=C.UTF-8" @@ -485,10 +492,16 @@ func (t Toolchain) New( wantsChmod, wantsWrite := helper.wantsChmod(), helper.wantsWrite() { pv := paGet() - for _, p := range helper.extra() { + for _, p := range helper.tools() { root = t.appendHandle(root, pv, p) } - for _, p := range extra { + for _, p := range helper.inputs() { + root = t.appendHandle(root, pv, p) + } + for _, p := range attr.Tools { + root = t.appendHandle(root, pv, p) + } + for _, p := range inputs { root = t.appendHandle(root, pv, p) } boot := t.S.New(t.stage - 1) @@ -592,8 +605,11 @@ type GenericHelper struct { var _ Helper = new(GenericHelper) -// extra is a noop. -func (*GenericHelper) extra() P { return nil } +// tools is a noop. +func (*GenericHelper) tools() P { return nil } + +// inputs is a noop. +func (*GenericHelper) inputs() P { return nil } // wantsChmod returns false. func (*GenericHelper) wantsChmod() bool { return false } diff --git a/internal/rosa/state.go b/internal/rosa/state.go index fca1aa48..f2ba2059 100644 --- a/internal/rosa/state.go +++ b/internal/rosa/state.go @@ -91,7 +91,9 @@ type Metadata struct { Website string `json:"website,omitempty"` // Runtime dependencies. - Dependencies P `json:"dependencies"` + Runtimes P `json:"runtime"` + // Whether this package is unlike to be a runtime dependency. + Unlikely bool `json:"unlikely,omitempty"` // Package version. Version string `json:"version"` @@ -1028,6 +1030,12 @@ func (t Toolchain) evalArtifact(v any, meta *Metadata) pkg.Artifact { } } +// isUnlikely returns whether p is unlikely to be a runtime dependency. +func (t Toolchain) isUnlikely(handle ArtifactH) bool { + meta, _ := t.MustLoad(handle) + return meta.Unlikely +} + // pf implements [azalea.PF]. func (ctx *evalContext) pf( name azalea.Ident, @@ -1049,9 +1057,11 @@ func (ctx *evalContext) pf( source any helper Helper overlay string + join bool - inputs, runtimes, extra azalea.Array + tools, inputs, extra azalea.Array + runtimes = azalea.Array{} bootstrap = true ) if err = args.Apply(map[unique.Handle[azalea.Ident]]any{ @@ -1082,7 +1092,10 @@ func (ctx *evalContext) pf( k("source"): &source, k("exec"): &helper, k("inputs"): &inputs, + k("tools"): &tools, k("runtime"): &runtimes, + k("join"): &join, + k("unlikely"): &meta.Unlikely, k("extra"): &extra, k("overlay"): &overlay, }); err != nil { @@ -1092,12 +1105,39 @@ func (ctx *evalContext) pf( var inputsH, extraH P if inputsH, err = toHandles(inputs); err != nil { return - } else if meta.Dependencies, err = toHandles(runtimes); err != nil { + } else if attr.Tools, err = toHandles(tools); err != nil { return } else if extraH, err = toHandles(extra); err != nil { return } + if join || (runtimes != nil && len(runtimes) == 0 && helper != nil) { + hi := helper.inputs() + meta.Runtimes = make(P, 0, len(hi)+len(inputsH)+len(runtimes)) + for _, h := range hi { + if ctx.t.isUnlikely(h) { + continue + } + meta.Runtimes = append(meta.Runtimes, h) + } + for _, h := range inputsH { + if ctx.t.isUnlikely(h) { + continue + } + meta.Runtimes = append(meta.Runtimes, h) + } + + if join { + var extraRuntimes P + if extraRuntimes, err = toHandles(runtimes); err != nil { + return + } + meta.Runtimes = append(meta.Runtimes, extraRuntimes...) + } + } else if meta.Runtimes, err = toHandles(runtimes); err != nil { + return + } + meta.ID = int(anitya) for _, pathname := range patches { var p []byte diff --git a/internal/store/data.go b/internal/store/data.go index 34a0f261..380481a0 100644 --- a/internal/store/data.go +++ b/internal/store/data.go @@ -23,7 +23,8 @@ func entryEncode(w io.Writer, s *hst.State) error { } } -// entryDecodeHeader calls entryReadHeader, returning [hst.AppError] for a non-nil error. +// entryDecodeHeader calls entryReadHeader, returning [hst.AppError] for a +// non-nil error. func entryDecodeHeader(r io.Reader) (hst.Enablements, error) { if et, err := entryReadHeader(r); err != nil { return 0, &hst.AppError{Step: "decode state header", Err: err} @@ -44,11 +45,14 @@ func entryDecode(r io.Reader, p *hst.State) (hst.Enablements, error) { } else if err = p.Config.Validate(hst.VAllowInsecure); err != nil { return et, err } else if p.Enablements.Unwrap() != et { - return et, &hst.AppError{Step: "validate state enablement", Err: os.ErrInvalid, + return et, &hst.AppError{ + Step: "validate state enablement", + Err: os.ErrInvalid, Msg: fmt.Sprintf( "state entry %s has unexpected enablement byte %#x, %#x", p.ID.String(), byte(p.Enablements.Unwrap()), byte(et), - )} + ), + } } else { return et, nil } diff --git a/internal/store/header.go b/internal/store/header.go index 5b5d73be..0e5a92a2 100644 --- a/internal/store/header.go +++ b/internal/store/header.go @@ -60,7 +60,8 @@ func (e *EntrySizeError) Error() string { return "state entry file " + strconv.Quote(e.Name) + " is too short" } -// entryCheckFile checks whether [os.FileInfo] refers to a file that might hold [hst.State]. +// entryCheckFile checks whether [os.FileInfo] refers to a file that might hold +// [hst.State]. func entryCheckFile(fi os.FileInfo) error { if fi.IsDir() { return syscall.EISDIR diff --git a/internal/store/segment.go b/internal/store/segment.go index 06849749..8b7dd0d6 100644 --- a/internal/store/segment.go +++ b/internal/store/segment.go @@ -7,6 +7,7 @@ import ( "os" "strconv" "sync" + "syscall" "hakurei.app/check" "hakurei.app/hst" @@ -76,13 +77,20 @@ func (eh *EntryHandle) save(state *hst.State) error { return err } +// KillFunc is the function signature of syscall.Kill. +type KillFunc func(pid int, sig syscall.Signal) (err error) + // Load loads and validates the state entry header, and returns the // [hst.Enablements] byte. For a non-nil v, the full state payload is decoded -// and stored in the value pointed to by v. +// and stored in the value pointed to by v, and if kill is non-nil, the presence +// of the monitoring process is checked, and a stale entry is destroyed. // // Load validates the embedded [hst.Config] value. A non-nil error returned by // Load is of type [hst.AppError]. -func (eh *EntryHandle) Load(v *hst.State) (hst.Enablements, error) { +func (eh *EntryHandle) Load( + v *hst.State, + kill KillFunc, +) (hst.Enablements, error) { f, err := eh.open(os.O_RDONLY, 0) if err != nil { return 0, err @@ -92,8 +100,41 @@ func (eh *EntryHandle) Load(v *hst.State) (hst.Enablements, error) { if v != nil { et, err = entryDecode(f, v) if err == nil && v.ID != eh.ID { - err = &hst.AppError{Step: "validate state identifier", Err: os.ErrInvalid, - Msg: fmt.Sprintf("state entry %s has unexpected id %s", eh.ID.String(), v.ID.String())} + err = &hst.AppError{ + Step: "validate state identifier", + Err: os.ErrInvalid, + Msg: fmt.Sprintf( + "state entry %s has unexpected id %s", + eh.ID.String(), v.ID.String(), + ), + } + } + if kill != nil { + errno := kill(v.PID, 0) + if errno != nil { + if !errors.Is(errno, syscall.ESRCH) { + err = &hst.AppError{ + Step: "check monitor process", + Err: errno, + } + } else { + if err = eh.Destroy(); err != nil { + err = &hst.AppError{ + Step: "destroy stale entry", + Err: err, + } + } else { + err = &hst.AppError{ + Step: "load stale entry", + Err: errno, + Msg: fmt.Sprintf( + "stale entry %s", + eh.ID.String(), + ), + } + } + } + } } } else { et, err = entryDecodeHeader(f) @@ -127,7 +168,10 @@ type Handle struct { // A non-nil error returned by Lock is of type [hst.AppError]. func (h *Handle) Lock() (unlock func(), err error) { if unlock, err = h.fileMu.Lock(); err != nil { - return nil, &hst.AppError{Step: "acquire lock on store segment " + strconv.Itoa(h.Identity), Err: err} + return nil, &hst.AppError{ + Step: "acquire lock on store segment " + strconv.Itoa(h.Identity), + Err: err, + } } return } @@ -174,8 +218,11 @@ func (h *Handle) Entries() (iter.Seq[*EntryHandle], int, error) { // this should never happen if ent.IsDir() { - eh.DecodeErr = &hst.AppError{Step: step, - Err: errors.New("unexpected directory " + strconv.Quote(ent.Name()) + " in store")} + eh.DecodeErr = &hst.AppError{ + Step: step, + Err: errors.New("unexpected directory " + + strconv.Quote(ent.Name()) + " in store"), + } goto out } @@ -186,7 +233,10 @@ func (h *Handle) Entries() (iter.Seq[*EntryHandle], int, error) { // this either indicates a serious bug or external interference if err := eh.ID.UnmarshalText([]byte(ent.Name())); err != nil { - eh.DecodeErr = &hst.AppError{Step: "decode store segment entry", Err: err} + eh.DecodeErr = &hst.AppError{ + Step: "decode store segment entry", + Err: err, + } goto out } diff --git a/internal/store/segment_test.go b/internal/store/segment_test.go index a244fcdc..6316a278 100644 --- a/internal/store/segment_test.go +++ b/internal/store/segment_test.go @@ -2,6 +2,7 @@ package store_test import ( "errors" + "fmt" "io" "iter" "os" @@ -55,7 +56,7 @@ func TestStateEntryHandle(t *testing.T) { if err := save(&eh, nil); !reflect.DeepEqual(err, wantErr()) { t.Errorf("save: error = %v, want %v", err, wantErr()) } - if _, err := eh.Load(nil); !reflect.DeepEqual(err, wantErr()) { + if _, err := eh.Load(nil, nil); !reflect.DeepEqual(err, wantErr()) { t.Errorf("load: error = %v, want %v", err, wantErr()) } }) @@ -95,8 +96,10 @@ func TestStateEntryHandle(t *testing.T) { t.Run("saveload", func(t *testing.T) { t.Parallel() - eh := store.EntryHandle{Pathname: check.MustAbs(t.TempDir()).Append("entry"), - ID: store.NewTemplateState().ID} + eh := store.EntryHandle{ + Pathname: check.MustAbs(t.TempDir()).Append("entry"), + ID: store.NewTemplateState().ID, + } if err := save(&eh, store.NewTemplateState()); err != nil { t.Fatalf("save: error = %v", err) @@ -125,7 +128,7 @@ func TestStateEntryHandle(t *testing.T) { t.Run("load header only", func(t *testing.T) { t.Parallel() - if et, err := eh.Load(nil); err != nil { + if et, err := eh.Load(nil, nil); err != nil { t.Fatalf("load: error = %v", err) } else if want := store.NewTemplateState().Enablements.Unwrap(); et != want { t.Errorf("load: et = %x, want %x", et, want) @@ -136,7 +139,7 @@ func TestStateEntryHandle(t *testing.T) { t.Parallel() var got hst.State - if _, err := eh.Load(&got); err != nil { + if _, err := eh.Load(&got, nil); err != nil { t.Fatalf("load: error = %v", err) } else if want := store.NewTemplateState(); !reflect.DeepEqual(&got, want) { t.Errorf("load: %#v, want %#v", &got, want) @@ -145,11 +148,64 @@ func TestStateEntryHandle(t *testing.T) { t.Run("load inconsistent", func(t *testing.T) { t.Parallel() - wantErr := &hst.AppError{Step: "validate state identifier", Err: os.ErrInvalid, - Msg: "state entry 00000000000000000000000000000000 has unexpected id aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"} + wantErr := &hst.AppError{ + Step: "validate state identifier", + Err: os.ErrInvalid, + Msg: "state entry 00000000000000000000000000000000 has unexpected id aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + } ehi := store.EntryHandle{Pathname: eh.Pathname} - if _, err := ehi.Load(new(hst.State)); !reflect.DeepEqual(err, wantErr) { + if _, err := ehi.Load(new(hst.State), nil); !reflect.DeepEqual(err, wantErr) { + t.Errorf("load: error = %#v, want %#v", err, wantErr) + } + }) + + t.Run("stale fault", func(t *testing.T) { + t.Parallel() + wantErr := &hst.AppError{ + Step: "check monitor process", + Err: syscall.EFAULT, + } + + if _, err := eh.Load(new(hst.State), func(pid int, sig syscall.Signal) (err error) { + if pid != store.NewTemplateState().PID { + return fmt.Errorf("bad pid %d", pid) + } + if sig != 0 { + return fmt.Errorf("bad signal %d", sig) + } + return syscall.EFAULT + }); !reflect.DeepEqual(err, wantErr) { + t.Errorf("load: error = %#v, want %#v", err, wantErr) + } + }) + + t.Run("stale", func(t *testing.T) { + t.Parallel() + wantErr := &hst.AppError{ + Step: "load stale entry", + Err: syscall.ESRCH, + Msg: "stale entry aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + } + + ehi := store.EntryHandle{ + Pathname: check.MustAbs(t.TempDir()).Append("entry"), + ID: eh.ID, + } + + if err := save(&ehi, store.NewTemplateState()); err != nil { + t.Fatalf("save: error = %v", err) + } + + if _, err := ehi.Load(new(hst.State), func(pid int, sig syscall.Signal) (err error) { + if pid != store.NewTemplateState().PID { + return fmt.Errorf("bad pid %d", pid) + } + if sig != 0 { + return fmt.Errorf("bad signal %d", sig) + } + return syscall.ESRCH + }); !reflect.DeepEqual(err, wantErr) { t.Errorf("load: error = %#v, want %#v", err, wantErr) } }) @@ -229,7 +285,9 @@ func TestSegmentHandle(t *testing.T) { } } - slices.SortFunc(got, func(a, b *store.EntryHandle) int { return strings.Compare(a.Pathname.String(), b.Pathname.String()) }) + slices.SortFunc(got, func(a, b *store.EntryHandle) int { + return strings.Compare(a.Pathname.String(), b.Pathname.String()) + }) want := tc.want(func(err error, name string) *store.EntryHandle { eh := store.EntryHandle{DecodeErr: err, Pathname: segment.Append(name)} if err == nil { @@ -247,6 +305,8 @@ func TestSegmentHandle(t *testing.T) { } t.Run("nonexistent", func(t *testing.T) { + t.Parallel() + var wantErr = &hst.AppError{Step: "read store segment entries", Err: &os.PathError{ Op: "open", Path: "/proc/nonexistent", diff --git a/internal/store/store.go b/internal/store/store.go index 3604521c..eb9cec41 100644 --- a/internal/store/store.go +++ b/internal/store/store.go @@ -1,4 +1,5 @@ -// Package store implements cross-process state tracking for hakurei container instances. +// Package store provides storage for hakurei instance states, safe for +// concurrent and cross-process use. package store import ( @@ -15,11 +16,15 @@ import ( "hakurei.app/internal/lockedfile" ) -// MutexName is the pathname of the file backing [lockedfile.Mutex] of a [Store] and [Handle]. +// MutexName is the pathname of the file backing [lockedfile.Mutex] of a [Store] +// and [Handle]. const MutexName = "lock" -// A Store keeps track of [hst.State] via a well-known filesystem accessible to all hakurei priv-side processes. -// Access to store data and related resources are synchronised on a per-segment basis via [Handle]. +// A Store keeps track of [hst.State] via a well-known filesystem accessible to +// all hakurei priv-side processes. +// +// Access to store data and related resources are synchronised on a per-segment +// basis via [Handle]. type Store struct { // Pathname of directory that the store is rooted in. base *check.Absolute @@ -28,8 +33,10 @@ type Store struct { handles sync.Map // Inter-process mutex to synchronise operations against the entire store. - // Held during List and when initialising previously unknown identities during Do. - // Must not be accessed directly. Callers should use the bigLock method instead. + // + // Held during List and when initialising previously unknown identities + // during Do. Must not be accessed directly. Callers should use the bigLock + // method instead. fileMu *lockedfile.Mutex // For creating the base directory. @@ -43,11 +50,17 @@ type Store struct { func (s *Store) bigLock() (unlock func(), err error) { s.mkdirOnce.Do(func() { s.mkdirErr = os.MkdirAll(s.base.String(), 0700) }) if s.mkdirErr != nil { - return nil, &hst.AppError{Step: "create state store directory", Err: s.mkdirErr} + return nil, &hst.AppError{ + Step: "create state store directory", + Err: s.mkdirErr, + } } if unlock, err = s.fileMu.Lock(); err != nil { - return nil, &hst.AppError{Step: "acquire lock on the state store", Err: err} + return nil, &hst.AppError{ + Step: "acquire lock on the state store", + Err: err, + } } return } @@ -73,7 +86,10 @@ func (s *Store) Handle(identity int) (*Handle, error) { if err != nil && !errors.Is(err, fs.ErrExist) { // handle methods will likely return ENOENT s.handles.CompareAndDelete(identity, h) - return nil, &hst.AppError{Step: "create store segment directory", Err: err} + return nil, &hst.AppError{ + Step: "create store segment directory", + Err: err, + } } } return h, nil @@ -88,8 +104,9 @@ type SegmentIdentity struct { } // Segments returns an iterator over all [SegmentIdentity] known to the [Store]. -// To obtain a [Handle] on a segment, caller must then call [Store.Handle]. -// A non-nil error returned by segments is of type [hst.AppError]. +// +// To obtain a [Handle] on a segment, caller must then call [Store.Handle]. A +// non-nil error returned by segments is of type [hst.AppError]. func (s *Store) Segments() (iter.Seq[SegmentIdentity], int, error) { // read directory contents, should only contain storeMutexName and identity var entries []os.DirEntry @@ -102,7 +119,10 @@ func (s *Store) Segments() (iter.Seq[SegmentIdentity], int, error) { unlock() if err != nil && !errors.Is(err, os.ErrNotExist) { - return nil, -1, &hst.AppError{Step: "read store segments", Err: err} + return nil, -1, &hst.AppError{ + Step: "read store segments", + Err: err, + } } } @@ -126,19 +146,25 @@ func (s *Store) Segments() (iter.Seq[SegmentIdentity], int, error) { } // this should never happen - si.Err = &hst.AppError{Step: step, Err: syscall.ENOTDIR, - Msg: "skipped non-directory entry " + strconv.Quote(ent.Name())} + si.Err = &hst.AppError{ + Step: step, Err: syscall.ENOTDIR, + Msg: "skipped non-directory entry " + strconv.Quote(ent.Name()), + } goto out } // failure paths either indicates a serious bug or external interference if v, err := strconv.Atoi(ent.Name()); err != nil { - si.Err = &hst.AppError{Step: step, Err: err, - Msg: "skipped non-identity entry " + strconv.Quote(ent.Name())} + si.Err = &hst.AppError{ + Step: step, Err: err, + Msg: "skipped non-identity entry " + strconv.Quote(ent.Name()), + } goto out } else if v < hst.IdentityStart || v > hst.IdentityEnd { - si.Err = &hst.AppError{Step: step, Err: syscall.ERANGE, - Msg: "skipped out of bounds entry " + strconv.Itoa(v)} + si.Err = &hst.AppError{ + Step: step, Err: syscall.ERANGE, + Msg: "skipped out of bounds entry " + strconv.Itoa(v), + } goto out } else { si.Identity = v @@ -152,9 +178,12 @@ func (s *Store) Segments() (iter.Seq[SegmentIdentity], int, error) { }, l, nil } -// All returns a non-reusable iterator over all [EntryHandle] known to this [Store]. -// Callers must call copyError after completing iteration and handle the error accordingly. -// A non-nil error returned by copyError is of type [hst.AppError]. +// All returns a non-reusable iterator over all [EntryHandle] known to this +// [Store]. The resulting handles may be retained, but are only safe to use +// during the iteration producing them. +// +// Callers must call copyError after completing iteration and handle the error +// accordingly. A non-nil error returned by copyError is of type [hst.AppError]. func (s *Store) All() (entries iter.Seq[*EntryHandle], copyError func() error) { var savedErr error return func(yield func(*EntryHandle) bool) { @@ -197,7 +226,12 @@ func (s *Store) All() (entries iter.Seq[*EntryHandle], copyError func() error) { } // New returns the address of a new instance of [Store]. -// Multiple instances of [Store] rooted in the same directory is possible, but unsupported. +// +// Multiple instances of [Store] rooted in the same directory is possible, but +// unsupported. func New(base *check.Absolute) *Store { - return &Store{base: base, fileMu: lockedfile.MutexAt(base.Append(MutexName).String())} + return &Store{ + base: base, + fileMu: lockedfile.MutexAt(base.Append(MutexName).String()), + } } @@ -954,8 +954,9 @@ type ChecksumMismatchError struct { } func (e *ChecksumMismatchError) Error() string { - return "got " + Encode(e.Got) + - " instead of " + Encode(e.Want) + return "unexpected checksum\n" + + "\t got: " + Encode(e.Got) + "\n" + + "\twant: " + Encode(e.Want) } // LinknamePrefixError describes a malformed linkname to a [Checksum]. @@ -1521,7 +1522,7 @@ func (c *Cache) openFile( id := c.Ident(f) if c.msg.IsVerbose() { rn := reportName(f, id) - c.msg.Verbosef("curing %s%s%s in memory...", c.sgrIdent, rn, c.sgrRes) + c.msg.Verbosef("opening %s%s%s...", c.sgrIdent, rn, c.sgrRes) defer func() { if err == nil { c.msg.Verbosef("opened %s%s%s for reading", c.sgrIdent, rn, c.sgrRes) @@ -2053,6 +2054,9 @@ func WhenceString(whence int) string { } } +// isType returns whether v is of concrete type T. +func isType[T any](v any) bool { _, ok := v.(T); return ok } + // cure implements Cure without acquiring a read lock on abortMu. cure must not // be entered during Abort. func (c *Cache) cure(a Artifact, curesExempt, rebuild bool) ( @@ -2170,7 +2174,7 @@ func (c *Cache) cure(a Artifact, curesExempt, rebuild bool) ( } whence = WNew - if c.msg.IsVerbose() { + if c.msg.IsVerbose() && !isType[*Collect](a) { rn := reportName(a, id) c.msg.Verbosef("curing %s%s%s...", c.sgrIdent, rn, c.sgrRes) defer func() { @@ -2504,7 +2508,7 @@ func (c *Cache) cure(a Artifact, curesExempt, rebuild bool) ( err = f.linkSubstitute(ids, substitutes) } if err != nil { - if c.msg.IsVerbose() { + if c.msg.IsVerbose() && !IsCollected(err) { c.msg.Verbosef( "cure %s%s%s: %s%v%s", c.sgrIdent, reportName(ca, id), c.sgrRes, diff --git a/pkg/pkg_test.go b/pkg/pkg_test.go index c11b6ac4..aa5016c1 100644 --- a/pkg/pkg_test.go +++ b/pkg/pkg_test.go @@ -1794,8 +1794,9 @@ func TestErrors(t *testing.T) { Want: (pkg.Checksum)(bytes.Repeat([]byte{ 0x75, 0xe6, 0x9d, 0x6d, 0xe7, 0x9f, }, 8)), - }, "got AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + - " instead of deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"}, + }, "unexpected checksum\n" + + "\t got: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n" + + "\twant: deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"}, {"ResponseStatusError", pkg.ResponseStatusError( http.StatusNotAcceptable, @@ -1856,7 +1857,9 @@ func TestScrubError(t *testing.T) { {"sample", *newWantScrubError( fhs.AbsVarLib.Append("cure"), ), `checksum mismatches: -got vsAhtPNo4waRNOASwrQwcIPTqb3SBuJOXw2G4T1mNmVZM-wrQTRllmgXqcIIoRcX instead of _wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +unexpected checksum + got: vsAhtPNo4waRNOASwrQwcIPTqb3SBuJOXw2G4T1mNmVZM-wrQTRllmgXqcIIoRcX + want: _wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA dangling identifiers: _gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -1911,7 +1914,9 @@ errors during scrub: }, }, }, `checksum mismatches: -got AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA instead of CH3AiUrCCcVOjOYLaMKKK1Da78989JtfHeIsxMzWOQFiN4mrCLDYpoDxLWqJWCUN +unexpected checksum + got: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + want: CH3AiUrCCcVOjOYLaMKKK1Da78989JtfHeIsxMzWOQFiN4mrCLDYpoDxLWqJWCUN dangling identifiers: deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef |
