From 30eb0d6a613ad268f6805ccbcdcabf158e7f526f Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sun, 17 May 2026 13:07:12 +0900 Subject: [PATCH] internal/rosa: key metadata by string For upcoming azalea integration. The API is quite ugly right now to ease migration. Signed-off-by: Ophestra --- cmd/mbf/info.go | 19 +- cmd/mbf/info_test.go | 34 +- cmd/mbf/internal/pkgserver/api.go | 6 +- cmd/mbf/internal/pkgserver/api_test.go | 77 +---- cmd/mbf/internal/pkgserver/index.go | 22 +- cmd/mbf/main.go | 70 ++-- cmd/mbf/main_test.go | 10 +- internal/rosa/acl.go | 16 +- internal/rosa/all.go | 447 ------------------------- internal/rosa/all_test.go | 81 ----- internal/rosa/argp-standalone.go | 8 +- internal/rosa/busybox.go | 10 +- internal/rosa/bzip2.go | 8 +- internal/rosa/cmake.go | 12 +- internal/rosa/connman.go | 8 +- internal/rosa/curl.go | 8 +- internal/rosa/dbus.go | 16 +- internal/rosa/dtc.go | 8 +- internal/rosa/elfutils.go | 8 +- internal/rosa/fakeroot.go | 8 +- internal/rosa/flex.go | 8 +- internal/rosa/freetype.go | 8 +- internal/rosa/fuse.go | 8 +- internal/rosa/git.go | 19 +- internal/rosa/glslang.go | 34 +- internal/rosa/gnu.go | 244 +++++++------- internal/rosa/go.go | 51 +-- internal/rosa/gtk.go | 8 +- internal/rosa/hakurei.go | 27 +- internal/rosa/hwdata.go | 8 +- internal/rosa/images.go | 28 +- internal/rosa/kernel.go | 40 +-- internal/rosa/kmod.go | 8 +- internal/rosa/libarchive.go | 8 +- internal/rosa/libbsd.go | 16 +- internal/rosa/libcap.go | 8 +- internal/rosa/libconfig.go | 8 +- internal/rosa/libdisplay-info.go | 8 +- internal/rosa/libepoxy.go | 8 +- internal/rosa/libev.go | 8 +- internal/rosa/libexpat.go | 8 +- internal/rosa/libffi.go | 8 +- internal/rosa/libgd.go | 8 +- internal/rosa/libpng.go | 8 +- internal/rosa/libpsl.go | 8 +- internal/rosa/libseccomp.go | 8 +- internal/rosa/libtirpc.go | 8 +- internal/rosa/libucontext.go | 10 +- internal/rosa/libxml2.go | 8 +- internal/rosa/libxslt.go | 8 +- internal/rosa/llvm.go | 48 +-- internal/rosa/lm-sensors.go | 8 +- internal/rosa/make.go | 12 +- internal/rosa/mesa.go | 32 +- internal/rosa/meson.go | 12 +- internal/rosa/mksh.go | 10 +- internal/rosa/musl-fts.go | 8 +- internal/rosa/musl-obstack.go | 8 +- internal/rosa/musl.go | 24 +- internal/rosa/ncurses.go | 8 +- internal/rosa/netfilter.go | 24 +- internal/rosa/nettle.go | 8 +- internal/rosa/nettle3.go | 8 +- internal/rosa/ninja.go | 16 +- internal/rosa/nss.go | 18 +- internal/rosa/openssl.go | 8 +- internal/rosa/p11.go | 8 +- internal/rosa/pcre2.go | 8 +- internal/rosa/perl.go | 112 ++++--- internal/rosa/pixman.go | 8 +- internal/rosa/pkg-config.go | 8 +- internal/rosa/procps.go | 8 +- internal/rosa/python.go | 72 ++-- internal/rosa/qemu.go | 8 +- internal/rosa/rdfind.go | 8 +- internal/rosa/report.go | 14 +- internal/rosa/rosa.go | 139 ++++---- internal/rosa/rosa_test.go | 16 +- internal/rosa/rsync.go | 8 +- internal/rosa/squashfs.go | 8 +- internal/rosa/stage0.go | 24 +- internal/rosa/state.go | 307 +++++++++++++++++ internal/rosa/state_native.go | 197 +++++++++++ internal/rosa/state_test.go | 33 ++ internal/rosa/strace.go | 8 +- internal/rosa/tamago.go | 12 +- internal/rosa/toybox.go | 20 +- internal/rosa/unzip.go | 10 +- internal/rosa/util-linux.go | 8 +- internal/rosa/vim.go | 8 +- internal/rosa/wayland.go | 16 +- internal/rosa/x.go | 224 ++++++------- internal/rosa/xz.go | 8 +- internal/rosa/zlib.go | 8 +- internal/rosa/zstd.go | 8 +- 95 files changed, 1514 insertions(+), 1567 deletions(-) delete mode 100644 internal/rosa/all.go delete mode 100644 internal/rosa/all_test.go create mode 100644 internal/rosa/state.go create mode 100644 internal/rosa/state_native.go create mode 100644 internal/rosa/state_test.go diff --git a/cmd/mbf/info.go b/cmd/mbf/info.go index 15357301..4cdea31c 100644 --- a/cmd/mbf/info.go +++ b/cmd/mbf/info.go @@ -6,6 +6,7 @@ import ( "io" "os" "strings" + "unique" "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" @@ -36,16 +37,18 @@ func commandInfo( } for i, name := range args { - if p, ok := rosa.ResolveName(name); !ok { + handle := rosa.ArtifactH(unique.Make(name)) + if meta := rosa.Native().Get(handle); meta == nil { return fmt.Errorf("unknown artifact %q", name) } else { var suffix string - if version := rosa.Std.Version(p); version != rosa.Unversioned { + + a, version := rosa.Native().MustLoad(rosa.Std, handle) + if version != rosa.Unversioned { suffix += "-" + version } mustPrintln("name : " + name + suffix) - meta := rosa.GetMetadata(p) mustPrintln("description : " + meta.Description) if meta.Website != "" { mustPrintln("website : " + @@ -54,9 +57,9 @@ func commandInfo( if len(meta.Dependencies) > 0 { mustPrint("depends on :") for _, d := range meta.Dependencies { - s := rosa.GetMetadata(d).Name - if version := rosa.Std.Version(d); version != rosa.Unversioned { - s += "-" + version + s := rosa.Native().MustGet(d).Name + if _, _version := rosa.Native().Load(rosa.Std, d); _version != rosa.Unversioned { + s += "-" + _version } mustPrint(" " + s) } @@ -68,7 +71,7 @@ func commandInfo( if r == nil { var f io.ReadSeekCloser err = cm.Do(func(cache *pkg.Cache) (err error) { - f, err = cache.OpenStatus(rosa.Std.Load(p)) + f, err = cache.OpenStatus(a) return }) if err != nil { @@ -87,7 +90,7 @@ func commandInfo( } } } else if err = cm.Do(func(cache *pkg.Cache) (err error) { - status, n := r.ArtifactOf(cache.Ident(rosa.Std.Load(p))) + status, n := r.ArtifactOf(cache.Ident(a)) if status == nil { mustPrintln( statusPrefix + "not in report", diff --git a/cmd/mbf/info_test.go b/cmd/mbf/info_test.go index a7219e9c..e3120157 100644 --- a/cmd/mbf/info_test.go +++ b/cmd/mbf/info_test.go @@ -10,6 +10,7 @@ import ( "strings" "syscall" "testing" + "unique" "unsafe" "hakurei.app/internal/pkg" @@ -20,6 +21,13 @@ import ( func TestInfo(t *testing.T) { t.Parallel() + _, qemuVersion := rosa.Native().Load(rosa.Std, rosa.QEMU) + _, glibVersion := rosa.Native().Load(rosa.Std, rosa.GLib) + zlib, zlibVersion := rosa.Native().Load(rosa.Std, rosa.Zlib) + _, zstdVersion := rosa.Native().Load(rosa.Std, rosa.Zstd) + _, hakureiVersion := rosa.Native().Load(rosa.Std, rosa.Hakurei) + _, hakureiDistVersion := rosa.Native().Load(rosa.Std, rosa.HakureiDist) + testCases := []struct { name string args []string @@ -29,24 +37,24 @@ func TestInfo(t *testing.T) { wantErr any }{ {"qemu", []string{"qemu"}, nil, "", ` -name : qemu-` + rosa.Std.Version(rosa.QEMU) + ` +name : qemu-` + qemuVersion + ` description : a generic and open source machine emulator and virtualizer website : https://www.qemu.org -depends on : glib-` + rosa.Std.Version(rosa.GLib) + ` zstd-` + rosa.Std.Version(rosa.Zstd) + ` +depends on : glib-` + glibVersion + ` zstd-` + zstdVersion + ` `, nil}, {"multi", []string{"hakurei", "hakurei-dist"}, nil, "", ` -name : hakurei-` + rosa.Std.Version(rosa.Hakurei) + ` +name : hakurei-` + hakureiVersion + ` description : low-level userspace tooling for Rosa OS website : https://hakurei.app -name : hakurei-dist-` + rosa.Std.Version(rosa.HakureiDist) + ` +name : hakurei-dist-` + hakureiDistVersion + ` description : low-level userspace tooling for Rosa OS (distribution tarball) website : https://hakurei.app `, nil}, {"nonexistent", []string{"zlib", "\x00"}, nil, "", ` -name : zlib-` + rosa.Std.Version(rosa.Zlib) + ` +name : zlib-` + zlibVersion + ` description : lossless data-compression library website : https://zlib.net @@ -56,12 +64,12 @@ website : https://zlib.net "zstd": "internal/pkg (amd64) on satori\n", "hakurei": "internal/pkg (amd64) on satori\n\n", }, "", ` -name : zlib-` + rosa.Std.Version(rosa.Zlib) + ` +name : zlib-` + zlibVersion + ` description : lossless data-compression library website : https://zlib.net status : not yet cured -name : zstd-` + rosa.Std.Version(rosa.Zstd) + ` +name : zstd-` + zstdVersion + ` description : a fast compression algorithm website : https://facebook.github.io/zstd status : internal/pkg (amd64) on satori @@ -70,19 +78,19 @@ status : internal/pkg (amd64) on satori {"status cache perm", []string{"zlib"}, map[string]string{ "zlib": "\x00", }, "", ` -name : zlib-` + rosa.Std.Version(rosa.Zlib) + ` +name : zlib-` + zlibVersion + ` description : lossless data-compression library website : https://zlib.net `, func(cm *cache) error { return &os.PathError{ Op: "open", - Path: filepath.Join(cm.base, "status", pkg.Encode(cm.c.Ident(rosa.Std.Load(rosa.Zlib)).Value())), + Path: filepath.Join(cm.base, "status", pkg.Encode(cm.c.Ident(zlib).Value())), Err: syscall.EACCES, } }}, {"status report", []string{"zlib"}, nil, strings.Repeat("\x00", len(pkg.Checksum{})+8), ` -name : zlib-` + rosa.Std.Version(rosa.Zlib) + ` +name : zlib-` + zlibVersion + ` description : lossless data-compression library website : https://zlib.net status : not in report @@ -131,8 +139,8 @@ status : not in report if tc.status != nil { for name, status := range tc.status { - p, ok := rosa.ResolveName(name) - if !ok { + a, _ := rosa.Native().Load(rosa.Std, rosa.ArtifactH(unique.Make(name))) + if a == nil { t.Fatalf("invalid name %q", name) } perm := os.FileMode(0400) @@ -143,7 +151,7 @@ status : not in report return os.WriteFile(filepath.Join( cm.base, "status", - pkg.Encode(cache.Ident(rosa.Std.Load(p)).Value()), + pkg.Encode(cache.Ident(a).Value()), ), unsafe.Slice(unsafe.StringData(status), len(status)), perm) }); err != nil { t.Fatalf("Do: error = %v", err) diff --git a/cmd/mbf/internal/pkgserver/api.go b/cmd/mbf/internal/pkgserver/api.go index 599ea522..e73b8bbe 100644 --- a/cmd/mbf/internal/pkgserver/api.go +++ b/cmd/mbf/internal/pkgserver/api.go @@ -30,7 +30,7 @@ var ( // handleInfo writes constant system information. func handleInfo(w http.ResponseWriter, _ *http.Request) { infoPayloadOnce.Do(func() { - infoPayload.Count = int(rosa.PresetUnexportedStart) + infoPayload.Count = int(rosa.Native().Count()) infoPayload.HakureiVersion = info.Version() }) // TODO(mae): cache entire response if no additional fields are planned @@ -91,7 +91,7 @@ func (index *packageIndex) handleGet(w http.ResponseWriter, r *http.Request) { if err != nil || i >= len(index.sorts[0]) || i < 0 { http.Error( w, "index must be an integer between 0 and "+ - strconv.Itoa(int(rosa.PresetUnexportedStart-1)), + strconv.Itoa(len(index.sorts[0])-1), http.StatusBadRequest, ) return @@ -125,7 +125,7 @@ func (index *packageIndex) handleSearch(w http.ResponseWriter, r *http.Request) if err != nil || i >= len(index.sorts[0]) || i < 0 { http.Error( w, "index must be an integer between 0 and "+ - strconv.Itoa(int(rosa.PresetUnexportedStart-1)), + strconv.Itoa(len(index.sorts[0])-1), http.StatusBadRequest, ) return diff --git a/cmd/mbf/internal/pkgserver/api_test.go b/cmd/mbf/internal/pkgserver/api_test.go index 8449c234..4c178fb9 100644 --- a/cmd/mbf/internal/pkgserver/api_test.go +++ b/cmd/mbf/internal/pkgserver/api_test.go @@ -3,7 +3,6 @@ package pkgserver import ( "net/http" "net/http/httptest" - "slices" "strconv" "testing" @@ -32,7 +31,7 @@ func TestAPIInfo(t *testing.T) { checkPayload(t, resp, struct { Count int `json:"count"` HakureiVersion string `json:"hakurei_version"` - }{int(rosa.PresetUnexportedStart), info.Version()}) + }{rosa.Native().Count(), info.Version()}) } func TestAPIGet(t *testing.T) { @@ -96,8 +95,8 @@ func TestAPIGet(t *testing.T) { t.Run("index", func(t *testing.T) { t.Parallel() checkValidate( - t, "limit=1&sort=0&index", 0, int(rosa.PresetUnexportedStart-1), - "index must be an integer between 0 and "+strconv.Itoa(int(rosa.PresetUnexportedStart-1)), + t, "limit=1&sort=0&index", 0, rosa.Native().Count()-1, + "index must be an integer between 0 and "+strconv.Itoa(rosa.Native().Count()-1), ) }) @@ -108,74 +107,4 @@ func TestAPIGet(t *testing.T) { "sort must be an integer between 0 and "+strconv.Itoa(int(sortOrderEnd)), ) }) - - checkWithSuffix := func(name, suffix string, want []*metadata) { - t.Run(name, func(t *testing.T) { - t.Parallel() - - w := newRequest(suffix) - resp := w.Result() - checkStatus(t, resp, http.StatusOK) - checkAPIHeader(t, w.Header()) - checkPayloadFunc(t, resp, func(got *struct { - Values []*metadata `json:"values"` - }) bool { - return slices.EqualFunc(got.Values, want, func(a, b *metadata) bool { - return (a.Version == b.Version || - a.Version == rosa.Unversioned || - b.Version == rosa.Unversioned) && - a.HasReport == b.HasReport && - a.Name == b.Name && - a.Description == b.Description && - a.Website == b.Website - }) - }) - - }) - } - - checkWithSuffix("declarationAscending", "?limit=2&index=1&sort=0", []*metadata{ - { - Metadata: rosa.GetMetadata(1), - Version: rosa.Std.Version(1), - }, - { - Metadata: rosa.GetMetadata(2), - Version: rosa.Std.Version(2), - }, - }) - checkWithSuffix("declarationAscending offset", "?limit=3&index=5&sort=0", []*metadata{ - { - Metadata: rosa.GetMetadata(5), - Version: rosa.Std.Version(5), - }, - { - Metadata: rosa.GetMetadata(6), - Version: rosa.Std.Version(6), - }, - { - Metadata: rosa.GetMetadata(7), - Version: rosa.Std.Version(7), - }, - }) - checkWithSuffix("declarationDescending", "?limit=3&index=0&sort=1", []*metadata{ - { - Metadata: rosa.GetMetadata(rosa.PresetUnexportedStart - 1), - Version: rosa.Std.Version(rosa.PresetUnexportedStart - 1), - }, - { - Metadata: rosa.GetMetadata(rosa.PresetUnexportedStart - 2), - Version: rosa.Std.Version(rosa.PresetUnexportedStart - 2), - }, - { - Metadata: rosa.GetMetadata(rosa.PresetUnexportedStart - 3), - Version: rosa.Std.Version(rosa.PresetUnexportedStart - 3), - }, - }) - checkWithSuffix("declarationDescending offset", "?limit=1&index=37&sort=1", []*metadata{ - { - Metadata: rosa.GetMetadata(rosa.PresetUnexportedStart - 38), - Version: rosa.Std.Version(rosa.PresetUnexportedStart - 38), - }, - }) } diff --git a/cmd/mbf/internal/pkgserver/index.go b/cmd/mbf/internal/pkgserver/index.go index 911183da..5711f810 100644 --- a/cmd/mbf/internal/pkgserver/index.go +++ b/cmd/mbf/internal/pkgserver/index.go @@ -23,7 +23,7 @@ const ( // packageIndex refers to metadata by name and various sort orders. type packageIndex struct { - sorts [sortOrderEnd + 1][rosa.PresetUnexportedStart]*metadata + sorts [sortOrderEnd + 1][]*metadata names map[string]*metadata search searchCache // Taken from [rosa.Report] if available. @@ -32,8 +32,8 @@ type packageIndex struct { // metadata holds [rosa.Metadata] extended with additional information. type metadata struct { - p rosa.PArtifact - *rosa.Metadata + handle rosa.ArtifactH + *rosa.Artifact // Populated via [rosa.Toolchain.Version], [rosa.Unversioned] is equivalent // to the zero value. Otherwise, the zero value is invalid. @@ -56,15 +56,17 @@ func (index *packageIndex) populate(report *rosa.Report) (err error) { index.handleAccess = report.HandleAccess } - var work [rosa.PresetUnexportedStart]*metadata + handles := rosa.Native().Collect() + work := make([]*metadata, len(handles)) index.names = make(map[string]*metadata) ir := pkg.NewIR() - for p := range rosa.PresetUnexportedStart { + for i, handle := range handles { + a, version := rosa.Native().Load(rosa.Std, handle) m := metadata{ - p: p, + handle: handle, - Metadata: rosa.GetMetadata(p), - Version: rosa.Std.Version(p), + Artifact: rosa.Native().MustGet(handle), + Version: version, } if m.Version == "" { return errors.New("invalid version from " + m.Name) @@ -74,13 +76,13 @@ func (index *packageIndex) populate(report *rosa.Report) (err error) { } if report != nil { - id := ir.Ident(rosa.Std.Load(p)) + id := ir.Ident(a) m.ids = pkg.Encode(id.Value()) m.status, m.Size = report.ArtifactOf(id) m.HasReport = m.Size >= 0 } - work[p] = &m + work[i] = &m index.names[m.Name] = &m } diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go index ea10d3b7..25902fde 100644 --- a/cmd/mbf/main.go +++ b/cmd/mbf/main.go @@ -97,10 +97,10 @@ func main() { if !flagLTO { flags |= rosa.OptLLVMNoLTO } - rosa.DropCaches("", flags) + rosa.Native().DropCaches("", flags) cross := flagArch != "" && flagArch != runtime.GOARCH if flagQEMU || cross { - cm.qemu = rosa.Std.Load(rosa.QEMU) + cm.qemu, _ = rosa.Native().Load(rosa.Std, rosa.QEMU) } if cross { @@ -108,7 +108,7 @@ func main() { flags = flagCrossOverride } - rosa.DropCaches(flagArch, flags) + rosa.Native().DropCaches(flagArch, flags) if !rosa.HasStage0() { return pkg.UnsupportedArchError(flagArch) } @@ -331,12 +331,12 @@ func main() { n atomic.Uint64 ) - w := make(chan rosa.PArtifact) + w := make(chan rosa.ArtifactH) var wg sync.WaitGroup for range max(flagJobs, 1) { wg.Go(func() { for p := range w { - meta := rosa.GetMetadata(p) + meta := rosa.Native().MustGet(p) if meta.ID == 0 { continue } @@ -349,8 +349,9 @@ func main() { continue } + _, version := rosa.Native().Load(rosa.Std, p) if current, latest := - rosa.Std.Version(p), + version, meta.GetLatest(v); current != latest { n.Add(1) @@ -364,9 +365,9 @@ func main() { } done: - for i := range rosa.PresetEnd { + for _, p := range rosa.Native().Collect() { select { - case w <- rosa.PArtifact(i): + case w <- p: break case <-ctx.Done(): break done @@ -421,7 +422,7 @@ func main() { return } } - rosa.SetGentooStage3(flagGentoo, checksum) + rosa.Native().SetGentooStage3(flagGentoo, checksum) } var ( @@ -430,9 +431,8 @@ func main() { ) if err = cm.Do(func(cache *pkg.Cache) (err error) { - pathname, _, err = cache.Cure( - (t - 2).Load(rosa.LLVM), - ) + llvm, _ := rosa.Native().Load(t-2, rosa.LLVM) + pathname, _, err = cache.Cure(llvm) return }); err != nil { return @@ -440,18 +440,16 @@ func main() { log.Println("stage1:", pathname) if err = cm.Do(func(cache *pkg.Cache) (err error) { - pathname, checksum[0], err = cache.Cure( - (t - 1).Load(rosa.LLVM), - ) + llvm, _ := rosa.Native().Load(t-1, rosa.LLVM) + pathname, checksum[0], err = cache.Cure(llvm) return }); err != nil { return } log.Println("stage2:", pathname) if err = cm.Do(func(cache *pkg.Cache) (err error) { - pathname, checksum[1], err = cache.Cure( - t.Load(rosa.LLVM), - ) + llvm, _ := rosa.Native().Load(t, rosa.LLVM) + pathname, checksum[1], err = cache.Cure(llvm) return }); err != nil { return @@ -472,9 +470,8 @@ func main() { if flagStage0 { if err = cm.Do(func(cache *pkg.Cache) (err error) { - pathname, _, err = cache.Cure( - t.Load(rosa.Stage0), - ) + stage0, _ := rosa.Native().Load(t, rosa.Stage0) + pathname, _, err = cache.Cure(stage0) return }); err != nil { return @@ -519,10 +516,6 @@ func main() { if len(args) != 1 { return errors.New("cure requires 1 argument") } - p, ok := rosa.ResolveName(args[0]) - if !ok { - return fmt.Errorf("unknown artifact %q", args[0]) - } t := rosa.Std if flagBoot { @@ -531,11 +524,16 @@ func main() { t -= 1 } + a, _ := rosa.Native().Load(t, rosa.ArtifactH(unique.Make(args[0]))) + if a == nil { + return fmt.Errorf("unknown artifact %q", args[0]) + } + switch { default: var pathname *check.Absolute err := cm.Do(func(cache *pkg.Cache) (err error) { - pathname, _, err = cache.Cure(t.Load(p)) + pathname, _, err = cache.Cure(a) return }) if err != nil { @@ -577,7 +575,7 @@ func main() { return err } - if err = pkg.NewIR().EncodeAll(f, rosa.Std.Load(p)); err != nil { + if err = pkg.NewIR().EncodeAll(f, a); err != nil { _ = f.Close() return err } @@ -588,7 +586,7 @@ func main() { return cm.Do(func(cache *pkg.Cache) error { return cache.EnterExec( ctx, - t.Load(p), + a, true, os.Stdin, os.Stdout, os.Stderr, rosa.AbsSystem.Append("bin", "mksh"), "sh", @@ -600,7 +598,6 @@ func main() { if flagNoReply { flags |= remoteNoReply } - a := t.Load(p) pathname, err := cureRemote(ctx, &addr, a, flags) if !flagNoReply && err == nil { log.Println(pathname) @@ -620,7 +617,7 @@ func main() { case flagFaults: var faults []pkg.Fault if err := cm.Do(func(cache *pkg.Cache) (err error) { - faults, err = cache.ReadFaults(t.Load(p)) + faults, err = cache.ReadFaults(a) return }); err != nil { return err @@ -634,7 +631,7 @@ func main() { case flagPop: var faults []pkg.Fault if err := cm.Do(func(cache *pkg.Cache) (err error) { - faults, err = cache.ReadFaults(t.Load(p)) + faults, err = cache.ReadFaults(a) return }); err != nil { return err @@ -740,27 +737,26 @@ func main() { "shell", "Interactive shell in the specified Rosa OS environment", func(args []string) error { - presets := make([]rosa.PArtifact, len(args)+3) + handles := make([]rosa.ArtifactH, len(args)+3) for i, arg := range args { - p, ok := rosa.ResolveName(arg) - if !ok { + handles[i] = rosa.ArtifactH(unique.Make(arg)) + if rosa.Native().Get(handles[i]) == nil { return fmt.Errorf("unknown artifact %q", arg) } - presets[i] = p } base := rosa.LLVM if !flagWithToolchain { base = rosa.Musl } - presets = append(presets, + handles = append(handles, base, rosa.Mksh, rosa.Toybox, ) root := make(pkg.Collect, 0, 6+len(args)) - root = rosa.Std.AppendPresets(root, presets...) + root = rosa.Native().AppendPresets(rosa.Std, root, handles...) if err := cm.Do(func(cache *pkg.Cache) error { _, _, err := cache.Cure(&root) diff --git a/cmd/mbf/main_test.go b/cmd/mbf/main_test.go index a5b33e90..4554b250 100644 --- a/cmd/mbf/main_test.go +++ b/cmd/mbf/main_test.go @@ -9,7 +9,7 @@ import ( ) func TestMain(m *testing.M) { - rosa.DropCaches("", rosa.OptLLVMNoLTO) + rosa.Native().DropCaches("", rosa.OptLLVMNoLTO) os.Exit(m.Run()) } @@ -35,10 +35,10 @@ func TestCureAll(t *testing.T) { } }) - for i := range rosa.PresetEnd { - p := rosa.PArtifact(i) - t.Run(rosa.GetMetadata(p).Name, func(t *testing.T) { - _, err := cureRemote(t.Context(), &addr, rosa.Std.Load(p), 0) + for _, handle := range rosa.Native().Collect() { + a, _ := rosa.Native().MustLoad(rosa.Std, handle) + t.Run(rosa.Native().MustGet(handle).Name, func(t *testing.T) { + _, err := cureRemote(t.Context(), &addr, a, 0) if err != nil { t.Error(err) } diff --git a/internal/rosa/acl.go b/internal/rosa/acl.go index 1ed82a09..9c99a27b 100644 --- a/internal/rosa/acl.go +++ b/internal/rosa/acl.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newAttr() (pkg.Artifact, string) { +func (t Toolchain) newAttr(s *S) (pkg.Artifact, string) { const ( version = "2.5.2" checksum = "YWEphrz6vg1sUMmHHVr1CRo53pFXRhq_pjN-AlG8UgwZK1y6m7zuDhxqJhD0SV0l" ) - return t.NewPackage("attr", version, newTar( + return s.NewPackage(t, "attr", version, newTar( "https://download.savannah.nongnu.org/releases/attr/"+ "attr-"+version+".tar.gz", checksum, @@ -65,7 +65,7 @@ ln -s ../../system/bin/perl /usr/bin ), version } func init() { - artifactsM[Attr] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newAttr, Name: "attr", @@ -73,15 +73,15 @@ func init() { Website: "https://savannah.nongnu.org/projects/attr/", ID: 137, - } + }) } -func (t Toolchain) newACL() (pkg.Artifact, string) { +func (t Toolchain) newACL(s *S) (pkg.Artifact, string) { const ( version = "2.3.2" checksum = "-fY5nwH4K8ZHBCRXrzLdguPkqjKI6WIiGu4dBtrZ1o0t6AIU73w8wwJz_UyjIS0P" ) - return t.NewPackage("acl", version, newTar( + return s.NewPackage(t, "acl", version, newTar( "https://download.savannah.nongnu.org/releases/acl/"+ "acl-"+version+".tar.gz", checksum, @@ -94,7 +94,7 @@ func (t Toolchain) newACL() (pkg.Artifact, string) { ), version } func init() { - artifactsM[ACL] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newACL, Name: "acl", @@ -106,5 +106,5 @@ func init() { }, ID: 16, - } + }) } diff --git a/internal/rosa/all.go b/internal/rosa/all.go deleted file mode 100644 index 9d5f8535..00000000 --- a/internal/rosa/all.go +++ /dev/null @@ -1,447 +0,0 @@ -package rosa - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "net/http" - "runtime" - "strconv" - "sync" - - "hakurei.app/internal/pkg" -) - -// PArtifact is a lazily-initialised [pkg.Artifact] preset. -type PArtifact int - -const ( - LLVM PArtifact = iota - - // EarlyInit is the Rosa OS init program. - EarlyInit - // ImageSystem is the Rosa OS /system image. - ImageSystem - // ImageInitramfs is the Rosa OS initramfs archive. - ImageInitramfs - - // Kernel is the generic Rosa OS Linux kernel. - Kernel - // KernelHeaders is an installation of kernel headers for [Kernel]. - KernelHeaders - // KernelSource is a writable kernel source tree installed to [AbsUsrSrc]. - KernelSource - // Firmware is firmware blobs for use with the Linux kernel. - Firmware - - ACL - ArgpStandalone - Attr - Autoconf - Automake - BC - Bash - Binutils - Bison - Bzip2 - CMake - Connman - Coreutils - Curl - DBus - DTC - Diffutils - Elfutils - Fakeroot - Findutils - Flex - FontUtil - Freetype - Fuse - GMP - GLib - Gawk - GenInitCPIO - Gettext - Git - Glslang - GnuTLS - Go - Gperf - Grep - Gzip - Hakurei - HakureiDist - Hwdata - IPTables - Kmod - LIT - LibX11 - LibXau - LibXdmcp - LibXext - LibXfixes - LibXfont2 - LibXrandr - LibXrender - LibXxf86vm - Libarchive - Libbsd - Libcap - Libconfig - LibdisplayInfo - Libdrm - Libepoxy - Libev - Libexpat - Libffi - Libfontenc - Libgd - Libglvnd - Libiconv - Libmd - Libmnl - Libnftnl - Libpciaccess - Libpng - Libpsl - Libseccomp - Libtasn1 - Libtirpc - Libtool - Libucontext - Libunistring - Libva - LibxcbRenderUtil - LibxcbUtil - LibxcbUtilImage - LibxcbUtilKeysyms - LibxcbUtilWM - Libxcvt - Libxkbfile - Libxml2 - Libxshmfence - Libxslt - Libxtrans - LMSensors - M4 - MPC - MPFR - Make - Mesa - Meson - Mksh - MuslFts - MuslObstack - NSS - NSSCACert - Ncurses - Nettle - Ninja - OpenSSL - P11Kit - PCRE2 - Parallel - Patch - Perl - PerlLocaleGettext - PerlMIMECharset - PerlModuleBuild - PerlPodParser - PerlSGMLS - PerlTermReadKey - PerlTestCmd - PerlTextCharWidth - PerlTextWrapI18N - PerlUnicodeLineBreak - PerlYAMLTiny - Pixman - PkgConfig - Procps - Python - PythonFlitCore - PythonHatchling - PythonIniConfig - PythonMako - PythonMarkupSafe - PythonPackaging - PythonPathspec - PythonPluggy - PythonPyTest - PythonPyYAML - PythonPycparser - PythonPygments - PythonSetuptools - PythonSetuptoolsSCM - PythonTroveClassifiers - PythonVCSVersioning - PythonWheel - QEMU - Rdfind - Readline - Rsync - Sed - SPIRVHeaders - SPIRVLLVMTranslator - SPIRVTools - SquashfsTools - Strace - TamaGo - Tar - Texinfo - Toybox - toyboxEarly - Unzip - UtilLinux - VIM - Wayland - WaylandProtocols - XCB - XCBProto - XDGDBusProxy - XZ - Xkbcomp - XkeyboardConfig - XorgProto - Xserver - Zlib - Zstd - - // PresetUnexportedStart is the first unexported preset. - PresetUnexportedStart - - stage0Dist = iota - 1 - llvmSource - // earlyCompilerRT is an early, standalone compiler-rt installation for the - // standalone runtimes build. - // - // earlyCompilerRT must only be loaded by [LLVM]. - earlyCompilerRT - // earlyRuntimes is an early, standalone installation of LLVM runtimes to - // work around the cmake build system leaking the system LLVM installation - // when invoking the newly built toolchain. - // - // earlyRuntimes must only be loaded by [LLVM]. - earlyRuntimes - - buildcatrust - utilMacros - - // Musl is a standalone libc that does not depend on the toolchain. - Musl - // muslHeaders is a system installation of [Musl] headers. - muslHeaders - - // gcc is a hacked-to-pieces GCC toolchain meant for use in intermediate - // stages only. This preset and its direct output must never be exposed. - gcc - - // nettle3 is an older version of [Nettle]. - nettle3 - - // Stage0 is a tarball containing all compile-time dependencies of artifacts - // part of the [Std] toolchain. - Stage0 - - // PresetEnd is the total number of presets and does not denote a preset. - PresetEnd -) - -// P represents multiple [PArtifact] and is stable through JSON. -type P []PArtifact - -// MarshalJSON represents [PArtifact] by their [Metadata.Name]. -func (s P) MarshalJSON() ([]byte, error) { - names := make([]string, len(s)) - for i, p := range s { - names[i] = GetMetadata(p).Name - } - return json.Marshal(names) -} - -// UnmarshalJSON resolves the value created by MarshalJSON back to [P]. -func (s *P) UnmarshalJSON(data []byte) error { - var names []string - if err := json.Unmarshal(data, &names); err != nil { - return err - } - - *s = make(P, len(names)) - for i, name := range names { - if p, ok := ResolveName(name); !ok { - return fmt.Errorf("unknown artifact %q", name) - } else { - (*s)[i] = p - } - } - return nil -} - -// Metadata is stage-agnostic information of a [PArtifact] not directly -// representable in the resulting [pkg.Artifact]. -type Metadata struct { - f func(t Toolchain) (a pkg.Artifact, version string) - - // Unique package name. - Name string `json:"name"` - // Short user-facing description. - Description string `json:"description"` - // Project home page. - Website string `json:"website,omitempty"` - - // Runtime dependencies. - Dependencies P `json:"dependencies"` - - // Project identifier on [Anitya]. - // - // [Anitya]: https://release-monitoring.org/ - ID int `json:"-"` - - // Optional custom version checking behaviour. - latest func(v *Versions) string -} - -// GetLatest returns the latest version described by v. -func (meta *Metadata) GetLatest(v *Versions) string { - if meta.latest != nil { - return meta.latest(v) - } - return v.Latest -} - -// Unversioned denotes an unversioned [PArtifact]. -const Unversioned = "\x00" - -// UnpopulatedIDError is returned by [Metadata.GetLatest] for an instance of -// [Metadata] where ID is not populated. -type UnpopulatedIDError struct{} - -func (UnpopulatedIDError) Unwrap() error { return errors.ErrUnsupported } -func (UnpopulatedIDError) Error() string { return "Anitya ID is not populated" } - -// Versions are package versions returned by Anitya. -type Versions struct { - // The latest version for the project, as determined by the version sorting algorithm. - Latest string `json:"latest_version"` - // List of all versions that aren’t flagged as pre-release. - Stable []string `json:"stable_versions"` - // List of all versions stored, sorted from newest to oldest. - All []string `json:"versions"` -} - -// getStable returns the first Stable version, or Latest if that is unavailable. -func (v *Versions) getStable() string { - if len(v.Stable) == 0 { - return v.Latest - } - return v.Stable[0] -} - -// GetVersions returns versions fetched from Anitya. -func (meta *Metadata) GetVersions(ctx context.Context) (*Versions, error) { - if meta.ID == 0 { - return nil, UnpopulatedIDError{} - } - - var resp *http.Response - if req, err := http.NewRequestWithContext( - ctx, - http.MethodGet, - "https://release-monitoring.org/api/v2/versions/?project_id="+ - strconv.Itoa(meta.ID), - nil, - ); err != nil { - return nil, err - } else { - req.Header.Set("User-Agent", "Rosa/1.1") - if resp, err = http.DefaultClient.Do(req); err != nil { - return nil, err - } - } - - var v Versions - err := json.NewDecoder(resp.Body).Decode(&v) - return &v, errors.Join(err, resp.Body.Close()) -} - -var ( - // artifactsM is an array of [PArtifact] metadata. - artifactsM [PresetEnd]Metadata - - // artifacts stores the result of Metadata.f. - artifacts [_toolchainEnd][len(artifactsM)]struct { - a pkg.Artifact - v string - } - // artifactsOnce is for lazy initialisation of artifacts. - artifactsOnce [_toolchainEnd][len(artifactsM)]sync.Once - - // arch is the target architecture. - arch = runtime.GOARCH - - // presetOpts globally modifies behaviour of presets. - presetOpts int -) - -const ( - // OptSkipCheck skips running all test suites. - OptSkipCheck = 1 << iota - // OptLLVMNoLTO disables LTO in all [LLVM] stages. - OptLLVMNoLTO -) - -// Arch returns the target architecture. -func Arch() string { return arch } - -// Flags returns the current preset flags -func Flags() int { return presetOpts } - -// zero zeros the value pointed to by p. -func zero[T any](p *T) { var v T; *p = v } - -// DropCaches arranges for all cached [pkg.Artifact] to be freed some time after -// it returns. Must not be used concurrently with any other function from this -// package. -func DropCaches(targetArch string, flags int) { - if targetArch == "" { - targetArch = runtime.GOARCH - } - - arch = targetArch - presetOpts = flags - zero(&artifacts) - zero(&artifactsOnce) -} - -// GetMetadata returns [Metadata] of a [PArtifact]. -func GetMetadata(p PArtifact) *Metadata { return &artifactsM[p] } - -// construct constructs a [pkg.Artifact] corresponding to a [PArtifact] once. -func (t Toolchain) construct(p PArtifact) { - artifactsOnce[t][p].Do(func() { - artifacts[t][p].a, artifacts[t][p].v = artifactsM[p].f(t) - }) -} - -// Load returns the resulting [pkg.Artifact] of [PArtifact]. -func (t Toolchain) Load(p PArtifact) pkg.Artifact { - t.construct(p) - return artifacts[t][p].a -} - -// Version returns the version string of [PArtifact]. -func (t Toolchain) Version(p PArtifact) string { - t.construct(p) - return artifacts[t][p].v -} - -// ResolveName returns a [PArtifact] by name. -func ResolveName(name string) (p PArtifact, ok bool) { - for i := range PresetUnexportedStart { - if name == artifactsM[i].Name { - return i, true - } - } - return 0, false -} diff --git a/internal/rosa/all_test.go b/internal/rosa/all_test.go deleted file mode 100644 index 8f86201a..00000000 --- a/internal/rosa/all_test.go +++ /dev/null @@ -1,81 +0,0 @@ -package rosa_test - -import ( - "testing" - - "hakurei.app/internal/rosa" -) - -func TestLoad(t *testing.T) { - t.Parallel() - - for i := range rosa.PresetEnd { - p := rosa.PArtifact(i) - t.Run(rosa.GetMetadata(p).Name, func(t *testing.T) { - t.Parallel() - - rosa.Std.Load(p) - }) - } -} - -func BenchmarkAll(b *testing.B) { - arch, flags := rosa.Arch(), rosa.Flags() - b.Cleanup(func() { rosa.DropCaches(arch, flags) }) - - for b.Loop() { - for i := range rosa.PresetEnd { - rosa.Std.Load(rosa.PArtifact(i)) - } - - b.StopTimer() - rosa.DropCaches("", 0) - b.StartTimer() - } -} - -func TestResolveName(t *testing.T) { - t.Parallel() - - for i := range rosa.PresetUnexportedStart { - p := i - name := rosa.GetMetadata(p).Name - t.Run(name, func(t *testing.T) { - t.Parallel() - - if got, ok := rosa.ResolveName(name); !ok { - t.Fatal("ResolveName: ok = false") - } else if got != p { - t.Fatalf("ResolveName: %d, want %d", got, p) - } - }) - } -} -func TestResolveNameUnexported(t *testing.T) { - t.Parallel() - - for i := rosa.PresetUnexportedStart; i < rosa.PresetEnd; i++ { - p := i - name := rosa.GetMetadata(p).Name - t.Run(name, func(t *testing.T) { - t.Parallel() - - if got, ok := rosa.ResolveName(name); ok { - t.Fatalf("ResolveName: resolved unexported preset %d", got) - } - }) - } -} - -func TestUnique(t *testing.T) { - t.Parallel() - - names := make(map[string]struct{}) - for i := range rosa.PresetEnd { - name := rosa.GetMetadata(rosa.PArtifact(i)).Name - if _, ok := names[name]; ok { - t.Fatalf("name %s is not unique", name) - } - names[name] = struct{}{} - } -} diff --git a/internal/rosa/argp-standalone.go b/internal/rosa/argp-standalone.go index 04d2e728..d5e77b7d 100644 --- a/internal/rosa/argp-standalone.go +++ b/internal/rosa/argp-standalone.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newArgpStandalone() (pkg.Artifact, string) { +func (t Toolchain) newArgpStandalone(s *S) (pkg.Artifact, string) { const ( version = "1.3" checksum = "vtW0VyO2pJ-hPyYmDI2zwSLS8QL0sPAUKC1t3zNYbwN2TmsaE-fADhaVtNd3eNFl" ) - return t.NewPackage("argp-standalone", version, newTar( + return s.NewPackage(t, "argp-standalone", version, newTar( "http://www.lysator.liu.se/~nisse/misc/"+ "argp-standalone-"+version+".tar.gz", checksum, @@ -26,11 +26,11 @@ install -D -m755 libargp.a /work/system/lib/libargp.a ), version } func init() { - artifactsM[ArgpStandalone] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newArgpStandalone, Name: "argp-standalone", Description: "hierarchical argument parsing library broken out from glibc", Website: "http://www.lysator.liu.se/~nisse/misc/", - } + }) } diff --git a/internal/rosa/busybox.go b/internal/rosa/busybox.go index 9a78d4d2..32d903a6 100644 --- a/internal/rosa/busybox.go +++ b/internal/rosa/busybox.go @@ -85,13 +85,13 @@ func (a busyboxBin) Cure(t *pkg.TContext) (err error) { // newBusyboxBin returns a [pkg.Artifact] containing a busybox installation from // the https://busybox.net/downloads/binaries/ binary release. -func newBusyboxBin() pkg.Artifact { +func (s *S) newBusyboxBin() pkg.Artifact { var version, url, checksum string - switch arch { + switch s.arch { case "amd64": version = "1.35.0" url = "https://busybox.net/downloads/binaries/" + - version + "-" + linuxArch() + "-linux-musl/busybox" + version + "-" + s.linuxArch() + "-linux-musl/busybox" checksum = "L7OBIsPu9enNHn7FqpBT1kOg_mCLNmetSeNMA3i4Y60Z5jTgnlX3qX3zcQtLx5AB" case "arm64": version = "1.31.0" @@ -100,11 +100,11 @@ func newBusyboxBin() pkg.Artifact { checksum = "npJjBO7iwhjW6Kx2aXeSxf8kXhVgTCDChOZTTsI8ZfFfa3tbsklxRiidZQdrVERg" default: - panic("unsupported target " + arch) + panic("unsupported target " + s.arch) } return pkg.NewExec( - "busybox-bin-"+version, arch, nil, pkg.ExecTimeoutMax, false, false, + "busybox-bin-"+version, s.arch, nil, pkg.ExecTimeoutMax, false, false, fhs.AbsRoot, []string{ "PATH=/system/bin", }, diff --git a/internal/rosa/bzip2.go b/internal/rosa/bzip2.go index d7dd1380..35df6872 100644 --- a/internal/rosa/bzip2.go +++ b/internal/rosa/bzip2.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newBzip2() (pkg.Artifact, string) { +func (t Toolchain) newBzip2(s *S) (pkg.Artifact, string) { const ( version = "1.0.8" checksum = "cTLykcco7boom-s05H1JVsQi1AtChYL84nXkg_92Dm1Xt94Ob_qlMg_-NSguIK-c" ) - return t.NewPackage("bzip2", version, newTar( + return s.NewPackage(t, "bzip2", version, newTar( "https://sourceware.org/pub/bzip2/bzip2-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -26,7 +26,7 @@ func (t Toolchain) newBzip2() (pkg.Artifact, string) { }), version } func init() { - artifactsM[Bzip2] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newBzip2, Name: "bzip2", @@ -34,5 +34,5 @@ func init() { Website: "https://sourceware.org/bzip2/", ID: 237, - } + }) } diff --git a/internal/rosa/cmake.go b/internal/rosa/cmake.go index b1499037..3fe610a0 100644 --- a/internal/rosa/cmake.go +++ b/internal/rosa/cmake.go @@ -8,12 +8,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newCMake() (pkg.Artifact, string) { +func (t Toolchain) newCMake(s *S) (pkg.Artifact, string) { const ( version = "4.3.2" checksum = "6QylwRVKletndTSkZTV2YBRwgd_9rUVgav_QW23HpjUgV21AVYZOUOal8tdBDmO7" ) - return t.NewPackage("cmake", version, newFromGitHubRelease( + return s.NewPackage(t, "cmake", version, newFromGitHubRelease( "Kitware/CMake", "v"+version, "cmake-"+version+".tar.gz", @@ -106,7 +106,7 @@ index 2ead810437..f85cbb8b1c 100644 ), version } func init() { - artifactsM[CMake] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newCMake, Name: "cmake", @@ -114,7 +114,7 @@ func init() { Website: "https://cmake.org/", ID: 306, - } + }) } // CMakeHelper is the [CMake] build system helper. @@ -164,7 +164,7 @@ func (*CMakeHelper) createDir() bool { return true } func (*CMakeHelper) wantsDir() string { return "/cure/" } // script generates the cure script. -func (attr *CMakeHelper) script(name string) string { +func (attr *CMakeHelper) script(s *S, name string) string { if attr == nil { attr = new(CMakeHelper) } @@ -180,7 +180,7 @@ func (attr *CMakeHelper) script(name string) string { } script := attr.Script - if !attr.SkipTest && presetOpts&OptSkipCheck == 0 { + if !attr.SkipTest && s.opts&OptSkipCheck == 0 { script += "\n" + test } diff --git a/internal/rosa/connman.go b/internal/rosa/connman.go index 64a7208e..c43b055b 100644 --- a/internal/rosa/connman.go +++ b/internal/rosa/connman.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newConnman() (pkg.Artifact, string) { +func (t Toolchain) newConnman(s *S) (pkg.Artifact, string) { const ( version = "2.0" checksum = "MhVTdJOhndnZn2SWd8URKo_Pj7Zvc14tntEbrVOf9L3yVWJvpb3v3Q6104tWJgtW" ) - return t.NewPackage("connman", version, newTar( + return s.NewPackage(t, "connman", version, newTar( "https://git.kernel.org/pub/scm/network/connman/connman.git/"+ "snapshot/connman-"+version+".tar.gz", checksum, @@ -90,7 +90,7 @@ func (t Toolchain) newConnman() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Connman] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newConnman, Name: "connman", @@ -105,5 +105,5 @@ func init() { }, ID: 337, - } + }) } diff --git a/internal/rosa/curl.go b/internal/rosa/curl.go index b184f927..ca47b800 100644 --- a/internal/rosa/curl.go +++ b/internal/rosa/curl.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newCurl() (pkg.Artifact, string) { +func (t Toolchain) newCurl(s *S) (pkg.Artifact, string) { const ( version = "8.20.0" checksum = "xyHXwrngIRGMasuzhn-I5MSCOhktwINbsWt1f_LuR-5jRVvyx_g6U1EQfDLEbr9r" ) - return t.NewPackage("curl", version, newTar( + return s.NewPackage(t, "curl", version, newTar( "https://curl.se/download/curl-"+version+".tar.bz2", checksum, pkg.TarBzip2, @@ -39,7 +39,7 @@ chmod +w tests/data && rm -f tests/data/test459 ), version } func init() { - artifactsM[Curl] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newCurl, Name: "curl", @@ -52,5 +52,5 @@ func init() { }, ID: 381, - } + }) } diff --git a/internal/rosa/dbus.go b/internal/rosa/dbus.go index 1e271c50..2aac1c9b 100644 --- a/internal/rosa/dbus.go +++ b/internal/rosa/dbus.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newDBus() (pkg.Artifact, string) { +func (t Toolchain) newDBus(s *S) (pkg.Artifact, string) { const ( version = "1.16.2" checksum = "INwOuNdrDG7XW5ilW_vn8JSxEa444rRNc5ho97i84I1CNF09OmcFcV-gzbF4uCyg" ) - return t.NewPackage("dbus", version, newFromGitLab( + return s.NewPackage(t, "dbus", version, newFromGitLab( "gitlab.freedesktop.org", "dbus/dbus", "dbus-"+version, @@ -29,7 +29,7 @@ func (t Toolchain) newDBus() (pkg.Artifact, string) { ), version } func init() { - artifactsM[DBus] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newDBus, Name: "dbus", @@ -42,15 +42,15 @@ func init() { }, ID: 5356, - } + }) } -func (t Toolchain) newXDGDBusProxy() (pkg.Artifact, string) { +func (t Toolchain) newXDGDBusProxy(s *S) (pkg.Artifact, string) { const ( version = "0.1.7" checksum = "UW5Pe-TP-XAaN-kTbxrkOQ7eYdmlAQlr2pdreLtPT0uwdAz-7rzDP8V_8PWuZBup" ) - return t.NewPackage("xdg-dbus-proxy", version, newFromGitHub( + return s.NewPackage(t, "xdg-dbus-proxy", version, newFromGitHub( "flatpak/xdg-dbus-proxy", version, checksum, @@ -65,7 +65,7 @@ func (t Toolchain) newXDGDBusProxy() (pkg.Artifact, string) { ), version } func init() { - artifactsM[XDGDBusProxy] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newXDGDBusProxy, Name: "xdg-dbus-proxy", @@ -77,5 +77,5 @@ func init() { }, ID: 58434, - } + }) } diff --git a/internal/rosa/dtc.go b/internal/rosa/dtc.go index 602d8439..36ff0e9d 100644 --- a/internal/rosa/dtc.go +++ b/internal/rosa/dtc.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newDTC() (pkg.Artifact, string) { +func (t Toolchain) newDTC(s *S) (pkg.Artifact, string) { const ( version = "1.7.2" checksum = "vUoiRynPyYRexTpS6USweT5p4SVHvvVJs8uqFkkVD-YnFjwf6v3elQ0-Etrh00Dt" ) - return t.NewPackage("dtc", version, newTar( + return s.NewPackage(t, "dtc", version, newTar( "https://git.kernel.org/pub/scm/utils/dtc/dtc.git/snapshot/"+ "dtc-v"+version+".tar.gz", checksum, @@ -31,7 +31,7 @@ func (t Toolchain) newDTC() (pkg.Artifact, string) { ), version } func init() { - artifactsM[DTC] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newDTC, Name: "dtc", @@ -39,5 +39,5 @@ func init() { Website: "https://git.kernel.org/pub/scm/utils/dtc/dtc.git/", ID: 16911, - } + }) } diff --git a/internal/rosa/elfutils.go b/internal/rosa/elfutils.go index 2a163662..65c71427 100644 --- a/internal/rosa/elfutils.go +++ b/internal/rosa/elfutils.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newElfutils() (pkg.Artifact, string) { +func (t Toolchain) newElfutils(s *S) (pkg.Artifact, string) { const ( version = "0.195" checksum = "JrGnBD38w8Mj0ZxDw3fKlRBFcLvRKu8rcYnX35R9yTlUSYnzTazyLboG-a2CsJlu" ) - return t.NewPackage("elfutils", version, newTar( + return s.NewPackage(t, "elfutils", version, newTar( "https://sourceware.org/elfutils/ftp/"+ version+"/elfutils-"+version+".tar.bz2", checksum, @@ -39,7 +39,7 @@ func (t Toolchain) newElfutils() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Elfutils] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newElfutils, Name: "elfutils", @@ -55,5 +55,5 @@ func init() { }, ID: 5679, - } + }) } diff --git a/internal/rosa/fakeroot.go b/internal/rosa/fakeroot.go index f0f1a100..acd59084 100644 --- a/internal/rosa/fakeroot.go +++ b/internal/rosa/fakeroot.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newFakeroot() (pkg.Artifact, string) { +func (t Toolchain) newFakeroot(s *S) (pkg.Artifact, string) { const ( version = "1.37.2" checksum = "4ve-eDqVspzQ6VWDhPS0NjW3aSenBJcPAJq_BFT7OOFgUdrQzoTBxZWipDAGWxF8" ) - return t.NewPackage("fakeroot", version, newFromGitLab( + return s.NewPackage(t, "fakeroot", version, newFromGitLab( "salsa.debian.org", "clint/fakeroot", "upstream/"+version, @@ -46,7 +46,7 @@ index f135ad9..85c784c 100644 ), version } func init() { - artifactsM[Fakeroot] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newFakeroot, Name: "fakeroot", @@ -54,5 +54,5 @@ func init() { Website: "https://salsa.debian.org/clint/fakeroot", ID: 12048, - } + }) } diff --git a/internal/rosa/flex.go b/internal/rosa/flex.go index b0d357cc..b5ce8bbc 100644 --- a/internal/rosa/flex.go +++ b/internal/rosa/flex.go @@ -4,12 +4,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newFlex() (pkg.Artifact, string) { +func (t Toolchain) newFlex(s *S) (pkg.Artifact, string) { const ( version = "2.6.4" checksum = "p9POjQU7VhgOf3x5iFro8fjhy0NOanvA7CTeuWS_veSNgCixIJshTrWVkc5XLZkB" ) - return t.NewPackage("flex", version, newFromGitHubRelease( + return s.NewPackage(t, "flex", version, newFromGitHubRelease( "westes/flex", "v"+version, "flex-"+version+".tar.gz", @@ -20,7 +20,7 @@ func (t Toolchain) newFlex() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Flex] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newFlex, Name: "flex", @@ -28,5 +28,5 @@ func init() { Website: "https://github.com/westes/flex/", ID: 819, - } + }) } diff --git a/internal/rosa/freetype.go b/internal/rosa/freetype.go index f5422f30..3e3d6728 100644 --- a/internal/rosa/freetype.go +++ b/internal/rosa/freetype.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newFreetype() (pkg.Artifact, string) { +func (t Toolchain) newFreetype(s *S) (pkg.Artifact, string) { const ( version = "2.14.3" checksum = "-WfLv8fVJNyCHpP_lriiDzOcVbBL9ajdQ3tl8AzIIUa9-8sVpU9irxOmSMgRHWYz" ) - return t.NewPackage("freetype", version, newTar( + return s.NewPackage(t, "freetype", version, newTar( "https://download.savannah.gnu.org/releases/freetype/"+ "freetype-"+version+".tar.gz", checksum, @@ -15,7 +15,7 @@ func (t Toolchain) newFreetype() (pkg.Artifact, string) { ), nil, (*MakeHelper)(nil)), version } func init() { - artifactsM[Freetype] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newFreetype, Name: "freetype", @@ -23,5 +23,5 @@ func init() { Website: "http://www.freetype.org/", ID: 854, - } + }) } diff --git a/internal/rosa/fuse.go b/internal/rosa/fuse.go index f190ecc8..1d2b487d 100644 --- a/internal/rosa/fuse.go +++ b/internal/rosa/fuse.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newFuse() (pkg.Artifact, string) { +func (t Toolchain) newFuse(s *S) (pkg.Artifact, string) { const ( version = "3.18.2" checksum = "iL-7b7eUtmlVSf5cSq0dzow3UiqSjBmzV3cI_ENPs1tXcHdktkG45j1V12h-4jZe" ) - return t.NewPackage("fuse", version, newFromGitHubRelease( + return s.NewPackage(t, "fuse", version, newFromGitHubRelease( "libfuse/libfuse", "fuse-"+version, "fuse-"+version+".tar.gz", @@ -31,7 +31,7 @@ func (t Toolchain) newFuse() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Fuse] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newFuse, Name: "fuse", @@ -39,5 +39,5 @@ func init() { Website: "https://github.com/libfuse/libfuse/", ID: 861, - } + }) } diff --git a/internal/rosa/git.go b/internal/rosa/git.go index 64477be5..a614196d 100644 --- a/internal/rosa/git.go +++ b/internal/rosa/git.go @@ -7,12 +7,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newGit() (pkg.Artifact, string) { +func (t Toolchain) newGit(s *S) (pkg.Artifact, string) { const ( version = "2.54.0" checksum = "7vGKtFOJGqY8DO4e8UMRax7dLgImXKQz5MMalec6MlgYrsarffSJjgOughwRFpSH" ) - return t.NewPackage("git", version, newTar( + return s.NewPackage(t, "git", version, newTar( "https://www.kernel.org/pub/software/scm/git/"+ "git-"+version+".tar.gz", checksum, @@ -88,7 +88,7 @@ disable_test t5515-fetch-merge-logic ), version } func init() { - artifactsM[Git] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGit, Name: "git", @@ -102,18 +102,19 @@ func init() { }, ID: 5350, - } + }) } // NewViaGit returns a [pkg.Artifact] for cloning a git repository. -func (t Toolchain) NewViaGit( +func (s *S) NewViaGit( + t Toolchain, url, rev string, checksum pkg.Checksum, ) pkg.Artifact { - return t.New(strings.TrimSuffix( + return s.New(t, strings.TrimSuffix( path.Base(url), ".git", - )+"-src-"+path.Base(rev), THostNet, t.AppendPresets(nil, + )+"-src-"+path.Base(rev), THostNet, s.AppendPresets(t, nil, NSSCACert, Git, ), &checksum, nil, ` @@ -131,6 +132,6 @@ rm -rf /work/.git } // newTagRemote is a helper around NewViaGit for a tag on a git remote. -func (t Toolchain) newTagRemote(url, tag, checksum string) pkg.Artifact { - return t.NewViaGit(url, "refs/tags/"+tag, mustDecode(checksum)) +func (s *S) newTagRemote(t Toolchain, url, tag, checksum string) pkg.Artifact { + return s.NewViaGit(t, url, "refs/tags/"+tag, mustDecode(checksum)) } diff --git a/internal/rosa/glslang.go b/internal/rosa/glslang.go index fcfcdc3e..d71cfef0 100644 --- a/internal/rosa/glslang.go +++ b/internal/rosa/glslang.go @@ -7,12 +7,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newSPIRVHeaders() (pkg.Artifact, string) { +func (t Toolchain) newSPIRVHeaders(s *S) (pkg.Artifact, string) { const ( version = "1.4.341.0" checksum = "0PL43-19Iaw4k7_D8J8BvoJ-iLgCVSYZ2ThgDPGfAJwIJFtre7l0cnQtLjcY-JvD" ) - return t.NewPackage("spirv-headers", version, newFromGitHub( + return s.NewPackage(t, "spirv-headers", version, newFromGitHub( "KhronosGroup/SPIRV-Headers", "vulkan-sdk-"+version, checksum, @@ -22,7 +22,7 @@ func (t Toolchain) newSPIRVHeaders() (pkg.Artifact, string) { }), version } func init() { - artifactsM[SPIRVHeaders] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newSPIRVHeaders, Name: "spirv-headers", @@ -49,15 +49,15 @@ func init() { } return v.Latest }, - } + }) } -func (t Toolchain) newSPIRVTools() (pkg.Artifact, string) { +func (t Toolchain) newSPIRVTools(s *S) (pkg.Artifact, string) { const ( version = "2026.1" checksum = "ZSQPQx8NltCDzQLk4qlaVxyWRWeI_JtsjEpeFt3kezTanl9DTHfLixSUCezMFBjv" ) - return t.NewPackage("spirv-tools", version, newFromGitHub( + return s.NewPackage(t, "spirv-tools", version, newFromGitHub( "KhronosGroup/SPIRV-Tools", "v"+version, checksum, @@ -72,7 +72,7 @@ func (t Toolchain) newSPIRVTools() (pkg.Artifact, string) { ), version } func init() { - artifactsM[SPIRVTools] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newSPIRVTools, Name: "spirv-tools", @@ -86,15 +86,15 @@ func init() { ID: 14894, latest: (*Versions).getStable, - } + }) } -func (t Toolchain) newGlslang() (pkg.Artifact, string) { +func (t Toolchain) newGlslang(s *S) (pkg.Artifact, string) { const ( version = "16.3.0" checksum = "xyqDf8k3-D0_BXHGi0uLgMglnJ05Rf3j73QgbDs3sGtKNdBIQhY8JfqX1NcNoJQN" ) - return t.NewPackage("glslang", version, newFromGitHub( + return s.NewPackage(t, "glslang", version, newFromGitHub( "KhronosGroup/glslang", version, checksum, @@ -116,7 +116,7 @@ func (t Toolchain) newGlslang() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Glslang] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGlslang, Name: "glslang", @@ -124,10 +124,10 @@ func init() { Website: "https://github.com/KhronosGroup/glslang", ID: 205796, - } + }) } -func (t Toolchain) newSPIRVLLVMTranslator() (pkg.Artifact, string) { +func (t Toolchain) newSPIRVLLVMTranslator(s *S) (pkg.Artifact, string) { const ( version = "22.1.2" checksum = "JZAaV5ewYcm-35YA_U2BM2IcsQouZtX1BLZR0zh2vSlfEXMsT5OCtY4Gh5RJkcGy" @@ -137,7 +137,7 @@ func (t Toolchain) newSPIRVLLVMTranslator() (pkg.Artifact, string) { "cooperative_matrix_constant_null.spvasm", } - switch arch { + switch s.arch { case "arm64": skipChecks = append(skipChecks, // LLVM ERROR: unsupported calling convention @@ -183,7 +183,7 @@ func (t Toolchain) newSPIRVLLVMTranslator() (pkg.Artifact, string) { ) } - return t.NewPackage("spirv-llvm-translator", version, newFromGitHub( + return s.NewPackage(t, "spirv-llvm-translator", version, newFromGitHub( "KhronosGroup/SPIRV-LLVM-Translator", "v"+version, checksum, ), &PackageAttr{ @@ -232,7 +232,7 @@ export LIT_OPTS=` + litArgs(true, skipChecks...) + ` ), version } func init() { - artifactsM[SPIRVLLVMTranslator] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newSPIRVLLVMTranslator, Name: "spirv-llvm-translator", @@ -244,5 +244,5 @@ func init() { }, ID: 227273, - } + }) } diff --git a/internal/rosa/gnu.go b/internal/rosa/gnu.go index 526bcb4a..0527f616 100644 --- a/internal/rosa/gnu.go +++ b/internal/rosa/gnu.go @@ -42,12 +42,12 @@ func skipGNUTests(tests ...int) string { return buf.String() } -func (t Toolchain) newM4() (pkg.Artifact, string) { +func (t Toolchain) newM4(s *S) (pkg.Artifact, string) { const ( version = "1.4.21" checksum = "pPa6YOo722Jw80l1OsH1tnUaklnPFjFT-bxGw5iAVrZTm1P8FQaWao_NXop46-pm" ) - return t.NewPackage("m4", version, newTar( + return s.NewPackage(t, "m4", version, newTar( "https://ftpmirror.gnu.org/gnu/m4/m4-"+version+".tar.bz2", checksum, pkg.TarBzip2, @@ -63,7 +63,7 @@ chmod +w tests/test-c32ispunct.sh && echo '#!/bin/sh' > tests/test-c32ispunct.sh ), version } func init() { - artifactsM[M4] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newM4, Name: "m4", @@ -71,15 +71,15 @@ func init() { Website: "https://www.gnu.org/software/m4/", ID: 1871, - } + }) } -func (t Toolchain) newBison() (pkg.Artifact, string) { +func (t Toolchain) newBison(s *S) (pkg.Artifact, string) { const ( version = "3.8.2" checksum = "BhRM6K7URj1LNOkIDCFDctSErLS-Xo5d9ba9seg10o6ACrgC1uNhED7CQPgIY29Y" ) - return t.NewPackage("bison", version, newTar( + return s.NewPackage(t, "bison", version, newTar( "https://ftpmirror.gnu.org/gnu/bison/bison-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -98,7 +98,7 @@ func (t Toolchain) newBison() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Bison] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newBison, Name: "bison", @@ -106,15 +106,15 @@ func init() { Website: "https://www.gnu.org/software/bison/", ID: 193, - } + }) } -func (t Toolchain) newSed() (pkg.Artifact, string) { +func (t Toolchain) newSed(s *S) (pkg.Artifact, string) { const ( version = "4.10" checksum = "TXTRFQJCyflb-bpBRI2S5Y1DpplwvT7-KfXtpqN4AdZgZ5OtI6yStn1-bkhDKx51" ) - return t.NewPackage("sed", version, newTar( + return s.NewPackage(t, "sed", version, newTar( "https://ftpmirror.gnu.org/gnu/sed/sed-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -125,7 +125,7 @@ func (t Toolchain) newSed() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Sed] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newSed, Name: "sed", @@ -133,15 +133,15 @@ func init() { Website: "https://www.gnu.org/software/sed/", ID: 4789, - } + }) } -func (t Toolchain) newAutoconf() (pkg.Artifact, string) { +func (t Toolchain) newAutoconf(s *S) (pkg.Artifact, string) { const ( version = "2.73" checksum = "yGabDTeOfaCUB0JX-h3REYLYzMzvpDwFmFFzHNR7QilChCUNE4hR6q7nma4viDYg" ) - return t.NewPackage("autoconf", version, newTar( + return s.NewPackage(t, "autoconf", version, newTar( "https://ftpmirror.gnu.org/gnu/autoconf/autoconf-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -160,7 +160,7 @@ func (t Toolchain) newAutoconf() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Autoconf] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newAutoconf, Name: "autoconf", @@ -173,15 +173,15 @@ func init() { }, ID: 141, - } + }) } -func (t Toolchain) newAutomake() (pkg.Artifact, string) { +func (t Toolchain) newAutomake(s *S) (pkg.Artifact, string) { const ( version = "1.18.1" checksum = "FjvLG_GdQP7cThTZJLDMxYpRcKdpAVG-YDs1Fj1yaHlSdh_Kx6nRGN14E0r_BjcG" ) - return t.NewPackage("automake", version, newTar( + return s.NewPackage(t, "automake", version, newTar( "https://ftpmirror.gnu.org/gnu/automake/automake-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -205,7 +205,7 @@ test_disable '#!/bin/sh' t/pr9.sh ), version } func init() { - artifactsM[Automake] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newAutomake, Name: "automake", @@ -217,15 +217,15 @@ func init() { }, ID: 144, - } + }) } -func (t Toolchain) newLibtool() (pkg.Artifact, string) { +func (t Toolchain) newLibtool(s *S) (pkg.Artifact, string) { const ( version = "2.5.4" checksum = "pa6LSrQggh8mSJHQfwGjysAApmZlGJt8wif2cCLzqAAa2jpsTY0jZ-6stS3BWZ2Q" ) - return t.NewPackage("libtool", version, newTar( + return s.NewPackage(t, "libtool", version, newTar( "https://ftpmirror.gnu.org/gnu/libtool/libtool-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -243,7 +243,7 @@ func (t Toolchain) newLibtool() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libtool] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibtool, Name: "libtool", @@ -251,15 +251,15 @@ func init() { Website: "https://www.gnu.org/software/libtool/", ID: 1741, - } + }) } -func (t Toolchain) newGzip() (pkg.Artifact, string) { +func (t Toolchain) newGzip(s *S) (pkg.Artifact, string) { const ( version = "1.14" checksum = "NWhjUavnNfTDFkZJyAUonL9aCOak8GVajWX2OMlzpFnuI0ErpBFyj88mz2xSjz0q" ) - return t.NewPackage("gzip", version, newTar( + return s.NewPackage(t, "gzip", version, newTar( "https://ftpmirror.gnu.org/gnu/gzip/gzip-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -269,7 +269,7 @@ func (t Toolchain) newGzip() (pkg.Artifact, string) { }), version } func init() { - artifactsM[Gzip] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGzip, Name: "gzip", @@ -277,15 +277,15 @@ func init() { Website: "https://www.gnu.org/software/gzip/", ID: 1290, - } + }) } -func (t Toolchain) newGettext() (pkg.Artifact, string) { +func (t Toolchain) newGettext(s *S) (pkg.Artifact, string) { const ( version = "1.0" checksum = "3MasKeEdPeFEgWgzsBKk7JqWqql1wEMbgPmzAfs-mluyokoW0N8oQVxPQoOnSdgC" ) - return t.NewPackage("gettext", version, newTar( + return s.NewPackage(t, "gettext", version, newTar( "https://ftpmirror.gnu.org/gnu/gettext/gettext-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -315,7 +315,7 @@ touch gettext-tools/autotools/archive.dir.tar ), version } func init() { - artifactsM[Gettext] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGettext, Name: "gettext", @@ -323,15 +323,15 @@ func init() { Website: "https://www.gnu.org/software/gettext/", ID: 898, - } + }) } -func (t Toolchain) newDiffutils() (pkg.Artifact, string) { +func (t Toolchain) newDiffutils(s *S) (pkg.Artifact, string) { const ( version = "3.12" checksum = "9J5VAq5oA7eqwzS1Yvw-l3G5o-TccUrNQR3PvyB_lgdryOFAfxtvQfKfhdpquE44" ) - return t.NewPackage("diffutils", version, newTar( + return s.NewPackage(t, "diffutils", version, newTar( "https://ftpmirror.gnu.org/gnu/diffutils/diffutils-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -348,7 +348,7 @@ test_disable '#!/bin/sh' tests/cmp }, (*MakeHelper)(nil)), version } func init() { - artifactsM[Diffutils] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newDiffutils, Name: "diffutils", @@ -356,15 +356,15 @@ func init() { Website: "https://www.gnu.org/software/diffutils/", ID: 436, - } + }) } -func (t Toolchain) newPatch() (pkg.Artifact, string) { +func (t Toolchain) newPatch(s *S) (pkg.Artifact, string) { const ( version = "2.8" checksum = "MA0BQc662i8QYBD-DdGgyyfTwaeALZ1K0yusV9rAmNiIsQdX-69YC4t9JEGXZkeR" ) - return t.NewPackage("patch", version, newTar( + return s.NewPackage(t, "patch", version, newTar( "https://ftpmirror.gnu.org/gnu/patch/patch-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -380,7 +380,7 @@ test_disable '#!/bin/sh' tests/need-filename }, (*MakeHelper)(nil)), version } func init() { - artifactsM[Patch] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPatch, Name: "patch", @@ -388,15 +388,15 @@ func init() { Website: "https://savannah.gnu.org/projects/patch/", ID: 2597, - } + }) } -func (t Toolchain) newBash() (pkg.Artifact, string) { +func (t Toolchain) newBash(s *S) (pkg.Artifact, string) { const ( version = "5.3" checksum = "4LQ_GRoB_ko-Ih8QPf_xRKA02xAm_TOxQgcJLmFDT6udUPxTAWrsj-ZNeuTusyDq" ) - return t.NewPackage("bash", version, newTar( + return s.NewPackage(t, "bash", version, newTar( "https://ftpmirror.gnu.org/gnu/bash/bash-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -410,7 +410,7 @@ func (t Toolchain) newBash() (pkg.Artifact, string) { }), version } func init() { - artifactsM[Bash] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newBash, Name: "bash", @@ -418,15 +418,15 @@ func init() { Website: "https://www.gnu.org/software/bash/", ID: 166, - } + }) } -func (t Toolchain) newCoreutils() (pkg.Artifact, string) { +func (t Toolchain) newCoreutils(s *S) (pkg.Artifact, string) { const ( version = "9.11" checksum = "t8UMed5wpFEoC56aa42_yidfOAaRGzOfj7MRtQkkqgGbpXiskNA8bd-EmVSQkZie" ) - return t.NewPackage("coreutils", version, newTar( + return s.NewPackage(t, "coreutils", version, newTar( "https://ftpmirror.gnu.org/gnu/coreutils/coreutils-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -456,7 +456,7 @@ test_disable 'int main(){return 0;}' gnulib-tests/test-lchown.c ), version } func init() { - artifactsM[Coreutils] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newCoreutils, Name: "coreutils", @@ -464,15 +464,15 @@ func init() { Website: "https://www.gnu.org/software/coreutils/", ID: 343, - } + }) } -func (t Toolchain) newTexinfo() (pkg.Artifact, string) { +func (t Toolchain) newTexinfo(s *S) (pkg.Artifact, string) { const ( version = "7.3" checksum = "RRmC8Xwdof7JuZJeWGAQ_GeASIHAuJFQMbNONXBz5InooKIQGmqmWRjGNGEr5n4-" ) - return t.NewPackage("texinfo", version, newTar( + return s.NewPackage(t, "texinfo", version, newTar( "https://ftpmirror.gnu.org/gnu/texinfo/texinfo-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -484,7 +484,7 @@ func (t Toolchain) newTexinfo() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Texinfo] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newTexinfo, Name: "texinfo", @@ -497,15 +497,15 @@ func init() { }, ID: 4958, - } + }) } -func (t Toolchain) newGperf() (pkg.Artifact, string) { +func (t Toolchain) newGperf(s *S) (pkg.Artifact, string) { const ( version = "3.3" checksum = "RtIy9pPb_Bb8-31J2Nw-rRGso2JlS-lDlVhuNYhqR7Nt4xM_nObznxAlBMnarJv7" ) - return t.NewPackage("gperf", version, newTar( + return s.NewPackage(t, "gperf", version, newTar( "https://ftpmirror.gnu.org/gperf/gperf-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -514,7 +514,7 @@ func (t Toolchain) newGperf() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Gperf] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGperf, Name: "gperf", @@ -522,15 +522,15 @@ func init() { Website: "https://www.gnu.org/software/gperf/", ID: 1237, - } + }) } -func (t Toolchain) newGawk() (pkg.Artifact, string) { +func (t Toolchain) newGawk(s *S) (pkg.Artifact, string) { const ( version = "5.4.0" checksum = "m0RkIolC-PI7EY5q8pcx5Y-0twlIW0Yp3wXXmV-QaHorSdf8BhZ7kW9F8iWomz0C" ) - return t.NewPackage("gawk", version, newTar( + return s.NewPackage(t, "gawk", version, newTar( "https://ftpmirror.gnu.org/gnu/gawk/gawk-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -542,7 +542,7 @@ func (t Toolchain) newGawk() (pkg.Artifact, string) { }), version } func init() { - artifactsM[Gawk] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGawk, Name: "gawk", @@ -550,15 +550,15 @@ func init() { Website: "https://www.gnu.org/software/gawk/", ID: 868, - } + }) } -func (t Toolchain) newGrep() (pkg.Artifact, string) { +func (t Toolchain) newGrep(s *S) (pkg.Artifact, string) { const ( version = "3.12" checksum = "qMB4RjaPNRRYsxix6YOrjE8gyAT1zVSTy4nW4wKW9fqa0CHYAuWgPwDTirENzm_1" ) - return t.NewPackage("grep", version, newTar( + return s.NewPackage(t, "grep", version, newTar( "https://ftpmirror.gnu.org/gnu/grep/grep-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -575,7 +575,7 @@ test_disable 'int main(){return 0;}' gnulib-tests/test-c32ispunct.c ), version } func init() { - artifactsM[Grep] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGrep, Name: "grep", @@ -583,15 +583,15 @@ func init() { Website: "https://www.gnu.org/software/grep/", ID: 1251, - } + }) } -func (t Toolchain) newFindutils() (pkg.Artifact, string) { +func (t Toolchain) newFindutils(s *S) (pkg.Artifact, string) { const ( version = "4.10.0" checksum = "ZXABdNBQXL7QjTygynRRTdXYWxQKZ0Wn5eMd3NUnxR0xaS0u0VfcKoTlbo50zxv6" ) - return t.NewPackage("findutils", version, pkg.NewHTTPGet( + return s.NewPackage(t, "findutils", version, pkg.NewHTTPGet( nil, "https://ftpmirror.gnu.org/gnu/findutils/findutils-"+version+".tar.xz", mustDecode(checksum), ), &PackageAttr{ @@ -606,7 +606,7 @@ echo 'int main(){return 0;}' > tests/xargs/test-sigusr.c ), version } func init() { - artifactsM[Findutils] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newFindutils, Name: "findutils", @@ -614,15 +614,15 @@ func init() { Website: "https://www.gnu.org/software/findutils/", ID: 812, - } + }) } -func (t Toolchain) newBC() (pkg.Artifact, string) { +func (t Toolchain) newBC(s *S) (pkg.Artifact, string) { const ( version = "1.08.2" checksum = "8h6f3hjV80XiFs6v9HOPF2KEyg1kuOgn5eeFdVspV05ODBVQss-ey5glc8AmneLy" ) - return t.NewPackage("bc", version, newTar( + return s.NewPackage(t, "bc", version, newTar( "https://ftpmirror.gnu.org/gnu/bc/bc-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -635,7 +635,7 @@ func (t Toolchain) newBC() (pkg.Artifact, string) { ), version } func init() { - artifactsM[BC] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newBC, Name: "bc", @@ -643,22 +643,22 @@ func init() { Website: "https://www.gnu.org/software/bc/", ID: 170, - } + }) } -func (t Toolchain) newLibiconv() (pkg.Artifact, string) { +func (t Toolchain) newLibiconv(s *S) (pkg.Artifact, string) { const ( version = "1.19" checksum = "UibB6E23y4MksNqYmCCrA3zTFO6vJugD1DEDqqWYFZNuBsUWMVMcncb_5pPAr88x" ) - return t.NewPackage("libiconv", version, newTar( + return s.NewPackage(t, "libiconv", version, newTar( "https://ftpmirror.gnu.org/gnu/libiconv/libiconv-"+version+".tar.gz", checksum, pkg.TarGzip, ), nil, (*MakeHelper)(nil)), version } func init() { - artifactsM[Libiconv] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibiconv, Name: "libiconv", @@ -666,15 +666,15 @@ func init() { Website: "https://www.gnu.org/software/libiconv/", ID: 10656, - } + }) } -func (t Toolchain) newTar() (pkg.Artifact, string) { +func (t Toolchain) newTar(s *S) (pkg.Artifact, string) { const ( version = "1.35" checksum = "zSaoSlVUDW0dSfm4sbL4FrXLFR8U40Fh3zY5DWhR5NCIJ6GjU6Kc4VZo2-ZqpBRA" ) - return t.NewPackage("tar", version, newTar( + return s.NewPackage(t, "tar", version, newTar( "https://ftpmirror.gnu.org/gnu/tar/tar-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -700,7 +700,7 @@ func (t Toolchain) newTar() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Tar] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newTar, Name: "tar", @@ -708,15 +708,15 @@ func init() { Website: "https://www.gnu.org/software/tar/", ID: 4939, - } + }) } -func (t Toolchain) newParallel() (pkg.Artifact, string) { +func (t Toolchain) newParallel(s *S) (pkg.Artifact, string) { const ( version = "20260422" checksum = "eTsepxgqhXpMEhPd55qh-W5y4vjKn0x9TD2mzbJCNZYtFf4lT4Wzoqr74HGJYBEH" ) - return t.NewPackage("parallel", version, newTar( + return s.NewPackage(t, "parallel", version, newTar( "https://ftpmirror.gnu.org/gnu/parallel/parallel-"+version+".tar.bz2", checksum, pkg.TarBzip2, @@ -730,7 +730,7 @@ ln -s ../system/bin/bash /bin/ ), version } func init() { - artifactsM[Parallel] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newParallel, Name: "parallel", @@ -742,15 +742,15 @@ func init() { }, ID: 5448, - } + }) } -func (t Toolchain) newLibunistring() (pkg.Artifact, string) { +func (t Toolchain) newLibunistring(s *S) (pkg.Artifact, string) { const ( version = "1.4.2" checksum = "iW9BbfLoVlXjWoLTZ4AekQSu4cFBnLcZ4W8OHWbv0AhJNgD3j65_zqaLMzFKylg2" ) - return t.NewPackage("libunistring", version, newTar( + return s.NewPackage(t, "libunistring", version, newTar( "https://ftpmirror.gnu.org/gnu/libunistring/libunistring-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -767,7 +767,7 @@ test_disable 'int main(){return 0;}' tests/test-c32ispunct.c ), version } func init() { - artifactsM[Libunistring] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibunistring, Name: "libunistring", @@ -775,22 +775,22 @@ func init() { Website: "https://www.gnu.org/software/libunistring/", ID: 1747, - } + }) } -func (t Toolchain) newLibtasn1() (pkg.Artifact, string) { +func (t Toolchain) newLibtasn1(s *S) (pkg.Artifact, string) { const ( version = "4.21.0" checksum = "9DYI3UYbfYLy8JsKUcY6f0irskbfL0fHZA91Q-JEOA3kiUwpodyjemRsYRjUpjuq" ) - return t.NewPackage("libtasn1", version, newTar( + return s.NewPackage(t, "libtasn1", version, newTar( "https://ftpmirror.gnu.org/gnu/libtasn1/libtasn1-"+version+".tar.gz", checksum, pkg.TarGzip, ), nil, (*MakeHelper)(nil)), version } func init() { - artifactsM[Libtasn1] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibtasn1, Name: "libtasn1", @@ -798,15 +798,15 @@ func init() { Website: "https://www.gnu.org/software/libtasn1/", ID: 1734, - } + }) } -func (t Toolchain) newReadline() (pkg.Artifact, string) { +func (t Toolchain) newReadline(s *S) (pkg.Artifact, string) { const ( version = "8.3" checksum = "r-lcGRJq_MvvBpOq47Z2Y1OI2iqrmtcqhTLVXR0xWo37ZpC2uT_md7gKq5o_qTMV" ) - return t.NewPackage("readline", version, newTar( + return s.NewPackage(t, "readline", version, newTar( "https://ftpmirror.gnu.org/gnu/readline/readline-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -820,7 +820,7 @@ func (t Toolchain) newReadline() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Readline] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newReadline, Name: "readline", @@ -832,24 +832,24 @@ func init() { }, ID: 4173, - } + }) } -func (t Toolchain) newGnuTLS() (pkg.Artifact, string) { +func (t Toolchain) newGnuTLS(s *S) (pkg.Artifact, string) { const ( version = "3.8.12" checksum = "VPdP-nRydQQRJcnma-YA7CJYA_kzTJ2rb3QFeP6D27emSyInJ8sQ-Wzn518I38dl" ) var configureExtra []KV - switch arch { + switch s.arch { case "arm64": configureExtra = []KV{ {"disable-hardware-acceleration"}, } } - return t.NewPackage("gnutls", version, t.newTagRemote( + return s.NewPackage(t, "gnutls", version, s.newTagRemote(t, "https://gitlab.com/gnutls/gnutls.git", version, checksum, ), &PackageAttr{ @@ -997,7 +997,7 @@ index 1b78b8cf1..350156a86 100644 ), version } func init() { - artifactsM[GnuTLS] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGnuTLS, Name: "gnutls", @@ -1013,15 +1013,15 @@ func init() { }, ID: 1221, - } + }) } -func (t Toolchain) newBinutils() (pkg.Artifact, string) { +func (t Toolchain) newBinutils(s *S) (pkg.Artifact, string) { const ( version = "2.46.0" checksum = "4kK1_EXQipxSqqyvwD4LbiMLFKCUApjq6PeG4XJP4dzxYGqDeqXfh8zLuTyOuOVR" ) - return t.NewPackage("binutils", version, newTar( + return s.NewPackage(t, "binutils", version, newTar( "https://ftpmirror.gnu.org/gnu/binutils/binutils-"+version+".tar.bz2", checksum, pkg.TarBzip2, @@ -1030,7 +1030,7 @@ func (t Toolchain) newBinutils() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Binutils] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newBinutils, Name: "binutils", @@ -1038,15 +1038,15 @@ func init() { Website: "https://www.gnu.org/software/binutils/", ID: 7981, - } + }) } -func (t Toolchain) newGMP() (pkg.Artifact, string) { +func (t Toolchain) newGMP(s *S) (pkg.Artifact, string) { const ( version = "6.3.0" checksum = "yrgbgEDWKDdMWVHh7gPbVl56-sRtVVhfvv0M_LX7xMUUk_mvZ1QOJEAnt7g4i3k5" ) - return t.NewPackage("gmp", version, newTar( + return s.NewPackage(t, "gmp", version, newTar( "https://gcc.gnu.org/pub/gcc/infrastructure/"+ "gmp-"+version+".tar.bz2", checksum, @@ -1060,7 +1060,7 @@ func (t Toolchain) newGMP() (pkg.Artifact, string) { ), version } func init() { - artifactsM[GMP] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGMP, Name: "gmp", @@ -1068,15 +1068,15 @@ func init() { Website: "https://gmplib.org/", ID: 1186, - } + }) } -func (t Toolchain) newMPFR() (pkg.Artifact, string) { +func (t Toolchain) newMPFR(s *S) (pkg.Artifact, string) { const ( version = "4.2.2" checksum = "wN3gx0zfIuCn9r3VAn_9bmfvAYILwrRfgBjYSD1IjLqyLrLojNN5vKyQuTE9kA-B" ) - return t.NewPackage("mpfr", version, newTar( + return s.NewPackage(t, "mpfr", version, newTar( "https://gcc.gnu.org/pub/gcc/infrastructure/"+ "mpfr-"+version+".tar.bz2", checksum, @@ -1086,7 +1086,7 @@ func (t Toolchain) newMPFR() (pkg.Artifact, string) { ), version } func init() { - artifactsM[MPFR] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newMPFR, Name: "mpfr", @@ -1098,15 +1098,15 @@ func init() { }, ID: 2019, - } + }) } -func (t Toolchain) newMPC() (pkg.Artifact, string) { +func (t Toolchain) newMPC(s *S) (pkg.Artifact, string) { const ( version = "1.4.1" checksum = "ZffaZyWkvIw0iPvRe5EJ7O-VvHtSkbbb3K_7SgPtK810NvGan7nbF0T5-6tozjQN" ) - return t.NewPackage("mpc", version, newFromGitLab( + return s.NewPackage(t, "mpc", version, newFromGitLab( "gitlab.inria.fr", "mpc/mpc", version, checksum, @@ -1125,7 +1125,7 @@ func (t Toolchain) newMPC() (pkg.Artifact, string) { ), version } func init() { - artifactsM[MPC] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newMPC, Name: "mpc", @@ -1137,22 +1137,22 @@ func init() { }, ID: 1667, - } + }) } -func (t Toolchain) newGCC() (pkg.Artifact, string) { +func (t Toolchain) newGCC(s *S) (pkg.Artifact, string) { const ( version = "16.1.0" checksum = "4ASoWbxaA2FW7PAB0zzHDPC5XnNhyaAyjtDPpGzceSLeYnEIXsNYZR3PA_Zu5P0K" ) var configureExtra []KV - switch arch { + switch s.arch { case "amd64", "arm64": configureExtra = append(configureExtra, KV{"with-multilib-list", "''"}) } - return t.NewPackage("gcc", version, newTar( + return s.NewPackage(t, "gcc", version, newTar( "https://ftp.tsukuba.wide.ad.jp/software/gcc/releases/"+ "gcc-"+version+"/gcc-"+version+".tar.gz", checksum, @@ -1346,7 +1346,7 @@ ln -s system/lib /work/ ), version } func init() { - artifactsM[gcc] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGCC, Name: "gcc", @@ -1362,5 +1362,5 @@ func init() { }, ID: 6502, - } + }) } diff --git a/internal/rosa/go.go b/internal/rosa/go.go index 15b65b9e..b3b9b544 100644 --- a/internal/rosa/go.go +++ b/internal/rosa/go.go @@ -7,9 +7,9 @@ import ( ) // newGoBootstrap returns the Go bootstrap toolchain. -func (t Toolchain) newGoBootstrap() pkg.Artifact { +func (s *S) newGoBootstrap(t Toolchain) pkg.Artifact { const checksum = "8o9JL_ToiQKadCTb04nvBDkp8O1xiWOolAxVEqaTGodieNe4lOFEjlOxN3bwwe23" - return t.New("go1.4-bootstrap", 0, t.AppendPresets(nil, + return s.New(t, "go1.4-bootstrap", 0, s.AppendPresets(t, nil, Bash, ), nil, []string{ "CGO_ENABLED=0", @@ -28,17 +28,18 @@ chmod -R +w .. } // newGo returns a specific version of the Go toolchain. -func (t Toolchain) newGo( +func (s *S) newGo( + t Toolchain, version, checksum string, env []string, script string, extra ...pkg.Artifact, ) pkg.Artifact { name := "all" - if presetOpts&OptSkipCheck != 0 { + if s.opts&OptSkipCheck != 0 { name = "make" } - return t.New("go"+version, 0, t.AppendPresets(extra, + return s.New(t, "go"+version, 0, s.AppendPresets(t, extra, Bash, ), nil, slices.Concat([]string{ "CC=cc", @@ -65,27 +66,27 @@ ln -s \ ))) } -func (t Toolchain) newGoLatest() (pkg.Artifact, string) { +func (t Toolchain) newGoLatest(s *S) (pkg.Artifact, string) { var ( bootstrapEnv []string bootstrapExtra []pkg.Artifact finalEnv []string ) - switch arch { + switch s.arch { case "amd64": - bootstrapExtra = append(bootstrapExtra, t.newGoBootstrap()) + bootstrapExtra = append(bootstrapExtra, s.newGoBootstrap(t)) case "arm64", "riscv64": bootstrapEnv = append(bootstrapEnv, "GOROOT_BOOTSTRAP=/system") - bootstrapExtra = t.AppendPresets(bootstrapExtra, gcc) + bootstrapExtra = s.AppendPresets(t, bootstrapExtra, gcc) finalEnv = append(finalEnv, "CGO_ENABLED=0") default: - panic("unsupported target " + arch) + panic("unsupported target " + s.arch) } - go119 := t.newGo( + go119 := s.newGo(t, "1.19", "9_e0aFHsIkVxWVGsp9T2RvvjOc3p4n9o9S8tkNe9Cvgzk_zI2FhRQB7ioQkeAAro", append(bootstrapEnv, "CGO_ENABLED=0"), ` @@ -101,13 +102,13 @@ echo \ os/rawconn_test.go `, bootstrapExtra...) - go121 := t.newGo( + go121 := s.newGo(t, "1.21.13", "YtrDka402BOAEwywx03Vz4QlVwoBiguJHzG7PuythMCPHXS8CVMLvzmvgEbu4Tzu", []string{"CGO_ENABLED=0"}, ` sed -i \ - 's,/lib/ld-musl-`+linuxArch()+`.so.1,/system/bin/linker,' \ - cmd/link/internal/`+arch+`/obj.go + 's,/lib/ld-musl-`+s.linuxArch()+`.so.1,/system/bin/linker,' \ + cmd/link/internal/`+s.arch+`/obj.go rm \ crypto/tls/handshake_client_test.go \ @@ -119,23 +120,23 @@ echo \ `, go119, ) - go123 := t.newGo( + go123 := s.newGo(t, "1.23.12", "wcI32bl1tkqbgcelGtGWPI4RtlEddd-PTd76Eb-k7nXA5LbE9yTNdIL9QSOOxMOs", []string{"CGO_ENABLED=0"}, ` sed -i \ - 's,/lib/ld-musl-`+linuxArch()+`.so.1,/system/bin/linker,' \ - cmd/link/internal/`+arch+`/obj.go + 's,/lib/ld-musl-`+s.linuxArch()+`.so.1,/system/bin/linker,' \ + cmd/link/internal/`+s.arch+`/obj.go `, go121, ) - go125 := t.newGo( + go125 := s.newGo(t, "1.25.10", "TwKwatkpwal-j9U2sDSRPEdM3YesI4Gm88YgGV59wtU-L85K9gA7UPy9SCxn6PMb", []string{"CGO_ENABLED=0"}, ` sed -i \ - 's,/lib/ld-musl-`+linuxArch()+`.so.1,/system/bin/linker,' \ - cmd/link/internal/`+arch+`/obj.go + 's,/lib/ld-musl-`+s.linuxArch()+`.so.1,/system/bin/linker,' \ + cmd/link/internal/`+s.arch+`/obj.go rm \ os/root_unix_test.go \ @@ -147,13 +148,13 @@ rm \ version = "1.26.3" checksum = "lEiFocZFnN5fKvZzmwVdqc9pYUjAuhzqZGbuiOqxUP4XdcY8yECisKcqsQ_eNn1N" ) - return t.newGo( + return s.newGo(t, version, checksum, finalEnv, ` sed -i \ - 's,/lib/ld-musl-`+linuxArch()+`.so.1,/system/bin/linker,' \ - cmd/link/internal/`+arch+`/obj.go + 's,/lib/ld-musl-`+s.linuxArch()+`.so.1,/system/bin/linker,' \ + cmd/link/internal/`+s.arch+`/obj.go sed -i \ 's/cpu.X86.HasAVX512VBMI/& \&\& cpu.X86.HasPOPCNT/' \ internal/runtime/gc/scan/scan_amd64.go @@ -166,7 +167,7 @@ rm \ ), version } func init() { - artifactsM[Go] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGoLatest, Name: "go", @@ -174,5 +175,5 @@ func init() { Website: "https://go.dev/", ID: 1227, - } + }) } diff --git a/internal/rosa/gtk.go b/internal/rosa/gtk.go index ad119f19..ab054279 100644 --- a/internal/rosa/gtk.go +++ b/internal/rosa/gtk.go @@ -5,12 +5,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newGLib() (pkg.Artifact, string) { +func (t Toolchain) newGLib(s *S) (pkg.Artifact, string) { const ( version = "2.88.1" checksum = "Rkszn6W4RHjyspyqfXdVAVawdwDJCuS0Zu0f7qot7tbJhnw2fUDoUUJB40m-1MCX" ) - return t.NewPackage("glib", version, t.newTagRemote( + return s.NewPackage(t, "glib", version, s.newTagRemote(t, "https://gitlab.gnome.org/GNOME/glib.git", version, checksum, ), &PackageAttr{ @@ -42,7 +42,7 @@ func (t Toolchain) newGLib() (pkg.Artifact, string) { ), version } func init() { - artifactsM[GLib] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGLib, Name: "glib", @@ -56,5 +56,5 @@ func init() { }, ID: 10024, - } + }) } diff --git a/internal/rosa/hakurei.go b/internal/rosa/hakurei.go index 276547a8..9f5fba30 100644 --- a/internal/rosa/hakurei.go +++ b/internal/rosa/hakurei.go @@ -2,7 +2,8 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newHakurei( +func (s *S) newHakurei( + t Toolchain, suffix, script string, withHostname bool, ) pkg.Artifact { @@ -14,7 +15,7 @@ go build -o /bin/hostname /usr/src/hostname/main.go hostname = "" } - return t.New("hakurei"+suffix+"-"+hakureiVersion, 0, t.AppendPresets(nil, + return s.New(t, "hakurei"+suffix+"-"+hakureiVersion, 0, s.AppendPresets(t, nil, Go, PkgConfig, @@ -38,8 +39,8 @@ go build -o /bin/hostname /usr/src/hostname/main.go cd /usr/src/hakurei HAKUREI_VERSION='v`+hakureiVersion+`' -`+script, pkg.Path(AbsUsrSrc.Append("hakurei"), true, t.NewPatchedSource( - "hakurei", hakureiVersion, hakureiSource, false, hakureiPatches..., +`+script, pkg.Path(AbsUsrSrc.Append("hakurei"), true, s.NewPatchedSource( + t, "hakurei", hakureiVersion, hakureiSource, false, hakureiPatches..., )), pkg.Path(AbsUsrSrc.Append("hostname", "main.go"), false, pkg.NewFile( "hostname.go", []byte(` @@ -58,9 +59,9 @@ func main() { ))) } func init() { - artifactsM[Hakurei] = Metadata{ - f: func(t Toolchain) (pkg.Artifact, string) { - return t.newHakurei("", ` + native.MustRegister(&Artifact{ + f: func(t Toolchain, s *S) (pkg.Artifact, string) { + return s.newHakurei(t, "", ` mkdir -p /work/system/libexec/hakurei/ echo "Building hakurei for $(go env GOOS)/$(go env GOARCH)." @@ -93,14 +94,14 @@ mkdir -p /work/system/bin/ Website: "https://hakurei.app/", ID: 388834, - } - artifactsM[HakureiDist] = Metadata{ - f: func(t Toolchain) (pkg.Artifact, string) { + }) + native.MustRegister(&Artifact{ + f: func(t Toolchain, s *S) (pkg.Artifact, string) { name := "all" - if presetOpts&OptSkipCheck != 0 { + if s.opts&OptSkipCheck != 0 { name = "make" } - return t.newHakurei("-dist", ` + return s.newHakurei(t, "-dist", ` export HAKUREI_VERSION DESTDIR=/work /usr/src/hakurei/`+name+`.sh `, true), hakureiVersion @@ -109,5 +110,5 @@ DESTDIR=/work /usr/src/hakurei/`+name+`.sh Name: "hakurei-dist", Description: "low-level userspace tooling for Rosa OS (distribution tarball)", Website: "https://hakurei.app/", - } + }) } diff --git a/internal/rosa/hwdata.go b/internal/rosa/hwdata.go index 0c80feaa..eda0ba95 100644 --- a/internal/rosa/hwdata.go +++ b/internal/rosa/hwdata.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newHwdata() (pkg.Artifact, string) { +func (t Toolchain) newHwdata(s *S) (pkg.Artifact, string) { const ( version = "0.407" checksum = "6p1XD0CRuzt6hLfjv4ShKBW934BexmoPkRrmwxD4J63fBVCzVBRHyF8pVJdW_Xjm" ) - return t.NewPackage("hwdata", version, newFromGitHub( + return s.NewPackage(t, "hwdata", version, newFromGitHub( "vcrhonek/hwdata", "v"+version, checksum, ), &PackageAttr{ @@ -22,7 +22,7 @@ func (t Toolchain) newHwdata() (pkg.Artifact, string) { }), version } func init() { - artifactsM[Hwdata] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newHwdata, Name: "hwdata", @@ -30,5 +30,5 @@ func init() { Website: "https://github.com/vcrhonek/hwdata", ID: 5387, - } + }) } diff --git a/internal/rosa/images.go b/internal/rosa/images.go index 30efbe8a..3441bcf0 100644 --- a/internal/rosa/images.go +++ b/internal/rosa/images.go @@ -6,12 +6,12 @@ import ( ) func init() { - artifactsM[EarlyInit] = Metadata{ + native.MustRegister(&Artifact{ Name: "earlyinit", Description: "Rosa OS initramfs init program", - f: func(t Toolchain) (pkg.Artifact, string) { - return t.newHakurei("-early-init", ` + f: func(t Toolchain, s *S) (pkg.Artifact, string) { + return s.newHakurei(t, "-early-init", ` mkdir -p /work/system/libexec/hakurei/ echo '# Building earlyinit.' @@ -24,15 +24,14 @@ go build -trimpath -v -o /work/system/libexec/hakurei -ldflags="-s -w echo `, false), Unversioned }, - } + }) } - -func (t Toolchain) newImageSystem() (pkg.Artifact, string) { - return t.New("system.img", TNoToolchain, t.AppendPresets(nil, +func (t Toolchain) newImageSystem(s *S) (pkg.Artifact, string) { + return s.New(t, "system.img", TNoToolchain, s.AppendPresets(t, nil, SquashfsTools, ), nil, nil, ` mksquashfs /mnt/system /work/system.img -`, pkg.Path(fhs.AbsRoot.Append("mnt"), false, t.AppendPresets(nil, +`, pkg.Path(fhs.AbsRoot.Append("mnt"), false, s.AppendPresets(t, nil, Musl, Mksh, Toybox, @@ -43,16 +42,15 @@ mksquashfs /mnt/system /work/system.img )...)), Unversioned } func init() { - artifactsM[ImageSystem] = Metadata{ + native.MustRegister(&Artifact{ Name: "system-image", Description: "Rosa OS system image", f: Toolchain.newImageSystem, - } + }) } - -func (t Toolchain) newImageInitramfs() (pkg.Artifact, string) { - return t.New("initramfs", TNoToolchain, t.AppendPresets(nil, +func (t Toolchain) newImageInitramfs(s *S) (pkg.Artifact, string) { + return s.New(t, "initramfs", TNoToolchain, s.AppendPresets(t, nil, Zstd, EarlyInit, GenInitCPIO, @@ -66,10 +64,10 @@ file /init /system/libexec/hakurei/earlyinit 0555 0 0 `)))), Unversioned } func init() { - artifactsM[ImageInitramfs] = Metadata{ + native.MustRegister(&Artifact{ Name: "initramfs-image", Description: "Rosa OS initramfs image", f: Toolchain.newImageInitramfs, - } + }) } diff --git a/internal/rosa/kernel.go b/internal/rosa/kernel.go index b221345c..3f4b8422 100644 --- a/internal/rosa/kernel.go +++ b/internal/rosa/kernel.go @@ -11,26 +11,26 @@ var kernelSource = newTar( pkg.TarGzip, ) -func (t Toolchain) newKernelSource() (pkg.Artifact, string) { - return t.New("kernel-"+kernelVersion+"-src", 0, nil, nil, nil, ` +func (t Toolchain) newKernelSource(s *S) (pkg.Artifact, string) { + return s.New(t, "kernel-"+kernelVersion+"-src", 0, nil, nil, nil, ` mkdir -p /work/usr/src/ cp -r /usr/src/linux /work/usr/src/ chmod -R +w /work/usr/src/linux/ `, pkg.Path(AbsUsrSrc.Append("linux"), false, kernelSource)), kernelVersion } func init() { - artifactsM[KernelSource] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newKernelSource, Name: "kernel-source", Description: "a writable kernel source tree installed to /usr/src/linux", Website: "https://kernel.org/", - } + }) } -func (t Toolchain) newKernelHeaders() (pkg.Artifact, string) { +func (t Toolchain) newKernelHeaders(s *S) (pkg.Artifact, string) { const checksum = "lCmBNcMeUmXifg0vecKOPy3GAaFcJSmOPnf3wit9xYTDSTsFADPt1xxUFfmTn1fD" - return t.NewPackage("kernel-headers", kernelVersion, kernelSource, &PackageAttr{ + return s.NewPackage(t, "kernel-headers", kernelVersion, kernelSource, &PackageAttr{ Flag: TEarly, KnownChecksum: new(mustDecode(checksum)), @@ -67,17 +67,17 @@ cat \ ), kernelVersion } func init() { - artifactsM[KernelHeaders] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newKernelHeaders, Name: "kernel-headers", Description: "an installation of kernel headers", Website: "https://kernel.org/", - } + }) } -func (t Toolchain) newKernel() (pkg.Artifact, string) { - return t.NewPackage("kernel", kernelVersion, kernelSource, &PackageAttr{ +func (t Toolchain) newKernel(s *S) (pkg.Artifact, string) { + return s.NewPackage(t, "kernel", kernelVersion, kernelSource, &PackageAttr{ Env: []string{ "PATH=/system/sbin", }, @@ -1272,7 +1272,7 @@ rm -v /work/system/lib/modules/` + kernelVersion + `/build ), kernelVersion } func init() { - artifactsM[Kernel] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newKernel, Name: "kernel", @@ -1280,30 +1280,30 @@ func init() { Website: "https://kernel.org/", ID: 375621, - } + }) } -func (t Toolchain) newGenInitCPIO() (pkg.Artifact, string) { - return t.New("gen_init_cpio-"+kernelVersion, 0, nil, nil, nil, ` +func (t Toolchain) newGenInitCPIO(s *S) (pkg.Artifact, string) { + return s.New(t, "gen_init_cpio-"+kernelVersion, 0, nil, nil, nil, ` mkdir -p /work/system/bin/ cc -o /work/system/bin/gen_init_cpio /usr/src/linux/usr/gen_init_cpio.c `, pkg.Path(AbsUsrSrc.Append("linux"), false, kernelSource)), kernelVersion } func init() { - artifactsM[GenInitCPIO] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newGenInitCPIO, Name: "gen_init_cpio", Description: "a program in the kernel source tree for creating initramfs archive", - } + }) } -func (t Toolchain) newFirmware() (pkg.Artifact, string) { +func (t Toolchain) newFirmware(s *S) (pkg.Artifact, string) { const ( version = "20260410" checksum = "J8PdQlGqwrivpskPzbL6xacqR6mlKtXpe5RpzFfVzKPAgG81ZRXsc3qrxwdGJbil" ) - return t.NewPackage("firmware", version, newFromGitLab( + return s.NewPackage(t, "firmware", version, newFromGitLab( "gitlab.com", "kernel-firmware/linux-firmware", version, @@ -1337,7 +1337,7 @@ func (t Toolchain) newFirmware() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Firmware] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newFirmware, Name: "firmware", @@ -1345,5 +1345,5 @@ func init() { Website: "https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/", ID: 141464, - } + }) } diff --git a/internal/rosa/kmod.go b/internal/rosa/kmod.go index 380b3846..69310e3f 100644 --- a/internal/rosa/kmod.go +++ b/internal/rosa/kmod.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newKmod() (pkg.Artifact, string) { +func (t Toolchain) newKmod(s *S) (pkg.Artifact, string) { const ( version = "34.2" checksum = "0K7POeTKxMhExsaTsnKAC6LUNsRSfe6sSZxWONPbOu-GI_pXOw3toU_BIoqfBhJV" ) - return t.NewPackage("kmod", version, newTar( + return s.NewPackage(t, "kmod", version, newTar( "https://www.kernel.org/pub/linux/utils/kernel/"+ "kmod/kmod-"+version+".tar.gz", checksum, @@ -32,7 +32,7 @@ func (t Toolchain) newKmod() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Kmod] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newKmod, Name: "kmod", @@ -46,5 +46,5 @@ func init() { }, ID: 1517, - } + }) } diff --git a/internal/rosa/libarchive.go b/internal/rosa/libarchive.go index b584aaa3..8edbcd17 100644 --- a/internal/rosa/libarchive.go +++ b/internal/rosa/libarchive.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibarchive() (pkg.Artifact, string) { +func (t Toolchain) newLibarchive(s *S) (pkg.Artifact, string) { const ( version = "3.8.7" checksum = "CUJK4MDQmZmATClgQBH2Wt-7Ts4iiSUlg1J_TVb6-5IK3rVUgVLIMc5k-bnWB9w3" ) - return t.NewPackage("libarchive", version, newFromGitHub( + return s.NewPackage(t, "libarchive", version, newFromGitHub( "libarchive/libarchive", "v"+version, checksum, ), &PackageAttr{ @@ -88,7 +88,7 @@ install -Dv /usr/src/CTestCustom.cmake /cure/ }, (*CMakeHelper)(nil)), version } func init() { - artifactsM[Libarchive] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibarchive, Name: "libarchive", @@ -96,5 +96,5 @@ func init() { Website: "https://www.libarchive.org/", ID: 1558, - } + }) } diff --git a/internal/rosa/libbsd.go b/internal/rosa/libbsd.go index 77a61ebf..40b69efa 100644 --- a/internal/rosa/libbsd.go +++ b/internal/rosa/libbsd.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibmd() (pkg.Artifact, string) { +func (t Toolchain) newLibmd(s *S) (pkg.Artifact, string) { const ( version = "1.2.0" checksum = "1rJ6joAO0wwMZvSfnRNkc1MOhywyAq7SM8VmF92NvDtv7Qdl1LRbjm5fg_DFFtGj" ) - return t.NewPackage("libmd", version, t.newTagRemote( + return s.NewPackage(t, "libmd", version, s.newTagRemote(t, "https://git.hadrons.org/git/libmd.git", version, checksum, ), nil, &MakeHelper{ @@ -21,7 +21,7 @@ install -D /usr/src/libmd/src/helper.c src/helper.c ), version } func init() { - artifactsM[Libmd] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibmd, Name: "libmd", @@ -29,15 +29,15 @@ func init() { Website: "https://www.hadrons.org/software/libmd/", ID: 15525, - } + }) } -func (t Toolchain) newLibbsd() (pkg.Artifact, string) { +func (t Toolchain) newLibbsd(s *S) (pkg.Artifact, string) { const ( version = "0.12.2" checksum = "NVS0xFLTwSP8JiElEftsZ-e1_C-IgJhHrHE77RwKt5178M7r087waO-zYx2_dfGX" ) - return t.NewPackage("libbsd", version, t.newTagRemote( + return s.NewPackage(t, "libbsd", version, s.newTagRemote(t, "https://gitlab.freedesktop.org/libbsd/libbsd.git", version, checksum, ), nil, &MakeHelper{ @@ -50,7 +50,7 @@ func (t Toolchain) newLibbsd() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libbsd] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibbsd, Name: "libbsd", @@ -58,5 +58,5 @@ func init() { Website: "https://libbsd.freedesktop.org/", ID: 1567, - } + }) } diff --git a/internal/rosa/libcap.go b/internal/rosa/libcap.go index a35a5743..48fcb4e5 100644 --- a/internal/rosa/libcap.go +++ b/internal/rosa/libcap.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibcap() (pkg.Artifact, string) { +func (t Toolchain) newLibcap(s *S) (pkg.Artifact, string) { const ( version = "2.78" checksum = "wFdUkBhFMD9InPnrBZyegWrlPSAg_9JiTBC-eSFyWWlmbzL2qjh2mKxr9Kx2a8ut" ) - return t.NewPackage("libcap", version, newTar( + return s.NewPackage(t, "libcap", version, newTar( "https://git.kernel.org/pub/scm/libs/libcap/libcap.git/"+ "snapshot/libcap-"+version+".tar.gz", checksum, @@ -42,7 +42,7 @@ ln -s ../system/bin/bash /bin/ ), version } func init() { - artifactsM[Libcap] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibcap, Name: "libcap", @@ -50,5 +50,5 @@ func init() { Website: "https://sites.google.com/site/fullycapable/", ID: 1569, - } + }) } diff --git a/internal/rosa/libconfig.go b/internal/rosa/libconfig.go index 54c7c62e..554dd7ad 100644 --- a/internal/rosa/libconfig.go +++ b/internal/rosa/libconfig.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibconfig() (pkg.Artifact, string) { +func (t Toolchain) newLibconfig(s *S) (pkg.Artifact, string) { const ( version = "1.8.2" checksum = "fD32hjeAZuTz98g6WYHRwsxphrgrEFqxi5Z1jlJemPckPBfxpS3i5HgshAuA6vmT" ) - return t.NewPackage("libconfig", version, newFromGitHub( + return s.NewPackage(t, "libconfig", version, newFromGitHub( "hyperrealm/libconfig", "v"+version, checksum, @@ -38,7 +38,7 @@ index eba7eae..f916d2e 100644 }, (*CMakeHelper)(nil)), version } func init() { - artifactsM[Libconfig] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibconfig, Name: "libconfig", @@ -46,5 +46,5 @@ func init() { Website: "https://hyperrealm.github.io/libconfig/", ID: 1580, - } + }) } diff --git a/internal/rosa/libdisplay-info.go b/internal/rosa/libdisplay-info.go index 539aced8..d3cde689 100644 --- a/internal/rosa/libdisplay-info.go +++ b/internal/rosa/libdisplay-info.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibdisplayInfo() (pkg.Artifact, string) { +func (t Toolchain) newLibdisplayInfo(s *S) (pkg.Artifact, string) { const ( version = "0.3.0" checksum = "yjOqPUHHYgRtpqGw5RI1n2Q1_hO5j0LiFNMbjcRWV4Nf71XwwoC9fZMlKBDeLchT" ) - return t.NewPackage("libdisplay-info", version, newFromGitLab( + return s.NewPackage(t, "libdisplay-info", version, newFromGitLab( "gitlab.freedesktop.org", "emersion/libdisplay-info", version, checksum, @@ -18,7 +18,7 @@ func (t Toolchain) newLibdisplayInfo() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibdisplayInfo] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibdisplayInfo, Name: "libdisplay-info", @@ -26,5 +26,5 @@ func init() { Website: "https://gitlab.freedesktop.org/emersion/libdisplay-info", ID: 326668, - } + }) } diff --git a/internal/rosa/libepoxy.go b/internal/rosa/libepoxy.go index 33977944..00cf1459 100644 --- a/internal/rosa/libepoxy.go +++ b/internal/rosa/libepoxy.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibepoxy() (pkg.Artifact, string) { +func (t Toolchain) newLibepoxy(s *S) (pkg.Artifact, string) { const ( version = "1.5.10" checksum = "OHI8wshrlGw6BMGrmSyejJtwzM2gPhyFJrTsKxULyKMmYrfgcOe7Iw2ibVoUND_Q" ) - return t.NewPackage("libepoxy", version, newFromGitHub( + return s.NewPackage(t, "libepoxy", version, newFromGitHub( "anholt/libepoxy", version, checksum, @@ -21,7 +21,7 @@ func (t Toolchain) newLibepoxy() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libepoxy] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibepoxy, Name: "libepoxy", @@ -29,5 +29,5 @@ func init() { Website: "https://github.com/anholt/libepoxy", ID: 6090, - } + }) } diff --git a/internal/rosa/libev.go b/internal/rosa/libev.go index 30e3b8d8..6c733f13 100644 --- a/internal/rosa/libev.go +++ b/internal/rosa/libev.go @@ -2,19 +2,19 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibev() (pkg.Artifact, string) { +func (t Toolchain) newLibev(s *S) (pkg.Artifact, string) { const ( version = "4.33" checksum = "774eSXV_4k8PySRprUDChbEwsw-kzjIFnJ3MpNOl5zDpamBRvC3BqPyRxvkwcL6_" ) - return t.NewPackage("libev", version, newTar( + return s.NewPackage(t, "libev", version, newTar( "https://dist.schmorp.de/libev/Attic/libev-"+version+".tar.gz", checksum, pkg.TarGzip, ), nil, (*MakeHelper)(nil)), version } func init() { - artifactsM[Libev] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibev, Name: "libev", @@ -22,5 +22,5 @@ func init() { Website: "http://libev.schmorp.de/", ID: 1605, - } + }) } diff --git a/internal/rosa/libexpat.go b/internal/rosa/libexpat.go index 7d4f711b..4b9263ab 100644 --- a/internal/rosa/libexpat.go +++ b/internal/rosa/libexpat.go @@ -6,12 +6,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newLibexpat() (pkg.Artifact, string) { +func (t Toolchain) newLibexpat(s *S) (pkg.Artifact, string) { const ( version = "2.8.1" checksum = "iMEtbOJhQfGof2GxSlxffQSI1va_NDDQ9VIuqcPbNZ0291Dr8wttD5QecYyjIQap" ) - return t.NewPackage("libexpat", version, newFromGitHubRelease( + return s.NewPackage(t, "libexpat", version, newFromGitHubRelease( "libexpat/libexpat", "R_"+strings.ReplaceAll(version, ".", "_"), "expat-"+version+".tar.bz2", @@ -22,7 +22,7 @@ func (t Toolchain) newLibexpat() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libexpat] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibexpat, Name: "libexpat", @@ -30,5 +30,5 @@ func init() { Website: "https://libexpat.github.io/", ID: 770, - } + }) } diff --git a/internal/rosa/libffi.go b/internal/rosa/libffi.go index 0e2c5e14..9b5a1421 100644 --- a/internal/rosa/libffi.go +++ b/internal/rosa/libffi.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibffi() (pkg.Artifact, string) { +func (t Toolchain) newLibffi(s *S) (pkg.Artifact, string) { const ( version = "3.5.2" checksum = "2_Q-ZNBBbVhltfL5zEr0wljxPegUimTK4VeMSiwJEGksls3n4gj3lV0Ly3vviSFH" ) - return t.NewPackage("libffi", version, newFromGitHubRelease( + return s.NewPackage(t, "libffi", version, newFromGitHubRelease( "libffi/libffi", "v"+version, "libffi-"+version+".tar.gz", @@ -18,7 +18,7 @@ func (t Toolchain) newLibffi() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libffi] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibffi, Name: "libffi", @@ -26,5 +26,5 @@ func init() { Website: "https://sourceware.org/libffi/", ID: 1611, - } + }) } diff --git a/internal/rosa/libgd.go b/internal/rosa/libgd.go index e92ce9f0..b449110d 100644 --- a/internal/rosa/libgd.go +++ b/internal/rosa/libgd.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibgd() (pkg.Artifact, string) { +func (t Toolchain) newLibgd(s *S) (pkg.Artifact, string) { const ( version = "2.3.3" checksum = "8T-sh1_FJT9K9aajgxzh8ot6vWIF-xxjcKAHvTak9MgGUcsFfzP8cAvvv44u2r36" ) - return t.NewPackage("libgd", version, newFromGitHubRelease( + return s.NewPackage(t, "libgd", version, newFromGitHubRelease( "libgd/libgd", "gd-"+version, "libgd-"+version+".tar.gz", checksum, @@ -24,7 +24,7 @@ mkdir /dev/shm/gd ), version } func init() { - artifactsM[Libgd] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibgd, Name: "libgd", @@ -36,5 +36,5 @@ func init() { }, ID: 880, - } + }) } diff --git a/internal/rosa/libpng.go b/internal/rosa/libpng.go index 359c3278..744a43dc 100644 --- a/internal/rosa/libpng.go +++ b/internal/rosa/libpng.go @@ -6,12 +6,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newLibpng() (pkg.Artifact, string) { +func (t Toolchain) newLibpng(s *S) (pkg.Artifact, string) { const ( version = "1.6.58" checksum = "m_a5lROJH7vmF3cMjqwTUqURuQLhV1JQx2ySPzcN3VPdgDB9pG3UINsIx_mtkr-t" ) - return t.NewPackage("libpng", version, newTar( + return s.NewPackage(t, "libpng", version, newTar( "https://downloads.sourceforge.net/project/libpng/libpng"+ strings.Join(strings.SplitN(version, ".", 3)[:2], "")+ "/"+version+"/libpng-"+version+".tar.gz", @@ -22,7 +22,7 @@ func (t Toolchain) newLibpng() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libpng] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibpng, Name: "libpng", @@ -34,5 +34,5 @@ func init() { }, ID: 1705, - } + }) } diff --git a/internal/rosa/libpsl.go b/internal/rosa/libpsl.go index 43ecdf8b..3b6c6f75 100644 --- a/internal/rosa/libpsl.go +++ b/internal/rosa/libpsl.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibpsl() (pkg.Artifact, string) { +func (t Toolchain) newLibpsl(s *S) (pkg.Artifact, string) { const ( version = "0.21.5" checksum = "XjfxSzh7peG2Vg4vJlL8z4JZJLcXqbuP6pLWkrGCmRxlnYUFTKNBqWGHCxEOlCad" ) - return t.NewPackage("libpsl", version, newFromGitHubRelease( + return s.NewPackage(t, "libpsl", version, newFromGitHubRelease( "rockdaboot/libpsl", version, "libpsl-"+version+".tar.gz", @@ -25,7 +25,7 @@ test_disable 'int main(){return 0;}' tests/test-is-public-builtin.c ), version } func init() { - artifactsM[Libpsl] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibpsl, Name: "libpsl", @@ -33,5 +33,5 @@ func init() { Website: "https://rockdaboot.github.io/libpsl/", ID: 7305, - } + }) } diff --git a/internal/rosa/libseccomp.go b/internal/rosa/libseccomp.go index d4a9025d..f152cce5 100644 --- a/internal/rosa/libseccomp.go +++ b/internal/rosa/libseccomp.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibseccomp() (pkg.Artifact, string) { +func (t Toolchain) newLibseccomp(s *S) (pkg.Artifact, string) { const ( version = "2.6.0" checksum = "mMu-iR71guPjFbb31u-YexBaanKE_nYPjPux-vuBiPfS_0kbwJdfCGlkofaUm-EY" ) - return t.NewPackage("libseccomp", version, newFromGitHubRelease( + return s.NewPackage(t, "libseccomp", version, newFromGitHubRelease( "seccomp/libseccomp", "v"+version, "libseccomp-"+version+".tar.gz", @@ -43,7 +43,7 @@ index adccef3..65a277a 100644 ), version } func init() { - artifactsM[Libseccomp] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibseccomp, Name: "libseccomp", @@ -51,5 +51,5 @@ func init() { Website: "https://github.com/seccomp/libseccomp/", ID: 13823, - } + }) } diff --git a/internal/rosa/libtirpc.go b/internal/rosa/libtirpc.go index 7cc1dca6..e689d720 100644 --- a/internal/rosa/libtirpc.go +++ b/internal/rosa/libtirpc.go @@ -6,12 +6,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newLibtirpc() (pkg.Artifact, string) { +func (t Toolchain) newLibtirpc(s *S) (pkg.Artifact, string) { const ( version = "1.3.7" checksum = "nzFfu7LNvnSNiNAryD1vtnNWnU-Xqee8KqfXUKoBf5yjb5-dkeRkYuRijdCoYLof" ) - return t.NewPackage("libtirpc", version, t.newTagRemote( + return s.NewPackage(t, "libtirpc", version, s.newTagRemote(t, "git://linux-nfs.org/~steved/libtirpc", "libtirpc-"+ strings.Join(strings.SplitN(version, ".", 3), "-"), @@ -32,7 +32,7 @@ func (t Toolchain) newLibtirpc() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libtirpc] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibtirpc, Name: "libtirpc", @@ -40,5 +40,5 @@ func init() { Website: "https://sourceforge.net/projects/libtirpc/", ID: 1740, - } + }) } diff --git a/internal/rosa/libucontext.go b/internal/rosa/libucontext.go index 5f0f21bd..b633c389 100644 --- a/internal/rosa/libucontext.go +++ b/internal/rosa/libucontext.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibucontext() (pkg.Artifact, string) { +func (t Toolchain) newLibucontext(s *S) (pkg.Artifact, string) { const ( version = "1.5.1" checksum = "mUgeyJknjMxT-5fORzz-rqhZfP3Y7EZGBhOwvhuX7MsF4Pk9wkuwtrLf5IML-jWu" ) - return t.NewPackage("libucontext", version, newFromGitHub( + return s.NewPackage(t, "libucontext", version, newFromGitHub( "kaniini/libucontext", "libucontext-"+version, checksum, @@ -21,13 +21,13 @@ func (t Toolchain) newLibucontext() (pkg.Artifact, string) { SkipConfigure: true, InPlace: true, Make: []string{ - "ARCH=" + linuxArch(), + "ARCH=" + s.linuxArch(), }, Install: "make prefix=/system DESTDIR=/work install", }), version } func init() { - artifactsM[Libucontext] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibucontext, Name: "libucontext", @@ -35,5 +35,5 @@ func init() { Website: "https://github.com/kaniini/libucontext/", ID: 17085, - } + }) } diff --git a/internal/rosa/libxml2.go b/internal/rosa/libxml2.go index aebc9896..011a7d4a 100644 --- a/internal/rosa/libxml2.go +++ b/internal/rosa/libxml2.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibxml2() (pkg.Artifact, string) { +func (t Toolchain) newLibxml2(s *S) (pkg.Artifact, string) { const ( version = "2.15.3" checksum = "oJy74htGlEpf70KPvpW18fYJo0RQQkCXZRwqUz6NoXborS3HCq3Nm4gsyaSeNmUH" ) - return t.NewPackage("libxml2", version, newFromGitLab( + return s.NewPackage(t, "libxml2", version, newFromGitLab( "gitlab.gnome.org", "GNOME/libxml2", "v"+version, checksum, @@ -20,7 +20,7 @@ func (t Toolchain) newLibxml2() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libxml2] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibxml2, Name: "libxml2", @@ -28,5 +28,5 @@ func init() { Website: "https://gitlab.gnome.org/GNOME/libxml2/", ID: 1783, - } + }) } diff --git a/internal/rosa/libxslt.go b/internal/rosa/libxslt.go index 0fec4081..4128a3e1 100644 --- a/internal/rosa/libxslt.go +++ b/internal/rosa/libxslt.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibxslt() (pkg.Artifact, string) { +func (t Toolchain) newLibxslt(s *S) (pkg.Artifact, string) { const ( version = "1.1.45" checksum = "67ks7v8od2oWaEGf23Sst_Xbn_8brQyolQjqxPoO-lK35k_WJhi2Px5JJgbk-nfn" ) - return t.NewPackage("libxslt", version, newFromGitLab( + return s.NewPackage(t, "libxslt", version, newFromGitLab( "gitlab.gnome.org", "GNOME/libxslt", "v"+version, checksum, @@ -26,7 +26,7 @@ func (t Toolchain) newLibxslt() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libxslt] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibxslt, Name: "libxslt", @@ -38,5 +38,5 @@ func init() { }, ID: 13301, - } + }) } diff --git a/internal/rosa/llvm.go b/internal/rosa/llvm.go index b374601d..b5abbe84 100644 --- a/internal/rosa/llvm.go +++ b/internal/rosa/llvm.go @@ -29,10 +29,10 @@ func litArgs(verbose bool, skipChecks ...string) string { return "'" + strings.Join(args, " ") + "'" } -func (t Toolchain) newEarlyCompilerRT() (pkg.Artifact, string) { - version := t.Version(llvmSource) +func (t Toolchain) newEarlyCompilerRT(s *S) (pkg.Artifact, string) { + source, version := s.Load(t, llvmSource) major, _, _ := strings.Cut(version, ".") - return t.NewPackage("early-compiler-rt", version, t.Load(llvmSource), &PackageAttr{ + return s.NewPackage(t, "early-compiler-rt", version, source, &PackageAttr{ Flag: TExclusive, }, &CMakeHelper{ Append: []string{"compiler-rt"}, @@ -71,10 +71,10 @@ ln -s \ "/work/system/lib/clang/` + major + `/lib/" ln -s \ - "clang_rt.crtbegin-` + linuxArch() + `.o" \ + "clang_rt.crtbegin-` + s.linuxArch() + `.o" \ "/work/system/lib/${ROSA_TRIPLE}/crtbeginS.o" ln -s \ - "clang_rt.crtend-` + linuxArch() + `.o" \ + "clang_rt.crtend-` + s.linuxArch() + `.o" \ "/work/system/lib/${ROSA_TRIPLE}/crtendS.o" `, }, @@ -85,7 +85,7 @@ ln -s \ ), version } func init() { - artifactsM[earlyCompilerRT] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newEarlyCompilerRT, Name: "early-compiler-rt", @@ -94,12 +94,12 @@ func init() { Dependencies: P{ Musl, }, - } + }) } -func (t Toolchain) newEarlyRuntimes() (pkg.Artifact, string) { - version := t.Version(llvmSource) - return t.NewPackage("early-runtimes", version, t.Load(llvmSource), &PackageAttr{ +func (t Toolchain) newEarlyRuntimes(s *S) (pkg.Artifact, string) { + source, version := s.Load(t, llvmSource) + return s.NewPackage(t, "early-runtimes", version, source, &PackageAttr{ Flag: TExclusive, }, &CMakeHelper{ Append: []string{"runtimes"}, @@ -145,7 +145,7 @@ func (t Toolchain) newEarlyRuntimes() (pkg.Artifact, string) { ), version } func init() { - artifactsM[earlyRuntimes] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newEarlyRuntimes, Name: "early-runtimes", @@ -154,11 +154,11 @@ func init() { Dependencies: P{ earlyCompilerRT, }, - } + }) } -func (t Toolchain) newLLVM() (pkg.Artifact, string) { - var early PArtifact = muslHeaders +func (t Toolchain) newLLVM(s *S) (pkg.Artifact, string) { + early := muslHeaders if t.isStage0() { // The LLVM build system uses the system installation when building with // LLVM_LINK_LLVM_DYLIB, since it builds runtimes after the fact, using @@ -247,7 +247,7 @@ func (t Toolchain) newLLVM() (pkg.Artifact, string) { // unwind: fails on musl "eh_frame_fde_pc_range", } - switch arch { + switch s.arch { case "arm64": skipChecks = append(skipChecks, // LLVM: intermittently crashes @@ -257,7 +257,7 @@ func (t Toolchain) newLLVM() (pkg.Artifact, string) { ) } - if presetOpts&OptLLVMNoLTO == 0 { + if s.opts&OptLLVMNoLTO == 0 { cache = append(cache, []KV{ // very expensive {"LLVM_ENABLE_LTO", "Thin"}, @@ -273,8 +273,8 @@ func (t Toolchain) newLLVM() (pkg.Artifact, string) { }...) } - version := t.Version(llvmSource) - return t.NewPackage("llvm", version, t.Load(llvmSource), &PackageAttr{ + source, version := s.Load(t, llvmSource) + return s.NewPackage(t, "llvm", version, source, &PackageAttr{ Flag: TExclusive, }, &CMakeHelper{ Append: []string{"llvm"}, @@ -324,9 +324,9 @@ func init() { checksum = "32gOaLPHcUlo3hkdk5RbFumTE01XKeCAYZcpvn8IDHF95egXVfDFSl6eZL3ChMen" ) - artifactsM[llvmSource] = Metadata{ - f: func(t Toolchain) (pkg.Artifact, string) { - return t.NewPatchedSource("llvm", version, newFromGitHub( + native.MustRegister(&Artifact{ + f: func(t Toolchain, s *S) (pkg.Artifact, string) { + return s.NewPatchedSource(t, "llvm", version, newFromGitHub( "llvm/llvm-project", "llvmorg-"+version, checksum, @@ -337,9 +337,9 @@ func init() { Description: "LLVM monorepo with Rosa OS patches", ID: 1830, - } + }) - artifactsM[LLVM] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLLVM, Name: "llvm", @@ -351,5 +351,5 @@ func init() { Zstd, Musl, }, - } + }) } diff --git a/internal/rosa/lm-sensors.go b/internal/rosa/lm-sensors.go index 6ecb4ba0..bb9e7e15 100644 --- a/internal/rosa/lm-sensors.go +++ b/internal/rosa/lm-sensors.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLMSensors() (pkg.Artifact, string) { +func (t Toolchain) newLMSensors(s *S) (pkg.Artifact, string) { const ( version = "3-6-2" checksum = "7JYNutrihe-FP6r3ftf96uFZJJWPfxnBHL0ALSMA-vovaXVRr-sAjlLitw7WWpCI" ) - return t.NewPackage("lm_sensors", version, newFromGitHub( + return s.NewPackage(t, "lm_sensors", version, newFromGitHub( "lm-sensors/lm-sensors", "V"+version, checksum, @@ -47,7 +47,7 @@ ln -s \ ), version } func init() { - artifactsM[LMSensors] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLMSensors, Name: "lm_sensors", @@ -55,5 +55,5 @@ func init() { Website: "https://hwmon.wiki.kernel.org/lm_sensors", ID: 1831, - } + }) } diff --git a/internal/rosa/make.go b/internal/rosa/make.go index c283e5fb..6c88bef6 100644 --- a/internal/rosa/make.go +++ b/internal/rosa/make.go @@ -7,12 +7,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newMake() (pkg.Artifact, string) { +func (t Toolchain) newMake(s *S) (pkg.Artifact, string) { const ( version = "4.4.1" checksum = "YS_B07ZcAy9PbaK5_vKGj64SrxO2VMpnMKfc9I0Q9IC1rn0RwOH7802pJoj2Mq4a" ) - return t.New("make-"+version, TEarly, nil, nil, nil, ` + return s.New(t, "make-"+version, TEarly, nil, nil, nil, ` cd "$(mktemp -d)" /usr/src/make/configure \ --prefix=/system \ @@ -27,7 +27,7 @@ cd "$(mktemp -d)" ))), version } func init() { - artifactsM[Make] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newMake, Name: "make", @@ -35,7 +35,7 @@ func init() { Website: "https://www.gnu.org/software/make/", ID: 1877, - } + }) } // MakeHelper is the [Make] build system helper. @@ -123,7 +123,7 @@ func (attr *MakeHelper) wantsDir() string { } // script generates the cure script. -func (attr *MakeHelper) script(name string) string { +func (attr *MakeHelper) script(s *S, name string) string { if attr == nil { attr = new(MakeHelper) } @@ -194,7 +194,7 @@ make \ } scriptMake += "\n" - if !attr.SkipCheck && presetOpts&OptSkipCheck == 0 { + if !attr.SkipCheck && s.opts&OptSkipCheck == 0 { scriptMake += attr.ScriptCheckEarly + `make \ ` + jobsFlagE + ` \ ` diff --git a/internal/rosa/mesa.go b/internal/rosa/mesa.go index b5780acb..d1037656 100644 --- a/internal/rosa/mesa.go +++ b/internal/rosa/mesa.go @@ -6,12 +6,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newLibglvnd() (pkg.Artifact, string) { +func (t Toolchain) newLibglvnd(s *S) (pkg.Artifact, string) { const ( version = "1.7.0" checksum = "eIQJK2sgFQDHdeFkQO87TrSUaZRFG4y2DrwA8Ut-sGboI59uw1OOiIVqq2AIwnGY" ) - return t.NewPackage("libglvnd", version, newFromGitLab( + return s.NewPackage(t, "libglvnd", version, newFromGitLab( "gitlab.freedesktop.org", "glvnd/libglvnd", "v"+version, @@ -35,7 +35,7 @@ trap 'kill $XVFB_PID && wait $XVFB_PID' EXIT ), version } func init() { - artifactsM[Libglvnd] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibglvnd, Name: "libglvnd", @@ -47,15 +47,15 @@ func init() { }, ID: 12098, - } + }) } -func (t Toolchain) newLibdrm() (pkg.Artifact, string) { +func (t Toolchain) newLibdrm(s *S) (pkg.Artifact, string) { const ( version = "2.4.133" checksum = "bfj296NcR9DndO11hqDbSRFPqaweSLMqRk3dlCPZpM6FONX1WZ9J4JdbTDMUd1rU" ) - return t.NewPackage("libdrm", version, newFromGitLab( + return s.NewPackage(t, "libdrm", version, newFromGitLab( "gitlab.freedesktop.org", "mesa/libdrm", "libdrm-"+version, @@ -72,7 +72,7 @@ func (t Toolchain) newLibdrm() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libdrm] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibdrm, Name: "libdrm", @@ -84,15 +84,15 @@ func init() { }, ID: 1596, - } + }) } -func (t Toolchain) newLibva() (pkg.Artifact, string) { +func (t Toolchain) newLibva(s *S) (pkg.Artifact, string) { const ( version = "2.23.0" checksum = "UmF5tPyWIG_w5kiR3KFpoYbF7UUcaak5tyc-RhOheNTwQlLkPlifreFYCM9FQxbq" ) - return t.NewPackage("libva", version, newFromGitHub( + return s.NewPackage(t, "libva", version, newFromGitHub( "intel/libva", version, checksum, @@ -111,7 +111,7 @@ func (t Toolchain) newLibva() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libva] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibva, Name: "libva", @@ -126,15 +126,15 @@ func init() { }, ID: 1752, - } + }) } -func (t Toolchain) newMesa() (pkg.Artifact, string) { +func (t Toolchain) newMesa(s *S) (pkg.Artifact, string) { const ( version = "26.1.0" checksum = "zU0fjqevySBaoi_5SLW3e2UffmGeBdxOuHmAHTH68n2hV-sjYoqg30koLqFXuk5y" ) - return t.NewPackage("mesa", version, newFromGitLab( + return s.NewPackage(t, "mesa", version, newFromGitLab( "gitlab.freedesktop.org", "mesa/mesa", "mesa-"+version, @@ -238,7 +238,7 @@ func (t Toolchain) newMesa() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Mesa] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newMesa, Name: "mesa", @@ -261,5 +261,5 @@ func init() { ID: 1970, latest: (*Versions).getStable, - } + }) } diff --git a/internal/rosa/meson.go b/internal/rosa/meson.go index 0aed385b..2015497c 100644 --- a/internal/rosa/meson.go +++ b/internal/rosa/meson.go @@ -7,12 +7,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newMeson() (pkg.Artifact, string) { +func (t Toolchain) newMeson(s *S) (pkg.Artifact, string) { const ( version = "1.11.1" checksum = "uvILRxdopwc6Dy17UbIeClcQr0qHqyTaqyk1M9OqWKN9PwB9N6UVAiyN8kSSz3r2" ) - return t.NewPackage("meson", version, newFromGitHub( + return s.NewPackage(t, "meson", version, newFromGitHub( "mesonbuild/meson", version, checksum, @@ -52,7 +52,7 @@ python3 ./run_project_tests.py \ ), version } func init() { - artifactsM[Meson] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newMeson, Name: "meson", @@ -67,7 +67,7 @@ func init() { }, ID: 6472, - } + }) } // MesonHelper is the [Meson] build system helper. @@ -106,7 +106,7 @@ func (*MesonHelper) createDir() bool { return false } func (*MesonHelper) wantsDir() string { return `"$(mktemp -d)"` } // script generates the cure script. -func (attr *MesonHelper) script(name string) string { +func (attr *MesonHelper) script(s *S, name string) string { if attr == nil { attr = new(MesonHelper) } @@ -117,7 +117,7 @@ func (attr *MesonHelper) script(name string) string { } var scriptTest string - if !attr.SkipTest && presetOpts&OptSkipCheck == 0 { + if !attr.SkipTest && s.opts&OptSkipCheck == 0 { scriptTest = ` meson test \ --print-errorlogs` diff --git a/internal/rosa/mksh.go b/internal/rosa/mksh.go index fedc3f84..a2059efa 100644 --- a/internal/rosa/mksh.go +++ b/internal/rosa/mksh.go @@ -2,16 +2,16 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newMksh() (pkg.Artifact, string) { +func (t Toolchain) newMksh(s *S) (pkg.Artifact, string) { const ( version = "59c" checksum = "0Zj-k4nXEu3IuJY4lvwD2OrC2t27GdZj8SPy4DoaeuBRH1padWb7oREpYgwY8JNq" ) scriptTest := "./test.sh -C regress:no-ctty\n" - if presetOpts&OptSkipCheck != 0 { + if s.opts&OptSkipCheck != 0 { scriptTest = "" } - return t.New("mksh-"+version, 0, t.AppendPresets(nil, + return s.New(t, "mksh-"+version, 0, s.AppendPresets(t, nil, Perl, Coreutils, ), nil, []string{ @@ -36,7 +36,7 @@ ln -vs ../system/bin/sh /work/bin/ ))), version } func init() { - artifactsM[Mksh] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newMksh, Name: "mksh", @@ -44,5 +44,5 @@ func init() { Website: "https://www.mirbsd.org/mksh", ID: 5590, - } + }) } diff --git a/internal/rosa/musl-fts.go b/internal/rosa/musl-fts.go index e27d02cc..9a48c214 100644 --- a/internal/rosa/musl-fts.go +++ b/internal/rosa/musl-fts.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newMuslFts() (pkg.Artifact, string) { +func (t Toolchain) newMuslFts(s *S) (pkg.Artifact, string) { const ( version = "1.2.7" checksum = "N_p_ZApX3eHt7xoDCw1hLf6XdJOw7ZSx7xPvpvAP0knG2zgU0zeN5w8tt5Pg60XJ" ) - return t.NewPackage("musl-fts", version, newFromGitHub( + return s.NewPackage(t, "musl-fts", version, newFromGitHub( "void-linux/musl-fts", "v"+version, checksum, @@ -24,7 +24,7 @@ func (t Toolchain) newMuslFts() (pkg.Artifact, string) { ), version } func init() { - artifactsM[MuslFts] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newMuslFts, Name: "musl-fts", @@ -32,5 +32,5 @@ func init() { Website: "https://github.com/void-linux/musl-fts", ID: 26980, - } + }) } diff --git a/internal/rosa/musl-obstack.go b/internal/rosa/musl-obstack.go index fe77ea9b..cd62072b 100644 --- a/internal/rosa/musl-obstack.go +++ b/internal/rosa/musl-obstack.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newMuslObstack() (pkg.Artifact, string) { +func (t Toolchain) newMuslObstack(s *S) (pkg.Artifact, string) { const ( version = "1.2.3" checksum = "tVRY_KjIlkkMszcaRlkKdBVQHIXTT_T_TiMxbwErlILXrOBosocg8KklppZhNdCG" ) - return t.NewPackage("musl-obstack", version, newFromGitHub( + return s.NewPackage(t, "musl-obstack", version, newFromGitHub( "void-linux/musl-obstack", "v"+version, checksum, @@ -24,7 +24,7 @@ func (t Toolchain) newMuslObstack() (pkg.Artifact, string) { ), version } func init() { - artifactsM[MuslObstack] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newMuslObstack, Name: "musl-obstack", @@ -32,5 +32,5 @@ func init() { Website: "https://github.com/void-linux/musl-obstack", ID: 146206, - } + }) } diff --git a/internal/rosa/musl.go b/internal/rosa/musl.go index 43c33d43..165304d0 100644 --- a/internal/rosa/musl.go +++ b/internal/rosa/musl.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newMusl(headers bool) (pkg.Artifact, string) { +func (s *S) newMusl(t Toolchain, headers bool) (pkg.Artifact, string) { const ( version = "1.2.6" checksum = "WtWb_OV_XxLDAB5NerOL9loLlHVadV00MmGk65PPBU1evaolagoMHfvpZp_vxEzS" @@ -14,7 +14,7 @@ func (t Toolchain) newMusl(headers bool) (pkg.Artifact, string) { SkipCheck: true, Script: ` mkdir -p /work/system/bin -COMPAT_LINKER_NAME="ld-musl-` + linuxArch() + `.so.1" +COMPAT_LINKER_NAME="ld-musl-` + s.linuxArch() + `.so.1" ln -vs ../lib/libc.so /work/system/bin/linker ln -vs ../lib/libc.so /work/system/bin/ldd ln -vs libc.so "/work/system/lib/${COMPAT_LINKER_NAME}" @@ -34,7 +34,7 @@ rmdir -v /work/lib } env := []string{ - "LDFLAGS=" + earlyLDFLAGS(false), + "LDFLAGS=" + s.earlyLDFLAGS(false), } if t.isStage0() { env = append(env, @@ -44,7 +44,7 @@ rmdir -v /work/lib ) } - return t.NewPackage(name, version, newTar( + return s.NewPackage(t, name, version, newTar( "https://musl.libc.org/releases/musl-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -75,9 +75,9 @@ index 715948f4..c2fece68 100644 ), version } func init() { - artifactsM[Musl] = Metadata{ - f: func(t Toolchain) (pkg.Artifact, string) { - return t.newMusl(false) + native.MustRegister(&Artifact{ + f: func(t Toolchain, s *S) (pkg.Artifact, string) { + return s.newMusl(t, false) }, Name: "musl", @@ -85,14 +85,14 @@ func init() { Website: "https://musl.libc.org/", ID: 11688, - } + }) - artifactsM[muslHeaders] = Metadata{ - f: func(t Toolchain) (pkg.Artifact, string) { - return t.newMusl(true) + native.MustRegister(&Artifact{ + f: func(t Toolchain, s *S) (pkg.Artifact, string) { + return s.newMusl(t, true) }, Name: "musl-headers", Description: "system installation of musl headers", - } + }) } diff --git a/internal/rosa/ncurses.go b/internal/rosa/ncurses.go index 3d15da45..5c69bad0 100644 --- a/internal/rosa/ncurses.go +++ b/internal/rosa/ncurses.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newNcurses() (pkg.Artifact, string) { +func (t Toolchain) newNcurses(s *S) (pkg.Artifact, string) { const ( version = "6.6" checksum = "XvWp4xi6hR_hH8XUoGY26L_pqBSDapJYulhzZqPuR0KNklqypqNc1yNXU-nOjf5w" ) - return t.NewPackage("ncurses", version, newTar( + return s.NewPackage(t, "ncurses", version, newTar( "https://ftpmirror.gnu.org/gnu/ncurses/ncurses-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -26,7 +26,7 @@ func (t Toolchain) newNcurses() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Ncurses] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newNcurses, Name: "ncurses", @@ -34,5 +34,5 @@ func init() { Website: "https://invisible-island.net/ncurses/", ID: 373226, - } + }) } diff --git a/internal/rosa/netfilter.go b/internal/rosa/netfilter.go index 84570c59..f99d050b 100644 --- a/internal/rosa/netfilter.go +++ b/internal/rosa/netfilter.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibmnl() (pkg.Artifact, string) { +func (t Toolchain) newLibmnl(s *S) (pkg.Artifact, string) { const ( version = "1.0.5" checksum = "DN-vbbvQDpxXJm0TJ6xlluILvfrB86avrCTX50XyE9SEFSAZ_o8nuKc5Gu0Am7-u" ) - return t.NewPackage("libmnl", version, newTar( + return s.NewPackage(t, "libmnl", version, newTar( "https://www.netfilter.org/projects/libmnl/files/"+ "libmnl-"+version+".tar.bz2", checksum, @@ -39,7 +39,7 @@ index d223ac2..a7878d0 100644 ), version } func init() { - artifactsM[Libmnl] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibmnl, Name: "libmnl", @@ -47,15 +47,15 @@ func init() { Website: "https://www.netfilter.org/projects/libmnl/", ID: 1663, - } + }) } -func (t Toolchain) newLibnftnl() (pkg.Artifact, string) { +func (t Toolchain) newLibnftnl(s *S) (pkg.Artifact, string) { const ( version = "1.3.1" checksum = "91ou66K-I17iX6DB6hiQkhhC_v4DFW5iDGzwjVRNbJNEmKqowLZBlh3FY-ZDO0r9" ) - return t.NewPackage("libnftnl", version, t.newTagRemote( + return s.NewPackage(t, "libnftnl", version, s.newTagRemote(t, "https://git.netfilter.org/libnftnl", "libnftnl-"+version, checksum, ), &PackageAttr{ @@ -77,7 +77,7 @@ func (t Toolchain) newLibnftnl() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libnftnl] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibnftnl, Name: "libnftnl", @@ -89,15 +89,15 @@ func init() { }, ID: 1681, - } + }) } -func (t Toolchain) newIPTables() (pkg.Artifact, string) { +func (t Toolchain) newIPTables(s *S) (pkg.Artifact, string) { const ( version = "1.8.13" checksum = "TUA-cFIAsiMvtRR-XzQvXzoIhJUOc9J2gQDJCbBRjmgmVfGfPTCf58wL7e-cUKVQ" ) - return t.NewPackage("iptables", version, t.newTagRemote( + return s.NewPackage(t, "iptables", version, s.newTagRemote(t, "https://git.netfilter.org/iptables", "v"+version, checksum, ), &PackageAttr{ @@ -131,7 +131,7 @@ chmod +w /etc/ && ln -s ../usr/src/iptables/etc/ethertypes /etc/ ), version } func init() { - artifactsM[IPTables] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newIPTables, Name: "iptables", @@ -143,5 +143,5 @@ func init() { }, ID: 1394, - } + }) } diff --git a/internal/rosa/nettle.go b/internal/rosa/nettle.go index 7c43d46f..06148fb2 100644 --- a/internal/rosa/nettle.go +++ b/internal/rosa/nettle.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newNettle() (pkg.Artifact, string) { +func (t Toolchain) newNettle(s *S) (pkg.Artifact, string) { const ( version = "4.0" checksum = "6agC-vHzzoqAlaX3K9tX8yHgrm03HLqPZzVzq8jh_ePbuPMIvpxereu_uRJFmQK7" ) - return t.NewPackage("nettle", version, newTar( + return s.NewPackage(t, "nettle", version, newTar( "https://ftpmirror.gnu.org/gnu/nettle/nettle-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -19,7 +19,7 @@ func (t Toolchain) newNettle() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Nettle] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newNettle, Name: "nettle", @@ -31,5 +31,5 @@ func init() { }, ID: 2073, - } + }) } diff --git a/internal/rosa/nettle3.go b/internal/rosa/nettle3.go index 4ecee9aa..df27e700 100644 --- a/internal/rosa/nettle3.go +++ b/internal/rosa/nettle3.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newNettle3() (pkg.Artifact, string) { +func (t Toolchain) newNettle3(s *S) (pkg.Artifact, string) { const ( version = "3.10.2" checksum = "07aXlj10X5llf67jIqRQAA1pgLSgb0w_JYggZVPuKNoc-B-_usb5Kr8FrfBe7g1S" ) - return t.NewPackage("nettle", version, newTar( + return s.NewPackage(t, "nettle", version, newTar( "https://ftpmirror.gnu.org/gnu/nettle/nettle-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -19,7 +19,7 @@ func (t Toolchain) newNettle3() (pkg.Artifact, string) { ), version } func init() { - artifactsM[nettle3] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newNettle3, Name: "nettle3", @@ -29,5 +29,5 @@ func init() { Dependencies: P{ GMP, }, - } + }) } diff --git a/internal/rosa/ninja.go b/internal/rosa/ninja.go index 3614f99d..3801d3ee 100644 --- a/internal/rosa/ninja.go +++ b/internal/rosa/ninja.go @@ -2,14 +2,16 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newNinja() (pkg.Artifact, string) { +func (t Toolchain) newNinja(s *S) (pkg.Artifact, string) { const ( version = "1.13.2" checksum = "ygKWMa0YV2lWKiFro5hnL-vcKbc_-RACZuPu0Io8qDvgQlZ0dxv7hPNSFkt4214v" ) - return t.New("ninja-"+version, 0, []pkg.Artifact{ - t.Load(Python), - t.Load(Bash), + python, _ := s.Load(t, Python) + bash, _ := s.Load(t, Bash) + return s.New(t, "ninja-"+version, 0, []pkg.Artifact{ + python, + bash, }, nil, nil, ` cd "$(mktemp -d)" python3 /usr/src/ninja/configure.py \ @@ -28,7 +30,7 @@ cp ninja /work/system/bin/ "googletest-1.16.0.tar.gz", "NjLGvSbgPy_B-y-o1hdanlzEzaYeStFcvFGxpYV3KYlhrWWFRcugYhM3ZMzOA9B_", pkg.TarGzip, - )), pkg.Path(AbsUsrSrc.Append("ninja"), true, t.NewPatchedSource( + )), pkg.Path(AbsUsrSrc.Append("ninja"), true, s.NewPatchedSource(t, "ninja", version, newFromGitHub( "ninja-build/ninja", "v"+version, @@ -37,7 +39,7 @@ cp ninja /work/system/bin/ ))), version } func init() { - artifactsM[Ninja] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newNinja, Name: "ninja", @@ -45,5 +47,5 @@ func init() { Website: "https://ninja-build.org/", ID: 2089, - } + }) } diff --git a/internal/rosa/nss.go b/internal/rosa/nss.go index db11069c..090554b5 100644 --- a/internal/rosa/nss.go +++ b/internal/rosa/nss.go @@ -6,7 +6,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newNSS() (pkg.Artifact, string) { +func (t Toolchain) newNSS(s *S) (pkg.Artifact, string) { const ( version = "3.123.1" checksum = "g811Z_fc74ssg-s6BeXRG-ipSfJggD6hrxjVJxrOBIz98CE7piv0OLwzIRLMQpwR" @@ -14,7 +14,7 @@ func (t Toolchain) newNSS() (pkg.Artifact, string) { version0 = "4_38_2" checksum0 = "25x2uJeQnOHIiq_zj17b4sYqKgeoU8-IsySUptoPcdHZ52PohFZfGuIisBreWzx0" ) - return t.NewPackage("nss", version, newFromGitHub( + return s.NewPackage(t, "nss", version, newFromGitHub( "nss-dev/nss", "NSS_"+strings.Join(strings.SplitN(version, ".", 3), "_")+"_RTM", checksum, @@ -67,7 +67,7 @@ cp -r \ ), version } func init() { - artifactsM[NSS] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newNSS, Name: "nss", @@ -79,7 +79,7 @@ func init() { }, ID: 2503, - } + }) } func init() { @@ -87,7 +87,7 @@ func init() { version = "0.5.1" checksum = "oxjnuIrPVMPvD6x8VFLqB7EdbfuhouGQdtPuHDpEHGzoyH5nkxqtYN9UthMY9noA" ) - artifactsM[buildcatrust] = newPythonPackage( + native.newPythonPackage( "buildcatrust", 233988, "transform certificate stores between formats", "https://github.com/nix-community/buildcatrust", @@ -102,8 +102,8 @@ rm buildcatrust/tests/test_nonhermetic.py ) } -func (t Toolchain) newNSSCACert() (pkg.Artifact, string) { - return t.New("nss-cacert", 0, t.AppendPresets(nil, +func (t Toolchain) newNSSCACert(s *S) (pkg.Artifact, string) { + return s.New(t, "nss-cacert", 0, s.AppendPresets(t, nil, Bash, NSS, @@ -120,11 +120,11 @@ buildcatrust \ `), Unversioned } func init() { - artifactsM[NSSCACert] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newNSSCACert, Name: "nss-cacert", Description: "bundle of X.509 certificates of public Certificate Authorities", Website: "https://curl.se/docs/caextract.html", - } + }) } diff --git a/internal/rosa/openssl.go b/internal/rosa/openssl.go index fd114d52..7b3d3ea4 100644 --- a/internal/rosa/openssl.go +++ b/internal/rosa/openssl.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newOpenSSL() (pkg.Artifact, string) { +func (t Toolchain) newOpenSSL(s *S) (pkg.Artifact, string) { const ( version = "3.6.2" checksum = "jH004dXTiE01Hp0kyShkWXwrSHEksZi4i_3v47D9H9Uz9LQ1aMwF7mrl2Tb4t_XA" ) - return t.NewPackage("openssl", version, newFromGitHubRelease( + return s.NewPackage(t, "openssl", version, newFromGitHubRelease( "openssl/openssl", "openssl-"+version, "openssl-"+version+".tar.gz", @@ -40,7 +40,7 @@ func (t Toolchain) newOpenSSL() (pkg.Artifact, string) { ), version } func init() { - artifactsM[OpenSSL] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newOpenSSL, Name: "openssl", @@ -51,5 +51,5 @@ func init() { // strange malformed tags treated as pre-releases in Anitya latest: (*Versions).getStable, - } + }) } diff --git a/internal/rosa/p11.go b/internal/rosa/p11.go index 4e7630cd..c614dc99 100644 --- a/internal/rosa/p11.go +++ b/internal/rosa/p11.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newP11Kit() (pkg.Artifact, string) { +func (t Toolchain) newP11Kit(s *S) (pkg.Artifact, string) { const ( version = "0.26.2" checksum = "3ei-6DUVtYzrRVe-SubtNgRlweXd6H2qHmUu-_5qVyIn6gSTvZbGS2u79Y8IFb2N" ) - return t.NewPackage("p11-kit", version, t.newTagRemote( + return s.NewPackage(t, "p11-kit", version, s.newTagRemote(t, "https://github.com/p11-glue/p11-kit.git", version, checksum, ), nil, &MesonHelper{ @@ -23,7 +23,7 @@ func (t Toolchain) newP11Kit() (pkg.Artifact, string) { ), version } func init() { - artifactsM[P11Kit] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newP11Kit, Name: "p11-kit", @@ -36,5 +36,5 @@ func init() { }, ID: 2582, - } + }) } diff --git a/internal/rosa/pcre2.go b/internal/rosa/pcre2.go index 8aa89514..972ac41d 100644 --- a/internal/rosa/pcre2.go +++ b/internal/rosa/pcre2.go @@ -4,12 +4,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newPCRE2() (pkg.Artifact, string) { +func (t Toolchain) newPCRE2(s *S) (pkg.Artifact, string) { const ( version = "10.47" checksum = "IbC24vVayju6nB9EhrBPSDexk22wDecdpyrjgC3nCZXkwTnUjq4CD2q5sopqu6CW" ) - return t.NewPackage("pcre2", version, newFromGitHubRelease( + return s.NewPackage(t, "pcre2", version, newFromGitHubRelease( "PCRE2Project/pcre2", "pcre2-"+version, "pcre2-"+version+".tar.bz2", @@ -32,7 +32,7 @@ ln -s ../system/bin/toybox /bin/echo ), version } func init() { - artifactsM[PCRE2] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPCRE2, Name: "pcre2", @@ -40,5 +40,5 @@ func init() { Website: "https://pcre2project.github.io/pcre2/", ID: 5832, - } + }) } diff --git a/internal/rosa/perl.go b/internal/rosa/perl.go index 43c85114..0ebc4037 100644 --- a/internal/rosa/perl.go +++ b/internal/rosa/perl.go @@ -7,12 +7,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newPerl() (pkg.Artifact, string) { +func (t Toolchain) newPerl(s *S) (pkg.Artifact, string) { const ( version = "5.42.2" checksum = "Me_xFfgkRnVyG0sE6a74TktK2OUq9Z1LVJNEu_9RdZG3S2fbjfzNiuk2SJqHAgbm" ) - return t.NewPackage("perl", version, newTar( + return s.NewPackage(t, "perl", version, newTar( "https://www.cpan.org/src/5.0/perl-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -50,7 +50,7 @@ chmod +w /system/bin && rm -f /system/bin/ps # perl does not like toybox ps }), version } func init() { - artifactsM[Perl] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerl, Name: "perl", @@ -61,20 +61,21 @@ func init() { // odd-even versioning latest: (*Versions).getStable, - } + }) } // newViaPerlModuleBuild installs a perl module via Build.PL. -func (t Toolchain) newViaPerlModuleBuild( +func (s *S) newViaPerlModuleBuild( + t Toolchain, name, version string, source pkg.Artifact, patches []KV, - extra ...PArtifact, + extra ...ArtifactH, ) pkg.Artifact { if name == "" || version == "" { panic("names must be non-empty") } - return t.New("perl-"+name, 0, t.AppendPresets(nil, + return s.New(t, "perl-"+name, 0, s.AppendPresets(t, nil, slices.Concat(P{Perl}, extra)..., ), nil, nil, ` cd /usr/src/`+name+` @@ -82,17 +83,17 @@ perl Build.PL --prefix=/system ./Build build ./Build test ./Build install --destdir=/work -`, pkg.Path(AbsUsrSrc.Append(name), true, t.NewPatchedSource( +`, pkg.Path(AbsUsrSrc.Append(name), true, s.NewPatchedSource(t, "perl-"+name, version, source, false, patches..., ))) } -func (t Toolchain) newPerlModuleBuild() (pkg.Artifact, string) { +func (t Toolchain) newPerlModuleBuild(s *S) (pkg.Artifact, string) { const ( version = "0.4234" checksum = "ZKxEFG4hE1rqZt52zBL2LRZBMkYzhjb5-cTBXcsyA52EbPeeYyVxU176yAea8-Di" ) - return t.newViaPerlModuleBuild("Module-Build", version, newTar( + return s.newViaPerlModuleBuild(t, "Module-Build", version, newTar( "https://cpan.metacpan.org/authors/id/L/LE/LEONT/"+ "Module-Build-"+version+".tar.gz", checksum, @@ -100,7 +101,7 @@ func (t Toolchain) newPerlModuleBuild() (pkg.Artifact, string) { ), nil), version } func init() { - artifactsM[PerlModuleBuild] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerlModuleBuild, Name: "perl-Module::Build", @@ -110,17 +111,18 @@ func init() { Dependencies: P{ Perl, }, - } + }) } // newViaPerlMakeMaker installs a perl module via Makefile.PL. -func (t Toolchain) newViaPerlMakeMaker( +func (s *S) newViaPerlMakeMaker( + t Toolchain, name, version string, source pkg.Artifact, patches []KV, - extra ...PArtifact, + extra ...ArtifactH, ) pkg.Artifact { - return t.NewPackage("perl-"+name, version, source, &PackageAttr{ + return s.NewPackage(t, "perl-"+name, version, source, &PackageAttr{ // uses source tree as scratch space Writable: true, Chmod: true, @@ -141,12 +143,12 @@ func (t Toolchain) newViaPerlMakeMaker( })...) } -func (t Toolchain) newPerlLocaleGettext() (pkg.Artifact, string) { +func (t Toolchain) newPerlLocaleGettext(s *S) (pkg.Artifact, string) { const ( version = "1.07" checksum = "cFq4BKFD1MWSoa7lsrPjpdo9kzPqd0jlRcBFUyL1L1isw8m3D_Sge_ff0MAu_9J3" ) - return t.newViaPerlMakeMaker("Locale::gettext", version, newFromCPAN( + return s.newViaPerlMakeMaker(t, "Locale::gettext", version, newFromCPAN( "PVANDRY", "Locale-gettext", version, @@ -154,7 +156,7 @@ func (t Toolchain) newPerlLocaleGettext() (pkg.Artifact, string) { ), nil), version } func init() { - artifactsM[PerlLocaleGettext] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerlLocaleGettext, Name: "perl-Locale::gettext", @@ -162,15 +164,15 @@ func init() { Website: "https://metacpan.org/release/Locale-gettext", ID: 7523, - } + }) } -func (t Toolchain) newPerlPodParser() (pkg.Artifact, string) { +func (t Toolchain) newPerlPodParser(s *S) (pkg.Artifact, string) { const ( version = "1.67" checksum = "RdURu9mOfExk_loCp6abxlcQV3FycSNbTqhRS9i6JUqnYfGGEgercK30g0gjYyqe" ) - return t.newViaPerlMakeMaker("Pod::Parser", version, newFromCPAN( + return s.newViaPerlMakeMaker(t, "Pod::Parser", version, newFromCPAN( "MAREKR", "Pod-Parser", version, @@ -178,7 +180,7 @@ func (t Toolchain) newPerlPodParser() (pkg.Artifact, string) { ), nil), version } func init() { - artifactsM[PerlPodParser] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerlPodParser, Name: "perl-Pod::Parser", @@ -186,15 +188,15 @@ func init() { Website: "https://metacpan.org/release/Pod-Parser", ID: 3244, - } + }) } -func (t Toolchain) newPerlSGMLS() (pkg.Artifact, string) { +func (t Toolchain) newPerlSGMLS(s *S) (pkg.Artifact, string) { const ( version = "1.1" checksum = "aZijn4MUqD-wfyZgdcCruCwl4SgDdu25cNmJ4_UvdAk9a7uz4gzMQdoeB6DQ6QOy" ) - return t.newViaPerlMakeMaker("SGMLS", version, newFromCPAN( + return s.newViaPerlMakeMaker(t, "SGMLS", version, newFromCPAN( "RAAB", "SGMLSpm", version, @@ -202,7 +204,7 @@ func (t Toolchain) newPerlSGMLS() (pkg.Artifact, string) { ), nil), version } func init() { - artifactsM[PerlSGMLS] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerlSGMLS, Name: "perl-SGMLS", @@ -224,15 +226,15 @@ func init() { } return v.Latest }, - } + }) } -func (t Toolchain) newPerlTermReadKey() (pkg.Artifact, string) { +func (t Toolchain) newPerlTermReadKey(s *S) (pkg.Artifact, string) { const ( version = "2.38" checksum = "qerL8Xo7kD0f42PZoiEbmE8Roc_S9pOa27LXelY4DN_0UNy_u5wLrGHI8utNlaiI" ) - return t.newViaPerlMakeMaker("Term::ReadKey", version, newFromCPAN( + return s.newViaPerlMakeMaker(t, "Term::ReadKey", version, newFromCPAN( "JSTOWE", "TermReadKey", version, @@ -240,7 +242,7 @@ func (t Toolchain) newPerlTermReadKey() (pkg.Artifact, string) { ), nil), version } func init() { - artifactsM[PerlTermReadKey] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerlTermReadKey, Name: "perl-Term::ReadKey", @@ -248,15 +250,15 @@ func init() { Website: "https://metacpan.org/release/TermReadKey", ID: 3372, - } + }) } -func (t Toolchain) newPerlTextCharWidth() (pkg.Artifact, string) { +func (t Toolchain) newPerlTextCharWidth(s *S) (pkg.Artifact, string) { const ( version = "0.04" checksum = "G2p5RHU4_HiZ23ZusBA_enTlVMxz0J4esUx4CGcOPhY6xYTbp-aXWRN6lYZpzBw2" ) - return t.newViaPerlMakeMaker("Text::CharWidth", version, newFromCPAN( + return s.newViaPerlMakeMaker(t, "Text::CharWidth", version, newFromCPAN( "KUBOTA", "Text-CharWidth", version, @@ -264,7 +266,7 @@ func (t Toolchain) newPerlTextCharWidth() (pkg.Artifact, string) { ), nil), version } func init() { - artifactsM[PerlTextCharWidth] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerlTextCharWidth, Name: "perl-Text::CharWidth", @@ -272,15 +274,15 @@ func init() { Website: "https://metacpan.org/release/Text-CharWidth", ID: 14380, - } + }) } -func (t Toolchain) newPerlTextWrapI18N() (pkg.Artifact, string) { +func (t Toolchain) newPerlTextWrapI18N(s *S) (pkg.Artifact, string) { const ( version = "0.06" checksum = "Vmo89qLgxUqyQ6QmWJVqu60aQAUjrNKRjFQSXGnvClxofzRjiCa6idzPgJ4VkixM" ) - return t.newViaPerlMakeMaker("Text::WrapI18N", version, newFromCPAN( + return s.newViaPerlMakeMaker(t, "Text::WrapI18N", version, newFromCPAN( "KUBOTA", "Text-WrapI18N", version, @@ -290,7 +292,7 @@ func (t Toolchain) newPerlTextWrapI18N() (pkg.Artifact, string) { ), version } func init() { - artifactsM[PerlTextWrapI18N] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerlTextWrapI18N, Name: "perl-Text::WrapI18N", @@ -302,15 +304,15 @@ func init() { }, ID: 14385, - } + }) } -func (t Toolchain) newPerlMIMECharset() (pkg.Artifact, string) { +func (t Toolchain) newPerlMIMECharset(s *S) (pkg.Artifact, string) { const ( version = "1.013.1" checksum = "Ou_ukcrOa1cgtE3mptinb-os3bdL1SXzbRDFZQF3prrJj-drc3rp_huay7iDLJol" ) - return t.newViaPerlMakeMaker("MIME::Charset", version, newFromCPAN( + return s.newViaPerlMakeMaker(t, "MIME::Charset", version, newFromCPAN( "NEZUMI", "MIME-Charset", version, @@ -318,7 +320,7 @@ func (t Toolchain) newPerlMIMECharset() (pkg.Artifact, string) { ), nil), version } func init() { - artifactsM[PerlMIMECharset] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerlMIMECharset, Name: "perl-MIME::Charset", @@ -326,15 +328,15 @@ func init() { Website: "https://metacpan.org/release/MIME-Charset", ID: 3070, - } + }) } -func (t Toolchain) newPerlUnicodeLineBreak() (pkg.Artifact, string) { +func (t Toolchain) newPerlUnicodeLineBreak(s *S) (pkg.Artifact, string) { const ( version = "2019.001" checksum = "ZHVkh7EDgAUHnTpvXsnPAuWpgNoBImtY_9_8TIbo2co_WgUwEb0MtXPhI8pAZ5OH" ) - return t.newViaPerlMakeMaker("Unicode::LineBreak", version, newFromCPAN( + return s.newViaPerlMakeMaker(t, "Unicode::LineBreak", version, newFromCPAN( "NEZUMI", "Unicode-LineBreak", version, @@ -344,7 +346,7 @@ func (t Toolchain) newPerlUnicodeLineBreak() (pkg.Artifact, string) { ), version } func init() { - artifactsM[PerlUnicodeLineBreak] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerlUnicodeLineBreak, Name: "perl-Unicode::LineBreak", @@ -356,15 +358,15 @@ func init() { }, ID: 6033, - } + }) } -func (t Toolchain) newPerlYAMLTiny() (pkg.Artifact, string) { +func (t Toolchain) newPerlYAMLTiny(s *S) (pkg.Artifact, string) { const ( version = "1.76" checksum = "V1MV4KPym1LxSw8CRXqPR3K-l1hGHbT5Ob4t-9xju6R9X_CWyw6hI8wsMaNdHdBY" ) - return t.newViaPerlMakeMaker("YAML::Tiny", version, newFromCPAN( + return s.newViaPerlMakeMaker(t, "YAML::Tiny", version, newFromCPAN( "ETHER", "YAML-Tiny", version, @@ -372,7 +374,7 @@ func (t Toolchain) newPerlYAMLTiny() (pkg.Artifact, string) { ), nil), version } func init() { - artifactsM[PerlYAMLTiny] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerlYAMLTiny, Name: "perl-YAML::Tiny", @@ -380,15 +382,15 @@ func init() { Website: "https://metacpan.org/release/YAML-Tiny", ID: 3549, - } + }) } -func (t Toolchain) newPerlTestCmd() (pkg.Artifact, string) { +func (t Toolchain) newPerlTestCmd(s *S) (pkg.Artifact, string) { const ( version = "1.09" checksum = "gpGUwyC9IozDiYSgW_kXARNfXsTPFa6cTowJmmCBbPqcs2-pONZca_SB06FGy-7H" ) - return t.newViaPerlMakeMaker("Test::Cmd", version, newFromCPAN( + return s.newViaPerlMakeMaker(t, "Test::Cmd", version, newFromCPAN( "NEILB", "Test-Cmd", version, @@ -396,7 +398,7 @@ func (t Toolchain) newPerlTestCmd() (pkg.Artifact, string) { ), nil), version } func init() { - artifactsM[PerlTestCmd] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPerlTestCmd, Name: "perl-Test::Cmd", @@ -404,5 +406,5 @@ func init() { Website: "https://metacpan.org/release/Test-Cmd", ID: 6014, - } + }) } diff --git a/internal/rosa/pixman.go b/internal/rosa/pixman.go index b79fb85f..8a6b52f9 100644 --- a/internal/rosa/pixman.go +++ b/internal/rosa/pixman.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newPixman() (pkg.Artifact, string) { +func (t Toolchain) newPixman(s *S) (pkg.Artifact, string) { const ( version = "0.46.4" checksum = "iECDxLG9SxUrvGHqeDoaBa-b3uqdT5DC4zudjtrwb8Wodq82pyacmFNEAo4SDsiE" ) - return t.NewPackage("pixman", version, newFromGitLab( + return s.NewPackage(t, "pixman", version, newFromGitLab( "gitlab.freedesktop.org", "pixman/pixman", "pixman-"+version, @@ -19,7 +19,7 @@ func (t Toolchain) newPixman() (pkg.Artifact, string) { }), version } func init() { - artifactsM[Pixman] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPixman, Name: "pixman", @@ -27,5 +27,5 @@ func init() { Website: "https://pixman.org/", ID: 3648, - } + }) } diff --git a/internal/rosa/pkg-config.go b/internal/rosa/pkg-config.go index cea1992c..105a1e86 100644 --- a/internal/rosa/pkg-config.go +++ b/internal/rosa/pkg-config.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newPkgConfig() (pkg.Artifact, string) { +func (t Toolchain) newPkgConfig(s *S) (pkg.Artifact, string) { const ( version = "0.29.2" checksum = "6UsGqEMA8EER_5b9N0b32UCqiRy39B6_RnPfvuslWhtFV1qYD4DfS10crGZN_TP2" ) - return t.NewPackage("pkg-config", version, newFromGitLab( + return s.NewPackage(t, "pkg-config", version, newFromGitLab( "gitlab.freedesktop.org", "pkg-config/pkg-config", "pkg-config-"+version, @@ -24,7 +24,7 @@ func (t Toolchain) newPkgConfig() (pkg.Artifact, string) { ), version } func init() { - artifactsM[PkgConfig] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPkgConfig, Name: "pkg-config", @@ -32,5 +32,5 @@ func init() { Website: "https://pkgconfig.freedesktop.org/", ID: 3649, - } + }) } diff --git a/internal/rosa/procps.go b/internal/rosa/procps.go index c5dc01b4..067f0e61 100644 --- a/internal/rosa/procps.go +++ b/internal/rosa/procps.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newProcps() (pkg.Artifact, string) { +func (t Toolchain) newProcps(s *S) (pkg.Artifact, string) { const ( version = "4.0.6" checksum = "pl_fZLvDlv6iZTkm8l_tHFpzTDVFGCiSJEs3eu0zAX6u36AV36P_En8K7JPScRWM" ) - return t.NewPackage("procps", version, newFromGitLab( + return s.NewPackage(t, "procps", version, newFromGitLab( "gitlab.com", "procps-ng/procps", "v"+version, @@ -27,7 +27,7 @@ func (t Toolchain) newProcps() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Procps] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newProcps, Name: "procps", @@ -35,5 +35,5 @@ func init() { Website: "https://gitlab.com/procps-ng/procps", ID: 3708, - } + }) } diff --git a/internal/rosa/python.go b/internal/rosa/python.go index 89f32157..f610dd69 100644 --- a/internal/rosa/python.go +++ b/internal/rosa/python.go @@ -7,12 +7,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newPython() (pkg.Artifact, string) { +func (t Toolchain) newPython(s *S) (pkg.Artifact, string) { const ( version = "3.14.5" checksum = "zYIpDlk2ftZ-UVGCQS1rthle2OHoyXV653ztWiopKV1NhmIJf1K2hHbkwM4DozQ9" ) - return t.NewPackage("python", version, newTar( + return s.NewPackage(t, "python", version, newTar( "https://www.python.org/ftp/python/"+version+ "/Python-"+version+".tgz", checksum, @@ -73,7 +73,7 @@ index 19aea290b58..51603ba9510 100644 // _ctypes appears to infer something from the linker name "LDFLAGS=-Wl,--dynamic-linker=/system/lib/" + - "ld-musl-" + linuxArch() + ".so.1", + "ld-musl-" + s.linuxArch() + ".so.1", }, }, &MakeHelper{ Check: []string{"test"}, @@ -88,7 +88,7 @@ index 19aea290b58..51603ba9510 100644 ), version } func init() { - artifactsM[Python] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newPython, Name: "python", @@ -103,7 +103,7 @@ func init() { }, ID: 13254, - } + }) } // PipHelper is the [Python] pip packaging helper. @@ -150,7 +150,7 @@ func (*PipHelper) createDir() bool { return false } func (*PipHelper) wantsDir() string { return `"$(mktemp -d)"` } // script generates the pip3 install command. -func (attr *PipHelper) script(name string) string { +func (attr *PipHelper) script(_ *S, name string) string { if attr == nil { attr = new(PipHelper) } @@ -193,16 +193,16 @@ pip3 install \ ` + script } -// newPythonPackage creates [Metadata] for a [Python] package. -func newPythonPackage( +// newPythonPackage registers a new [Python] package. +func (s *S) newPythonPackage( name string, id int, description, website, version string, source pkg.Artifact, attrP *PackageAttr, attr *PipHelper, - build P, extra ...PArtifact, -) Metadata { + build P, extra ...ArtifactH, +) { name = "python-" + name - return Metadata{ - f: func(t Toolchain) (pkg.Artifact, string) { - return t.NewPackage(name, version, source, attrP, attr, slices.Concat( + s.MustRegister(&Artifact{ + f: func(t Toolchain, s *S) (pkg.Artifact, string) { + return s.NewPackage(t, name, version, source, attrP, attr, slices.Concat( P{Python}, extra, build, @@ -216,7 +216,7 @@ func newPythonPackage( Dependencies: slices.Concat(P{Python}, extra), ID: id, - } + }) } func init() { @@ -224,7 +224,7 @@ func init() { version = "0.47.0" checksum = "HZ-MvkUP8mbbx2YmsRNswj_bbOCIiXckuHqL5Qbvb5NxN5DYfWnqwkGNyS7OrId0" ) - artifactsM[PythonWheel] = newPythonPackage( + native.newPythonPackage( "wheel", 11428, "the official binary distribution format for Python", "https://peps.python.org/pep-0427/", @@ -242,7 +242,7 @@ func init() { version = "82.0.1" checksum = "nznP46Tj539yqswtOrIM4nQgwLA1h-ApKX7z7ghazROCpyF5swtQGwsZoI93wkhc" ) - artifactsM[PythonSetuptools] = newPythonPackage( + native.newPythonPackage( "setuptools", 4021, "the autotools of the Python ecosystem", "https://pypi.org/project/setuptools/", @@ -262,7 +262,7 @@ func init() { version = "1.1.1" checksum = "rXZixTsZcRcIoUC1LvWrjySsiXSv5uhW6ng2P-yXZrbdj7FrSrDeJLCfC2b-ladV" ) - artifactsM[PythonVCSVersioning] = newPythonPackage( + native.newPythonPackage( "vcs-versioning", 389421, "core VCS versioning functionality extracted as a standalone library", "https://setuptools-scm.readthedocs.io/en/latest/", @@ -289,7 +289,7 @@ func init() { version = "10.0.5" checksum = "vTN_TPd-b4Wbsw5WmAcsWjrs-FNXXznOeVTDnb54NtXve9Oy-eb2HPy-RG3FzNqp" ) - artifactsM[PythonSetuptoolsSCM] = newPythonPackage( + native.newPythonPackage( "setuptools-scm", 7874, "extracts Python package versions from Git or Mercurial metadata", "https://setuptools-scm.readthedocs.io/en/latest/", @@ -316,7 +316,7 @@ func init() { version = "3.12.0" checksum = "VcTsiGiDU1aPLbjSPe38f9OjJDCLcxFz9loObJqUI1ZxDHXAaQMxBpNyLz_G1Rff" ) - artifactsM[PythonFlitCore] = newPythonPackage( + native.newPythonPackage( "flit-core", 44841, "a PEP 517 build backend for packages using Flit", "https://flit.pypa.io/", @@ -337,7 +337,7 @@ func init() { version = "26.2" checksum = "rdpGa2EkPFbj1mFtLKLnSwIX9gPfELcuneiICjRVDNw6By49szTFVoW8gtMMZ6ZS" ) - artifactsM[PythonPackaging] = newPythonPackage( + native.newPythonPackage( "packaging", 60461, "reusable core utilities for various Python Packaging interoperability specifications", "https://packaging.pypa.io/", @@ -352,10 +352,10 @@ func init() { } func init() { - artifactsM[LIT] = Metadata{ - f: func(t Toolchain) (pkg.Artifact, string) { - version := t.Version(LLVM) - return t.NewPackage("lit", version, t.Load(llvmSource), nil, &PipHelper{ + native.MustRegister(&Artifact{ + f: func(t Toolchain, s *S) (pkg.Artifact, string) { + source, version := s.Load(t, llvmSource) + return s.NewPackage(t, "lit", version, source, nil, &PipHelper{ Append: []string{"llvm", "utils", "lit"}, // already checked during llvm SkipCheck: true, @@ -371,7 +371,7 @@ func init() { Dependencies: P{ Python, }, - } + }) } func init() { @@ -379,7 +379,7 @@ func init() { version = "1.1.1" checksum = "1fVwoal6FoKXczoG3qRUi87TxSWESSGcgvnbEZDYuaOgsO25o36iF3SbAhwkr4Va" ) - artifactsM[PythonPathspec] = newPythonPackage( + native.newPythonPackage( "pathspec", 23424, "utility library for gitignore style pattern matching of file paths", "https://github.com/cpburnz/python-pathspec", @@ -398,7 +398,7 @@ func init() { version = "2026.5.7.17" checksum = "1Fcps0gK9P4ofwGL8MISN9k1Q40-quxX7NDpIna50TmziBNrZy-0Vz0I9yIeHCoP" ) - artifactsM[PythonTroveClassifiers] = newPythonPackage( + native.newPythonPackage( "trove-classifiers", 88298, "canonical source for classifiers on PyPI", "https://pypi.org/p/trove-classifiers/", @@ -417,7 +417,7 @@ func init() { version = "1.6.0" checksum = "GiUgDkKjF8Xn1cmq6iMhTGXzcPIYeaJrvQpHBSAJapNVx4UyuiTXqd5eVlxSClJu" ) - artifactsM[PythonPluggy] = newPythonPackage( + native.newPythonPackage( "pluggy", 7500, "the core framework used by the pytest, tox, and devpi projects", "https://pluggy.readthedocs.io/en/latest/", @@ -440,7 +440,7 @@ func init() { version = "1.16.5" checksum = "V2eREtqZLZeV85yb4O-bfAJCUluHcQP76Qfs0QH5s7RF_Oc8xIP8jD0jl85qFyWk" ) - artifactsM[PythonHatchling] = newPythonPackage( + native.newPythonPackage( "hatchling", 16137, "the extensible, standards compliant build backend used by Hatch", "https://hatch.pypa.io/latest/", @@ -465,7 +465,7 @@ func init() { version = "2.20.0" checksum = "L-2P6vn7c_CNZYliE5CJAWLxO1ziDQVVkf8bnZbHj8aSCQ43oWv11wC9KzU9MeCa" ) - artifactsM[PythonPygments] = newPythonPackage( + native.newPythonPackage( "pygments", 3986, "a syntax highlighting package written in Python", "https://pygments.org/", @@ -484,7 +484,7 @@ func init() { version = "2.3.0" checksum = "mH7VBZaXcYatBPE3RQQZvSzz_Ay8IPPek60NpPHZulPq4ReAFUUsA4EPWfiyMknZ" ) - artifactsM[PythonIniConfig] = newPythonPackage( + native.newPythonPackage( "iniconfig", 114778, "a small and simple INI-file parser module", "https://github.com/pytest-dev/iniconfig", @@ -507,7 +507,7 @@ func init() { version = "9.0.3" checksum = "qfLL_znWhbJCDbNJvrx9H3-orJ86z4ifhaW0bIn21jl2sDP-FVoX_1yieOypArQe" ) - artifactsM[PythonPyTest] = newPythonPackage( + native.newPythonPackage( "pytest", 3765, "the pytest framework", "https://pytest.org", @@ -534,7 +534,7 @@ func init() { version = "3.0.3" checksum = "txRGYdWE3his1lHHRI-lZADw0-ILvUg2l5OGdFHtFXIb_QowGxwdxHCUSJIgmjQs" ) - artifactsM[PythonMarkupSafe] = newPythonPackage( + native.newPythonPackage( "markupsafe", 3918, "implements a text object that escapes characters so it is safe to use in HTML and XML", "https://markupsafe.palletsprojects.com/", @@ -553,7 +553,7 @@ func init() { version = "1.3.12" checksum = "OZbBsQe2MzRuAo5Mr4qRwWHGqU1EEZeBuSprDDIceAtMLIUJtO7SbERlxHIxNhLk" ) - artifactsM[PythonMako] = newPythonPackage( + native.newPythonPackage( "mako", 3915, "a template library written in Python", "https://www.makotemplates.org/", @@ -571,7 +571,7 @@ func init() { version = "6.0.3" checksum = "7wDv0RW9chBdu9l5Q4Hun5F2HHdo105ZSIixwdFPKbEYbftW9YxmsegfL-zafnbJ" ) - artifactsM[PythonPyYAML] = newPythonPackage( + native.newPythonPackage( "pyyaml", 4123, "a YAML parser and emitter for Python", "https://pyyaml.org/", @@ -590,7 +590,7 @@ func init() { version = "3.00" checksum = "4qfCMFKp0fLsRsloOAF780tXX_Ce_68RwinCmjNGObAX32WpF_iBafIKW1S1bYlA" ) - artifactsM[PythonPycparser] = newPythonPackage( + native.newPythonPackage( "pycparser", 8175, "complete C99 parser in pure Python", "https://github.com/eliben/pycparser", diff --git a/internal/rosa/qemu.go b/internal/rosa/qemu.go index 122b65bd..8c02e4ca 100644 --- a/internal/rosa/qemu.go +++ b/internal/rosa/qemu.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newQEMU() (pkg.Artifact, string) { +func (t Toolchain) newQEMU(s *S) (pkg.Artifact, string) { const ( version = "11.0.0" checksum = "C64gdi_Tkdg2fTwD9ERxtWGcf8vNn_6UvczW0c-x0KW1NZtd3NbEOIrlDhYGn15n" ) - return t.NewPackage("qemu", version, newTar( + return s.NewPackage(t, "qemu", version, newTar( "https://download.qemu.org/qemu-"+version+".tar.bz2", checksum, pkg.TarBzip2, @@ -94,7 +94,7 @@ EOF ), version } func init() { - artifactsM[QEMU] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newQEMU, Name: "qemu", @@ -107,5 +107,5 @@ func init() { }, ID: 13607, - } + }) } diff --git a/internal/rosa/rdfind.go b/internal/rosa/rdfind.go index da2c3ddb..5b59ee19 100644 --- a/internal/rosa/rdfind.go +++ b/internal/rosa/rdfind.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newRdfind() (pkg.Artifact, string) { +func (t Toolchain) newRdfind(s *S) (pkg.Artifact, string) { const ( version = "1.8.0" checksum = "PoaeJ2WIG6yyfe5VAYZlOdAQiR3mb3WhAUMj2ziTCx_IIEal4640HMJUb4SzU9U3" ) - return t.NewPackage("rdfind", version, newTar( + return s.NewPackage(t, "rdfind", version, newTar( "https://rdfind.pauldreik.se/rdfind-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -21,7 +21,7 @@ ln -s ../system/bin/toybox /bin/echo ), version } func init() { - artifactsM[Rdfind] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newRdfind, Name: "rdfind", @@ -33,5 +33,5 @@ func init() { }, ID: 231641, - } + }) } diff --git a/internal/rosa/report.go b/internal/rosa/report.go index 2d8b0648..01c3cf91 100644 --- a/internal/rosa/report.go +++ b/internal/rosa/report.go @@ -32,10 +32,14 @@ func WriteReport(msg message.Msg, w io.Writer, c *pkg.Cache) error { zero [wordSize]byte buf [len(pkg.ID{}) + wordSize]byte ) - for i := range PresetEnd { - a := Std.Load(PArtifact(i)) + for _, p := range native.Collect() { + a, _ := native.Load(Std, p) + meta := native.Get(p) + if meta == nil { + return errors.New("artifact " + p.String() + " in inconsistent state") + } if _, ok := a.(pkg.FileArtifact); ok { - msg.Verbosef("skipping file artifact %s", artifactsM[i].Name) + msg.Verbosef("skipping file artifact %s", meta.Name) continue } @@ -44,7 +48,7 @@ func WriteReport(msg message.Msg, w io.Writer, c *pkg.Cache) error { var f *os.File if r, err := c.OpenStatus(a); err != nil { if errors.Is(err, os.ErrNotExist) { - msg.Verbosef("artifact %s unavailable", artifactsM[i].Name) + msg.Verbosef("artifact %s unavailable", meta.Name) continue } return err @@ -52,7 +56,7 @@ func WriteReport(msg message.Msg, w io.Writer, c *pkg.Cache) error { f = r.(*os.File) } - msg.Verbosef("writing artifact %s...", artifactsM[i].Name) + msg.Verbosef("writing artifact %s...", meta.Name) var sz int64 if fi, err := f.Stat(); err != nil { diff --git a/internal/rosa/rosa.go b/internal/rosa/rosa.go index 740746cf..1f0fb729 100644 --- a/internal/rosa/rosa.go +++ b/internal/rosa/rosa.go @@ -2,7 +2,6 @@ package rosa import ( - "errors" "path" "slices" "strconv" @@ -54,8 +53,8 @@ var ( ) // linuxArch returns the architecture name used by linux corresponding to arch. -func linuxArch() string { - switch arch { +func (s *S) linuxArch() string { + switch s.arch { case "amd64": return "x86_64" case "arm64": @@ -64,23 +63,23 @@ func linuxArch() string { return "riscv64" default: - panic("unsupported target " + arch) + panic("unsupported target " + s.arch) } } -// triplet returns the Rosa OS host triple corresponding to arch. -func triplet() string { - return linuxArch() + "-rosa-linux-musl" +// triple returns the Rosa OS host triple corresponding to arch. +func (s *S) triple() string { + return s.linuxArch() + "-rosa-linux-musl" } // perArch is a value that differs per architecture. type perArch[T any] map[string]T // unwrap returns the value for the current architecture. -func (p perArch[T]) unwrap() T { - v, ok := p[arch] +func (p perArch[T]) unwrap(s *S) T { + v, ok := p[s.arch] if !ok { - panic("unsupported target " + arch) + panic("unsupported target " + s.arch) } return v } @@ -91,18 +90,18 @@ const ( ) // earlyLDFLAGS returns LDFLAGS corresponding to triplet. -func earlyLDFLAGS(static bool) string { - s := "-fuse-ld=lld " + +func (s *S) earlyLDFLAGS(static bool) string { + p := "-fuse-ld=lld " + "-L/system/lib -Wl,-rpath=/system/lib " + - "-L/system/lib/" + triplet() + " " + - "-Wl,-rpath=/system/lib/" + triplet() + " " + + "-L/system/lib/" + s.triple() + " " + + "-Wl,-rpath=/system/lib/" + s.triple() + " " + "-rtlib=compiler-rt " + "-unwindlib=libunwind " + "-Wl,--as-needed" if !static { - s += " -Wl,--dynamic-linker=/system/bin/linker" + p += " -Wl,--dynamic-linker=/system/bin/linker" } - return s + return p } // Toolchain denotes the infrastructure to compile a [pkg.Artifact] on. @@ -224,27 +223,9 @@ const ( THostNet ) -var ( - // gentooStage3 is the url of a Gentoo stage3 tarball. - gentooStage3 string - // gentooStage3Checksum is the expected checksum of gentooStage3. - gentooStage3Checksum pkg.Checksum -) - -// SetGentooStage3 sets the Gentoo stage3 tarball url and checksum. It panics -// if given zero values or if these values have already been set. -func SetGentooStage3(url string, checksum pkg.Checksum) { - if gentooStage3 != "" { - panic(errors.New("attempting to set Gentoo stage3 url twice")) - } - if url == "" { - panic(errors.New("attempting to set Gentoo stage3 url to the zero value")) - } - gentooStage3, gentooStage3Checksum = url, checksum -} - -// New returns a [pkg.Artifact] compiled on this toolchain. -func (t Toolchain) New( +// New returns a [pkg.Artifact] based on a [Toolchain] via s. +func (s *S) New( + t Toolchain, name string, flag int, extra []pkg.Artifact, @@ -260,7 +241,7 @@ func (t Toolchain) New( switch t { case _toolchainBusybox: name += "-early" - support = slices.Concat([]pkg.Artifact{newBusyboxBin()}, extra) + support = slices.Concat([]pkg.Artifact{s.newBusyboxBin()}, extra) env = fixupEnviron(env, nil, "/system/bin") case toolchainGentoo, toolchainStage0: @@ -268,9 +249,10 @@ func (t Toolchain) New( support = append(support, extra...) support = append(support, cureEtc{}) if t == toolchainStage0 { - support = append(support, t.Load(stage0Dist)) + a, _ := s.Load(t, stage0Dist) + support = append(support, a) } else { - support = append(support, _toolchainBusybox.New("gentoo", 0, nil, nil, nil, ` + support = append(support, s.New(_toolchainBusybox, "gentoo", 0, nil, nil, nil, ` tar -C /work -xf /usr/src/stage3.tar.xz rm -rf /work/dev/ /work/proc/ ln -vs ../usr/bin /work/bin @@ -281,15 +263,15 @@ mkdir -vp /work/system/bin .) `, pkg.Path(AbsUsrSrc.Append("stage3.tar.xz"), false, pkg.NewHTTPGet( - nil, gentooStage3, - gentooStage3Checksum, + nil, s.gentooStage3, + s.gentooStage3Checksum, ), ))) } env = fixupEnviron(env, []string{ - EnvTriplet + "=" + triplet(), + EnvTriplet + "=" + s.triple(), lcMessages, - "LDFLAGS=" + earlyLDFLAGS(true), + "LDFLAGS=" + s.earlyLDFLAGS(true), }, "/system/bin", "/usr/bin", ) @@ -310,7 +292,7 @@ mkdir -vp /work/system/bin base = Musl } - support = slices.Concat(extra, (t-1).AppendPresets([]pkg.Artifact{ + support = slices.Concat(extra, s.AppendPresets(t-1, []pkg.Artifact{ cureEtc{newIANAEtc()}, }, base, @@ -318,7 +300,7 @@ mkdir -vp /work/system/bin toybox, )) env = fixupEnviron(env, []string{ - EnvTriplet + "=" + triplet(), + EnvTriplet + "=" + s.triple(), lcMessages, }, "/system/bin", "/bin") @@ -327,7 +309,7 @@ mkdir -vp /work/system/bin } return pkg.NewExec( - name, arch, knownChecksum, pkg.ExecTimeoutMax, + name, s.arch, knownChecksum, pkg.ExecTimeoutMax, flag&THostNet != 0, flag&TExclusive != 0, fhs.AbsRoot, env, @@ -346,7 +328,8 @@ mkdir -vp /work/system/bin // NewPatchedSource returns [pkg.Artifact] of source with patches applied. If // passthrough is true, source is returned as is for zero length patches. -func (t Toolchain) NewPatchedSource( +func (s *S) NewPatchedSource( + t Toolchain, name, version string, source pkg.Artifact, passthrough bool, @@ -379,7 +362,7 @@ cat /usr/src/` + name + `-patches/* | \ ` aname += "-patched" } - return t.New(aname, 0, t.AppendPresets(nil, + return s.New(t, aname, 0, s.AppendPresets(t, nil, Patch, ), nil, nil, script, paths...) } @@ -407,7 +390,7 @@ type Helper interface { // also empty. The special value helperInPlace omits the cd statement. wantsDir() string // script returns the helper-specific segment of cure script. - script(name string) string + script(s *S, name string) string } // PackageAttr holds build-system-agnostic attributes. @@ -436,55 +419,59 @@ type PackageAttr struct { Flag int } -// pa holds whether a [PArtifact] is present. -type pa = [PresetEnd]bool +// pa holds whether an [ArtifactH] is present. +type pa = map[ArtifactH]struct{} // paPool holds addresses of pa. -var paPool = sync.Pool{New: func() any { return new(pa) }} +var paPool = sync.Pool{New: func() any { return make(pa) }} // paGet returns the address of a new pa. -func paGet() *pa { return paPool.Get().(*pa) } +func paGet() pa { return paPool.Get().(pa) } // paPut returns a pa to paPool. -func paPut(pv *pa) { *pv = pa{}; paPool.Put(pv) } +func paPut(pv pa) { clear(pv); paPool.Put(pv) } // appendPreset recursively appends a [PArtifact] and its runtime dependencies. -func (t Toolchain) appendPreset( +func (s *S) appendPreset( + t Toolchain, a []pkg.Artifact, - pv *pa, p PArtifact, + pv pa, p ArtifactH, ) []pkg.Artifact { - if pv[p] { + if _, ok := pv[p]; ok { return a } - pv[p] = true + pv[p] = struct{}{} - for _, d := range GetMetadata(p).Dependencies { - a = t.appendPreset(a, pv, d) + for _, d := range s.Get(p).Dependencies { + a = s.appendPreset(t, a, pv, d) } - return append(a, t.Load(p)) + d, _ := s.Load(t, p) + return append(a, d) } // AppendPresets recursively appends multiple [PArtifact] and their runtime // dependencies. -func (t Toolchain) AppendPresets( +func (s *S) AppendPresets( + t Toolchain, a []pkg.Artifact, - presets ...PArtifact, + presets ...ArtifactH, ) []pkg.Artifact { pv := paGet() for _, p := range presets { - a = t.appendPreset(a, pv, p) + a = s.appendPreset(t, a, pv, p) } paPut(pv) return a } // NewPackage constructs a [pkg.Artifact] via a build system helper. -func (t Toolchain) NewPackage( +func (s *S) NewPackage( + t Toolchain, name, version string, source pkg.Artifact, attr *PackageAttr, helper Helper, - extra ...PArtifact, + extra ...ArtifactH, ) pkg.Artifact { if attr == nil { attr = new(PackageAttr) @@ -501,10 +488,10 @@ func (t Toolchain) NewPackage( { pv := paGet() for _, p := range helper.extra(attr.Flag) { - extraRes = t.appendPreset(extraRes, pv, p) + extraRes = s.appendPreset(t, extraRes, pv, p) } for _, p := range extra { - extraRes = t.appendPreset(extraRes, pv, p) + extraRes = s.appendPreset(t, extraRes, pv, p) } paPut(pv) } @@ -548,18 +535,19 @@ cd '/usr/src/` + name + `/' panic("cannot remain in root") } - return t.New( + return s.New( + t, name+"-"+version, attr.Flag, extraRes, attr.KnownChecksum, attr.Env, - scriptEarly+helper.script(name), + scriptEarly+helper.script(s, name), slices.Concat(attr.Paths, []pkg.ExecPath{ pkg.Path(AbsUsrSrc.Append( name+sourceSuffix, - ), attr.Writable || wantsWrite, t.NewPatchedSource( - name, version, source, !attr.Chmod && !wantsChmod, attr.Patches..., + ), attr.Writable || wantsWrite, s.NewPatchedSource( + t, name, version, source, !attr.Chmod && !wantsChmod, attr.Patches..., )), })..., ) @@ -626,3 +614,8 @@ func newFromGitHubRelease( compression, ) } + +var native S + +// Native returns the global [S]. +func Native() *S { return &native } diff --git a/internal/rosa/rosa_test.go b/internal/rosa/rosa_test.go index 0eef8334..f9dcb1a2 100644 --- a/internal/rosa/rosa_test.go +++ b/internal/rosa/rosa_test.go @@ -28,7 +28,7 @@ var ( ) func TestMain(m *testing.M) { - rosa.DropCaches("", rosa.OptLLVMNoLTO) + rosa.Native().DropCaches("", rosa.OptLLVMNoLTO) container.TryArgv0(nil) code := m.Run() @@ -77,10 +77,9 @@ func TestCureAll(t *testing.T) { cache := getCache(t) t.Parallel() - for i := range rosa.PresetEnd { - p := rosa.PArtifact(i) - meta := rosa.GetMetadata(p) - a := rosa.Std.Load(p) + for _, p := range rosa.Native().Collect() { + a, _ := rosa.Native().Load(rosa.Std, p) + meta := rosa.Native().MustGet(p) t.Run(meta.Name, func(t *testing.T) { t.Parallel() @@ -94,14 +93,13 @@ func TestCureAll(t *testing.T) { } func BenchmarkStage3(b *testing.B) { - arch, flags := rosa.Arch(), rosa.Flags() - b.Cleanup(func() { rosa.DropCaches(arch, flags) }) + s := rosa.Native().Clone() for b.Loop() { - rosa.Std.Load(rosa.LLVM) + s.Load(rosa.Std, rosa.LLVM) b.StopTimer() - rosa.DropCaches("", 0) + s.DropCaches("", 0) b.StartTimer() } } diff --git a/internal/rosa/rsync.go b/internal/rosa/rsync.go index e20261e0..b2ce4fb9 100644 --- a/internal/rosa/rsync.go +++ b/internal/rosa/rsync.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newRsync() (pkg.Artifact, string) { +func (t Toolchain) newRsync(s *S) (pkg.Artifact, string) { const ( version = "3.4.2" checksum = "t7PxS4WHXzefLMKKc_3hJgxUmlGG6KgHMZ8i4DZvCQAUAizxbclNKwfLyOHyq5BX" ) - return t.NewPackage("rsync", version, newTar( + return s.NewPackage(t, "rsync", version, newTar( "https://download.samba.org/pub/rsync/src/"+ "rsync-"+version+".tar.gz", checksum, @@ -27,7 +27,7 @@ func (t Toolchain) newRsync() (pkg.Artifact, string) { }), version } func init() { - artifactsM[Rsync] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newRsync, Name: "rsync", @@ -35,5 +35,5 @@ func init() { Website: "https://rsync.samba.org/", ID: 4217, - } + }) } diff --git a/internal/rosa/squashfs.go b/internal/rosa/squashfs.go index 3ac6e6d0..29ba830e 100644 --- a/internal/rosa/squashfs.go +++ b/internal/rosa/squashfs.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newSquashfsTools() (pkg.Artifact, string) { +func (t Toolchain) newSquashfsTools(s *S) (pkg.Artifact, string) { const ( version = "4.7.5" checksum = "rF52wLQP-jeAmcD-48wqJcck8ZWRFwkax3T-7snaRf5EBnCQQh0YypMY9lwcivLz" ) - return t.NewPackage("squashfs-tools", version, newFromGitHubRelease( + return s.NewPackage(t, "squashfs-tools", version, newFromGitHubRelease( "plougher/squashfs-tools", version, "squashfs-tools-"+version+".tar.gz", @@ -42,7 +42,7 @@ func (t Toolchain) newSquashfsTools() (pkg.Artifact, string) { ), version } func init() { - artifactsM[SquashfsTools] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newSquashfsTools, Name: "squashfs-tools", @@ -56,5 +56,5 @@ func init() { }, ID: 4879, - } + }) } diff --git a/internal/rosa/stage0.go b/internal/rosa/stage0.go index 3185bcc2..5f365703 100644 --- a/internal/rosa/stage0.go +++ b/internal/rosa/stage0.go @@ -5,57 +5,57 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newStage0() (pkg.Artifact, string) { - return t.New("rosa-stage0", 0, t.AppendPresets(nil, +func (t Toolchain) newStage0(s *S) (pkg.Artifact, string) { + return s.New(t, "rosa-stage0", 0, s.AppendPresets(t, nil, Bzip2, ), nil, nil, ` umask 377 tar \ -vjc \ -C /stage0 \ - -f /work/stage0-`+triplet()+`.tar.bz2 \ + -f /work/stage0-`+s.triple()+`.tar.bz2 \ . -`, pkg.Path(fhs.AbsRoot.Append("stage0"), false, t.AppendPresets(nil, +`, pkg.Path(fhs.AbsRoot.Append("stage0"), false, s.AppendPresets(t, nil, LLVM, Mksh, toyboxEarly, )...)), Unversioned } func init() { - artifactsM[Stage0] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newStage0, Name: "rosa-stage0", Description: "Rosa OS stage0 toolchain tarball for bootstrap", - } + }) } func init() { const version = "20260504" - artifactsM[stage0Dist] = Metadata{ - f: func(Toolchain) (pkg.Artifact, string) { + native.MustRegister(&Artifact{ + f: func(_ Toolchain, s *S) (pkg.Artifact, string) { return newTar( "https://hakurei.app/seed/"+version+"/"+ - "stage0-"+triplet()+".tar.bz2", + "stage0-"+s.triple()+".tar.bz2", perArch[string]{ "amd64": "IQjFDkiAVLo1XzflgMMiLP3gnVY2hhDMTzl-QqJDCQhcLQ3lLtRzjI5WCxGyW_lk", "arm64": "6fmwl2Umx2QssKQvxxb1JOGkAjzfA_MXKku0jVdGjYGb35OvwEVA5NYtd0HIy3yH", "riscv64": "Z2ODV0rIoo9iQRUIu35bsaOBeXc_9qQfGcyb2aGneatzNUJlXh5emSpEV2bOklUL", - }.unwrap(), + }.unwrap(s), pkg.TarBzip2, ), version }, Name: "stage0-dist", Description: "Rosa OS stage0 bootstrap seed", - } + }) } // HasStage0 returns whether a stage0 distribution is available. func HasStage0() (ok bool) { func() { defer func() { ok = recover() == nil }() - toolchainStage0.Load(stage0Dist) + native.Load(toolchainStage0, stage0Dist) }() return } diff --git a/internal/rosa/state.go b/internal/rosa/state.go new file mode 100644 index 00000000..2ae575b1 --- /dev/null +++ b/internal/rosa/state.go @@ -0,0 +1,307 @@ +package rosa + +import ( + "context" + "encoding/json" + "errors" + "net/http" + "runtime" + "slices" + "strconv" + "strings" + "sync" + "sync/atomic" + "unique" + + "hakurei.app/internal/pkg" +) + +// ArtifactH is a handle of the unique name of a prepared [pkg.Artifact]. +type ArtifactH unique.Handle[string] + +// String returns the name of p. +func (p ArtifactH) String() string { + return unique.Handle[string](p).Value() +} + +// MarshalJSON represents [ArtifactH] by its [Artifact.Name]. +func (p ArtifactH) MarshalJSON() ([]byte, error) { return json.Marshal(p.String()) } + +// UnmarshalJSON resolves [ArtifactH] by its [Artifact.Name]. +func (p *ArtifactH) UnmarshalJSON(data []byte) error { + var name string + if err := json.Unmarshal(data, &name); err != nil { + return err + } + *p = ArtifactH(unique.Make(name)) + return nil +} + +// P represents multiple [ArtifactH]. +type P []ArtifactH + +// Artifact is stage-agnostic immutable data with a deterministic resulting +// [pkg.Artifact]. It can be created natively or through evaluation. +type Artifact struct { + f func(t Toolchain, s *S) (a pkg.Artifact, version string) + + // Unique package name. + Name string `json:"name"` + // Short user-facing description. + Description string `json:"description"` + // Project home page. + Website string `json:"website,omitempty"` + + // Runtime dependencies. + Dependencies P `json:"dependencies"` + + // Project identifier on [Anitya]. + // + // [Anitya]: https://release-monitoring.org/ + ID int `json:"-"` + + // Whether to exclude from exported functions. + Exclude bool `json:"exclude,omitempty"` + + // Optional custom version checking behaviour. + latest func(v *Versions) string +} + +// GetLatest returns the latest version described by v. +func (meta *Artifact) GetLatest(v *Versions) string { + if meta.latest != nil { + return meta.latest(v) + } + return v.Latest +} + +// Unversioned denotes an unversioned [Artifact]. +const Unversioned = "\x00" + +// UnpopulatedIDError is returned by [Artifact.GetLatest] for an instance of +// [Artifact] where ID is not populated. +type UnpopulatedIDError struct{} + +func (UnpopulatedIDError) Unwrap() error { return errors.ErrUnsupported } +func (UnpopulatedIDError) Error() string { return "Anitya ID is not populated" } + +// Versions are package versions returned by Anitya. +type Versions struct { + // The latest version for the project, as determined by the version sorting algorithm. + Latest string `json:"latest_version"` + // List of all versions that aren’t flagged as pre-release. + Stable []string `json:"stable_versions"` + // List of all versions stored, sorted from newest to oldest. + All []string `json:"versions"` +} + +// getStable returns the first Stable version, or Latest if that is unavailable. +func (v *Versions) getStable() string { + if len(v.Stable) == 0 { + return v.Latest + } + return v.Stable[0] +} + +// GetVersions returns versions fetched from Anitya. +func (meta *Artifact) GetVersions(ctx context.Context) (*Versions, error) { + if meta.ID == 0 { + return nil, UnpopulatedIDError{} + } + + var resp *http.Response + if req, err := http.NewRequestWithContext( + ctx, + http.MethodGet, + "https://release-monitoring.org/api/v2/versions/?project_id="+ + strconv.Itoa(meta.ID), + nil, + ); err != nil { + return nil, err + } else { + req.Header.Set("User-Agent", "Rosa/1.1") + if resp, err = http.DefaultClient.Do(req); err != nil { + return nil, err + } + } + + var v Versions + err := json.NewDecoder(resp.Body).Decode(&v) + return &v, errors.Join(err, resp.Body.Close()) +} + +// A cachedArtifact holds [pkg.Artifact] and its corresponding version string. +type cachedArtifact struct { + a pkg.Artifact + v string +} + +const ( + // OptSkipCheck skips running all test suites. + OptSkipCheck = 1 << iota + // OptLLVMNoLTO disables LTO in all [LLVM] stages. + OptLLVMNoLTO +) + +// S holds a set of [Artifact]. +type S struct { + // [ArtifactH] to [Artifact]. + artifacts sync.Map + // Size of artifacts. + artifactCount atomic.Uint64 + + // Target architecture. + arch string + // For initialising arch. + archOnce sync.Once + + // Options for [pkg.Artifact] created against [S]. + opts int + + // Cached [pkg.Artifact]. + c [_toolchainEnd]sync.Map + + // URL of a Gentoo stage3 tarball. + gentooStage3 string + // Expected checksum of gentooStage3. + gentooStage3Checksum pkg.Checksum +} + +// Clone returns a copy of s. +func (s *S) Clone() *S { + v := S{arch: s.arch} + s.artifacts.Range(func(key, value any) bool { + v.artifacts.Store(key, value) + v.artifactCount.Add(1) + return true + }) + return &v +} + +// wantsArch must be called before accessing arch. +func (s *S) wantsArch() { + s.archOnce.Do(func() { + if s.arch == "" { + s.arch = runtime.GOARCH + } + }) +} + +// Arch returns the target architecture. +func (s *S) Arch() string { s.wantsArch(); return s.arch } + +// Flags returns the current preset flags. +func (s *S) Flags() int { return s.opts } + +// DropCaches arranges for all cached [pkg.Artifact] to be freed some time after +// it returns. Must not be used concurrently with any other method. +func (s *S) DropCaches(targetArch string, flags int) { + if targetArch == "" { + targetArch = runtime.GOARCH + } + + s.arch = targetArch + s.opts = flags + for i := range s.c { + s.c[i].Clear() + } +} + +// Get returns the address of the named [Artifact]. +func (s *S) Get(p ArtifactH) (meta *Artifact) { + s.wantsArch() + v, ok := s.artifacts.Load(p) + if ok { + meta = v.(*Artifact) + } + return +} + +// MustGet is like Get, but panics if the named [Artifact] is not registered. +func (s *S) MustGet(p ArtifactH) (meta *Artifact) { + meta = s.Get(p) + if meta == nil { + panic("artifact " + strconv.Quote(p.String()) + " not available") + } + return +} + +// Load returns the resulting [pkg.Artifact] of [ArtifactH]. +func (s *S) Load(t Toolchain, p ArtifactH) (pkg.Artifact, string) { + s.wantsArch() + e, ok := s.c[t].Load(p) + if ok { + r := e.(cachedArtifact) + return r.a, r.v + } + + meta := s.Get(p) + if meta == nil { + return nil, "" + } + var r cachedArtifact + r.a, r.v = meta.f(t, s) + s.c[t].Store(p, r) + return r.a, r.v +} + +// MustLoad is like Load, but panics if the named [Artifact] is not registered. +func (s *S) MustLoad(t Toolchain, p ArtifactH) (pkg.Artifact, string) { + a, version := s.Load(t, p) + if a == nil { + panic("artifact " + strconv.Quote(p.String()) + " not available") + } + return a, version +} + +// Register arranges for a new [Artifact] to be cured under s. It returns false +// if another [Artifact] is already registered under the same name. +func (s *S) Register(meta *Artifact) bool { + if meta.Name == "" { + return false + } + p := ArtifactH(unique.Make(meta.Name)) + _, ok := s.artifacts.LoadOrStore(p, meta) + if !ok { + s.artifactCount.Add(1) + } + return !ok +} + +// MustRegister is like Register, but panics if registration fails. +func (s *S) MustRegister(meta *Artifact) { + if !s.Register(meta) { + panic("attempting to register " + strconv.Quote(meta.Name) + " twice") + } +} + +// Count returns the number of [Artifact] registered to s. +func (s *S) Count() int { + return int(s.artifactCount.Load()) +} + +// Collect returns all [ArtifactH] registered to s. +func (s *S) Collect() (handles []ArtifactH) { + handles = make([]ArtifactH, 0, s.Count()) + s.artifacts.Range(func(key, _ any) bool { + handles = append(handles, key.(ArtifactH)) + return true + }) + slices.SortFunc(handles, func(a, b ArtifactH) int { + return strings.Compare(a.String(), b.String()) + }) + return +} + +// SetGentooStage3 sets the Gentoo stage3 tarball url and checksum. It panics +// if given zero values or if these values have already been set. +func (s *S) SetGentooStage3(url string, checksum pkg.Checksum) { + if s.gentooStage3 != "" { + panic(errors.New("attempting to set Gentoo stage3 url twice")) + } + if url == "" { + panic(errors.New("attempting to set Gentoo stage3 url to the zero value")) + } + s.gentooStage3, s.gentooStage3Checksum = url, checksum + s.DropCaches(s.Arch(), s.Flags()) +} diff --git a/internal/rosa/state_native.go b/internal/rosa/state_native.go new file mode 100644 index 00000000..89d26dfa --- /dev/null +++ b/internal/rosa/state_native.go @@ -0,0 +1,197 @@ +package rosa + +import "unique" + +var ( + LLVM = ArtifactH(unique.Make("llvm")) + EarlyInit = ArtifactH(unique.Make("earlyinit")) + ImageSystem = ArtifactH(unique.Make("system-image")) + ImageInitramfs = ArtifactH(unique.Make("initramfs-image")) + Kernel = ArtifactH(unique.Make("kernel")) + KernelHeaders = ArtifactH(unique.Make("kernel-headers")) + KernelSource = ArtifactH(unique.Make("kernel-source")) + Firmware = ArtifactH(unique.Make("firmware")) + ACL = ArtifactH(unique.Make("acl")) + ArgpStandalone = ArtifactH(unique.Make("argp-standalone")) + Attr = ArtifactH(unique.Make("attr")) + Autoconf = ArtifactH(unique.Make("autoconf")) + Automake = ArtifactH(unique.Make("automake")) + BC = ArtifactH(unique.Make("bc")) + Bash = ArtifactH(unique.Make("bash")) + Binutils = ArtifactH(unique.Make("binutils")) + Bison = ArtifactH(unique.Make("bison")) + Bzip2 = ArtifactH(unique.Make("bzip2")) + CMake = ArtifactH(unique.Make("cmake")) + Connman = ArtifactH(unique.Make("connman")) + Coreutils = ArtifactH(unique.Make("coreutils")) + Curl = ArtifactH(unique.Make("curl")) + DBus = ArtifactH(unique.Make("dbus")) + DTC = ArtifactH(unique.Make("dtc")) + Diffutils = ArtifactH(unique.Make("diffutils")) + Elfutils = ArtifactH(unique.Make("elfutils")) + Fakeroot = ArtifactH(unique.Make("fakeroot")) + Findutils = ArtifactH(unique.Make("findutils")) + Flex = ArtifactH(unique.Make("flex")) + FontUtil = ArtifactH(unique.Make("font-util")) + Freetype = ArtifactH(unique.Make("freetype")) + Fuse = ArtifactH(unique.Make("fuse")) + GMP = ArtifactH(unique.Make("gmp")) + GLib = ArtifactH(unique.Make("glib")) + Gawk = ArtifactH(unique.Make("gawk")) + GenInitCPIO = ArtifactH(unique.Make("gen_init_cpio")) + Gettext = ArtifactH(unique.Make("gettext")) + Git = ArtifactH(unique.Make("git")) + Glslang = ArtifactH(unique.Make("glslang")) + GnuTLS = ArtifactH(unique.Make("gnutls")) + Go = ArtifactH(unique.Make("go")) + Gperf = ArtifactH(unique.Make("gperf")) + Grep = ArtifactH(unique.Make("grep")) + Gzip = ArtifactH(unique.Make("gzip")) + Hakurei = ArtifactH(unique.Make("hakurei")) + HakureiDist = ArtifactH(unique.Make("hakurei-dist")) + Hwdata = ArtifactH(unique.Make("hwdata")) + IPTables = ArtifactH(unique.Make("iptables")) + Kmod = ArtifactH(unique.Make("kmod")) + LIT = ArtifactH(unique.Make("lit")) + LibX11 = ArtifactH(unique.Make("libX11")) + LibXau = ArtifactH(unique.Make("libXau")) + LibXdmcp = ArtifactH(unique.Make("libXdmcp")) + LibXext = ArtifactH(unique.Make("libXext")) + LibXfixes = ArtifactH(unique.Make("libXfixes")) + LibXfont2 = ArtifactH(unique.Make("libXfont2")) + LibXrandr = ArtifactH(unique.Make("libXrandr")) + LibXrender = ArtifactH(unique.Make("libXrender")) + LibXxf86vm = ArtifactH(unique.Make("libXxf86vm")) + Libarchive = ArtifactH(unique.Make("libarchive")) + Libbsd = ArtifactH(unique.Make("libbsd")) + Libcap = ArtifactH(unique.Make("libcap")) + Libconfig = ArtifactH(unique.Make("libconfig")) + LibdisplayInfo = ArtifactH(unique.Make("libdisplay-info")) + Libdrm = ArtifactH(unique.Make("libdrm")) + Libepoxy = ArtifactH(unique.Make("libepoxy")) + Libev = ArtifactH(unique.Make("libev")) + Libexpat = ArtifactH(unique.Make("libexpat")) + Libffi = ArtifactH(unique.Make("libffi")) + Libfontenc = ArtifactH(unique.Make("libfontenc")) + Libgd = ArtifactH(unique.Make("libgd")) + Libglvnd = ArtifactH(unique.Make("libglvnd")) + Libiconv = ArtifactH(unique.Make("libiconv")) + Libmd = ArtifactH(unique.Make("libmd")) + Libmnl = ArtifactH(unique.Make("libmnl")) + Libnftnl = ArtifactH(unique.Make("libnftnl")) + Libpciaccess = ArtifactH(unique.Make("libpciaccess")) + Libpng = ArtifactH(unique.Make("libpng")) + Libpsl = ArtifactH(unique.Make("libpsl")) + Libseccomp = ArtifactH(unique.Make("libseccomp")) + Libtasn1 = ArtifactH(unique.Make("libtasn1")) + Libtirpc = ArtifactH(unique.Make("libtirpc")) + Libtool = ArtifactH(unique.Make("libtool")) + Libucontext = ArtifactH(unique.Make("libucontext")) + Libunistring = ArtifactH(unique.Make("libunistring")) + Libva = ArtifactH(unique.Make("libva")) + LibxcbRenderUtil = ArtifactH(unique.Make("libxcb-render-util")) + LibxcbUtil = ArtifactH(unique.Make("libxcb-util")) + LibxcbUtilImage = ArtifactH(unique.Make("libxcb-util-image")) + LibxcbUtilKeysyms = ArtifactH(unique.Make("libxcb-util-keysyms")) + LibxcbUtilWM = ArtifactH(unique.Make("libxcb-util-wm")) + Libxcvt = ArtifactH(unique.Make("libxcvt")) + Libxkbfile = ArtifactH(unique.Make("libxkbfile")) + Libxml2 = ArtifactH(unique.Make("libxml2")) + Libxshmfence = ArtifactH(unique.Make("libxshmfence")) + Libxslt = ArtifactH(unique.Make("libxslt")) + Libxtrans = ArtifactH(unique.Make("libxtrans")) + LMSensors = ArtifactH(unique.Make("lm_sensors")) + M4 = ArtifactH(unique.Make("m4")) + MPC = ArtifactH(unique.Make("mpc")) + MPFR = ArtifactH(unique.Make("mpfr")) + Make = ArtifactH(unique.Make("make")) + Mesa = ArtifactH(unique.Make("mesa")) + Meson = ArtifactH(unique.Make("meson")) + Mksh = ArtifactH(unique.Make("mksh")) + MuslFts = ArtifactH(unique.Make("musl-fts")) + MuslObstack = ArtifactH(unique.Make("musl-obstack")) + NSS = ArtifactH(unique.Make("nss")) + NSSCACert = ArtifactH(unique.Make("nss-cacert")) + Ncurses = ArtifactH(unique.Make("ncurses")) + Nettle = ArtifactH(unique.Make("nettle")) + Ninja = ArtifactH(unique.Make("ninja")) + OpenSSL = ArtifactH(unique.Make("openssl")) + P11Kit = ArtifactH(unique.Make("p11-kit")) + PCRE2 = ArtifactH(unique.Make("pcre2")) + Parallel = ArtifactH(unique.Make("parallel")) + Patch = ArtifactH(unique.Make("patch")) + Perl = ArtifactH(unique.Make("perl")) + PerlLocaleGettext = ArtifactH(unique.Make("perl-Locale::gettext")) + PerlMIMECharset = ArtifactH(unique.Make("perl-MIME::Charset")) + PerlModuleBuild = ArtifactH(unique.Make("perl-Module::Build")) + PerlPodParser = ArtifactH(unique.Make("perl-Pod::Parser")) + PerlSGMLS = ArtifactH(unique.Make("perl-SGMLS")) + PerlTermReadKey = ArtifactH(unique.Make("perl-Term::ReadKey")) + PerlTestCmd = ArtifactH(unique.Make("perl-Test::Cmd")) + PerlTextCharWidth = ArtifactH(unique.Make("perl-Text::CharWidth")) + PerlTextWrapI18N = ArtifactH(unique.Make("perl-Text::WrapI18N")) + PerlUnicodeLineBreak = ArtifactH(unique.Make("perl-Unicode::LineBreak")) + PerlYAMLTiny = ArtifactH(unique.Make("perl-YAML::Tiny")) + Pixman = ArtifactH(unique.Make("pixman")) + PkgConfig = ArtifactH(unique.Make("pkg-config")) + Procps = ArtifactH(unique.Make("procps")) + Python = ArtifactH(unique.Make("python")) + PythonFlitCore = ArtifactH(unique.Make("python-flit-core")) + PythonHatchling = ArtifactH(unique.Make("python-hatchling")) + PythonIniConfig = ArtifactH(unique.Make("python-iniconfig")) + PythonMako = ArtifactH(unique.Make("python-mako")) + PythonMarkupSafe = ArtifactH(unique.Make("python-markupsafe")) + PythonPackaging = ArtifactH(unique.Make("python-packaging")) + PythonPathspec = ArtifactH(unique.Make("python-pathspec")) + PythonPluggy = ArtifactH(unique.Make("python-pluggy")) + PythonPyTest = ArtifactH(unique.Make("python-pytest")) + PythonPyYAML = ArtifactH(unique.Make("python-pyyaml")) + PythonPycparser = ArtifactH(unique.Make("python-pycparser")) + PythonPygments = ArtifactH(unique.Make("python-pygments")) + PythonSetuptools = ArtifactH(unique.Make("python-setuptools")) + PythonSetuptoolsSCM = ArtifactH(unique.Make("python-setuptools-scm")) + PythonTroveClassifiers = ArtifactH(unique.Make("python-trove-classifiers")) + PythonVCSVersioning = ArtifactH(unique.Make("python-vcs-versioning")) + PythonWheel = ArtifactH(unique.Make("python-wheel")) + QEMU = ArtifactH(unique.Make("qemu")) + Rdfind = ArtifactH(unique.Make("rdfind")) + Readline = ArtifactH(unique.Make("readline")) + Rsync = ArtifactH(unique.Make("rsync")) + Sed = ArtifactH(unique.Make("sed")) + SPIRVHeaders = ArtifactH(unique.Make("spirv-headers")) + SPIRVLLVMTranslator = ArtifactH(unique.Make("spirv-llvm-translator")) + SPIRVTools = ArtifactH(unique.Make("spirv-tools")) + SquashfsTools = ArtifactH(unique.Make("squashfs-tools")) + Strace = ArtifactH(unique.Make("strace")) + TamaGo = ArtifactH(unique.Make("tamago")) + Tar = ArtifactH(unique.Make("tar")) + Texinfo = ArtifactH(unique.Make("texinfo")) + Toybox = ArtifactH(unique.Make("toybox")) + toyboxEarly = ArtifactH(unique.Make("toybox-early")) + Unzip = ArtifactH(unique.Make("unzip")) + UtilLinux = ArtifactH(unique.Make("util-linux")) + VIM = ArtifactH(unique.Make("vim")) + Wayland = ArtifactH(unique.Make("wayland")) + WaylandProtocols = ArtifactH(unique.Make("wayland-protocols")) + XCB = ArtifactH(unique.Make("xcb")) + XCBProto = ArtifactH(unique.Make("xcb-proto")) + XDGDBusProxy = ArtifactH(unique.Make("xdg-dbus-proxy")) + XZ = ArtifactH(unique.Make("xz")) + Xkbcomp = ArtifactH(unique.Make("xkbcomp")) + XkeyboardConfig = ArtifactH(unique.Make("xkeyboard-config")) + XorgProto = ArtifactH(unique.Make("xorgproto")) + Xserver = ArtifactH(unique.Make("xserver")) + Zlib = ArtifactH(unique.Make("zlib")) + Zstd = ArtifactH(unique.Make("zstd")) + stage0Dist = ArtifactH(unique.Make("stage0-dist")) + llvmSource = ArtifactH(unique.Make("llvm-project")) + earlyCompilerRT = ArtifactH(unique.Make("early-compiler-rt")) + earlyRuntimes = ArtifactH(unique.Make("early-runtimes")) + buildcatrust = ArtifactH(unique.Make("python-buildcatrust")) + utilMacros = ArtifactH(unique.Make("util-macros")) + Musl = ArtifactH(unique.Make("musl")) + muslHeaders = ArtifactH(unique.Make("musl-headers")) + gcc = ArtifactH(unique.Make("gcc")) + nettle3 = ArtifactH(unique.Make("nettle3")) + Stage0 = ArtifactH(unique.Make("rosa-stage0")) +) diff --git a/internal/rosa/state_test.go b/internal/rosa/state_test.go new file mode 100644 index 00000000..2b951a24 --- /dev/null +++ b/internal/rosa/state_test.go @@ -0,0 +1,33 @@ +package rosa_test + +import ( + "testing" + + "hakurei.app/internal/rosa" +) + +func TestLoad(t *testing.T) { + t.Parallel() + + for _, p := range rosa.Native().Collect() { + t.Run(rosa.Native().MustGet(p).Name, func(t *testing.T) { + t.Parallel() + + rosa.Native().Load(rosa.Std, p) + }) + } +} + +func BenchmarkAll(b *testing.B) { + s := rosa.Native().Clone() + + for b.Loop() { + for _, p := range s.Collect() { + s.Load(rosa.Std, p) + } + + b.StopTimer() + s.DropCaches("", 0) + b.StartTimer() + } +} diff --git a/internal/rosa/strace.go b/internal/rosa/strace.go index 9aa0ca4a..bf7f2750 100644 --- a/internal/rosa/strace.go +++ b/internal/rosa/strace.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newStrace() (pkg.Artifact, string) { +func (t Toolchain) newStrace(s *S) (pkg.Artifact, string) { const ( version = "6.19" checksum = "XJFJJ9XLh_1rHS3m_QNjLKzkkBAooE-QT9p9lJNNWowAmd54IJop_fI4-IFtjeeL" ) - return t.NewPackage("strace", version, pkg.NewHTTPGet( + return s.NewPackage(t, "strace", version, pkg.NewHTTPGet( nil, "https://strace.io/files/"+version+"/strace-"+version+".tar.xz", mustDecode(checksum), ), &PackageAttr{ @@ -37,7 +37,7 @@ sed -i 's/unsigned int msg_len;$/uint32_t msg_len;/g' \ ), version } func init() { - artifactsM[Strace] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newStrace, Name: "strace", @@ -45,5 +45,5 @@ func init() { Website: "https://strace.io/", ID: 4897, - } + }) } diff --git a/internal/rosa/tamago.go b/internal/rosa/tamago.go index 32c61467..dd1570a2 100644 --- a/internal/rosa/tamago.go +++ b/internal/rosa/tamago.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newTamaGo() (pkg.Artifact, string) { +func (t Toolchain) newTamaGo(s *S) (pkg.Artifact, string) { const ( version = "1.26.3" checksum = "-nH3MjAzDDLTeJ2hRKYJcJwo5-Ikci4zOHfB8j1vKn7zrF9TS6zYaoLi8qohGwAE" ) - return t.New("tamago-go"+version, 0, t.AppendPresets(nil, + return s.New(t, "tamago-go"+version, 0, s.AppendPresets(t, nil, Bash, Go, ), nil, []string{ @@ -21,8 +21,8 @@ cd /work/system/tamago/src chmod -R +w .. sed -i \ - 's,/lib/ld-musl-`+linuxArch()+`.so.1,/system/bin/linker,' \ - cmd/link/internal/`+arch+`/obj.go + 's,/lib/ld-musl-`+s.linuxArch()+`.so.1,/system/bin/linker,' \ + cmd/link/internal/`+s.arch+`/obj.go sed -i \ 's/cpu.X86.HasAVX512VBMI/& \&\& cpu.X86.HasPOPCNT/' \ internal/runtime/gc/scan/scan_amd64.go @@ -40,7 +40,7 @@ rm \ ))), version } func init() { - artifactsM[TamaGo] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newTamaGo, Name: "tamago", @@ -48,5 +48,5 @@ func init() { Website: "https://github.com/usbarmory/tamago-go", ID: 388872, - } + }) } diff --git a/internal/rosa/toybox.go b/internal/rosa/toybox.go index 7a86fb80..d5e12380 100644 --- a/internal/rosa/toybox.go +++ b/internal/rosa/toybox.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newToybox(suffix, script string) (pkg.Artifact, string) { +func (s *S) newToybox(t Toolchain, suffix, script string) (pkg.Artifact, string) { const ( version = "0.8.13" checksum = "rZ1V1ATDte2WeQZanxLVoiRGdfPXhMlEo5-exX-e-ml8cGn9qOv0ABEUVZpX3wTI" ) - return t.NewPackage("toybox"+suffix, version, newTar( + return s.NewPackage(t, "toybox"+suffix, version, newTar( "https://landley.net/toybox/downloads/toybox-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -59,9 +59,9 @@ ln -s ../../system/bin/env /work/usr/bin ), version } func init() { - artifactsM[Toybox] = Metadata{ - f: func(t Toolchain) (pkg.Artifact, string) { - return t.newToybox("", "") + native.MustRegister(&Artifact{ + f: func(t Toolchain, s *S) (pkg.Artifact, string) { + return s.newToybox(t, "", "") }, Name: "toybox", @@ -69,11 +69,11 @@ func init() { Website: "https://landley.net/toybox/", ID: 13818, - } + }) - artifactsM[toyboxEarly] = Metadata{ - f: func(t Toolchain) (pkg.Artifact, string) { - return t.newToybox("-early", ` + native.MustRegister(&Artifact{ + f: func(t Toolchain, s *S) (pkg.Artifact, string) { + return s.newToybox(t, "-early", ` echo ' CONFIG_EXPR=y CONFIG_TR=y @@ -86,5 +86,5 @@ CONFIG_DIFF=y Name: "toybox-early", Description: "a build of toybox with unfinished tools enabled to break dependency loops", Website: "https://landley.net/toybox/", - } + }) } diff --git a/internal/rosa/unzip.go b/internal/rosa/unzip.go index 7dd8f01c..8c3f16b5 100644 --- a/internal/rosa/unzip.go +++ b/internal/rosa/unzip.go @@ -6,12 +6,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newUnzip() (pkg.Artifact, string) { +func (t Toolchain) newUnzip(s *S) (pkg.Artifact, string) { const ( version = "6.0" checksum = "fcqjB1IOVRNJ16K5gTGEDt3zCJDVBc7EDSra9w3H93stqkNwH1vaPQs_QGOpQZu1" ) - return t.New("unzip-"+version, 0, t.AppendPresets(nil, + return s.New(t, "unzip-"+version, 0, s.AppendPresets(t, nil, Make, Coreutils, ), nil, nil, ` @@ -21,7 +21,7 @@ make -f unix/Makefile generic1 mkdir -p /work/system/bin/ mv unzip /work/system/bin/ -`, pkg.Path(AbsUsrSrc.Append("unzip"), true, t.NewPatchedSource( +`, pkg.Path(AbsUsrSrc.Append("unzip"), true, s.NewPatchedSource(t, "unzip", version, newTar( "https://downloads.sourceforge.net/project/infozip/"+ "UnZip%206.x%20%28latest%29/UnZip%20"+version+"/"+ @@ -32,7 +32,7 @@ mv unzip /work/system/bin/ ))), version } func init() { - artifactsM[Unzip] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newUnzip, Name: "unzip", @@ -40,5 +40,5 @@ func init() { Website: "https://infozip.sourceforge.net/", ID: 8684, - } + }) } diff --git a/internal/rosa/util-linux.go b/internal/rosa/util-linux.go index 08075bc8..af0fa4d5 100644 --- a/internal/rosa/util-linux.go +++ b/internal/rosa/util-linux.go @@ -6,12 +6,12 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newUtilLinux() (pkg.Artifact, string) { +func (t Toolchain) newUtilLinux(s *S) (pkg.Artifact, string) { const ( version = "2.42" checksum = "Uy8Nxg9DsW5YwDoeaZeZTyQJ2YmnaaL_fSsQXsLUiFFUd7wnZeD_3SEaVO7ClJlk" ) - return t.NewPackage("util-linux", version, newTar( + return s.NewPackage(t, "util-linux", version, newTar( "https://www.kernel.org/pub/linux/utils/util-linux/"+ "v"+strings.Join(strings.SplitN(version, ".", 3)[:2], ".")+ "/util-linux-"+version+".tar.gz", @@ -47,7 +47,7 @@ ln -s ../system/bin/bash /bin/ ), version } func init() { - artifactsM[UtilLinux] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newUtilLinux, Name: "util-linux", @@ -58,5 +58,5 @@ func init() { // release candidates confuse Anitya latest: (*Versions).getStable, - } + }) } diff --git a/internal/rosa/vim.go b/internal/rosa/vim.go index 48bceaa1..1e22ec6d 100644 --- a/internal/rosa/vim.go +++ b/internal/rosa/vim.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newVIM() (pkg.Artifact, string) { +func (t Toolchain) newVIM(s *S) (pkg.Artifact, string) { const ( version = "9.2.0461" checksum = "18Rr_5oIf_PkKuqVkN4CMZIGkZEgpN1vamlrsvPLBjn4mN98CRuoJmhzRZ7MoVYM" ) - return t.NewPackage("vim", version, newFromGitHub( + return s.NewPackage(t, "vim", version, newFromGitHub( "vim/vim", "v"+version, checksum, @@ -29,7 +29,7 @@ func (t Toolchain) newVIM() (pkg.Artifact, string) { ), version } func init() { - artifactsM[VIM] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newVIM, Name: "vim", @@ -41,5 +41,5 @@ func init() { }, ID: 5092, - } + }) } diff --git a/internal/rosa/wayland.go b/internal/rosa/wayland.go index 3e77f52e..a2f3aefc 100644 --- a/internal/rosa/wayland.go +++ b/internal/rosa/wayland.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newWayland() (pkg.Artifact, string) { +func (t Toolchain) newWayland(s *S) (pkg.Artifact, string) { const ( version = "1.25.0" checksum = "q-4dYXme46JPgLGtXAxyZGTy7udll9RfT0VXtcW2YRR1WWViUhvdZXZneXzLqpCg" ) - return t.NewPackage("wayland", version, newFromGitLab( + return s.NewPackage(t, "wayland", version, newFromGitLab( "gitlab.freedesktop.org", "wayland/wayland", version, @@ -35,7 +35,7 @@ echo 'int main(){}' > tests/sanity-test.c ), version } func init() { - artifactsM[Wayland] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newWayland, Name: "wayland", @@ -49,15 +49,15 @@ func init() { }, ID: 10061, - } + }) } -func (t Toolchain) newWaylandProtocols() (pkg.Artifact, string) { +func (t Toolchain) newWaylandProtocols(s *S) (pkg.Artifact, string) { const ( version = "1.48" checksum = "xvfHCBIzXGwOqOu9b8dfhGw_U29Pd-g4JBwpYIaxee8SwEbxi6NaVU-Y1Q7wY4jK" ) - return t.NewPackage("wayland-protocols", version, newFromGitLab( + return s.NewPackage(t, "wayland-protocols", version, newFromGitLab( "gitlab.freedesktop.org", "wayland/wayland-protocols", version, @@ -121,7 +121,7 @@ GitLab ), version } func init() { - artifactsM[WaylandProtocols] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newWaylandProtocols, Name: "wayland-protocols", @@ -129,5 +129,5 @@ func init() { Website: "https://wayland.freedesktop.org/", ID: 13997, - } + }) } diff --git a/internal/rosa/x.go b/internal/rosa/x.go index e67be3b5..5806d967 100644 --- a/internal/rosa/x.go +++ b/internal/rosa/x.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newUtilMacros() (pkg.Artifact, string) { +func (t Toolchain) newUtilMacros(s *S) (pkg.Artifact, string) { const ( version = "1.20.2" checksum = "Ze8QH3Z3emC0pWFP-0nUYeMy7aBW3L_dxBBmVgcumIHNzEKc1iGTR-yUFR3JcM1G" ) - return t.NewPackage("util-macros", version, newTar( + return s.NewPackage(t, "util-macros", version, newTar( "https://www.x.org/releases/individual/util/"+ "util-macros-"+version+".tar.gz", checksum, @@ -15,7 +15,7 @@ func (t Toolchain) newUtilMacros() (pkg.Artifact, string) { ), nil, (*MakeHelper)(nil)), version } func init() { - artifactsM[utilMacros] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newUtilMacros, Name: "util-macros", @@ -23,15 +23,15 @@ func init() { Website: "https://xorg.freedesktop.org/", ID: 5252, - } + }) } -func (t Toolchain) newLibxtrans() (pkg.Artifact, string) { +func (t Toolchain) newLibxtrans(s *S) (pkg.Artifact, string) { const ( version = "1.6.0" checksum = "1cxDCF59fLf1HyGDMcjR1L50ZbjD0RTTEDUpOJYcHXu6HUK_Ds0x-KREY7rLNxu9" ) - return t.NewPackage("libxtrans", version, newFromGitLab( + return s.NewPackage(t, "libxtrans", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libxtrans", "xtrans-"+version, @@ -47,7 +47,7 @@ func (t Toolchain) newLibxtrans() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libxtrans] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibxtrans, Name: "libxtrans", @@ -55,15 +55,15 @@ func init() { Website: "https://gitlab.freedesktop.org/xorg/lib/libxtrans", ID: 13441, - } + }) } -func (t Toolchain) newXorgProto() (pkg.Artifact, string) { +func (t Toolchain) newXorgProto(s *S) (pkg.Artifact, string) { const ( version = "2025.1" checksum = "pTwJiBJHKA6Rgm3cVDXy1lyvXNIUzTRaukvvYdk1xWoJ_1G-Dfjm9MyewuyIjoHz" ) - return t.NewPackage("xorgproto", version, newFromGitLab( + return s.NewPackage(t, "xorgproto", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/proto/xorgproto", "xorgproto-"+version, @@ -78,7 +78,7 @@ func (t Toolchain) newXorgProto() (pkg.Artifact, string) { ), version } func init() { - artifactsM[XorgProto] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newXorgProto, Name: "xorgproto", @@ -86,15 +86,15 @@ func init() { Website: "https://gitlab.freedesktop.org/xorg/proto/xorgproto", ID: 17190, - } + }) } -func (t Toolchain) newLibXau() (pkg.Artifact, string) { +func (t Toolchain) newLibXau(s *S) (pkg.Artifact, string) { const ( version = "1.0.12" checksum = "G9AjnU_C160q814MCdjFOVt_mQz_pIt4wf4GNOQmGJS3UuuyMw53sfPvJ7WOqwXN" ) - return t.NewPackage("libXau", version, newTar( + return s.NewPackage(t, "libXau", version, newTar( "https://www.x.org/releases/individual/lib/"+ "libXau-"+version+".tar.gz", checksum, @@ -112,7 +112,7 @@ func (t Toolchain) newLibXau() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibXau] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibXau, Name: "libXau", @@ -124,15 +124,15 @@ func init() { }, ID: 1765, - } + }) } -func (t Toolchain) newXCBProto() (pkg.Artifact, string) { +func (t Toolchain) newXCBProto(s *S) (pkg.Artifact, string) { const ( version = "1.17.0" checksum = "_NtbKaJ_iyT7XiJz25mXQ7y-niTzE8sHPvLXZPcqtNoV_-vTzqkezJ8Hp2U1enCv" ) - return t.NewPackage("xcb-proto", version, newTar( + return s.NewPackage(t, "xcb-proto", version, newTar( "https://xcb.freedesktop.org/dist/xcb-proto-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -141,7 +141,7 @@ func (t Toolchain) newXCBProto() (pkg.Artifact, string) { ), version } func init() { - artifactsM[XCBProto] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newXCBProto, Name: "xcb-proto", @@ -149,15 +149,15 @@ func init() { Website: "https://gitlab.freedesktop.org/xorg/proto/xcbproto", ID: 13646, - } + }) } -func (t Toolchain) newXCB() (pkg.Artifact, string) { +func (t Toolchain) newXCB(s *S) (pkg.Artifact, string) { const ( version = "1.17.0" checksum = "hjjsc79LpWM_hZjNWbDDS6qRQUXREjjekS6UbUsDq-RR1_AjgNDxhRvZf-1_kzDd" ) - return t.NewPackage("xcb", version, newTar( + return s.NewPackage(t, "xcb", version, newTar( "https://xcb.freedesktop.org/dist/libxcb-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -170,7 +170,7 @@ func (t Toolchain) newXCB() (pkg.Artifact, string) { ), version } func init() { - artifactsM[XCB] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newXCB, Name: "xcb", @@ -183,15 +183,15 @@ func init() { }, ID: 1767, - } + }) } -func (t Toolchain) newLibxcbUtilKeysyms() (pkg.Artifact, string) { +func (t Toolchain) newLibxcbUtilKeysyms(s *S) (pkg.Artifact, string) { const ( version = "0.4.1" checksum = "-EEje12UEjtFBuIjb6Fy4cxEghV20BXwQ1BLvhtvSuVcrFkp_X-ZHRM48wAspXZ4" ) - return t.NewPackage("libxcb-util-keysyms", version, newTar( + return s.NewPackage(t, "libxcb-util-keysyms", version, newTar( "https://xcb.freedesktop.org/dist/xcb-util-keysyms-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -202,7 +202,7 @@ func (t Toolchain) newLibxcbUtilKeysyms() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibxcbUtilKeysyms] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibxcbUtilKeysyms, Name: "libxcb-util-keysyms", @@ -214,15 +214,15 @@ func init() { }, ID: 5168, - } + }) } -func (t Toolchain) newLibxcbUtilImage() (pkg.Artifact, string) { +func (t Toolchain) newLibxcbUtilImage(s *S) (pkg.Artifact, string) { const ( version = "0.4.1" checksum = "47pvXmFwaUBZIrJ4CE9xjTQIFyxeqoNAL-DshlB11GZ_jjI3G1a6KF0K7mtBQ1E7" ) - return t.NewPackage("libxcb-util-image", version, newTar( + return s.NewPackage(t, "libxcb-util-image", version, newTar( "https://xcb.freedesktop.org/dist/xcb-util-image-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -233,7 +233,7 @@ func (t Toolchain) newLibxcbUtilImage() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibxcbUtilImage] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibxcbUtilImage, Name: "libxcb-util-image", @@ -245,15 +245,15 @@ func init() { }, ID: 5168, - } + }) } -func (t Toolchain) newLibxcbUtilWM() (pkg.Artifact, string) { +func (t Toolchain) newLibxcbUtilWM(s *S) (pkg.Artifact, string) { const ( version = "0.4.2" checksum = "g0VZgMU9hcIgyXb3XxBR9xqsvUMBd9qt_Dbmwoj2h5y24pODr_S_D0DhRsuXUNjF" ) - return t.NewPackage("libxcb-util-wm", version, newTar( + return s.NewPackage(t, "libxcb-util-wm", version, newTar( "https://xcb.freedesktop.org/dist/xcb-util-wm-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -265,7 +265,7 @@ func (t Toolchain) newLibxcbUtilWM() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibxcbUtilWM] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibxcbUtilWM, Name: "libxcb-util-wm", @@ -277,15 +277,15 @@ func init() { }, ID: 5170, - } + }) } -func (t Toolchain) newLibxcbUtil() (pkg.Artifact, string) { +func (t Toolchain) newLibxcbUtil(s *S) (pkg.Artifact, string) { const ( version = "0.4.1" checksum = "YMXGQUQbF6PoEAGflvYnJYsLWjti6sL_ifY47wIXTNGVM3tQ8u41nkBYN4K1D5CD" ) - return t.NewPackage("libxcb-util", version, newTar( + return s.NewPackage(t, "libxcb-util", version, newTar( "https://www.x.org/releases/individual/xcb/"+ "xcb-util-"+version+".tar.gz", checksum, @@ -298,7 +298,7 @@ func (t Toolchain) newLibxcbUtil() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibxcbUtil] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibxcbUtil, Name: "libxcb-util", @@ -310,15 +310,15 @@ func init() { }, ID: 5165, - } + }) } -func (t Toolchain) newLibxcbRenderUtil() (pkg.Artifact, string) { +func (t Toolchain) newLibxcbRenderUtil(s *S) (pkg.Artifact, string) { const ( version = "0.3.10" checksum = "n08L8PyCoOd7v2vb6fSVq5Pq6JtteXVh9K2wrQMTNwGMf_Fjpi6i3HWF-TMFSVTI" ) - return t.NewPackage("libxcb-render-util", version, newTar( + return s.NewPackage(t, "libxcb-render-util", version, newTar( "https://www.x.org/releases/individual/xcb/"+ "xcb-util-renderutil-"+version+".tar.gz", checksum, @@ -331,7 +331,7 @@ func (t Toolchain) newLibxcbRenderUtil() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibxcbRenderUtil] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibxcbRenderUtil, Name: "libxcb-render-util", @@ -343,15 +343,15 @@ func init() { }, ID: 5169, - } + }) } -func (t Toolchain) newLibX11() (pkg.Artifact, string) { +func (t Toolchain) newLibX11(s *S) (pkg.Artifact, string) { const ( version = "1.8.13" checksum = "ARh-cuZY_U2v3DbPS1byc7ybh9NInZc-yav7SJiusk_C7408s058qWV83ocMd2pT" ) - return t.NewPackage("libX11", version, newFromGitLab( + return s.NewPackage(t, "libX11", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libx11", "libX11-"+version, @@ -375,7 +375,7 @@ func (t Toolchain) newLibX11() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibX11] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibX11, Name: "libX11", @@ -387,15 +387,15 @@ func init() { }, ID: 1764, - } + }) } -func (t Toolchain) newLibXext() (pkg.Artifact, string) { +func (t Toolchain) newLibXext(s *S) (pkg.Artifact, string) { const ( version = "1.3.7" checksum = "-0wvUDaucLPLNOrK1pcKhHNoO-5nUqQyyw6JAbhx65gRjuMiNKKaF2_tcrbC_KNq" ) - return t.NewPackage("libXext", version, newFromGitLab( + return s.NewPackage(t, "libXext", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libxext", "libXext-"+version, @@ -412,7 +412,7 @@ func (t Toolchain) newLibXext() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibXext] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibXext, Name: "libXext", @@ -424,15 +424,15 @@ func init() { }, ID: 1774, - } + }) } -func (t Toolchain) newLibXfixes() (pkg.Artifact, string) { +func (t Toolchain) newLibXfixes(s *S) (pkg.Artifact, string) { const ( version = "6.0.2" checksum = "_-kJfKZ7cE3NNeMr6NLSXCmsyP7MVEHVPLNfxatz2qBy3_fZJvPMQwZNOC9y6V5L" ) - return t.NewPackage("libXfixes", version, newFromGitLab( + return s.NewPackage(t, "libXfixes", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libxfixes", "libXfixes-"+version, @@ -450,7 +450,7 @@ func (t Toolchain) newLibXfixes() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibXfixes] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibXfixes, Name: "libXfixes", @@ -462,15 +462,15 @@ func init() { }, ID: 1775, - } + }) } -func (t Toolchain) newLibXrender() (pkg.Artifact, string) { +func (t Toolchain) newLibXrender(s *S) (pkg.Artifact, string) { const ( version = "0.9.12" checksum = "s6nWn-r17X_W-7anaS7wIcq5_Levf9zAigwJDD9Klp-cCJTVDhLo7GufuVOrxVP0" ) - return t.NewPackage("libXrender", version, newFromGitLab( + return s.NewPackage(t, "libXrender", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libxrender", "libXrender-"+version, @@ -487,7 +487,7 @@ func (t Toolchain) newLibXrender() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibXrender] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibXrender, Name: "libXrender", @@ -499,15 +499,15 @@ func init() { }, ID: 1789, - } + }) } -func (t Toolchain) newLibxshmfence() (pkg.Artifact, string) { +func (t Toolchain) newLibxshmfence(s *S) (pkg.Artifact, string) { const ( version = "1.3.3" checksum = "JamExTPg81By2fs3vWdeo_dzlpBQeAwXr2sDXeHJqm9XBoLW5pamiD6FgAWtAKyA" ) - return t.NewPackage("libxshmfence", version, newFromGitLab( + return s.NewPackage(t, "libxshmfence", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libxshmfence", "libxshmfence-"+version, @@ -524,7 +524,7 @@ func (t Toolchain) newLibxshmfence() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libxshmfence] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibxshmfence, Name: "libxshmfence", @@ -532,15 +532,15 @@ func init() { Website: "https://gitlab.freedesktop.org/xorg/lib/libxshmfence", ID: 1792, - } + }) } -func (t Toolchain) newLibXxf86vm() (pkg.Artifact, string) { +func (t Toolchain) newLibXxf86vm(s *S) (pkg.Artifact, string) { const ( version = "1.1.7" checksum = "mS4cgKWrwz6M1Lb6Qu4ZVh8Xn2Ca_4HXPxr3LDad4iYY1LecZfeLUPW1hkp6amX_" ) - return t.NewPackage("libXxf86vm", version, newFromGitLab( + return s.NewPackage(t, "libXxf86vm", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libxxf86vm", "libXxf86vm-"+version, @@ -558,7 +558,7 @@ func (t Toolchain) newLibXxf86vm() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibXxf86vm] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibXxf86vm, Name: "libXxf86vm", @@ -570,15 +570,15 @@ func init() { }, ID: 1799, - } + }) } -func (t Toolchain) newLibXrandr() (pkg.Artifact, string) { +func (t Toolchain) newLibXrandr(s *S) (pkg.Artifact, string) { const ( version = "1.5.5" checksum = "OF7C7VC5MwnFue9UX5UnIkG1PIWvn9bBMq6d4mVyJJ_rcF0w4Kedn1lfxBsXEKAP" ) - return t.NewPackage("libXrandr", version, newFromGitLab( + return s.NewPackage(t, "libXrandr", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libxrandr", "libXrandr-"+version, @@ -597,7 +597,7 @@ func (t Toolchain) newLibXrandr() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibXrandr] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibXrandr, Name: "libXrandr", @@ -610,15 +610,15 @@ func init() { }, ID: 1788, - } + }) } -func (t Toolchain) newFontUtil() (pkg.Artifact, string) { +func (t Toolchain) newFontUtil(s *S) (pkg.Artifact, string) { const ( version = "1.4.2" checksum = "YWiaIxkq-N2yNdbGa_RF1S0UkQq6xsgoRT73WZP2DOmyH_CJ0TAkpQjId657MQmh" ) - return t.NewPackage("font-util", version, newFromGitLab( + return s.NewPackage(t, "font-util", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/font/util", "font-util-"+version, @@ -634,7 +634,7 @@ func (t Toolchain) newFontUtil() (pkg.Artifact, string) { ), version } func init() { - artifactsM[FontUtil] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newFontUtil, Name: "font-util", @@ -642,15 +642,15 @@ func init() { Website: "https://gitlab.freedesktop.org/xorg/font/util", ID: 15055, - } + }) } -func (t Toolchain) newLibfontenc() (pkg.Artifact, string) { +func (t Toolchain) newLibfontenc(s *S) (pkg.Artifact, string) { const ( version = "1.1.9" checksum = "XqosXfbVwaoYzG9vVyRCl3eatwjASoJdLZsxQ37NN8S_jTyqNmbxpRSJGImJj7RS" ) - return t.NewPackage("libfontenc", version, newFromGitLab( + return s.NewPackage(t, "libfontenc", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libfontenc", "libfontenc-"+version, @@ -668,7 +668,7 @@ func (t Toolchain) newLibfontenc() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libfontenc] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibfontenc, Name: "libfontenc", @@ -676,15 +676,15 @@ func init() { Website: "https://gitlab.freedesktop.org/xorg/lib/libfontenc", ID: 1613, - } + }) } -func (t Toolchain) newLibxkbfile() (pkg.Artifact, string) { +func (t Toolchain) newLibxkbfile(s *S) (pkg.Artifact, string) { const ( version = "1.2.0" checksum = "WUtph1ab0AyATahlwljchBxZJcpjYrjyhCK9DW2VO0uXEXaN22GWmUaibcA83i_B" ) - return t.NewPackage("libxkbfile", version, newFromGitLab( + return s.NewPackage(t, "libxkbfile", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libxkbfile", "libxkbfile-"+version, @@ -694,7 +694,7 @@ func (t Toolchain) newLibxkbfile() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Libxkbfile] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibxkbfile, Name: "libxkbfile", @@ -706,15 +706,15 @@ func init() { }, ID: 1781, - } + }) } -func (t Toolchain) newXkbcomp() (pkg.Artifact, string) { +func (t Toolchain) newXkbcomp(s *S) (pkg.Artifact, string) { const ( version = "1.5.0" checksum = "ttICW8ZPbljI-nw2kknvxFhwFoDK40iAMBeZDLAHYsHf3B6UPO_zc9TpzZYRRyZH" ) - return t.NewPackage("xkbcomp", version, newFromGitLab( + return s.NewPackage(t, "xkbcomp", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/app/xkbcomp", "xkbcomp-"+version, @@ -732,7 +732,7 @@ func (t Toolchain) newXkbcomp() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Xkbcomp] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newXkbcomp, Name: "xkbcomp", @@ -744,15 +744,15 @@ func init() { }, ID: 15018, - } + }) } -func (t Toolchain) newLibXfont2() (pkg.Artifact, string) { +func (t Toolchain) newLibXfont2(s *S) (pkg.Artifact, string) { const ( version = "2.0.7" checksum = "jv9BZNA02493KB8j1lfAErF5SA3ZFcAhm3_UVJ--Bp1maz-vNprl_wXpkHApBi9M" ) - return t.NewPackage("libXfont2", version, newFromGitLab( + return s.NewPackage(t, "libXfont2", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libxfont", "libXfont2-"+version, @@ -772,7 +772,7 @@ func (t Toolchain) newLibXfont2() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibXfont2] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibXfont2, Name: "libXfont2", @@ -785,15 +785,15 @@ func init() { }, ID: 17165, - } + }) } -func (t Toolchain) newLibxcvt() (pkg.Artifact, string) { +func (t Toolchain) newLibxcvt(s *S) (pkg.Artifact, string) { const ( version = "0.1.3" checksum = "IfIA7SxlHMWh681e1AgYmZcRAfkZd5LlzmqcMRifNY5nNVRrUx_wnoaidAv0Yu03" ) - return t.NewPackage("libxcvt", version, newFromGitLab( + return s.NewPackage(t, "libxcvt", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libxcvt", "libxcvt-"+version, @@ -801,7 +801,7 @@ func (t Toolchain) newLibxcvt() (pkg.Artifact, string) { ), nil, (*MesonHelper)(nil)), version } func init() { - artifactsM[Libxcvt] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibxcvt, Name: "libxcvt", @@ -809,15 +809,15 @@ func init() { Website: "https://gitlab.freedesktop.org/xorg/lib/libxcvt", ID: 235147, - } + }) } -func (t Toolchain) newLibXdmcp() (pkg.Artifact, string) { +func (t Toolchain) newLibXdmcp(s *S) (pkg.Artifact, string) { const ( version = "1.1.5" checksum = "N6AJSv9pmeBedFn8KuSIOUGvTken4rkypNWVE2KfPlliwkfIbhfXrt5YHZkBMUHp" ) - return t.NewPackage("libXdmcp", version, newFromGitLab( + return s.NewPackage(t, "libXdmcp", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libxdmcp", "libXdmcp-"+version, @@ -834,7 +834,7 @@ func (t Toolchain) newLibXdmcp() (pkg.Artifact, string) { ), version } func init() { - artifactsM[LibXdmcp] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibXdmcp, Name: "libXdmcp", @@ -842,15 +842,15 @@ func init() { Website: "https://gitlab.freedesktop.org/xorg/lib/libxdmcp", ID: 1772, - } + }) } -func (t Toolchain) newXkeyboardConfig() (pkg.Artifact, string) { +func (t Toolchain) newXkeyboardConfig(s *S) (pkg.Artifact, string) { const ( version = "2.47" checksum = "E03PsPIaRrxPAuKgDGSQyPiJB49wXtyyvdV0lVx3_G-pelMMlaFLkoTDHTHG_qgA" ) - return t.NewPackage("xkeyboard-config", version, newFromGitLab( + return s.NewPackage(t, "xkeyboard-config", version, newFromGitLab( "gitlab.freedesktop.org", "xkeyboard-config/xkeyboard-config", "xkeyboard-config-"+version, @@ -860,7 +860,7 @@ func (t Toolchain) newXkeyboardConfig() (pkg.Artifact, string) { ), version } func init() { - artifactsM[XkeyboardConfig] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newXkeyboardConfig, Name: "xkeyboard-config", @@ -868,15 +868,15 @@ func init() { Website: "https://www.freedesktop.org/wiki/Software/XKeyboardConfig/", ID: 5191, - } + }) } -func (t Toolchain) newLibpciaccess() (pkg.Artifact, string) { +func (t Toolchain) newLibpciaccess(s *S) (pkg.Artifact, string) { const ( version = "0.19" checksum = "84H0c_U_7fMqo81bpuwyXGXtk4XvvFH_YK00UiOriv3YGsuAhmbo2IkFhmJnvu2x" ) - return t.NewPackage("libpciaccess", version, newFromGitLab( + return s.NewPackage(t, "libpciaccess", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/lib/libpciaccess", "libpciaccess-"+version, @@ -888,7 +888,7 @@ func (t Toolchain) newLibpciaccess() (pkg.Artifact, string) { }), version } func init() { - artifactsM[Libpciaccess] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newLibpciaccess, Name: "libpciaccess", @@ -900,15 +900,15 @@ func init() { }, ID: 1703, - } + }) } -func (t Toolchain) newXserver() (pkg.Artifact, string) { +func (t Toolchain) newXserver(s *S) (pkg.Artifact, string) { const ( version = "21.1.22" checksum = "prLT2wKecBu5m9w1ThgIt0GvenNpjKXoOyvTiMA1oQTlP0QHh6QiWsdvH3OmUwNo" ) - return t.NewPackage("xserver", version, newFromGitLab( + return s.NewPackage(t, "xserver", version, newFromGitLab( "gitlab.freedesktop.org", "xorg/xserver", "xorg-server-"+version, @@ -955,7 +955,7 @@ func (t Toolchain) newXserver() (pkg.Artifact, string) { ), version } func init() { - artifactsM[Xserver] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newXserver, Name: "xserver", @@ -984,5 +984,5 @@ func init() { }, ID: 5250, - } + }) } diff --git a/internal/rosa/xz.go b/internal/rosa/xz.go index a211bded..e74aadc0 100644 --- a/internal/rosa/xz.go +++ b/internal/rosa/xz.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newXZ() (pkg.Artifact, string) { +func (t Toolchain) newXZ(s *S) (pkg.Artifact, string) { const ( version = "5.8.3" checksum = "nCdayphPGdIdVoAZ2hR4vYlhDG9LeVKho_i7ealTud4Vxy5o5dWe0VwFlN7utuUL" ) - return t.NewPackage("xz", version, newFromGitHubRelease( + return s.NewPackage(t, "xz", version, newFromGitHubRelease( "tukaani-project/xz", "v"+version, "xz-"+version+".tar.bz2", @@ -18,7 +18,7 @@ func (t Toolchain) newXZ() (pkg.Artifact, string) { ), version } func init() { - artifactsM[XZ] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newXZ, Name: "xz", @@ -26,5 +26,5 @@ func init() { Website: "https://tukaani.org/xz/", ID: 5277, - } + }) } diff --git a/internal/rosa/zlib.go b/internal/rosa/zlib.go index aeb37611..92e0e6a4 100644 --- a/internal/rosa/zlib.go +++ b/internal/rosa/zlib.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newZlib() (pkg.Artifact, string) { +func (t Toolchain) newZlib(s *S) (pkg.Artifact, string) { const ( version = "1.3.2" checksum = "KHZrePe42vL2XvOUE3KlJkp1UgWhWkl0jjT_BOvFhuM4GzieEH9S7CioepOFVGYB" ) - return t.NewPackage("zlib", version, newTar( + return s.NewPackage(t, "zlib", version, newTar( "https://www.zlib.net/fossils/zlib-"+version+".tar.gz", checksum, pkg.TarGzip, @@ -28,7 +28,7 @@ func (t Toolchain) newZlib() (pkg.Artifact, string) { }), version } func init() { - artifactsM[Zlib] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newZlib, Name: "zlib", @@ -36,5 +36,5 @@ func init() { Website: "https://zlib.net/", ID: 5303, - } + }) } diff --git a/internal/rosa/zstd.go b/internal/rosa/zstd.go index 8aa40ac5..1b39a63e 100644 --- a/internal/rosa/zstd.go +++ b/internal/rosa/zstd.go @@ -2,12 +2,12 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newZstd() (pkg.Artifact, string) { +func (t Toolchain) newZstd(s *S) (pkg.Artifact, string) { const ( version = "1.5.7" checksum = "4XhfR7DwVkwo1R-TmYDAJOcx9YXv9WSFhcFUe3hWEAMmdMLPhFaznCqYIA19_xxV" ) - return t.NewPackage("zstd", version, newFromGitHubRelease( + return s.NewPackage(t, "zstd", version, newFromGitHubRelease( "facebook/zstd", "v"+version, "zstd-"+version+".tar.gz", @@ -29,7 +29,7 @@ ZSTD_BIN=/cure/programs/zstd /usr/src/zstd/tests/playTests.sh ), version } func init() { - artifactsM[Zstd] = Metadata{ + native.MustRegister(&Artifact{ f: Toolchain.newZstd, Name: "zstd", @@ -37,5 +37,5 @@ func init() { Website: "https://facebook.github.io/zstd/", ID: 12083, - } + }) }