From d2c6d486b06073aa88ee1912d3587f657cd57304 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Wed, 4 Mar 2026 18:01:18 +0900 Subject: [PATCH] internal/rosa: provide package metadata This had to be done out-of-band because there was no way to efficiently represent these within Artifact. Signed-off-by: Ophestra --- internal/rosa/acl.go | 28 ++- internal/rosa/all.go | 161 ++++---------- internal/rosa/all_test.go | 49 +++++ internal/rosa/argp-standalone.go | 14 +- internal/rosa/bzip2.go | 14 +- internal/rosa/cmake.go | 14 +- internal/rosa/curl.go | 14 +- internal/rosa/dtc.go | 14 +- internal/rosa/elfutils.go | 14 +- internal/rosa/fakeroot.go | 14 +- internal/rosa/flex.go | 14 +- internal/rosa/fuse.go | 14 +- internal/rosa/git.go | 14 +- internal/rosa/gnu.go | 350 ++++++++++++++++++++++++------- internal/rosa/go.go | 22 +- internal/rosa/gtk.go | 14 +- internal/rosa/hakurei.go | 24 ++- internal/rosa/images.go | 13 +- internal/rosa/kernel.go | 55 +++-- internal/rosa/kmod.go | 14 +- internal/rosa/libcap.go | 14 +- internal/rosa/libexpat.go | 14 +- internal/rosa/libffi.go | 14 +- internal/rosa/libgd.go | 14 +- internal/rosa/libpsl.go | 14 +- internal/rosa/libseccomp.go | 18 +- internal/rosa/libucontext.go | 14 +- internal/rosa/libxml2.go | 14 +- internal/rosa/libxslt.go | 14 +- internal/rosa/llvm.go | 12 +- internal/rosa/make.go | 14 +- internal/rosa/meson.go | 14 +- internal/rosa/mksh.go | 14 +- internal/rosa/musl-fts.go | 14 +- internal/rosa/musl-obstack.go | 14 +- internal/rosa/musl.go | 14 +- internal/rosa/ncurses.go | 14 +- internal/rosa/ninja.go | 14 +- internal/rosa/openssl.go | 14 +- internal/rosa/pcre2.go | 14 +- internal/rosa/perl.go | 154 +++++++++++--- internal/rosa/pkg-config.go | 14 +- internal/rosa/procps.go | 14 +- internal/rosa/python.go | 130 +++++++----- internal/rosa/qemu.go | 14 +- internal/rosa/rsync.go | 14 +- internal/rosa/squashfs.go | 14 +- internal/rosa/ssl.go | 39 +++- internal/rosa/stage0.go | 13 +- internal/rosa/tamago.go | 14 +- internal/rosa/toybox.go | 24 ++- internal/rosa/unzip.go | 14 +- internal/rosa/util-linux.go | 14 +- internal/rosa/wayland.go | 28 ++- internal/rosa/x.go | 42 +++- internal/rosa/xcb.go | 28 ++- internal/rosa/xz.go | 14 +- internal/rosa/zlib.go | 14 +- internal/rosa/zstd.go | 14 +- 59 files changed, 1286 insertions(+), 478 deletions(-) create mode 100644 internal/rosa/all_test.go diff --git a/internal/rosa/acl.go b/internal/rosa/acl.go index 5a33c0a..a924a0e 100644 --- a/internal/rosa/acl.go +++ b/internal/rosa/acl.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newAttr() pkg.Artifact { +func (t Toolchain) newAttr() (pkg.Artifact, string) { const ( version = "2.5.2" checksum = "YWEphrz6vg1sUMmHHVr1CRo53pFXRhq_pjN-AlG8UgwZK1y6m7zuDhxqJhD0SV0l" @@ -62,11 +62,19 @@ ln -s ../../system/bin/perl /usr/bin `, }, (*MakeHelper)(nil), Perl, - ) + ), version } -func init() { artifactsF[Attr] = Toolchain.newAttr } +func init() { + artifactsM[Attr] = Metadata{ + f: Toolchain.newAttr, -func (t Toolchain) newACL() pkg.Artifact { + Name: "attr", + Description: "Commands for Manipulating Filesystem Extended Attributes", + Website: "https://savannah.nongnu.org/projects/attr/", + } +} + +func (t Toolchain) newACL() (pkg.Artifact, string) { const ( version = "2.3.2" checksum = "-fY5nwH4K8ZHBCRXrzLdguPkqjKI6WIiGu4dBtrZ1o0t6AIU73w8wwJz_UyjIS0P" @@ -81,6 +89,14 @@ func (t Toolchain) newACL() pkg.Artifact { SkipCheck: true, }, Attr, - ) + ), version +} +func init() { + artifactsM[ACL] = Metadata{ + f: Toolchain.newACL, + + Name: "acl", + Description: "Commands for Manipulating POSIX Access Control Lists", + Website: "https://savannah.nongnu.org/projects/acl/", + } } -func init() { artifactsF[ACL] = Toolchain.newACL } diff --git a/internal/rosa/all.go b/internal/rosa/all.go index 22ba015..28a0ac9 100644 --- a/internal/rosa/all.go +++ b/internal/rosa/all.go @@ -120,7 +120,10 @@ const ( Zlib Zstd - buildcatrust + // _presetUnexportedStart is the first unexported preset. + _presetUnexportedStart + + buildcatrust = iota - 1 utilMacros // Musl is a standalone libc that does not depend on the toolchain. @@ -138,131 +141,59 @@ const ( _presetEnd ) -var ( - // artifactsF is an array of functions for the result of [PArtifact]. - artifactsF [_presetEnd]func(t Toolchain) pkg.Artifact +// 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) - // artifacts stores the result of artifactsF. - artifacts [_toolchainEnd][len(artifactsF)]pkg.Artifact + // Unique package name. + Name string `json:"name"` + // Short user-facing description. + Description string `json:"description"` + // Project home page. + Website string `json:"website,omitempty"` +} + +// Unversioned denotes an unversioned [PArtifact]. +const Unversioned = "\x00" + +var ( + // artifactsM is an array of [PArtifact] metadata. + artifactsM [_presetEnd]Metadata + + // artifacts stores the result of Metadata.f. + artifacts [_toolchainEnd][len(artifactsM)]pkg.Artifact + // versions stores the version of [PArtifact]. + versions [_toolchainEnd][len(artifactsM)]string // artifactsOnce is for lazy initialisation of artifacts. - artifactsOnce [_toolchainEnd][len(artifactsF)]sync.Once + artifactsOnce [_toolchainEnd][len(artifactsM)]sync.Once ) +// GetMetadata returns [Metadata] of a [PArtifact]. +func GetMetadata(p PArtifact) *Metadata { return &artifactsM[p] } + // Load returns the resulting [pkg.Artifact] of [PArtifact]. func (t Toolchain) Load(p PArtifact) pkg.Artifact { artifactsOnce[t][p].Do(func() { - artifacts[t][p] = artifactsF[p](t) + artifacts[t][p], versions[t][p] = artifactsM[p].f(t) }) return artifacts[t][p] } +// Version returns the version string of [PArtifact]. +func (t Toolchain) Version(p PArtifact) string { + artifactsOnce[t][p].Do(func() { + artifacts[t][p], versions[t][p] = artifactsM[p].f(t) + }) + return versions[t][p] +} + // ResolveName returns a [PArtifact] by name. func ResolveName(name string) (p PArtifact, ok bool) { - p, ok = map[string]PArtifact{ - "initramfs-image": ImageInitramfs, - - "kernel": Kernel, - "kernel-headers": KernelHeaders, - "kernel-source": KernelSource, - - "acl": ACL, - "argp-standalone": ArgpStandalone, - "attr": Attr, - "autoconf": Autoconf, - "automake": Automake, - "bc": BC, - "bash": Bash, - "binutils": Binutils, - "bison": Bison, - "bzip2": Bzip2, - "cmake": CMake, - "coreutils": Coreutils, - "curl": Curl, - "dtc": DTC, - "diffutils": Diffutils, - "elfutils": Elfutils, - "fakeroot": Fakeroot, - "findutils": Findutils, - "flex": Flex, - "fuse": Fuse, - "gmp": GMP, - "glib": GLib, - "gawk": Gawk, - "gen_init_cpio": GenInitCPIO, - "gettext": Gettext, - "git": Git, - "go": Go, - "gperf": Gperf, - "grep": Grep, - "gzip": Gzip, - "hakurei": Hakurei, - "hakurei-dist": HakureiDist, - "iniconfig": IniConfig, - "kmod": Kmod, - "libXau": LibXau, - "libcap": Libcap, - "libexpat": Libexpat, - "libiconv": Libiconv, - "libpsl": Libpsl, - "libseccomp": Libseccomp, - "libucontext": Libucontext, - "libxml2": Libxml2, - "libxslt": Libxslt, - "libffi": Libffi, - "libgd": Libgd, - "libtool": Libtool, - "m4": M4, - "mpc": MPC, - "mpfr": MPFR, - "make": Make, - "meson": Meson, - "mksh": Mksh, - "musl-fts": MuslFts, - "musl-obstack": MuslObstack, - "nss": NSS, - "nss-cacert": NSSCACert, - "ncurses": Ncurses, - "ninja": Ninja, - "openssl": OpenSSL, - "pcre2": PCRE2, - "packaging": Packaging, - "patch": Patch, - "perl": Perl, - "Locale::gettext": PerlLocaleGettext, - "MIME::Charset": PerlMIMECharset, - "Module::Build": PerlModuleBuild, - "Pod::Parser": PerlPodParser, - "SGMLS": PerlSGMLS, - "Term::ReadKey": PerlTermReadKey, - "Text::CharWidth": PerlTextCharWidth, - "Text::WrapI18N": PerlTextWrapI18N, - "Unicode::GCString": PerlUnicodeGCString, - "YAML::Tiny": PerlYAMLTiny, - "pkg-config": PkgConfig, - "pluggy": Pluggy, - "procps": Procps, - "pytest": PyTest, - "pygments": Pygments, - "python": Python, - "qemu": QEMU, - "rsync": Rsync, - "sed": Sed, - "setuptools": Setuptools, - "squashfs-tools": SquashfsTools, - "tamago": TamaGo, - "tar": Tar, - "texinfo": Texinfo, - "toybox": Toybox, - "unzip": Unzip, - "util-linux": UtilLinux, - "wayland": Wayland, - "wayland-protocols": WaylandProtocols, - "xcb": XCB, - "xcb-proto": XCBProto, - "xproto": Xproto, - "xz": XZ, - "zlib": Zlib, - "zstd": Zstd, - }[name] - return + 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 new file mode 100644 index 0000000..7187c25 --- /dev/null +++ b/internal/rosa/all_test.go @@ -0,0 +1,49 @@ +package rosa + +import "testing" + +func TestLoad(t *testing.T) { + t.Parallel() + + for i := range _presetEnd { + p := PArtifact(i) + t.Run(GetMetadata(p).Name, func(t *testing.T) { + t.Parallel() + + Std.Load(p) + }) + } +} + +func TestResolveName(t *testing.T) { + t.Parallel() + + for i := range _presetUnexportedStart { + p := i + name := GetMetadata(p).Name + t.Run(name, func(t *testing.T) { + t.Parallel() + + if got, ok := 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 := _presetUnexportedStart; i < _presetEnd; i++ { + p := i + name := GetMetadata(p).Name + t.Run(name, func(t *testing.T) { + t.Parallel() + + if got, ok := ResolveName(name); ok { + t.Fatalf("ResolveName: resolved unexported preset %d", got) + } + }) + } +} diff --git a/internal/rosa/argp-standalone.go b/internal/rosa/argp-standalone.go index 0e4da9d..32cb71c 100644 --- a/internal/rosa/argp-standalone.go +++ b/internal/rosa/argp-standalone.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newArgpStandalone() pkg.Artifact { +func (t Toolchain) newArgpStandalone() (pkg.Artifact, string) { const ( version = "1.3" checksum = "vtW0VyO2pJ-hPyYmDI2zwSLS8QL0sPAUKC1t3zNYbwN2TmsaE-fADhaVtNd3eNFl" @@ -23,6 +23,14 @@ install -D -m755 libargp.a /work/system/lib/libargp.a `, }, Diffutils, - ) + ), version +} +func init() { + artifactsM[ArgpStandalone] = Metadata{ + f: Toolchain.newArgpStandalone, + + Name: "argp-standalone", + Description: "hierarchical argument parsing library broken out from glibc", + Website: "http://www.lysator.liu.se/~nisse/misc/", + } } -func init() { artifactsF[ArgpStandalone] = Toolchain.newArgpStandalone } diff --git a/internal/rosa/bzip2.go b/internal/rosa/bzip2.go index e32b350..87c56b9 100644 --- a/internal/rosa/bzip2.go +++ b/internal/rosa/bzip2.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newBzip2() pkg.Artifact { +func (t Toolchain) newBzip2() (pkg.Artifact, string) { const ( version = "1.0.8" checksum = "cTLykcco7boom-s05H1JVsQi1AtChYL84nXkg_92Dm1Xt94Ob_qlMg_-NSguIK-c" @@ -23,6 +23,14 @@ func (t Toolchain) newBzip2() pkg.Artifact { "CC=cc", }, Install: "make PREFIX=/work/system install", - }) + }), version +} +func init() { + artifactsM[Bzip2] = Metadata{ + f: Toolchain.newBzip2, + + Name: "bzip2", + Description: "a freely available, patent free, high-quality data compressor", + Website: "https://sourceware.org/bzip2/", + } } -func init() { artifactsF[Bzip2] = Toolchain.newBzip2 } diff --git a/internal/rosa/cmake.go b/internal/rosa/cmake.go index 203814b..27956b0 100644 --- a/internal/rosa/cmake.go +++ b/internal/rosa/cmake.go @@ -8,7 +8,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newCMake() pkg.Artifact { +func (t Toolchain) newCMake() (pkg.Artifact, string) { const ( version = "4.2.3" checksum = "Y4uYGnLrDQX78UdzH7fMzfok46Nt_1taDIHSmqgboU1yFi6f0iAXBDegMCu4eS-J" @@ -102,9 +102,17 @@ index 2ead810437..f85cbb8b1c 100644 }, }, KernelHeaders, - ) + ), version +} +func init() { + artifactsM[CMake] = Metadata{ + f: Toolchain.newCMake, + + Name: "cmake", + Description: "cross-platform, open-source build system", + Website: "https://cmake.org/", + } } -func init() { artifactsF[CMake] = Toolchain.newCMake } // CMakeHelper is the [CMake] build system helper. type CMakeHelper struct { diff --git a/internal/rosa/curl.go b/internal/rosa/curl.go index bd8c790..ac1050a 100644 --- a/internal/rosa/curl.go +++ b/internal/rosa/curl.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newCurl() pkg.Artifact { +func (t Toolchain) newCurl() (pkg.Artifact, string) { const ( version = "8.18.0" checksum = "YpOolP_sx1DIrCEJ3elgVAu0wTLDS-EZMZFvOP0eha7FaLueZUlEpuMwDzJNyi7i" @@ -25,6 +25,14 @@ func (t Toolchain) newCurl() pkg.Artifact { Libpsl, OpenSSL, - ) + ), version +} +func init() { + artifactsM[Curl] = Metadata{ + f: Toolchain.newCurl, + + Name: "curl", + Description: "command line tool and library for transferring data with URLs", + Website: "https://curl.se/", + } } -func init() { artifactsF[Curl] = Toolchain.newCurl } diff --git a/internal/rosa/dtc.go b/internal/rosa/dtc.go index e503060..17d4040 100644 --- a/internal/rosa/dtc.go +++ b/internal/rosa/dtc.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newDTC() pkg.Artifact { +func (t Toolchain) newDTC() (pkg.Artifact, string) { const ( version = "1.7.2" checksum = "vUoiRynPyYRexTpS6USweT5p4SVHvvVJs8uqFkkVD-YnFjwf6v3elQ0-Etrh00Dt" @@ -28,6 +28,14 @@ func (t Toolchain) newDTC() pkg.Artifact { M4, Coreutils, Diffutils, - ) + ), version +} +func init() { + artifactsM[DTC] = Metadata{ + f: Toolchain.newDTC, + + Name: "dtc", + Description: "The Device Tree Compiler", + Website: "https://git.kernel.org/pub/scm/utils/dtc/dtc.git/", + } } -func init() { artifactsF[DTC] = Toolchain.newDTC } diff --git a/internal/rosa/elfutils.go b/internal/rosa/elfutils.go index 5c47eba..ab8395e 100644 --- a/internal/rosa/elfutils.go +++ b/internal/rosa/elfutils.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newElfutils() pkg.Artifact { +func (t Toolchain) newElfutils() (pkg.Artifact, string) { const ( version = "0.194" checksum = "Q3XUygUPv9vR1TkWucwUsQ8Kb1_F6gzk-KMPELr3cC_4AcTrprhVPMvN0CKkiYRa" @@ -36,6 +36,14 @@ func (t Toolchain) newElfutils() pkg.Artifact { MuslFts, MuslObstack, KernelHeaders, - ) + ), version +} +func init() { + artifactsM[Elfutils] = Metadata{ + f: Toolchain.newElfutils, + + Name: "elfutils", + Description: "utilities and libraries to handle ELF files and DWARF data", + Website: "https://sourceware.org/elfutils/", + } } -func init() { artifactsF[Elfutils] = Toolchain.newElfutils } diff --git a/internal/rosa/fakeroot.go b/internal/rosa/fakeroot.go index f97b466..173e3f5 100644 --- a/internal/rosa/fakeroot.go +++ b/internal/rosa/fakeroot.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newFakeroot() pkg.Artifact { +func (t Toolchain) newFakeroot() (pkg.Artifact, string) { const ( version = "1.37.2" checksum = "4ve-eDqVspzQ6VWDhPS0NjW3aSenBJcPAJq_BFT7OOFgUdrQzoTBxZWipDAGWxF8" @@ -46,6 +46,14 @@ index f135ad9..85c784c 100644 Attr, Libcap, KernelHeaders, - ) + ), version +} +func init() { + artifactsM[Fakeroot] = Metadata{ + f: Toolchain.newFakeroot, + + Name: "fakeroot", + Description: "tool for simulating superuser privileges", + Website: "https://salsa.debian.org/clint/fakeroot", + } } -func init() { artifactsF[Fakeroot] = Toolchain.newFakeroot } diff --git a/internal/rosa/flex.go b/internal/rosa/flex.go index e6fef28..fae7768 100644 --- a/internal/rosa/flex.go +++ b/internal/rosa/flex.go @@ -4,7 +4,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newFlex() pkg.Artifact { +func (t Toolchain) newFlex() (pkg.Artifact, string) { const ( version = "2.6.4" checksum = "p9POjQU7VhgOf3x5iFro8fjhy0NOanvA7CTeuWS_veSNgCixIJshTrWVkc5XLZkB" @@ -16,6 +16,14 @@ func (t Toolchain) newFlex() pkg.Artifact { pkg.TarGzip, ), nil, (*MakeHelper)(nil), M4, - ) + ), version +} +func init() { + artifactsM[Flex] = Metadata{ + f: Toolchain.newFlex, + + Name: "flex", + Description: "scanner generator for lexing in C and C++", + Website: "https://github.com/westes/flex/", + } } -func init() { artifactsF[Flex] = Toolchain.newFlex } diff --git a/internal/rosa/fuse.go b/internal/rosa/fuse.go index 1378174..9d2aaad 100644 --- a/internal/rosa/fuse.go +++ b/internal/rosa/fuse.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newFuse() pkg.Artifact { +func (t Toolchain) newFuse() (pkg.Artifact, string) { const ( version = "3.18.1" checksum = "COb-BgJRWXLbt9XUkNeuiroQizpMifXqxgieE1SlkMXhs_WGSyJStrmyewAw2hd6" @@ -31,6 +31,14 @@ func (t Toolchain) newFuse() pkg.Artifact { PyTest, KernelHeaders, - ) + ), version +} +func init() { + artifactsM[Fuse] = Metadata{ + f: Toolchain.newFuse, + + Name: "fuse", + Description: "the reference implementation of the Linux FUSE interface", + Website: "https://github.com/libfuse/libfuse/", + } } -func init() { artifactsF[Fuse] = Toolchain.newFuse } diff --git a/internal/rosa/git.go b/internal/rosa/git.go index 1880af0..d1cbf1e 100644 --- a/internal/rosa/git.go +++ b/internal/rosa/git.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newGit() pkg.Artifact { +func (t Toolchain) newGit() (pkg.Artifact, string) { const ( version = "2.52.0" checksum = "uH3J1HAN_c6PfGNJd2OBwW4zo36n71wmkdvityYnrh8Ak0D1IifiAvEWz9Vi9DmS" @@ -63,9 +63,17 @@ disable_test t2200-add-update Curl, OpenSSL, Libexpat, - ) + ), version +} +func init() { + artifactsM[Git] = Metadata{ + f: Toolchain.newGit, + + Name: "git", + Description: "distributed version control system", + Website: "https://www.git-scm.com/", + } } -func init() { artifactsF[Git] = Toolchain.newGit } // NewViaGit returns a [pkg.Artifact] for cloning a git repository. func (t Toolchain) NewViaGit( diff --git a/internal/rosa/gnu.go b/internal/rosa/gnu.go index 328a372..f3f35ec 100644 --- a/internal/rosa/gnu.go +++ b/internal/rosa/gnu.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newM4() pkg.Artifact { +func (t Toolchain) newM4() (pkg.Artifact, string) { const ( version = "1.4.20" checksum = "RT0_L3m4Co86bVBY3lCFAEs040yI1WdeNmRylFpah8IZovTm6O4wI7qiHJN3qsW9" @@ -18,11 +18,19 @@ chmod +w tests/test-c32ispunct.sh && echo '#!/bin/sh' > tests/test-c32ispunct.sh `, }, (*MakeHelper)(nil), Diffutils, - ) + ), version } -func init() { artifactsF[M4] = Toolchain.newM4 } +func init() { + artifactsM[M4] = Metadata{ + f: Toolchain.newM4, -func (t Toolchain) newBison() pkg.Artifact { + Name: "m4", + Description: "a macro processor with GNU extensions", + Website: "https://www.gnu.org/software/m4/", + } +} + +func (t Toolchain) newBison() (pkg.Artifact, string) { const ( version = "3.8.2" checksum = "BhRM6K7URj1LNOkIDCFDctSErLS-Xo5d9ba9seg10o6ACrgC1uNhED7CQPgIY29Y" @@ -35,11 +43,19 @@ func (t Toolchain) newBison() pkg.Artifact { M4, Diffutils, Sed, - ) + ), version } -func init() { artifactsF[Bison] = Toolchain.newBison } +func init() { + artifactsM[Bison] = Metadata{ + f: Toolchain.newBison, -func (t Toolchain) newSed() pkg.Artifact { + Name: "bison", + Description: "a general-purpose parser generator", + Website: "https://www.gnu.org/software/bison/", + } +} + +func (t Toolchain) newSed() (pkg.Artifact, string) { const ( version = "4.9" checksum = "pe7HWH4PHNYrazOTlUoE1fXmhn2GOPFN_xE62i0llOr3kYGrH1g2_orDz0UtZ9Nt" @@ -50,11 +66,19 @@ func (t Toolchain) newSed() pkg.Artifact { pkg.TarGzip, ), nil, (*MakeHelper)(nil), Diffutils, - ) + ), version } -func init() { artifactsF[Sed] = Toolchain.newSed } +func init() { + artifactsM[Sed] = Metadata{ + f: Toolchain.newSed, -func (t Toolchain) newAutoconf() pkg.Artifact { + Name: "sed", + Description: "a non-interactive command-line text editor", + Website: "https://www.gnu.org/software/sed/", + } +} + +func (t Toolchain) newAutoconf() (pkg.Artifact, string) { const ( version = "2.72" checksum = "-c5blYkC-xLDer3TWEqJTyh1RLbOd1c5dnRLKsDnIrg_wWNOLBpaqMY8FvmUFJ33" @@ -75,11 +99,19 @@ func (t Toolchain) newAutoconf() pkg.Artifact { Perl, Bash, Diffutils, - ) + ), version } -func init() { artifactsF[Autoconf] = Toolchain.newAutoconf } +func init() { + artifactsM[Autoconf] = Metadata{ + f: Toolchain.newAutoconf, -func (t Toolchain) newAutomake() pkg.Artifact { + Name: "autoconf", + Description: "M4 macros to produce self-contained configure script", + Website: "https://www.gnu.org/software/autoconf/", + } +} + +func (t Toolchain) newAutomake() (pkg.Artifact, string) { const ( version = "1.18.1" checksum = "FjvLG_GdQP7cThTZJLDMxYpRcKdpAVG-YDs1Fj1yaHlSdh_Kx6nRGN14E0r_BjcG" @@ -107,11 +139,19 @@ test_disable '#!/bin/sh' t/pr9.sh Gzip, Autoconf, Diffutils, - ) + ), version } -func init() { artifactsF[Automake] = Toolchain.newAutomake } +func init() { + artifactsM[Automake] = Metadata{ + f: Toolchain.newAutomake, -func (t Toolchain) newLibtool() pkg.Artifact { + Name: "automake", + Description: "a tool for automatically generating Makefile.in files", + Website: "https://www.gnu.org/software/automake/", + } +} + +func (t Toolchain) newLibtool() (pkg.Artifact, string) { const ( version = "2.5.4" checksum = "pa6LSrQggh8mSJHQfwGjysAApmZlGJt8wif2cCLzqAAa2jpsTY0jZ-6stS3BWZ2Q" @@ -128,11 +168,19 @@ func (t Toolchain) newLibtool() pkg.Artifact { }, M4, Diffutils, - ) + ), version } -func init() { artifactsF[Libtool] = Toolchain.newLibtool } +func init() { + artifactsM[Libtool] = Metadata{ + f: Toolchain.newLibtool, -func (t Toolchain) newGzip() pkg.Artifact { + Name: "libtool", + Description: "a generic library support script", + Website: "https://www.gnu.org/software/libtool/", + } +} + +func (t Toolchain) newGzip() (pkg.Artifact, string) { const ( version = "1.14" checksum = "NWhjUavnNfTDFkZJyAUonL9aCOak8GVajWX2OMlzpFnuI0ErpBFyj88mz2xSjz0q" @@ -144,11 +192,19 @@ func (t Toolchain) newGzip() pkg.Artifact { ), nil, &MakeHelper{ // dependency loop SkipCheck: true, - }) + }), version } -func init() { artifactsF[Gzip] = Toolchain.newGzip } +func init() { + artifactsM[Gzip] = Metadata{ + f: Toolchain.newGzip, -func (t Toolchain) newGettext() pkg.Artifact { + Name: "gzip", + Description: "a popular data compression program", + Website: "https://www.gnu.org/software/gzip/", + } +} + +func (t Toolchain) newGettext() (pkg.Artifact, string) { const ( version = "1.0" checksum = "3MasKeEdPeFEgWgzsBKk7JqWqql1wEMbgPmzAfs-mluyokoW0N8oQVxPQoOnSdgC" @@ -180,11 +236,19 @@ touch gettext-tools/autotools/archive.dir.tar Sed, KernelHeaders, - ) + ), version } -func init() { artifactsF[Gettext] = Toolchain.newGettext } +func init() { + artifactsM[Gettext] = Metadata{ + f: Toolchain.newGettext, -func (t Toolchain) newDiffutils() pkg.Artifact { + Name: "gettext", + Description: "tools for producing multi-lingual messages", + Website: "https://www.gnu.org/software/gettext/", + } +} + +func (t Toolchain) newDiffutils() (pkg.Artifact, string) { const ( version = "3.12" checksum = "9J5VAq5oA7eqwzS1Yvw-l3G5o-TccUrNQR3PvyB_lgdryOFAfxtvQfKfhdpquE44" @@ -203,11 +267,19 @@ test_disable 'int main(){return 0;}' gnulib-tests/test-c32ispunct.c test_disable '#!/bin/sh' tests/cmp `, Flag: TEarly, - }, (*MakeHelper)(nil)) + }, (*MakeHelper)(nil)), version } -func init() { artifactsF[Diffutils] = Toolchain.newDiffutils } +func init() { + artifactsM[Diffutils] = Metadata{ + f: Toolchain.newDiffutils, -func (t Toolchain) newPatch() pkg.Artifact { + Name: "diffutils", + Description: "several programs related to finding differences between files", + Website: "https://www.gnu.org/software/diffutils/", + } +} + +func (t Toolchain) newPatch() (pkg.Artifact, string) { const ( version = "2.8" checksum = "MA0BQc662i8QYBD-DdGgyyfTwaeALZ1K0yusV9rAmNiIsQdX-69YC4t9JEGXZkeR" @@ -225,11 +297,19 @@ test_disable '#!/bin/sh' tests/ed-style test_disable '#!/bin/sh' tests/need-filename `, Flag: TEarly, - }, (*MakeHelper)(nil)) + }, (*MakeHelper)(nil)), version } -func init() { artifactsF[Patch] = Toolchain.newPatch } +func init() { + artifactsM[Patch] = Metadata{ + f: Toolchain.newPatch, -func (t Toolchain) newBash() pkg.Artifact { + Name: "patch", + Description: "a program to apply diff output to files", + Website: "https://savannah.gnu.org/projects/patch/", + } +} + +func (t Toolchain) newBash() (pkg.Artifact, string) { const ( version = "5.3" checksum = "4LQ_GRoB_ko-Ih8QPf_xRKA02xAm_TOxQgcJLmFDT6udUPxTAWrsj-ZNeuTusyDq" @@ -245,11 +325,19 @@ func (t Toolchain) newBash() pkg.Artifact { Configure: [][2]string{ {"without-bash-malloc"}, }, - }) + }), version } -func init() { artifactsF[Bash] = Toolchain.newBash } +func init() { + artifactsM[Bash] = Metadata{ + f: Toolchain.newBash, -func (t Toolchain) newCoreutils() pkg.Artifact { + Name: "bash", + Description: "the Bourne Again SHell", + Website: "https://www.gnu.org/software/bash/", + } +} + +func (t Toolchain) newCoreutils() (pkg.Artifact, string) { const ( version = "9.9" checksum = "B1_TaXj1j5aiVIcazLWu8Ix03wDV54uo2_iBry4qHG6Y-9bjDpUPlkNLmU_3Nvw6" @@ -281,11 +369,19 @@ test_disable 'int main(){return 0;}' gnulib-tests/test-lchown.c Bash, KernelHeaders, - ) + ), version } -func init() { artifactsF[Coreutils] = Toolchain.newCoreutils } +func init() { + artifactsM[Coreutils] = Metadata{ + f: Toolchain.newCoreutils, -func (t Toolchain) newTexinfo() pkg.Artifact { + Name: "coreutils", + Description: "the basic file, shell and text manipulation utilities", + Website: "https://www.gnu.org/software/coreutils/", + } +} + +func (t Toolchain) newTexinfo() (pkg.Artifact, string) { const ( version = "7.2" checksum = "9EelM5b7QGMAY5DKrAm_El8lofBGuFWlaBPSBhh7l_VQE8054MBmC0KBvGrABqjv" @@ -299,11 +395,19 @@ func (t Toolchain) newTexinfo() pkg.Artifact { SkipCheck: true, }, Perl, - ) + ), version } -func init() { artifactsF[Texinfo] = Toolchain.newTexinfo } +func init() { + artifactsM[Texinfo] = Metadata{ + f: Toolchain.newTexinfo, -func (t Toolchain) newGperf() pkg.Artifact { + Name: "texinfo", + Description: "the GNU square-wheel-reinvension of man pages", + Website: "https://www.gnu.org/software/texinfo/", + } +} + +func (t Toolchain) newGperf() (pkg.Artifact, string) { const ( version = "3.3" checksum = "RtIy9pPb_Bb8-31J2Nw-rRGso2JlS-lDlVhuNYhqR7Nt4xM_nObznxAlBMnarJv7" @@ -314,11 +418,19 @@ func (t Toolchain) newGperf() pkg.Artifact { pkg.TarGzip, ), nil, (*MakeHelper)(nil), Diffutils, - ) + ), version } -func init() { artifactsF[Gperf] = Toolchain.newGperf } +func init() { + artifactsM[Gperf] = Metadata{ + f: Toolchain.newGperf, -func (t Toolchain) newGawk() pkg.Artifact { + Name: "gperf", + Description: "a perfect hash function generator", + Website: "https://www.gnu.org/software/gperf/", + } +} + +func (t Toolchain) newGawk() (pkg.Artifact, string) { const ( version = "5.3.2" checksum = "uIs0d14h_d2DgMGYwrPtegGNyt_bxzG3D6Fe-MmExx_pVoVkQaHzrtmiXVr6NHKk" @@ -332,11 +444,19 @@ func (t Toolchain) newGawk() pkg.Artifact { }, &MakeHelper{ // dependency loop SkipCheck: true, - }) + }), version } -func init() { artifactsF[Gawk] = Toolchain.newGawk } +func init() { + artifactsM[Gawk] = Metadata{ + f: Toolchain.newGawk, -func (t Toolchain) newGrep() pkg.Artifact { + Name: "gawk", + Description: "an implementation of awk with GNU extensions", + Website: "https://www.gnu.org/software/gawk/", + } +} + +func (t Toolchain) newGrep() (pkg.Artifact, string) { const ( version = "3.12" checksum = "qMB4RjaPNRRYsxix6YOrjE8gyAT1zVSTy4nW4wKW9fqa0CHYAuWgPwDTirENzm_1" @@ -355,11 +475,19 @@ test_disable 'int main(){return 0;}' gnulib-tests/test-c32ispunct.c `, }, (*MakeHelper)(nil), Diffutils, - ) + ), version } -func init() { artifactsF[Grep] = Toolchain.newGrep } +func init() { + artifactsM[Grep] = Metadata{ + f: Toolchain.newGrep, -func (t Toolchain) newFindutils() pkg.Artifact { + Name: "grep", + Description: "searches input for lines containing a match to a pattern", + Website: "https://www.gnu.org/software/grep/", + } +} + +func (t Toolchain) newFindutils() (pkg.Artifact, string) { const ( version = "4.10.0" checksum = "ZXABdNBQXL7QjTygynRRTdXYWxQKZ0Wn5eMd3NUnxR0xaS0u0VfcKoTlbo50zxv6" @@ -377,11 +505,19 @@ echo 'int main(){return 0;}' > tests/xargs/test-sigusr.c Diffutils, XZ, Sed, - ) + ), version } -func init() { artifactsF[Findutils] = Toolchain.newFindutils } +func init() { + artifactsM[Findutils] = Metadata{ + f: Toolchain.newFindutils, -func (t Toolchain) newBC() pkg.Artifact { + Name: "findutils", + Description: "the basic directory searching utilities", + Website: "https://www.gnu.org/software/findutils/", + } +} + +func (t Toolchain) newBC() (pkg.Artifact, string) { const ( version = "1.08.2" checksum = "8h6f3hjV80XiFs6v9HOPF2KEyg1kuOgn5eeFdVspV05ODBVQss-ey5glc8AmneLy" @@ -397,11 +533,19 @@ func (t Toolchain) newBC() pkg.Artifact { }, (*MakeHelper)(nil), Perl, Texinfo, - ) + ), version } -func init() { artifactsF[BC] = Toolchain.newBC } +func init() { + artifactsM[BC] = Metadata{ + f: Toolchain.newBC, -func (t Toolchain) newLibiconv() pkg.Artifact { + Name: "bc", + Description: "an arbitrary precision numeric processing language", + Website: "https://www.gnu.org/software/bc/", + } +} + +func (t Toolchain) newLibiconv() (pkg.Artifact, string) { const ( version = "1.18" checksum = "iV5q3VxP5VPdJ-X7O5OQI4fGm8VjeYb5viLd1L3eAHg26bbHb2_Qn63XPF3ucVZr" @@ -410,11 +554,19 @@ func (t Toolchain) newLibiconv() pkg.Artifact { nil, "https://ftpmirror.gnu.org/gnu/libiconv/libiconv-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ), nil, (*MakeHelper)(nil)) + ), nil, (*MakeHelper)(nil)), version } -func init() { artifactsF[Libiconv] = Toolchain.newLibiconv } +func init() { + artifactsM[Libiconv] = Metadata{ + f: Toolchain.newLibiconv, -func (t Toolchain) newTar() pkg.Artifact { + Name: "libiconv", + Description: "iconv implementation independent of glibc", + Website: "https://www.gnu.org/software/libiconv/", + } +} + +func (t Toolchain) newTar() (pkg.Artifact, string) { const ( version = "1.35" checksum = "zSaoSlVUDW0dSfm4sbL4FrXLFR8U40Fh3zY5DWhR5NCIJ6GjU6Kc4VZo2-ZqpBRA" @@ -442,11 +594,19 @@ func (t Toolchain) newTar() pkg.Artifact { Gzip, Bzip2, Zstd, - ) + ), version } -func init() { artifactsF[Tar] = Toolchain.newTar } +func init() { + artifactsM[Tar] = Metadata{ + f: Toolchain.newTar, -func (t Toolchain) newBinutils() pkg.Artifact { + Name: "tar", + Description: "provides the ability to create tar archives", + Website: "https://www.gnu.org/software/tar/", + } +} + +func (t Toolchain) newBinutils() (pkg.Artifact, string) { const ( version = "2.45" checksum = "hlLtqqHDmzAT2OQVHaKEd_io2DGFvJkaeS-igBuK8bRRir7LUKGHgHYNkDVKaHTT" @@ -457,11 +617,19 @@ func (t Toolchain) newBinutils() pkg.Artifact { pkg.TarBzip2, ), nil, (*MakeHelper)(nil), Bash, - ) + ), version } -func init() { artifactsF[Binutils] = Toolchain.newBinutils } +func init() { + artifactsM[Binutils] = Metadata{ + f: Toolchain.newBinutils, -func (t Toolchain) newGMP() pkg.Artifact { + Name: "binutils", + Description: "a collection of binary tools", + Website: "https://www.gnu.org/software/binutils/", + } +} + +func (t Toolchain) newGMP() (pkg.Artifact, string) { const ( version = "6.3.0" checksum = "yrgbgEDWKDdMWVHh7gPbVl56-sRtVVhfvv0M_LX7xMUUk_mvZ1QOJEAnt7g4i3k5" @@ -473,11 +641,19 @@ func (t Toolchain) newGMP() pkg.Artifact { pkg.TarBzip2, ), nil, (*MakeHelper)(nil), M4, - ) + ), version } -func init() { artifactsF[GMP] = Toolchain.newGMP } +func init() { + artifactsM[GMP] = Metadata{ + f: Toolchain.newGMP, -func (t Toolchain) newMPFR() pkg.Artifact { + Name: "gmp", + Description: "a free library for arbitrary precision arithmetic", + Website: "https://gmplib.org/", + } +} + +func (t Toolchain) newMPFR() (pkg.Artifact, string) { const ( version = "4.2.2" checksum = "wN3gx0zfIuCn9r3VAn_9bmfvAYILwrRfgBjYSD1IjLqyLrLojNN5vKyQuTE9kA-B" @@ -489,11 +665,19 @@ func (t Toolchain) newMPFR() pkg.Artifact { pkg.TarBzip2, ), nil, (*MakeHelper)(nil), GMP, - ) + ), version } -func init() { artifactsF[MPFR] = Toolchain.newMPFR } +func init() { + artifactsM[MPFR] = Metadata{ + f: Toolchain.newMPFR, -func (t Toolchain) newMPC() pkg.Artifact { + Name: "mpfr", + Description: "a C library for multiple-precision floating-point computations", + Website: "https://www.mpfr.org/", + } +} + +func (t Toolchain) newMPC() (pkg.Artifact, string) { const ( version = "1.3.1" checksum = "o8r8K9R4x7PuRx0-JE3-bC5jZQrtxGV2nkB773aqJ3uaxOiBDCID1gKjPaaDxX4V" @@ -506,11 +690,19 @@ func (t Toolchain) newMPC() pkg.Artifact { ), nil, (*MakeHelper)(nil), GMP, MPFR, - ) + ), version } -func init() { artifactsF[MPC] = Toolchain.newMPC } +func init() { + artifactsM[MPC] = Metadata{ + f: Toolchain.newMPC, -func (t Toolchain) newGCC() pkg.Artifact { + Name: "mpc", + Description: "a C library for the arithmetic of complex numbers", + Website: "https://www.multiprecision.org/", + } +} + +func (t Toolchain) newGCC() (pkg.Artifact, string) { const ( version = "15.2.0" checksum = "TXJ5WrbXlGLzy1swghQTr4qxgDCyIZFgJry51XEPTBZ8QYbVmFeB4lZbSMtPJ-a1" @@ -710,6 +902,14 @@ ln -s system/lib /work/ Zlib, Libucontext, KernelHeaders, - ) + ), version +} +func init() { + artifactsM[gcc] = Metadata{ + f: Toolchain.newGCC, + + Name: "gcc", + Description: "The GNU Compiler Collection", + Website: "https://www.gnu.org/software/gcc/", + } } -func init() { artifactsF[gcc] = Toolchain.newGCC } diff --git a/internal/rosa/go.go b/internal/rosa/go.go index 475eb08..6278dfb 100644 --- a/internal/rosa/go.go +++ b/internal/rosa/go.go @@ -62,7 +62,7 @@ ln -s \ ))) } -func (t Toolchain) newGoLatest() pkg.Artifact { +func (t Toolchain) newGoLatest() (pkg.Artifact, string) { var ( bootstrapEnv []string bootstrapExtra []pkg.Artifact @@ -153,9 +153,13 @@ rm \ `, go123, ) + const ( + version = "1.26.0" + checksum = "uHLcrgBc0NMcyTMDLRNAZIcOx0RyQlyekSl9xbWSwj3esEFWJysYLfLa3S8p39Nh" + ) return t.newGo( - "1.26.0", - "uHLcrgBc0NMcyTMDLRNAZIcOx0RyQlyekSl9xbWSwj3esEFWJysYLfLa3S8p39Nh", + version, + checksum, finalEnv, ` sed -i \ 's,/lib/ld-musl-`+linuxArch()+`.so.1,/system/bin/linker,' \ @@ -164,6 +168,14 @@ sed -i \ rm \ os/root_unix_test.go `, go125, - ) + ), version +} +func init() { + artifactsM[Go] = Metadata{ + f: Toolchain.newGoLatest, + + Name: "go", + Description: "the Go programming language toolchain", + Website: "https://go.dev/", + } } -func init() { artifactsF[Go] = Toolchain.newGoLatest } diff --git a/internal/rosa/gtk.go b/internal/rosa/gtk.go index 06449ca..eaa31eb 100644 --- a/internal/rosa/gtk.go +++ b/internal/rosa/gtk.go @@ -7,7 +7,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newGLib() pkg.Artifact { +func (t Toolchain) newGLib() (pkg.Artifact, string) { const ( version = "2.86.4" checksum = "AfTjBrrxtXXPL6dFa1LfTe40PyPSth62CoIkM5m_VJTUngGLOFHw6I4XE7RGQE8G" @@ -46,6 +46,14 @@ func (t Toolchain) newGLib() pkg.Artifact { PCRE2, Libffi, Zlib, - ) + ), version +} +func init() { + artifactsM[GLib] = Metadata{ + f: Toolchain.newGLib, + + Name: "glib", + Description: "the GNU library of miscellaneous stuff", + Website: "https://gitlab.gnome.org/GNOME/glib/", + } } -func init() { artifactsF[GLib] = Toolchain.newGLib } diff --git a/internal/rosa/hakurei.go b/internal/rosa/hakurei.go index a5ae779..06b7e15 100644 --- a/internal/rosa/hakurei.go +++ b/internal/rosa/hakurei.go @@ -58,8 +58,9 @@ func main() { ))) } func init() { - artifactsF[Hakurei] = func(t Toolchain) pkg.Artifact { - return t.newHakurei("", ` + artifactsM[Hakurei] = Metadata{ + f: func(t Toolchain) (pkg.Artifact, string) { + return t.newHakurei("", ` mkdir -p /work/system/libexec/hakurei/ echo '# Building hakurei.' @@ -83,12 +84,23 @@ mkdir -p /work/system/bin/ hakurei \ sharefs \ ../../bin/) -`) +`), hakureiVersion + }, + + Name: "hakurei", + Description: "low-level userspace tooling for Rosa OS", + Website: "https://hakurei.app/", } - artifactsF[HakureiDist] = func(t Toolchain) pkg.Artifact { - return t.newHakurei("-dist", ` + artifactsM[HakureiDist] = Metadata{ + f: func(t Toolchain) (pkg.Artifact, string) { + return t.newHakurei("-dist", ` export HAKUREI_VERSION DESTDIR=/work /usr/src/hakurei/dist/release.sh -`) +`), hakureiVersion + }, + + Name: "hakurei-dist", + Description: "low-level userspace tooling for Rosa OS (distribution tarball)", + Website: "https://hakurei.app/", } } diff --git a/internal/rosa/images.go b/internal/rosa/images.go index b477309..52ff8f6 100644 --- a/internal/rosa/images.go +++ b/internal/rosa/images.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newImageInitramfs() pkg.Artifact { +func (t Toolchain) newImageInitramfs() (pkg.Artifact, string) { return t.New("initramfs", TNoToolchain, []pkg.Artifact{ t.Load(Zstd), t.Load(Hakurei), @@ -14,6 +14,13 @@ dir /dev 0755 0 0 nod /dev/null 0666 0 0 c 1 3 nod /dev/console 0600 0 0 c 5 1 file /init /system/libexec/hakurei/earlyinit 0555 0 0 -`)))) +`)))), Unversioned +} +func init() { + artifactsM[ImageInitramfs] = Metadata{ + Name: "initramfs-image", + Description: "Rosa OS initramfs image", + + f: Toolchain.newImageInitramfs, + } } -func init() { artifactsF[ImageInitramfs] = Toolchain.newImageInitramfs } diff --git a/internal/rosa/kernel.go b/internal/rosa/kernel.go index 5d9bf6f..826aa16 100644 --- a/internal/rosa/kernel.go +++ b/internal/rosa/kernel.go @@ -11,16 +11,24 @@ var kernelSource = pkg.NewHTTPGetTar( pkg.TarGzip, ) -func (t Toolchain) newKernelSource() pkg.Artifact { +func (t Toolchain) newKernelSource() (pkg.Artifact, string) { return t.New("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)) +`, pkg.Path(AbsUsrSrc.Append("linux"), false, kernelSource)), kernelVersion } -func init() { artifactsF[KernelSource] = Toolchain.newKernelSource } +func init() { + artifactsM[KernelSource] = Metadata{ + f: Toolchain.newKernelSource, -func (t Toolchain) newKernelHeaders() pkg.Artifact { + 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) { return t.NewPackage("kernel-headers", kernelVersion, kernelSource, &PackageAttr{ Flag: TEarly, }, &MakeHelper{ @@ -38,11 +46,19 @@ func (t Toolchain) newKernelHeaders() pkg.Artifact { Install: "# headers installed during make", }, Rsync, - ) + ), kernelVersion } -func init() { artifactsF[KernelHeaders] = Toolchain.newKernelHeaders } +func init() { + artifactsM[KernelHeaders] = Metadata{ + f: Toolchain.newKernelHeaders, -func (t Toolchain) newKernel() pkg.Artifact { + 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{ Env: []string{ "PATH=/system/sbin", @@ -123,14 +139,29 @@ rm -v /work/lib/modules/` + kernelVersion + `/build OpenSSL, UtilLinux, KernelHeaders, - ) + ), kernelVersion } -func init() { artifactsF[Kernel] = Toolchain.newKernel } +func init() { + artifactsM[Kernel] = Metadata{ + f: Toolchain.newKernel, -func (t Toolchain) newGenInitCPIO() pkg.Artifact { + Name: "kernel", + Description: "the generic Rosa OS linux kernel", + Website: "https://kernel.org/", + } +} + +func (t Toolchain) newGenInitCPIO() (pkg.Artifact, string) { return t.New("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)) +`, pkg.Path(AbsUsrSrc.Append("linux"), false, kernelSource)), kernelVersion +} +func init() { + artifactsM[GenInitCPIO] = Metadata{ + f: Toolchain.newGenInitCPIO, + + Name: "gen_init_cpio", + Description: "a program in the kernel source tree for creating initramfs archive", + } } -func init() { artifactsF[GenInitCPIO] = Toolchain.newGenInitCPIO } diff --git a/internal/rosa/kmod.go b/internal/rosa/kmod.go index 4292bbf..1b899e3 100644 --- a/internal/rosa/kmod.go +++ b/internal/rosa/kmod.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newKmod() pkg.Artifact { +func (t Toolchain) newKmod() (pkg.Artifact, string) { const ( version = "34.2" checksum = "0K7POeTKxMhExsaTsnKAC6LUNsRSfe6sSZxWONPbOu-GI_pXOw3toU_BIoqfBhJV" @@ -28,6 +28,14 @@ func (t Toolchain) newKmod() pkg.Artifact { Zstd, OpenSSL, KernelHeaders, - ) + ), version +} +func init() { + artifactsM[Kmod] = Metadata{ + f: Toolchain.newKmod, + + Name: "kmod", + Description: "a set of tools to handle common tasks with Linux kernel modules", + Website: "https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git", + } } -func init() { artifactsF[Kmod] = Toolchain.newKmod } diff --git a/internal/rosa/libcap.go b/internal/rosa/libcap.go index 81a9ec6..0806415 100644 --- a/internal/rosa/libcap.go +++ b/internal/rosa/libcap.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibcap() pkg.Artifact { +func (t Toolchain) newLibcap() (pkg.Artifact, string) { const ( version = "2.77" checksum = "2GOTFU4cl2QoS7Dv5wh0c9-hxsQwIzMB9Y_gfAo5xKHqcM13fiHt1RbPkfemzjmB" @@ -39,6 +39,14 @@ ln -s ../system/bin/bash /bin/ }, Bash, Diffutils, - ) + ), version +} +func init() { + artifactsM[Libcap] = Metadata{ + f: Toolchain.newLibcap, + + Name: "libcap", + Description: "a library for getting and setting POSIX.1e draft 15 capabilities", + Website: "https://sites.google.com/site/fullycapable/", + } } -func init() { artifactsF[Libcap] = Toolchain.newLibcap } diff --git a/internal/rosa/libexpat.go b/internal/rosa/libexpat.go index 3cda122..616b486 100644 --- a/internal/rosa/libexpat.go +++ b/internal/rosa/libexpat.go @@ -6,7 +6,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newLibexpat() pkg.Artifact { +func (t Toolchain) newLibexpat() (pkg.Artifact, string) { const ( version = "2.7.3" checksum = "GmkoD23nRi9cMT0cgG1XRMrZWD82UcOMzkkvP1gkwSFWCBgeSXMuoLpa8-v8kxW-" @@ -19,6 +19,14 @@ func (t Toolchain) newLibexpat() pkg.Artifact { pkg.TarBzip2, ), nil, (*MakeHelper)(nil), Bash, - ) + ), version +} +func init() { + artifactsM[Libexpat] = Metadata{ + f: Toolchain.newLibexpat, + + Name: "libexpat", + Description: "a stream-oriented XML parser library", + Website: "https://libexpat.github.io/", + } } -func init() { artifactsF[Libexpat] = Toolchain.newLibexpat } diff --git a/internal/rosa/libffi.go b/internal/rosa/libffi.go index ef4edb5..b5994ce 100644 --- a/internal/rosa/libffi.go +++ b/internal/rosa/libffi.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibffi() pkg.Artifact { +func (t Toolchain) newLibffi() (pkg.Artifact, string) { const ( version = "3.4.5" checksum = "apIJzypF4rDudeRoI_n3K7N-zCeBLTbQlHRn9NSAZqdLAWA80mR0gXPTpHsL7oMl" @@ -14,6 +14,14 @@ func (t Toolchain) newLibffi() pkg.Artifact { pkg.TarGzip, ), nil, (*MakeHelper)(nil), KernelHeaders, - ) + ), version +} +func init() { + artifactsM[Libffi] = Metadata{ + f: Toolchain.newLibffi, + + Name: "libffi", + Description: "a portable, high level programming interface to various calling conventions", + Website: "https://sourceware.org/libffi/", + } } -func init() { artifactsF[Libffi] = Toolchain.newLibffi } diff --git a/internal/rosa/libgd.go b/internal/rosa/libgd.go index 428a9e1..d06b8e3 100644 --- a/internal/rosa/libgd.go +++ b/internal/rosa/libgd.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibgd() pkg.Artifact { +func (t Toolchain) newLibgd() (pkg.Artifact, string) { const ( version = "2.3.3" checksum = "8T-sh1_FJT9K9aajgxzh8ot6vWIF-xxjcKAHvTak9MgGUcsFfzP8cAvvv44u2r36" @@ -21,6 +21,14 @@ mkdir /dev/shm/gd `, }, (*MakeHelper)(nil), Zlib, - ) + ), version +} +func init() { + artifactsM[Libgd] = Metadata{ + f: Toolchain.newLibgd, + + Name: "libgd", + Description: "an open source code library for the dynamic creation of images", + Website: "https://libgd.github.io/", + } } -func init() { artifactsF[Libgd] = Toolchain.newLibgd } diff --git a/internal/rosa/libpsl.go b/internal/rosa/libpsl.go index 27b382f..6dd54f0 100644 --- a/internal/rosa/libpsl.go +++ b/internal/rosa/libpsl.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibpsl() pkg.Artifact { +func (t Toolchain) newLibpsl() (pkg.Artifact, string) { const ( version = "0.21.5" checksum = "XjfxSzh7peG2Vg4vJlL8z4JZJLcXqbuP6pLWkrGCmRxlnYUFTKNBqWGHCxEOlCad" @@ -21,6 +21,14 @@ test_disable 'int main(){return 0;}' tests/test-is-public-builtin.c `, }, (*MakeHelper)(nil), Python, - ) + ), version +} +func init() { + artifactsM[Libpsl] = Metadata{ + f: Toolchain.newLibpsl, + + Name: "libpsl", + Description: "provides functions to work with the Mozilla Public Suffix List", + Website: "https://rockdaboot.github.io/libpsl/", + } } -func init() { artifactsF[Libpsl] = Toolchain.newLibpsl } diff --git a/internal/rosa/libseccomp.go b/internal/rosa/libseccomp.go index 7d1a796..fba718f 100644 --- a/internal/rosa/libseccomp.go +++ b/internal/rosa/libseccomp.go @@ -1,10 +1,8 @@ package rosa -import ( - "hakurei.app/internal/pkg" -) +import "hakurei.app/internal/pkg" -func (t Toolchain) newLibseccomp() pkg.Artifact { +func (t Toolchain) newLibseccomp() (pkg.Artifact, string) { const ( version = "2.6.0" checksum = "mMu-iR71guPjFbb31u-YexBaanKE_nYPjPux-vuBiPfS_0kbwJdfCGlkofaUm-EY" @@ -24,6 +22,14 @@ ln -s ../system/bin/bash /bin/ Gperf, KernelHeaders, - ) + ), version +} +func init() { + artifactsM[Libseccomp] = Metadata{ + f: Toolchain.newLibseccomp, + + Name: "libseccomp", + Description: "an interface to the Linux Kernel's syscall filtering mechanism", + Website: "https://github.com/seccomp/libseccomp/", + } } -func init() { artifactsF[Libseccomp] = Toolchain.newLibseccomp } diff --git a/internal/rosa/libucontext.go b/internal/rosa/libucontext.go index cf2333e..7bbba7e 100644 --- a/internal/rosa/libucontext.go +++ b/internal/rosa/libucontext.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newLibucontext() pkg.Artifact { +func (t Toolchain) newLibucontext() (pkg.Artifact, string) { const ( version = "1.5" checksum = "Ggk7FMmDNBdCx1Z9PcNWWW6LSpjGYssn2vU0GK5BLXJYw7ZxZbA2m_eSgT9TFnIG" @@ -25,6 +25,14 @@ func (t Toolchain) newLibucontext() pkg.Artifact { "ARCH=" + linuxArch(), }, Install: "make prefix=/system DESTDIR=/work install", - }) + }), version +} +func init() { + artifactsM[Libucontext] = Metadata{ + f: Toolchain.newLibucontext, + + Name: "libucontext", + Description: "ucontext implementation featuring glibc-compatible ABI", + Website: "https://github.com/kaniini/libucontext/", + } } -func init() { artifactsF[Libucontext] = Toolchain.newLibucontext } diff --git a/internal/rosa/libxml2.go b/internal/rosa/libxml2.go index 8f0a140..4e1a10b 100644 --- a/internal/rosa/libxml2.go +++ b/internal/rosa/libxml2.go @@ -6,7 +6,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newLibxml2() pkg.Artifact { +func (t Toolchain) newLibxml2() (pkg.Artifact, string) { const ( version = "2.15.1" checksum = "pYzAR3cNrEHezhEMirgiq7jbboLzwMj5GD7SQp0jhSIMdgoU4G9oU9Gxun3zzUIU" @@ -21,6 +21,14 @@ func (t Toolchain) newLibxml2() pkg.Artifact { }, (*MakeHelper)(nil), Diffutils, XZ, - ) + ), version +} +func init() { + artifactsM[Libxml2] = Metadata{ + f: Toolchain.newLibxml2, + + Name: "libxml2", + Description: "an XML toolkit implemented in C", + Website: "https://gitlab.gnome.org/GNOME/libxml2/", + } } -func init() { artifactsF[Libxml2] = Toolchain.newLibxml2 } diff --git a/internal/rosa/libxslt.go b/internal/rosa/libxslt.go index 0162e43..87018ad 100644 --- a/internal/rosa/libxslt.go +++ b/internal/rosa/libxslt.go @@ -6,7 +6,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newLibxslt() pkg.Artifact { +func (t Toolchain) newLibxslt() (pkg.Artifact, string) { const ( version = "1.1.45" checksum = "vw72UbREQnA3YDYuZ9-93hDr9BYCaKV6oh_U4Kt4n1Js_na4E-nFj-ksZnZ0kvEK" @@ -27,6 +27,14 @@ func (t Toolchain) newLibxslt() pkg.Artifact { PkgConfig, Libxml2, - ) + ), version +} +func init() { + artifactsM[Libxslt] = Metadata{ + f: Toolchain.newLibxslt, + + Name: "libxslt", + Description: "an XSLT processor based on libxml2", + Website: "https://gitlab.gnome.org/GNOME/libxslt/", + } } -func init() { artifactsF[Libxslt] = Toolchain.newLibxslt } diff --git a/internal/rosa/llvm.go b/internal/rosa/llvm.go index c0c6493..8154d17 100644 --- a/internal/rosa/llvm.go +++ b/internal/rosa/llvm.go @@ -216,6 +216,10 @@ func (t Toolchain) newLLVM() (musl, compilerRT, runtimes, clang pkg.Artifact) { {"LLVM_ENABLE_LIBXML2", "OFF"}, } + muslHeaders, _ := t.newMusl(true, []string{ + "CC=clang", + }) + compilerRT = t.newLLVMVariant("compiler-rt", &llvmAttr{ env: stage0ExclConcat(t, []string{}, "LDFLAGS="+earlyLDFLAGS(false), @@ -237,9 +241,9 @@ func (t Toolchain) newLLVM() (musl, compilerRT, runtimes, clang pkg.Artifact) { {"COMPILER_RT_BUILD_XRAY", "OFF"}, }, append: []string{"compiler-rt"}, - nonStage0: []pkg.Artifact{t.newMusl(true, []string{ - "CC=clang", - })}, + nonStage0: []pkg.Artifact{ + muslHeaders, + }, script: ` mkdir -p "/work/system/lib/clang/21/lib/" ln -s \ @@ -255,7 +259,7 @@ ln -s \ `, }) - musl = t.newMusl(false, stage0ExclConcat(t, []string{ + musl, _ = t.newMusl(false, stage0ExclConcat(t, []string{ "CC=clang", "LIBCC=/system/lib/clang/21/lib/" + triplet() + "/libclang_rt.builtins.a", diff --git a/internal/rosa/make.go b/internal/rosa/make.go index 891f607..9af0127 100644 --- a/internal/rosa/make.go +++ b/internal/rosa/make.go @@ -7,7 +7,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newMake() pkg.Artifact { +func (t Toolchain) newMake() (pkg.Artifact, string) { const ( version = "4.4.1" checksum = "YS_B07ZcAy9PbaK5_vKGj64SrxO2VMpnMKfc9I0Q9IC1rn0RwOH7802pJoj2Mq4a" @@ -24,9 +24,17 @@ cd "$(mktemp -d)" nil, "https://ftpmirror.gnu.org/gnu/make/make-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ))) + ))), version +} +func init() { + artifactsM[Make] = Metadata{ + f: Toolchain.newMake, + + Name: "make", + Description: "a tool which controls the generation of executables and other non-source files", + Website: "https://www.gnu.org/software/make/", + } } -func init() { artifactsF[Make] = Toolchain.newMake } // MakeHelper is the [Make] build system helper. type MakeHelper struct { diff --git a/internal/rosa/meson.go b/internal/rosa/meson.go index 317b102..0bd1d71 100644 --- a/internal/rosa/meson.go +++ b/internal/rosa/meson.go @@ -7,7 +7,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newMeson() pkg.Artifact { +func (t Toolchain) newMeson() (pkg.Artifact, string) { const ( version = "1.10.1" checksum = "w895BXF_icncnXatT_OLCFe2PYEtg4KrKooMgUYdN-nQVvbFX3PvYWHGEpogsHtd" @@ -27,9 +27,17 @@ python3 setup.py \ version+"/meson-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ))) + ))), version +} +func init() { + artifactsM[Meson] = Metadata{ + f: Toolchain.newMeson, + + Name: "meson", + Description: "an open source build system", + Website: "https://mesonbuild.com/", + } } -func init() { artifactsF[Meson] = Toolchain.newMeson } // MesonHelper is the [Meson] build system helper. type MesonHelper struct { diff --git a/internal/rosa/mksh.go b/internal/rosa/mksh.go index 318bd3c..8c2ac50 100644 --- a/internal/rosa/mksh.go +++ b/internal/rosa/mksh.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newMksh() pkg.Artifact { +func (t Toolchain) newMksh() (pkg.Artifact, string) { const ( version = "59c" checksum = "0Zj-k4nXEu3IuJY4lvwD2OrC2t27GdZj8SPy4DoaeuBRH1padWb7oREpYgwY8JNq" @@ -31,6 +31,14 @@ ln -vs ../system/bin/sh /work/bin/ "https://mbsd.evolvis.org/MirOS/dist/mir/mksh/mksh-R"+version+".tgz", mustDecode(checksum), pkg.TarGzip, - ))) + ))), version +} +func init() { + artifactsM[Mksh] = Metadata{ + f: Toolchain.newMksh, + + Name: "mksh", + Description: "MirBSD Korn Shell", + Website: "https://www.mirbsd.org/mksh", + } } -func init() { artifactsF[Mksh] = Toolchain.newMksh } diff --git a/internal/rosa/musl-fts.go b/internal/rosa/musl-fts.go index 26faf79..1ce5077 100644 --- a/internal/rosa/musl-fts.go +++ b/internal/rosa/musl-fts.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newMuslFts() pkg.Artifact { +func (t Toolchain) newMuslFts() (pkg.Artifact, string) { const ( version = "1.2.7" checksum = "N_p_ZApX3eHt7xoDCw1hLf6XdJOw7ZSx7xPvpvAP0knG2zgU0zeN5w8tt5Pg60XJ" @@ -25,6 +25,14 @@ func (t Toolchain) newMuslFts() pkg.Artifact { Automake, Libtool, PkgConfig, - ) + ), version +} +func init() { + artifactsM[MuslFts] = Metadata{ + f: Toolchain.newMuslFts, + + Name: "musl-fts", + Description: "implementation of fts(3) functions which are missing in musl libc", + Website: "https://github.com/void-linux/musl-fts", + } } -func init() { artifactsF[MuslFts] = Toolchain.newMuslFts } diff --git a/internal/rosa/musl-obstack.go b/internal/rosa/musl-obstack.go index 1f100db..613e287 100644 --- a/internal/rosa/musl-obstack.go +++ b/internal/rosa/musl-obstack.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newMuslObstack() pkg.Artifact { +func (t Toolchain) newMuslObstack() (pkg.Artifact, string) { const ( version = "1.2.3" checksum = "tVRY_KjIlkkMszcaRlkKdBVQHIXTT_T_TiMxbwErlILXrOBosocg8KklppZhNdCG" @@ -25,6 +25,14 @@ func (t Toolchain) newMuslObstack() pkg.Artifact { Automake, Libtool, PkgConfig, - ) + ), version +} +func init() { + artifactsM[MuslObstack] = Metadata{ + f: Toolchain.newMuslObstack, + + Name: "musl-obstack", + Description: "obstack functions and macros separated from glibc", + Website: "https://github.com/void-linux/musl-obstack", + } } -func init() { artifactsF[MuslObstack] = Toolchain.newMuslObstack } diff --git a/internal/rosa/musl.go b/internal/rosa/musl.go index 076fffc..1b2c509 100644 --- a/internal/rosa/musl.go +++ b/internal/rosa/musl.go @@ -6,7 +6,7 @@ func (t Toolchain) newMusl( headers bool, env []string, extra ...pkg.Artifact, -) pkg.Artifact { +) (pkg.Artifact, string) { const ( version = "1.2.5" checksum = "y6USdIeSdHER_Fw2eT2CNjqShEye85oEg2jnOur96D073ukmIpIqDOLmECQroyDb" @@ -50,10 +50,16 @@ rmdir -v /work/lib Env: env, }, &helper, Coreutils, - ) + ), version } func init() { - artifactsF[Musl] = func(t Toolchain) pkg.Artifact { - return t.newMusl(false, nil) + artifactsM[Musl] = Metadata{ + f: func(t Toolchain) (pkg.Artifact, string) { + return t.newMusl(false, nil) + }, + + Name: "musl", + Description: "an implementation of the C standard library", + Website: "https://musl.libc.org/", } } diff --git a/internal/rosa/ncurses.go b/internal/rosa/ncurses.go index 3a9e016..45a8609 100644 --- a/internal/rosa/ncurses.go +++ b/internal/rosa/ncurses.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newNcurses() pkg.Artifact { +func (t Toolchain) newNcurses() (pkg.Artifact, string) { const ( version = "6.6" checksum = "XvWp4xi6hR_hH8XUoGY26L_pqBSDapJYulhzZqPuR0KNklqypqNc1yNXU-nOjf5w" @@ -21,6 +21,14 @@ func (t Toolchain) newNcurses() pkg.Artifact { }, }, PkgConfig, - ) + ), version +} +func init() { + artifactsM[Ncurses] = Metadata{ + f: Toolchain.newNcurses, + + Name: "ncurses", + Description: "a free software emulation of curses in System V Release 4.0 (SVr4)", + Website: "https://invisible-island.net/ncurses/", + } } -func init() { artifactsF[Ncurses] = Toolchain.newNcurses } diff --git a/internal/rosa/ninja.go b/internal/rosa/ninja.go index 50772ae..7cc5cca 100644 --- a/internal/rosa/ninja.go +++ b/internal/rosa/ninja.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newNinja() pkg.Artifact { +func (t Toolchain) newNinja() (pkg.Artifact, string) { const ( version = "1.13.2" checksum = "ygKWMa0YV2lWKiFro5hnL-vcKbc_-RACZuPu0Io8qDvgQlZ0dxv7hPNSFkt4214v" @@ -33,6 +33,14 @@ cp ninja /work/system/bin/ mustDecode(checksum), pkg.TarGzip, ), false, - ))) + ))), version +} +func init() { + artifactsM[Ninja] = Metadata{ + f: Toolchain.newNinja, + + Name: "ninja", + Description: "a small build system with a focus on speed", + Website: "https://ninja-build.org/", + } } -func init() { artifactsF[Ninja] = Toolchain.newNinja } diff --git a/internal/rosa/openssl.go b/internal/rosa/openssl.go index 600355e..e798b3e 100644 --- a/internal/rosa/openssl.go +++ b/internal/rosa/openssl.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newOpenSSL() pkg.Artifact { +func (t Toolchain) newOpenSSL() (pkg.Artifact, string) { const ( version = "3.5.5" checksum = "I2Hp1LxcTR8j4G6LFEQMVy6EJH-Na1byI9Ti-ThBot6EMLNRnjGXGq-WXrim3Fkz" @@ -35,6 +35,14 @@ func (t Toolchain) newOpenSSL() pkg.Artifact { Zlib, KernelHeaders, - ) + ), version +} +func init() { + artifactsM[OpenSSL] = Metadata{ + f: Toolchain.newOpenSSL, + + Name: "openssl", + Description: "TLS/SSL and crypto library", + Website: "https://www.openssl.org/", + } } -func init() { artifactsF[OpenSSL] = Toolchain.newOpenSSL } diff --git a/internal/rosa/pcre2.go b/internal/rosa/pcre2.go index 415384e..53ab3e5 100644 --- a/internal/rosa/pcre2.go +++ b/internal/rosa/pcre2.go @@ -4,7 +4,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newPCRE2() pkg.Artifact { +func (t Toolchain) newPCRE2() (pkg.Artifact, string) { const ( version = "10.43" checksum = "iyNw-POPSJwiZVJfUK5qACA6q2uMzP-84WieimN_CskaEkuw5fRnRTZhEv6ry2Yo" @@ -28,6 +28,14 @@ ln -s ../system/bin/toybox /bin/echo }, }, Diffutils, - ) + ), version +} +func init() { + artifactsM[PCRE2] = Metadata{ + f: Toolchain.newPCRE2, + + Name: "pcre2", + Description: "a set of C functions that implement regular expression pattern matching", + Website: "https://pcre2project.github.io/pcre2/", + } } -func init() { artifactsF[PCRE2] = Toolchain.newPCRE2 } diff --git a/internal/rosa/perl.go b/internal/rosa/perl.go index 64e8c54..e98cddc 100644 --- a/internal/rosa/perl.go +++ b/internal/rosa/perl.go @@ -6,7 +6,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newPerl() pkg.Artifact { +func (t Toolchain) newPerl() (pkg.Artifact, string) { const ( version = "5.42.0" checksum = "2KR7Jbpk-ZVn1a30LQRwbgUvg2AXlPQZfzrqCr31qD5-yEsTwVQ_W76eZH-EdxM9" @@ -45,9 +45,17 @@ rm -f /system/bin/ps # perl does not like toybox ps "test_harness", }, Install: "./perl -Ilib -I. installperl --destdir=/work", - }) + }), version +} +func init() { + artifactsM[Perl] = Metadata{ + f: Toolchain.newPerl, + + Name: "perl", + Description: "The Perl Programming language", + Website: "https://www.perl.org/", + } } -func init() { artifactsF[Perl] = Toolchain.newPerl } // newViaPerlModuleBuild installs a perl module via Build.PL. func (t Toolchain) newViaPerlModuleBuild( @@ -72,7 +80,7 @@ perl Build.PL --prefix=/system ))) } -func (t Toolchain) newPerlModuleBuild() pkg.Artifact { +func (t Toolchain) newPerlModuleBuild() (pkg.Artifact, string) { const ( version = "0.4234" checksum = "ZKxEFG4hE1rqZt52zBL2LRZBMkYzhjb5-cTBXcsyA52EbPeeYyVxU176yAea8-Di" @@ -82,9 +90,17 @@ func (t Toolchain) newPerlModuleBuild() pkg.Artifact { "Module-Build-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ), nil) + ), nil), version +} +func init() { + artifactsM[PerlModuleBuild] = Metadata{ + f: Toolchain.newPerlModuleBuild, + + Name: "perl-Module::Build", + Description: "build and install Perl modules", + Website: "https://metacpan.org/release/Module-Build", + } } -func init() { artifactsF[PerlModuleBuild] = Toolchain.newPerlModuleBuild } // newViaPerlMakeMaker installs a perl module via Makefile.PL. func (t Toolchain) newViaPerlMakeMaker( @@ -114,7 +130,7 @@ func (t Toolchain) newViaPerlMakeMaker( })...) } -func (t Toolchain) newPerlLocaleGettext() pkg.Artifact { +func (t Toolchain) newPerlLocaleGettext() (pkg.Artifact, string) { const ( version = "1.07" checksum = "cFq4BKFD1MWSoa7lsrPjpdo9kzPqd0jlRcBFUyL1L1isw8m3D_Sge_ff0MAu_9J3" @@ -124,11 +140,19 @@ func (t Toolchain) newPerlLocaleGettext() pkg.Artifact { "Locale-gettext-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ), nil) + ), nil), version } -func init() { artifactsF[PerlLocaleGettext] = Toolchain.newPerlLocaleGettext } +func init() { + artifactsM[PerlLocaleGettext] = Metadata{ + f: Toolchain.newPerlLocaleGettext, -func (t Toolchain) newPerlPodParser() pkg.Artifact { + Name: "perl-Locale::gettext", + Description: "message handling functions", + Website: "https://metacpan.org/release/Locale-gettext", + } +} + +func (t Toolchain) newPerlPodParser() (pkg.Artifact, string) { const ( version = "1.67" checksum = "RdURu9mOfExk_loCp6abxlcQV3FycSNbTqhRS9i6JUqnYfGGEgercK30g0gjYyqe" @@ -138,11 +162,19 @@ func (t Toolchain) newPerlPodParser() pkg.Artifact { "Pod-Parser-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ), nil) + ), nil), version } -func init() { artifactsF[PerlPodParser] = Toolchain.newPerlPodParser } +func init() { + artifactsM[PerlPodParser] = Metadata{ + f: Toolchain.newPerlPodParser, -func (t Toolchain) newPerlSGMLS() pkg.Artifact { + Name: "perl-Pod::Parser", + Description: "base class for creating POD filters and translators", + Website: "https://metacpan.org/release/Pod-Parser", + } +} + +func (t Toolchain) newPerlSGMLS() (pkg.Artifact, string) { const ( version = "1.1" checksum = "aZijn4MUqD-wfyZgdcCruCwl4SgDdu25cNmJ4_UvdAk9a7uz4gzMQdoeB6DQ6QOy" @@ -152,11 +184,19 @@ func (t Toolchain) newPerlSGMLS() pkg.Artifact { "SGMLSpm-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ), nil) + ), nil), version } -func init() { artifactsF[PerlSGMLS] = Toolchain.newPerlSGMLS } +func init() { + artifactsM[PerlSGMLS] = Metadata{ + f: Toolchain.newPerlSGMLS, -func (t Toolchain) newPerlTermReadKey() pkg.Artifact { + Name: "perl-SGMLS", + Description: "class for postprocessing the output from the sgmls and nsgmls parsers", + Website: "https://metacpan.org/release/RAAB/SGMLSpm-1.1", + } +} + +func (t Toolchain) newPerlTermReadKey() (pkg.Artifact, string) { const ( version = "2.38" checksum = "qerL8Xo7kD0f42PZoiEbmE8Roc_S9pOa27LXelY4DN_0UNy_u5wLrGHI8utNlaiI" @@ -166,11 +206,19 @@ func (t Toolchain) newPerlTermReadKey() pkg.Artifact { "TermReadKey-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ), nil) + ), nil), version } -func init() { artifactsF[PerlTermReadKey] = Toolchain.newPerlTermReadKey } +func init() { + artifactsM[PerlTermReadKey] = Metadata{ + f: Toolchain.newPerlTermReadKey, -func (t Toolchain) newPerlTextCharWidth() pkg.Artifact { + Name: "perl-Term::ReadKey", + Description: "a perl module for simple terminal control", + Website: "https://metacpan.org/release/TermReadKey", + } +} + +func (t Toolchain) newPerlTextCharWidth() (pkg.Artifact, string) { const ( version = "0.04" checksum = "G2p5RHU4_HiZ23ZusBA_enTlVMxz0J4esUx4CGcOPhY6xYTbp-aXWRN6lYZpzBw2" @@ -180,11 +228,19 @@ func (t Toolchain) newPerlTextCharWidth() pkg.Artifact { "Text-CharWidth-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ), nil) + ), nil), version } -func init() { artifactsF[PerlTextCharWidth] = Toolchain.newPerlTextCharWidth } +func init() { + artifactsM[PerlTextCharWidth] = Metadata{ + f: Toolchain.newPerlTextCharWidth, -func (t Toolchain) newPerlTextWrapI18N() pkg.Artifact { + Name: "perl-Text::CharWidth", + Description: "get number of occupied columns of a string on terminal", + Website: "https://metacpan.org/release/Text-CharWidth", + } +} + +func (t Toolchain) newPerlTextWrapI18N() (pkg.Artifact, string) { const ( version = "0.06" checksum = "Vmo89qLgxUqyQ6QmWJVqu60aQAUjrNKRjFQSXGnvClxofzRjiCa6idzPgJ4VkixM" @@ -196,11 +252,19 @@ func (t Toolchain) newPerlTextWrapI18N() pkg.Artifact { pkg.TarGzip, ), nil, PerlTextCharWidth, - ) + ), version } -func init() { artifactsF[PerlTextWrapI18N] = Toolchain.newPerlTextWrapI18N } +func init() { + artifactsM[PerlTextWrapI18N] = Metadata{ + f: Toolchain.newPerlTextWrapI18N, -func (t Toolchain) newPerlMIMECharset() pkg.Artifact { + Name: "perl-Text::WrapI18N", + Description: "line wrapping module", + Website: "https://metacpan.org/release/Text-WrapI18N", + } +} + +func (t Toolchain) newPerlMIMECharset() (pkg.Artifact, string) { const ( version = "1.013.1" checksum = "Ou_ukcrOa1cgtE3mptinb-os3bdL1SXzbRDFZQF3prrJj-drc3rp_huay7iDLJol" @@ -210,11 +274,19 @@ func (t Toolchain) newPerlMIMECharset() pkg.Artifact { "MIME-Charset-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ), nil) + ), nil), version } -func init() { artifactsF[PerlMIMECharset] = Toolchain.newPerlMIMECharset } +func init() { + artifactsM[PerlMIMECharset] = Metadata{ + f: Toolchain.newPerlMIMECharset, -func (t Toolchain) newPerlUnicodeGCString() pkg.Artifact { + Name: "perl-MIME::Charset", + Description: "Charset Information for MIME", + Website: "https://metacpan.org/release/MIME-Charset", + } +} + +func (t Toolchain) newPerlUnicodeGCString() (pkg.Artifact, string) { const ( version = "2019.001" checksum = "ZHVkh7EDgAUHnTpvXsnPAuWpgNoBImtY_9_8TIbo2co_WgUwEb0MtXPhI8pAZ5OH" @@ -226,11 +298,19 @@ func (t Toolchain) newPerlUnicodeGCString() pkg.Artifact { pkg.TarGzip, ), nil, PerlMIMECharset, - ) + ), version } -func init() { artifactsF[PerlUnicodeGCString] = Toolchain.newPerlUnicodeGCString } +func init() { + artifactsM[PerlUnicodeGCString] = Metadata{ + f: Toolchain.newPerlUnicodeGCString, -func (t Toolchain) newPerlYAMLTiny() pkg.Artifact { + Name: "perl-Unicode::GCString", + Description: "String as Sequence of UAX #29 Grapheme Clusters", + Website: "https://metacpan.org/release/Unicode-LineBreak", + } +} + +func (t Toolchain) newPerlYAMLTiny() (pkg.Artifact, string) { const ( version = "1.76" checksum = "V1MV4KPym1LxSw8CRXqPR3K-l1hGHbT5Ob4t-9xju6R9X_CWyw6hI8wsMaNdHdBY" @@ -240,6 +320,14 @@ func (t Toolchain) newPerlYAMLTiny() pkg.Artifact { "YAML-Tiny-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ), nil) + ), nil), version +} +func init() { + artifactsM[PerlYAMLTiny] = Metadata{ + f: Toolchain.newPerlYAMLTiny, + + Name: "perl-YAML::Tiny", + Description: "read/write YAML files with as little code as possible", + Website: "https://metacpan.org/release/YAML-Tiny", + } } -func init() { artifactsF[PerlYAMLTiny] = Toolchain.newPerlYAMLTiny } diff --git a/internal/rosa/pkg-config.go b/internal/rosa/pkg-config.go index 32eb136..e868249 100644 --- a/internal/rosa/pkg-config.go +++ b/internal/rosa/pkg-config.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newPkgConfig() pkg.Artifact { +func (t Toolchain) newPkgConfig() (pkg.Artifact, string) { const ( version = "0.29.2" checksum = "gi7yAvkwo20Inys1tHbeYZ3Wjdm5VPkrnO0Q6_QZPCAwa1zrA8F4a63cdZDd-717" @@ -17,6 +17,14 @@ func (t Toolchain) newPkgConfig() pkg.Artifact { {"CFLAGS", "'-Wno-int-conversion'"}, {"with-internal-glib"}, }, - }) + }), version +} +func init() { + artifactsM[PkgConfig] = Metadata{ + f: Toolchain.newPkgConfig, + + Name: "pkg-config", + Description: "a helper tool used when compiling applications and libraries", + Website: "https://pkgconfig.freedesktop.org/", + } } -func init() { artifactsF[PkgConfig] = Toolchain.newPkgConfig } diff --git a/internal/rosa/procps.go b/internal/rosa/procps.go index 51c3950..a7397fb 100644 --- a/internal/rosa/procps.go +++ b/internal/rosa/procps.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newProcps() pkg.Artifact { +func (t Toolchain) newProcps() (pkg.Artifact, string) { const ( version = "4.0.6" checksum = "pl_fZLvDlv6iZTkm8l_tHFpzTDVFGCiSJEs3eu0zAX6u36AV36P_En8K7JPScRWM" @@ -27,6 +27,14 @@ func (t Toolchain) newProcps() pkg.Artifact { Gzip, PkgConfig, - ) + ), version +} +func init() { + artifactsM[Procps] = Metadata{ + f: Toolchain.newProcps, + + Name: "procps", + Description: "command line and full screen utilities for browsing procfs", + Website: "https://gitlab.com/procps-ng/procps", + } } -func init() { artifactsF[Procps] = Toolchain.newProcps } diff --git a/internal/rosa/python.go b/internal/rosa/python.go index 1c9a2fe..2adee57 100644 --- a/internal/rosa/python.go +++ b/internal/rosa/python.go @@ -7,7 +7,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newPython() pkg.Artifact { +func (t Toolchain) newPython() (pkg.Artifact, string) { const ( version = "3.14.2" checksum = "7nZunVMGj0viB-CnxpcRego2C90X5wFsMTgsoewd5z-KSZY2zLuqaBwG-14zmKys" @@ -59,31 +59,52 @@ func (t Toolchain) newPython() pkg.Artifact { OpenSSL, Bzip2, XZ, - ) + ), version +} +func init() { + artifactsM[Python] = Metadata{ + f: Toolchain.newPython, + + Name: "python", + Description: "the Python programming language interpreter", + Website: "https://www.python.org/", + } } -func init() { artifactsF[Python] = Toolchain.newPython } // newViaPip is a helper for installing python dependencies via pip. -func (t Toolchain) newViaPip( - name, version, abi, platform, checksum, prefix string, - extra ...pkg.Artifact, -) pkg.Artifact { +func newViaPip( + name, description, version, abi, platform, checksum, prefix string, + extra ...PArtifact, +) Metadata { wname := name + "-" + version + "-py3-" + abi + "-" + platform + ".whl" - return t.New(name+"-"+version, 0, slices.Concat([]pkg.Artifact{ - t.Load(Python), - }, extra), nil, nil, ` + return Metadata{ + f: func(t Toolchain) (pkg.Artifact, string) { + extraRes := make([]pkg.Artifact, len(extra)) + for i, p := range extra { + extraRes[i] = t.Load(p) + } + + return t.New(name+"-"+version, 0, slices.Concat([]pkg.Artifact{ + t.Load(Python), + }, extraRes), nil, nil, ` pip3 install \ --no-index \ --prefix=/system \ --root=/work \ /usr/src/`+wname+` `, pkg.Path(AbsUsrSrc.Append(wname), false, pkg.NewHTTPGet( - nil, prefix+wname, - mustDecode(checksum), - ))) + nil, prefix+wname, + mustDecode(checksum), + ))), version + }, + + Name: "python-" + name, + Description: description, + Website: "https://pypi.org/project/" + name + "/", + } } -func (t Toolchain) newSetuptools() pkg.Artifact { +func (t Toolchain) newSetuptools() (pkg.Artifact, string) { const ( version = "80.10.1" checksum = "p3rlwEmy1krcUH1KabprQz1TCYjJ8ZUjOQknQsWh3q-XEqLGEd3P4VrCc7ouHGXU" @@ -101,53 +122,64 @@ pip3 install \ "v"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ))) + ))), version } -func init() { artifactsF[Setuptools] = Toolchain.newSetuptools } +func init() { + artifactsM[Setuptools] = Metadata{ + f: Toolchain.newSetuptools, -func (t Toolchain) newPygments() pkg.Artifact { - return t.newViaPip("pygments", "2.19.2", "none", "any", + Name: "setuptools", + Description: "the autotools of the Python ecosystem", + Website: "https://pypi.org/project/setuptools/", + } +} + +func init() { + artifactsM[Pygments] = newViaPip( + "pygments", + " a syntax highlighting package written in Python", + "2.19.2", "none", "any", "ak_lwTalmSr7W4Mjy2XBZPG9I6a0gwSy2pS87N8x4QEuZYif0ie9z0OcfRfi9msd", "https://files.pythonhosted.org/packages/"+ - "c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/") -} -func init() { artifactsF[Pygments] = Toolchain.newPygments } + "c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/", + ) -func (t Toolchain) newPluggy() pkg.Artifact { - return t.newViaPip("pluggy", "1.6.0", "none", "any", + artifactsM[Pluggy] = newViaPip( + "pluggy", + "the core framework used by the pytest, tox, and devpi projects", + "1.6.0", "none", "any", "2HWYBaEwM66-y1hSUcWI1MyE7dVVuNNRW24XD6iJBey4YaUdAK8WeXdtFMQGC-4J", "https://files.pythonhosted.org/packages/"+ - "54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/") -} -func init() { artifactsF[Pluggy] = Toolchain.newPluggy } + "54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/", + ) -func (t Toolchain) newPackaging() pkg.Artifact { - return t.newViaPip("packaging", "26.0", "none", "any", + artifactsM[Packaging] = newViaPip( + "packaging", + "reusable core utilities for various Python Packaging interoperability specifications", + "26.0", "none", "any", "iVVXcqdwHDskPKoCFUlh2x8J0Gyq-bhO4ns9DvUJ7oJjeOegRYtSIvLV33Bki-pP", "https://files.pythonhosted.org/packages/"+ - "b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/") -} -func init() { artifactsF[Packaging] = Toolchain.newPackaging } + "b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/", + ) -func (t Toolchain) newIniConfig() pkg.Artifact { - const version = "2.3.0" - return t.newViaPip("iniconfig", version, "none", "any", + artifactsM[IniConfig] = newViaPip( + "iniconfig", + "a small and simple INI-file parser module", + "2.3.0", "none", "any", "SDgs4S5bXi77aVOeKTPv2TUrS3M9rduiK4DpU0hCmDsSBWqnZcWInq9lsx6INxut", - "https://github.com/pytest-dev/iniconfig/releases/download/"+ - "v"+version+"/") -} -func init() { artifactsF[IniConfig] = Toolchain.newIniConfig } - -func (t Toolchain) newPyTest() pkg.Artifact { - const version = "9.0.2" - return t.newViaPip("pytest", version, "none", "any", + "https://files.pythonhosted.org/packages/"+ + "cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/", + ) + artifactsM[PyTest] = newViaPip( + "pytest", + "the pytest framework", + "9.0.2", "none", "any", "IM2wDbLke1EtZhF92zvAjUl_Hms1uKDtM7U8Dt4acOaChMnDg1pW7ib8U0wYGDLH", - "https://github.com/pytest-dev/pytest/releases/download/"+ - version+"/", - t.Load(IniConfig), - t.Load(Packaging), - t.Load(Pluggy), - t.Load(Pygments), + "https://files.pythonhosted.org/packages/"+ + "3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/", + IniConfig, + Packaging, + Pluggy, + Pygments, ) } -func init() { artifactsF[PyTest] = Toolchain.newPyTest } diff --git a/internal/rosa/qemu.go b/internal/rosa/qemu.go index 385c13d..e609ec6 100644 --- a/internal/rosa/qemu.go +++ b/internal/rosa/qemu.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newQEMU() pkg.Artifact { +func (t Toolchain) newQEMU() (pkg.Artifact, string) { const ( version = "10.2.1" checksum = "rjLTSgHJd3X3Vgpxrsus_ZZiaYLiNix1YhcHaGbLd_odYixwZjCcAIt8CVQPJGdZ" @@ -93,6 +93,14 @@ EOF Zstd, DTC, KernelHeaders, - ) + ), version +} +func init() { + artifactsM[QEMU] = Metadata{ + f: Toolchain.newQEMU, + + Name: "qemu", + Description: "a generic and open source machine emulator and virtualizer", + Website: "https://www.qemu.org/", + } } -func init() { artifactsF[QEMU] = Toolchain.newQEMU } diff --git a/internal/rosa/rsync.go b/internal/rosa/rsync.go index ccf4186..7816465 100644 --- a/internal/rosa/rsync.go +++ b/internal/rosa/rsync.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newRsync() pkg.Artifact { +func (t Toolchain) newRsync() (pkg.Artifact, string) { const ( version = "3.4.1" checksum = "VBlTsBWd9z3r2-ex7GkWeWxkUc5OrlgDzikAC0pK7ufTjAJ0MbmC_N04oSVTGPiv" @@ -24,6 +24,14 @@ func (t Toolchain) newRsync() pkg.Artifact { // circular dependency SkipCheck: true, - }) + }), version +} +func init() { + artifactsM[Rsync] = Metadata{ + f: Toolchain.newRsync, + + Name: "rsync", + Description: "an open source utility that provides fast incremental file transfer", + Website: "https://rsync.samba.org/", + } } -func init() { artifactsF[Rsync] = Toolchain.newRsync } diff --git a/internal/rosa/squashfs.go b/internal/rosa/squashfs.go index 8d0c020..004f4ef 100644 --- a/internal/rosa/squashfs.go +++ b/internal/rosa/squashfs.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newSquashfsTools() pkg.Artifact { +func (t Toolchain) newSquashfsTools() (pkg.Artifact, string) { const ( version = "4.7.4" checksum = "pG0E_wkRJFS6bvPYF-hTKZT-cWnvo5BbIzCDZrJZVQDgJOx2Vc3ZfNSEV7Di7cSW" @@ -39,6 +39,14 @@ func (t Toolchain) newSquashfsTools() pkg.Artifact { Zstd, Gzip, Zlib, - ) + ), version +} +func init() { + artifactsM[SquashfsTools] = Metadata{ + f: Toolchain.newSquashfsTools, + + Name: "squashfs-tools", + Description: "tools to create and extract Squashfs filesystems", + Website: "https://github.com/plougher/squashfs-tools", + } } -func init() { artifactsF[SquashfsTools] = Toolchain.newSquashfsTools } diff --git a/internal/rosa/ssl.go b/internal/rosa/ssl.go index 1e57cc7..59e2667 100644 --- a/internal/rosa/ssl.go +++ b/internal/rosa/ssl.go @@ -4,7 +4,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newNSS() pkg.Artifact { +func (t Toolchain) newNSS() (pkg.Artifact, string) { const ( version = "3_120" checksum = "9M0SNMrj9BJp6RH2rQnMm6bZWtP0Kgj64D5JNPHF7Cxr2_8kfy3msubIcvEPwC35" @@ -63,20 +63,31 @@ cp -r \ Zlib, KernelHeaders, - ) + ), version } -func init() { artifactsF[NSS] = Toolchain.newNSS } +func init() { + artifactsM[NSS] = Metadata{ + f: Toolchain.newNSS, -func (t Toolchain) newBuildCATrust() pkg.Artifact { + Name: "nss", + Description: "Network Security Services", + Website: "https://firefox-source-docs.mozilla.org/security/nss/index.html", + } +} + +func init() { const version = "0.4.0" - return t.newViaPip("buildcatrust", version, "none", "any", + artifactsM[buildcatrust] = newViaPip( + "buildcatrust", + "transform certificate stores between formats", + version, "none", "any", "k_FGzkRCLjbTWBkuBLzQJ1S8FPAz19neJZlMHm0t10F2Y0hElmvVwdSBRc03Rjo1", "https://github.com/nix-community/buildcatrust/"+ - "releases/download/v"+version+"/") + "releases/download/v"+version+"/", + ) } -func init() { artifactsF[buildcatrust] = Toolchain.newBuildCATrust } -func (t Toolchain) newNSSCACert() pkg.Artifact { +func (t Toolchain) newNSSCACert() (pkg.Artifact, string) { return t.New("nss-cacert", 0, []pkg.Artifact{ t.Load(Bash), t.Load(Python), @@ -92,6 +103,14 @@ buildcatrust \ --ca_unpacked_output /work/system/etc/ssl/certs/unbundled \ --ca_hashed_unpacked_output /work/system/etc/ssl/certs/hashed \ --p11kit_output /work/system/etc/ssl/trust-source/ca-bundle.trust.p11-kit -`) +`), Unversioned +} +func init() { + artifactsM[NSSCACert] = Metadata{ + f: Toolchain.newNSSCACert, + + Name: "nss-cacert", + Description: "bundle of X.509 certificates of public Certificate Authorities", + Website: "https://curl.se/docs/caextract.html", + } } -func init() { artifactsF[NSSCACert] = Toolchain.newNSSCACert } diff --git a/internal/rosa/stage0.go b/internal/rosa/stage0.go index e446ffe..b579d39 100644 --- a/internal/rosa/stage0.go +++ b/internal/rosa/stage0.go @@ -7,7 +7,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newStage0() pkg.Artifact { +func (t Toolchain) newStage0() (pkg.Artifact, string) { musl, compilerRT, runtimes, clang := t.NewLLVM() return t.New("rosa-stage0", 0, []pkg.Artifact{ musl, @@ -39,9 +39,16 @@ tar \ -C / \ -f /work/stage0-`+triplet()+`.tar.bz2 \ system bin usr/bin/env -`) +`), Unversioned +} +func init() { + artifactsM[Stage0] = Metadata{ + f: Toolchain.newStage0, + + Name: "rosa-stage0", + Description: "Rosa OS stage0 toolchain tarball for bootstrap", + } } -func init() { artifactsF[Stage0] = Toolchain.newStage0 } var ( // stage0 stores the tarball unpack artifact. diff --git a/internal/rosa/tamago.go b/internal/rosa/tamago.go index 58ca648..1b2b4e3 100644 --- a/internal/rosa/tamago.go +++ b/internal/rosa/tamago.go @@ -6,7 +6,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newTamaGo() pkg.Artifact { +func (t Toolchain) newTamaGo() (pkg.Artifact, string) { const ( version = "1.26.0" checksum = "5XkfbpTpSdPJfwtTfUegfdu4LUy8nuZ7sCondiRIxTJI9eQONi8z_O_dq9yDkjw8" @@ -35,6 +35,14 @@ rm \ "tamago-go"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, - ))) + ))), version +} +func init() { + artifactsM[TamaGo] = Metadata{ + f: Toolchain.newTamaGo, + + Name: "tamago", + Description: "a Go toolchain extended with support for bare metal execution", + Website: "https://github.com/usbarmory/tamago-go", + } } -func init() { artifactsF[TamaGo] = Toolchain.newTamaGo } diff --git a/internal/rosa/toybox.go b/internal/rosa/toybox.go index 813cd5d..23fffd5 100644 --- a/internal/rosa/toybox.go +++ b/internal/rosa/toybox.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newToybox(suffix, script string) pkg.Artifact { +func (t Toolchain) newToybox(suffix, script string) (pkg.Artifact, string) { const ( version = "0.8.13" checksum = "rZ1V1ATDte2WeQZanxLVoiRGdfPXhMlEo5-exX-e-ml8cGn9qOv0ABEUVZpX3wTI" @@ -56,15 +56,22 @@ ln -s ../../system/bin/env /work/usr/bin Gzip, KernelHeaders, - ) + ), version } func init() { - artifactsF[Toybox] = func(t Toolchain) pkg.Artifact { - return t.newToybox("", "") + artifactsM[Toybox] = Metadata{ + f: func(t Toolchain) (pkg.Artifact, string) { + return t.newToybox("", "") + }, + + Name: "toybox", + Description: "many common Linux command line utilities", + Website: "https://landley.net/toybox/", } - artifactsF[toyboxEarly] = func(t Toolchain) pkg.Artifact { - return t.newToybox("-early", ` + artifactsM[toyboxEarly] = Metadata{ + f: func(t Toolchain) (pkg.Artifact, string) { + return t.newToybox("-early", ` echo ' CONFIG_EXPR=y CONFIG_TR=y @@ -72,5 +79,10 @@ CONFIG_AWK=y CONFIG_DIFF=y ' >> .config `) + }, + + 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 84e6120..cc82142 100644 --- a/internal/rosa/unzip.go +++ b/internal/rosa/unzip.go @@ -6,7 +6,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newUnzip() pkg.Artifact { +func (t Toolchain) newUnzip() (pkg.Artifact, string) { const ( version = "6.0" checksum = "fcqjB1IOVRNJ16K5gTGEDt3zCJDVBc7EDSra9w3H93stqkNwH1vaPQs_QGOpQZu1" @@ -29,6 +29,14 @@ mv unzip /work/system/bin/ mustDecode(checksum), pkg.TarGzip, ), false, - ))) + ))), version +} +func init() { + artifactsM[Unzip] = Metadata{ + f: Toolchain.newUnzip, + + Name: "unzip", + Description: "portable compression/archiver utilities", + Website: "https://infozip.sourceforge.net/", + } } -func init() { artifactsF[Unzip] = Toolchain.newUnzip } diff --git a/internal/rosa/util-linux.go b/internal/rosa/util-linux.go index d6f4aba..a1c7247 100644 --- a/internal/rosa/util-linux.go +++ b/internal/rosa/util-linux.go @@ -6,7 +6,7 @@ import ( "hakurei.app/internal/pkg" ) -func (t Toolchain) newUtilLinux() pkg.Artifact { +func (t Toolchain) newUtilLinux() (pkg.Artifact, string) { const ( version = "2.41.3" checksum = "gPTd5JJ2ho_Rd0qainuogcLiiWwKSXEZPXN3yCCRl0m0KBgMaqwFuMjYgu9z8zCH" @@ -44,6 +44,14 @@ ln -s ../system/bin/bash /bin/ Bash, KernelHeaders, - ) + ), version +} +func init() { + artifactsM[UtilLinux] = Metadata{ + f: Toolchain.newUtilLinux, + + Name: "util-linux", + Description: "a random collection of Linux utilities", + Website: "https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git", + } } -func init() { artifactsF[UtilLinux] = Toolchain.newUtilLinux } diff --git a/internal/rosa/wayland.go b/internal/rosa/wayland.go index 00c5862..1e50f93 100644 --- a/internal/rosa/wayland.go +++ b/internal/rosa/wayland.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newWayland() pkg.Artifact { +func (t Toolchain) newWayland() (pkg.Artifact, string) { const ( version = "1.24.0" checksum = "JxgLiFRRGw2D3uhVw8ZeDbs3V7K_d4z_ypDog2LBqiA_5y2vVbUAk5NT6D5ozm0m" @@ -32,11 +32,19 @@ echo 'int main(){}' > tests/sanity-test.c Libffi, Libexpat, Libxml2, - ) + ), version } -func init() { artifactsF[Wayland] = Toolchain.newWayland } +func init() { + artifactsM[Wayland] = Metadata{ + f: Toolchain.newWayland, -func (t Toolchain) newWaylandProtocols() pkg.Artifact { + Name: "wayland", + Description: "core Wayland window system code and protocol", + Website: "https://wayland.freedesktop.org/", + } +} + +func (t Toolchain) newWaylandProtocols() (pkg.Artifact, string) { const ( version = "1.47" checksum = "B_NodZ7AQfCstcx7kgbaVjpkYOzbAQq0a4NOk-SA8bQixAE20FY3p1-6gsbPgHn9" @@ -105,6 +113,14 @@ GitLab Libffi, Libexpat, Libxml2, - ) + ), version +} +func init() { + artifactsM[WaylandProtocols] = Metadata{ + f: Toolchain.newWaylandProtocols, + + Name: "wayland-protocols", + Description: "Additional standard Wayland protocols", + Website: "https://wayland.freedesktop.org/", + } } -func init() { artifactsF[WaylandProtocols] = Toolchain.newWaylandProtocols } diff --git a/internal/rosa/x.go b/internal/rosa/x.go index fc4596b..0d8ff95 100644 --- a/internal/rosa/x.go +++ b/internal/rosa/x.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newUtilMacros() pkg.Artifact { +func (t Toolchain) newUtilMacros() (pkg.Artifact, string) { const ( version = "1.17" checksum = "vYPO4Qq3B_WGcsBjG0-lfwZ6DZ7ayyrOLqfDrVOgTDcyLChuMGOAAVAa_UXLu5tD" @@ -12,11 +12,19 @@ func (t Toolchain) newUtilMacros() pkg.Artifact { "util-macros-"+version+".tar.bz2", mustDecode(checksum), pkg.TarBzip2, - ), nil, (*MakeHelper)(nil)) + ), nil, (*MakeHelper)(nil)), version } -func init() { artifactsF[utilMacros] = Toolchain.newUtilMacros } +func init() { + artifactsM[utilMacros] = Metadata{ + f: Toolchain.newUtilMacros, -func (t Toolchain) newXproto() pkg.Artifact { + Name: "util-macros", + Description: "X.Org Autotools macros", + Website: "https://xorg.freedesktop.org/", + } +} + +func (t Toolchain) newXproto() (pkg.Artifact, string) { const ( version = "7.0.23" checksum = "goxwWxV0jZ_3pNczXFltZWHAhq92x-aEreUGyp5Ns8dBOoOmgbpeNIu1nv0Zx07z" @@ -37,11 +45,19 @@ func (t Toolchain) newXproto() pkg.Artifact { PkgConfig, utilMacros, - ) + ), version } -func init() { artifactsF[Xproto] = Toolchain.newXproto } +func init() { + artifactsM[Xproto] = Metadata{ + f: Toolchain.newXproto, -func (t Toolchain) newLibXau() pkg.Artifact { + Name: "xproto", + Description: "X Window System unified protocol definitions", + Website: "https://gitlab.freedesktop.org/xorg/proto/xorgproto", + } +} + +func (t Toolchain) newLibXau() (pkg.Artifact, string) { const ( version = "1.0.7" checksum = "bm768RoZZnHRe9VjNU1Dw3BhfE60DyS9D_bgSR-JLkEEyUWT_Hb_lQripxrXto8j" @@ -64,6 +80,14 @@ func (t Toolchain) newLibXau() pkg.Artifact { utilMacros, Xproto, - ) + ), version +} +func init() { + artifactsM[LibXau] = Metadata{ + f: Toolchain.newLibXau, + + Name: "libXau", + Description: "functions for handling Xauthority files and entries", + Website: "https://gitlab.freedesktop.org/xorg/lib/libxau", + } } -func init() { artifactsF[LibXau] = Toolchain.newLibXau } diff --git a/internal/rosa/xcb.go b/internal/rosa/xcb.go index 2f9abfc..b27a4b9 100644 --- a/internal/rosa/xcb.go +++ b/internal/rosa/xcb.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newXCBProto() pkg.Artifact { +func (t Toolchain) newXCBProto() (pkg.Artifact, string) { const ( version = "1.17.0" checksum = "_NtbKaJ_iyT7XiJz25mXQ7y-niTzE8sHPvLXZPcqtNoV_-vTzqkezJ8Hp2U1enCv" @@ -13,11 +13,19 @@ func (t Toolchain) newXCBProto() pkg.Artifact { pkg.TarGzip, ), nil, (*MakeHelper)(nil), Python, - ) + ), version } -func init() { artifactsF[XCBProto] = Toolchain.newXCBProto } +func init() { + artifactsM[XCBProto] = Metadata{ + f: Toolchain.newXCBProto, -func (t Toolchain) newXCB() pkg.Artifact { + Name: "xcb-proto", + Description: "XML-XCB protocol descriptions used by libxcb for the X11 protocol & extensions", + Website: "https://gitlab.freedesktop.org/xorg/proto/xcbproto", + } +} + +func (t Toolchain) newXCB() (pkg.Artifact, string) { const ( version = "1.17.0" checksum = "hjjsc79LpWM_hZjNWbDDS6qRQUXREjjekS6UbUsDq-RR1_AjgNDxhRvZf-1_kzDd" @@ -33,6 +41,14 @@ func (t Toolchain) newXCB() pkg.Artifact { XCBProto, Xproto, LibXau, - ) + ), version +} +func init() { + artifactsM[XCB] = Metadata{ + f: Toolchain.newXCB, + + Name: "xcb", + Description: "The X protocol C-language Binding", + Website: "https://xcb.freedesktop.org/", + } } -func init() { artifactsF[XCB] = Toolchain.newXCB } diff --git a/internal/rosa/xz.go b/internal/rosa/xz.go index d370494..806c9b4 100644 --- a/internal/rosa/xz.go +++ b/internal/rosa/xz.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newXZ() pkg.Artifact { +func (t Toolchain) newXZ() (pkg.Artifact, string) { const ( version = "5.8.2" checksum = "rXT-XCp9R2q6cXqJ5qenp0cmGPfiENQiU3BWtUVeVgArfRmSsISeUJgvCR3zI0a0" @@ -14,6 +14,14 @@ func (t Toolchain) newXZ() pkg.Artifact { pkg.TarBzip2, ), nil, (*MakeHelper)(nil), Diffutils, - ) + ), version +} +func init() { + artifactsM[XZ] = Metadata{ + f: Toolchain.newXZ, + + Name: "xz", + Description: "XZ Utils", + Website: "https://tukaani.org/xz/", + } } -func init() { artifactsF[XZ] = Toolchain.newXZ } diff --git a/internal/rosa/zlib.go b/internal/rosa/zlib.go index f0ce807..6cbf3b9 100644 --- a/internal/rosa/zlib.go +++ b/internal/rosa/zlib.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newZlib() pkg.Artifact { +func (t Toolchain) newZlib() (pkg.Artifact, string) { const ( version = "1.3.1" checksum = "E-eIpNzE8oJ5DsqH4UuA_0GDKuQF5csqI8ooDx2w7Vx-woJ2mb-YtSbEyIMN44mH" @@ -20,6 +20,14 @@ func (t Toolchain) newZlib() pkg.Artifact { Host: `""`, Build: `""`, - }) + }), version +} +func init() { + artifactsM[Zlib] = Metadata{ + f: Toolchain.newZlib, + + Name: "zlib", + Description: "lossless data-compression library", + Website: "https://zlib.net/", + } } -func init() { artifactsF[Zlib] = Toolchain.newZlib } diff --git a/internal/rosa/zstd.go b/internal/rosa/zstd.go index 4c3a47f..96d9b07 100644 --- a/internal/rosa/zstd.go +++ b/internal/rosa/zstd.go @@ -2,7 +2,7 @@ package rosa import "hakurei.app/internal/pkg" -func (t Toolchain) newZstd() pkg.Artifact { +func (t Toolchain) newZstd() (pkg.Artifact, string) { const ( version = "1.5.7" checksum = "4XhfR7DwVkwo1R-TmYDAJOcx9YXv9WSFhcFUe3hWEAMmdMLPhFaznCqYIA19_xxV" @@ -18,6 +18,14 @@ func (t Toolchain) newZstd() pkg.Artifact { {"CMAKE_BUILD_TYPE", "Release"}, {"CMAKE_INSTALL_LIBDIR", "lib"}, }, - }) + }), version +} +func init() { + artifactsM[Zstd] = Metadata{ + f: Toolchain.newZstd, + + Name: "zstd", + Description: "a fast compression algorithm", + Website: "https://facebook.github.io/zstd/", + } } -func init() { artifactsF[Zstd] = Toolchain.newZstd }