aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTING.md11
-rw-r--r--cmd/app/lock.go3
-rw-r--r--cmd/dist/VERSION2
-rw-r--r--cmd/hakurei/command.go6
-rw-r--r--cmd/hakurei/parse.go11
-rw-r--r--cmd/hakurei/parse_test.go2
-rw-r--r--cmd/hakurei/print.go13
-rw-r--r--cmd/hakurei/print_test.go2
-rw-r--r--cmd/mbf/info.go4
-rw-r--r--internal/outcome/process.go2
-rw-r--r--internal/rosa/azalea/evaluate.go18
-rw-r--r--internal/rosa/cmake.go7
-rw-r--r--internal/rosa/llvm.go2
-rw-r--r--internal/rosa/make.go7
-rw-r--r--internal/rosa/meson.go7
-rw-r--r--internal/rosa/package/acl/package.az8
-rw-r--r--internal/rosa/package/argp-standalone.az3
-rw-r--r--internal/rosa/package/awk.az2
-rw-r--r--internal/rosa/package/bison.az2
-rw-r--r--internal/rosa/package/buildcatrust.az1
-rw-r--r--internal/rosa/package/cairo.az13
-rw-r--r--internal/rosa/package/check.az2
-rw-r--r--internal/rosa/package/connman/package.az11
-rw-r--r--internal/rosa/package/cryptsetup.az13
-rw-r--r--internal/rosa/package/curl.az11
-rw-r--r--internal/rosa/package/dbus.az5
-rw-r--r--internal/rosa/package/dtc.az2
-rw-r--r--internal/rosa/package/e2fsprogs.az6
-rw-r--r--internal/rosa/package/elfutils/package.az12
-rw-r--r--internal/rosa/package/fcft.az6
-rw-r--r--internal/rosa/package/firmware.az2
-rw-r--r--internal/rosa/package/flex.az2
-rw-r--r--internal/rosa/package/fontconfig.az8
-rw-r--r--internal/rosa/package/foot.az14
-rw-r--r--internal/rosa/package/fuse/package.az7
-rw-r--r--internal/rosa/package/gawk/package.az2
-rw-r--r--internal/rosa/package/gcc/package.az15
-rw-r--r--internal/rosa/package/git.az10
-rw-r--r--internal/rosa/package/glib/package.az8
-rw-r--r--internal/rosa/package/glslang.az2
-rw-r--r--internal/rosa/package/gnu.az69
-rw-r--r--internal/rosa/package/gnutls/package.az13
-rw-r--r--internal/rosa/package/go.az (renamed from internal/rosa/package/go/package.az)7
-rw-r--r--internal/rosa/package/go/820480.patch24
-rw-r--r--internal/rosa/package/hakurei.az20
-rw-r--r--internal/rosa/package/harfbuzz.az5
-rw-r--r--internal/rosa/package/hwdata.az6
-rw-r--r--internal/rosa/package/images/package.az4
-rw-r--r--internal/rosa/package/ipmitool.az7
-rw-r--r--internal/rosa/package/iproute2.az15
-rw-r--r--internal/rosa/package/kernel/amd64.config2
-rw-r--r--internal/rosa/package/kernel/arm64.config2
-rw-r--r--internal/rosa/package/kernel/package.az22
-rw-r--r--internal/rosa/package/kmod.az6
-rw-r--r--internal/rosa/package/libaio.az5
-rw-r--r--internal/rosa/package/libarchive/package.az2
-rw-r--r--internal/rosa/package/libbpf.az2
-rw-r--r--internal/rosa/package/libbsd.az7
-rw-r--r--internal/rosa/package/libcap.az2
-rw-r--r--internal/rosa/package/libdisplay-info.az8
-rw-r--r--internal/rosa/package/libdrm.az6
-rw-r--r--internal/rosa/package/libepoxy.az2
-rw-r--r--internal/rosa/package/libevdev.az6
-rw-r--r--internal/rosa/package/libexpat.az6
-rw-r--r--internal/rosa/package/libgd.az1
-rw-r--r--internal/rosa/package/libglvnd.az6
-rw-r--r--internal/rosa/package/libinput.az9
-rw-r--r--internal/rosa/package/libliftoff.az2
-rw-r--r--internal/rosa/package/libmd.az2
-rw-r--r--internal/rosa/package/libpng.az1
-rw-r--r--internal/rosa/package/libpsl.az2
-rw-r--r--internal/rosa/package/libseccomp.az6
-rw-r--r--internal/rosa/package/libtirpc.az6
-rw-r--r--internal/rosa/package/libva.az7
-rw-r--r--internal/rosa/package/libxml2.az6
-rw-r--r--internal/rosa/package/libxslt.az6
-rw-r--r--internal/rosa/package/lit.az1
-rw-r--r--internal/rosa/package/lm_sensors.az3
-rw-r--r--internal/rosa/package/lua/package.az2
-rw-r--r--internal/rosa/package/lvm2/package.az6
-rw-r--r--internal/rosa/package/mesa/package.az4
-rw-r--r--internal/rosa/package/meson/package.az2
-rw-r--r--internal/rosa/package/mksh.az2
-rw-r--r--internal/rosa/package/muon.az7
-rw-r--r--internal/rosa/package/musl-fts.az2
-rw-r--r--internal/rosa/package/musl-obstack.az2
-rw-r--r--internal/rosa/package/musl/package.az4
-rw-r--r--internal/rosa/package/ncurses.az2
-rw-r--r--internal/rosa/package/net-tools/package.az7
-rw-r--r--internal/rosa/package/netfilter/package.az18
-rw-r--r--internal/rosa/package/nettle.az6
-rw-r--r--internal/rosa/package/ninja.az2
-rw-r--r--internal/rosa/package/noto.az6
-rw-r--r--internal/rosa/package/nss.az2
-rw-r--r--internal/rosa/package/openssl.az6
-rw-r--r--internal/rosa/package/p11-kit.az6
-rw-r--r--internal/rosa/package/pango/package.az7
-rw-r--r--internal/rosa/package/pcre2.az6
-rw-r--r--internal/rosa/package/perl.az20
-rw-r--r--internal/rosa/package/pipewire.az11
-rw-r--r--internal/rosa/package/pkg-config.az2
-rw-r--r--internal/rosa/package/popt.az2
-rw-r--r--internal/rosa/package/procps.az2
-rw-r--r--internal/rosa/package/python/package.az65
-rw-r--r--internal/rosa/package/qemu/package.az13
-rw-r--r--internal/rosa/package/rdfind.az1
-rw-r--r--internal/rosa/package/rename.az2
-rw-r--r--internal/rosa/package/spirv.az19
-rw-r--r--internal/rosa/package/squashfs-tools.az10
-rw-r--r--internal/rosa/package/stage0.az2
-rw-r--r--internal/rosa/package/strace/package.az6
-rw-r--r--internal/rosa/package/sway/package.az8
-rw-r--r--internal/rosa/package/tamago.az6
-rw-r--r--internal/rosa/package/tllist.az2
-rw-r--r--internal/rosa/package/toybox.az12
-rw-r--r--internal/rosa/package/unzip.az2
-rw-r--r--internal/rosa/package/util-linux/a323dddbcd1ed05a10e7e870b3e1a48b4ed44a43.patch35
-rw-r--r--internal/rosa/package/util-linux/package.az (renamed from internal/rosa/package/util-linux.az)11
-rw-r--r--internal/rosa/package/vim.az1
-rw-r--r--internal/rosa/package/wayland.az10
-rw-r--r--internal/rosa/package/wlroots.az14
-rw-r--r--internal/rosa/package/x.az152
-rw-r--r--internal/rosa/package/xkbcommon.az9
-rw-r--r--internal/rosa/package/xz.az4
-rw-r--r--internal/rosa/package/zstd.az2
-rw-r--r--internal/rosa/perl.go9
-rw-r--r--internal/rosa/python.go9
-rw-r--r--internal/rosa/rosa.go36
-rw-r--r--internal/rosa/state.go46
-rw-r--r--internal/store/data.go10
-rw-r--r--internal/store/header.go3
-rw-r--r--internal/store/segment.go66
-rw-r--r--internal/store/segment_test.go78
-rw-r--r--internal/store/store.go80
-rw-r--r--pkg/pkg.go14
-rw-r--r--pkg/pkg_test.go13
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()),
+ }
}
diff --git a/pkg/pkg.go b/pkg/pkg.go
index 5d9d8d48..75e0d1b1 100644
--- a/pkg/pkg.go
+++ b/pkg/pkg.go
@@ -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