8 Commits

Author SHA1 Message Date
7e2f13fa1b internal/rosa: cure checks
This cures all presets if a cache directory is supplied and verbose is set.

Signed-off-by: Ophestra <cat@gensokyo.uk>
2026-03-05 00:47:39 +09:00
97448e2104 internal/rosa/squashfs: enter correct directory
This was missed during the make helper migration.

Signed-off-by: Ophestra <cat@gensokyo.uk>
2026-03-05 00:43:50 +09:00
a87ad28b8b internal/pkg: scrub for dangling status
These cause build to fail to start.

Signed-off-by: Ophestra <cat@gensokyo.uk>
2026-03-05 00:39:15 +09:00
883d4ee4af internal/pkg: return writer after sync
This fixes a use-after-free.

Signed-off-by: Ophestra <cat@gensokyo.uk>
2026-03-05 00:23:24 +09:00
d2c6d486b0 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 <cat@gensokyo.uk>
2026-03-05 00:20:27 +09:00
6fdd800b2b internal/pkg: check filtered error
This avoids filtering some unrelated os.ErrExist.

Signed-off-by: Ophestra <cat@gensokyo.uk>
2026-03-04 17:43:17 +09:00
94e3debc63 internal/pkg: write per-artifact logs
This is currently only used by execArtifact. A later patch will add additional logging facilities.

Signed-off-by: Ophestra <cat@gensokyo.uk>
2026-03-04 17:27:54 +09:00
ea87664a75 internal/pkg: cancel on scanner error
This avoids discarding output thus appearing unresponsive.

Signed-off-by: Ophestra <cat@gensokyo.uk>
2026-03-03 22:20:43 +09:00
63 changed files with 1556 additions and 491 deletions

View File

@@ -361,6 +361,7 @@ const (
// scanVerbose prefixes program output for a verbose [message.Msg]. // scanVerbose prefixes program output for a verbose [message.Msg].
func scanVerbose( func scanVerbose(
msg message.Msg, msg message.Msg,
cancel context.CancelFunc,
done chan<- struct{}, done chan<- struct{},
prefix string, prefix string,
r io.Reader, r io.Reader,
@@ -375,6 +376,7 @@ func scanVerbose(
msg.Verbose(prefix, s.Text()) msg.Verbose(prefix, s.Text())
} }
if err := s.Err(); err != nil && !errors.Is(err, os.ErrClosed) { if err := s.Err(); err != nil && !errors.Is(err, os.ErrClosed) {
cancel()
msg.Verbose("*"+prefix, err) msg.Verbose("*"+prefix, err)
} }
} }
@@ -416,6 +418,12 @@ func (a *execArtifact) cure(f *FContext, hostNet bool) (err error) {
z.Hostname = "cure-net" z.Hostname = "cure-net"
} }
z.Uid, z.Gid = (1<<10)-1, (1<<10)-1 z.Uid, z.Gid = (1<<10)-1, (1<<10)-1
var status io.Writer
if status, err = f.GetStatusWriter(); err != nil {
return
}
if msg := f.GetMessage(); msg.IsVerbose() { if msg := f.GetMessage(); msg.IsVerbose() {
var stdout, stderr io.ReadCloser var stdout, stderr io.ReadCloser
if stdout, err = z.StdoutPipe(); err != nil { if stdout, err = z.StdoutPipe(); err != nil {
@@ -432,10 +440,31 @@ func (a *execArtifact) cure(f *FContext, hostNet bool) (err error) {
} }
}() }()
bw := f.cache.getWriter(status)
stdoutDone, stderrDone := make(chan struct{}), make(chan struct{}) stdoutDone, stderrDone := make(chan struct{}), make(chan struct{})
go scanVerbose(msg, stdoutDone, "("+a.name+":1)", stdout) go scanVerbose(
go scanVerbose(msg, stderrDone, "("+a.name+":2)", stderr) msg, cancel, stdoutDone,
defer func() { <-stdoutDone; <-stderrDone }() "("+a.name+":1)",
io.TeeReader(stdout, bw),
)
go scanVerbose(
msg, cancel, stderrDone,
"("+a.name+":2)",
io.TeeReader(stderr, bw),
)
defer func() {
<-stdoutDone
<-stderrDone
flushErr := bw.Flush()
if err == nil {
err = flushErr
}
f.cache.putWriter(bw)
}()
} else {
z.Stdout, z.Stderr = status, status
} }
z.Dir, z.Env, z.Path, z.Args = a.dir, a.env, a.path, a.args z.Dir, z.Env, z.Path, z.Args = a.dir, a.env, a.path, a.args

View File

@@ -28,15 +28,21 @@ import (
"unsafe" "unsafe"
"hakurei.app/container/check" "hakurei.app/container/check"
"hakurei.app/internal/info"
"hakurei.app/internal/lockedfile" "hakurei.app/internal/lockedfile"
"hakurei.app/message" "hakurei.app/message"
) )
const (
// programName is the string identifying this build system.
programName = "internal/pkg"
)
type ( type (
// A Checksum is a SHA-384 checksum computed for a cured [Artifact]. // A Checksum is a SHA-384 checksum computed for a cured [Artifact].
Checksum = [sha512.Size384]byte Checksum = [sha512.Size384]byte
// An ID is a unique identifier returned by [Artifact.ID]. This value must // An ID is a unique identifier returned by [KnownIdent.ID]. This value must
// be deterministically determined ahead of time. // be deterministically determined ahead of time.
ID Checksum ID Checksum
) )
@@ -81,20 +87,75 @@ type TContext struct {
// Populated during [Cache.Cure]. // Populated during [Cache.Cure].
work, temp *check.Absolute work, temp *check.Absolute
// Target [Artifact] encoded identifier.
ids string
// Pathname status was created at.
statusPath *check.Absolute
// File statusHeader and logs are written to.
status *os.File
// Error value during prepareStatus.
statusErr error
common common
} }
// statusHeader is the header written to all status files in dirStatus.
var statusHeader = func() string {
s := programName
if v := info.Version(); v != info.FallbackVersion {
s += " " + v
}
s += " (" + runtime.GOARCH + ")"
if name, err := os.Hostname(); err == nil {
s += " on " + name
}
s += "\n\n"
return s
}()
// prepareStatus initialises the status file once.
func (t *TContext) prepareStatus() error {
if t.statusPath != nil || t.status != nil {
return t.statusErr
}
t.statusPath = t.cache.base.Append(
dirStatus,
t.ids,
)
if t.status, t.statusErr = os.OpenFile(
t.statusPath.String(),
syscall.O_CREAT|syscall.O_EXCL|syscall.O_WRONLY,
0400,
); t.statusErr != nil {
return t.statusErr
}
_, t.statusErr = t.status.WriteString(statusHeader)
return t.statusErr
}
// GetStatusWriter returns a [io.Writer] for build logs. The caller must not
// seek this writer before the position it was first returned in.
func (t *TContext) GetStatusWriter() (io.Writer, error) {
err := t.prepareStatus()
return t.status, err
}
// destroy destroys the temporary directory and joins its errors with the error // destroy destroys the temporary directory and joins its errors with the error
// referred to by errP. If the error referred to by errP is non-nil, the work // referred to by errP. If the error referred to by errP is non-nil, the work
// directory is removed similarly. [Cache] is responsible for making sure work // directory is removed similarly. [Cache] is responsible for making sure work
// is never left behind for a successful [Cache.Cure]. // is never left behind for a successful [Cache.Cure].
// //
// If implementation had requested status, it is closed with error joined with
// the error referred to by errP. If the error referred to by errP is non-nil,
// the status file is removed from the filesystem.
//
// destroy must be deferred by [Cache.Cure] if [TContext] is passed to any Cure // destroy must be deferred by [Cache.Cure] if [TContext] is passed to any Cure
// implementation. It should not be called prior to that point. // implementation. It should not be called prior to that point.
func (t *TContext) destroy(errP *error) { func (t *TContext) destroy(errP *error) {
if chmodErr, removeErr := removeAll(t.temp); chmodErr != nil || removeErr != nil { if chmodErr, removeErr := removeAll(t.temp); chmodErr != nil || removeErr != nil {
*errP = errors.Join(*errP, chmodErr, removeErr) *errP = errors.Join(*errP, chmodErr, removeErr)
return
} }
if *errP != nil { if *errP != nil {
@@ -102,12 +163,26 @@ func (t *TContext) destroy(errP *error) {
if chmodErr != nil || removeErr != nil { if chmodErr != nil || removeErr != nil {
*errP = errors.Join(*errP, chmodErr, removeErr) *errP = errors.Join(*errP, chmodErr, removeErr)
} else if errors.Is(*errP, os.ErrExist) { } else if errors.Is(*errP, os.ErrExist) {
var linkError *os.LinkError
if errors.As(*errP, &linkError) && linkError != nil &&
linkError.Op == "rename" {
// two artifacts may be backed by the same file // two artifacts may be backed by the same file
*errP = nil *errP = nil
} }
} }
} }
if t.status != nil {
if err := t.status.Close(); err != nil {
*errP = errors.Join(*errP, err)
}
if *errP != nil {
*errP = errors.Join(*errP, os.Remove(t.statusPath.String()))
}
t.status = nil
}
}
// Unwrap returns the underlying [context.Context]. // Unwrap returns the underlying [context.Context].
func (c *common) Unwrap() context.Context { return c.cache.ctx } func (c *common) Unwrap() context.Context { return c.cache.ctx }
@@ -169,7 +244,7 @@ type FContext struct {
} }
// InvalidLookupError is the identifier of non-dependency [Artifact] looked up // InvalidLookupError is the identifier of non-dependency [Artifact] looked up
// via [FContext.Pathname] by a misbehaving [Artifact] implementation. // via [FContext.GetArtifact] by a misbehaving [Artifact] implementation.
type InvalidLookupError ID type InvalidLookupError ID
func (e InvalidLookupError) Error() string { func (e InvalidLookupError) Error() string {
@@ -375,6 +450,9 @@ const (
// dirChecksum is the directory name appended to Cache.base for storing // dirChecksum is the directory name appended to Cache.base for storing
// artifacts named after their [Checksum]. // artifacts named after their [Checksum].
dirChecksum = "checksum" dirChecksum = "checksum"
// dirStatus is the directory name appended to Cache.base for storing
// artifact metadata and logs named after their [ID].
dirStatus = "status"
// dirWork is the directory name appended to Cache.base for working // dirWork is the directory name appended to Cache.base for working
// pathnames set up during [Cache.Cure]. // pathnames set up during [Cache.Cure].
@@ -587,6 +665,9 @@ type ScrubError struct {
// Dangling identifier symlinks. This can happen if the content-addressed // Dangling identifier symlinks. This can happen if the content-addressed
// entry was removed while scrubbing due to a checksum mismatch. // entry was removed while scrubbing due to a checksum mismatch.
DanglingIdentifiers []ID DanglingIdentifiers []ID
// Dangling status files. This can happen if a dangling status symlink was
// removed while scrubbing.
DanglingStatus []ID
// Miscellaneous errors, including [os.ReadDir] on checksum and identifier // Miscellaneous errors, including [os.ReadDir] on checksum and identifier
// directories, [Decode] on entry names and [os.RemoveAll] on inconsistent // directories, [Decode] on entry names and [os.RemoveAll] on inconsistent
// entries. // entries.
@@ -638,6 +719,13 @@ func (e *ScrubError) Error() string {
} }
segments = append(segments, s) segments = append(segments, s)
} }
if len(e.DanglingStatus) > 0 {
s := "dangling status:\n"
for _, id := range e.DanglingStatus {
s += Encode(id) + "\n"
}
segments = append(segments, s)
}
if len(e.Errs) > 0 { if len(e.Errs) > 0 {
s := "errors during scrub:\n" s := "errors during scrub:\n"
for pathname, errs := range e.errs { for pathname, errs := range e.errs {
@@ -816,6 +904,36 @@ func (c *Cache) Scrub(checks int) error {
wg.Wait() wg.Wait()
} }
dir = c.base.Append(dirStatus)
if entries, readdirErr := os.ReadDir(dir.String()); readdirErr != nil {
if !errors.Is(readdirErr, os.ErrNotExist) {
addErr(dir, readdirErr)
}
} else {
wg.Add(len(entries))
for _, ent := range entries {
w <- checkEntry{ent, func(ent os.DirEntry, want *Checksum) bool {
got := p.Get().(*Checksum)
defer p.Put(got)
if _, err := os.Stat(c.base.Append(
dirIdentifier,
ent.Name(),
).String()); err != nil {
if !errors.Is(err, os.ErrNotExist) {
addErr(dir.Append(ent.Name()), err)
}
seMu.Lock()
se.DanglingStatus = append(se.DanglingStatus, *want)
seMu.Unlock()
return false
}
return true
}}
}
wg.Wait()
}
if len(c.identPending) > 0 { if len(c.identPending) > 0 {
addErr(c.base, errors.New( addErr(c.base, errors.New(
"scrub began with pending artifacts", "scrub began with pending artifacts",
@@ -846,6 +964,7 @@ func (c *Cache) Scrub(checks int) error {
if len(se.ChecksumMismatches) > 0 || if len(se.ChecksumMismatches) > 0 ||
len(se.DanglingIdentifiers) > 0 || len(se.DanglingIdentifiers) > 0 ||
len(se.DanglingStatus) > 0 ||
len(se.Errs) > 0 { len(se.Errs) > 0 {
slices.SortFunc(se.ChecksumMismatches, func(a, b ChecksumMismatchError) int { slices.SortFunc(se.ChecksumMismatches, func(a, b ChecksumMismatchError) int {
return bytes.Compare(a.Want[:], b.Want[:]) return bytes.Compare(a.Want[:], b.Want[:])
@@ -853,6 +972,9 @@ func (c *Cache) Scrub(checks int) error {
slices.SortFunc(se.DanglingIdentifiers, func(a, b ID) int { slices.SortFunc(se.DanglingIdentifiers, func(a, b ID) int {
return bytes.Compare(a[:], b[:]) return bytes.Compare(a[:], b[:])
}) })
slices.SortFunc(se.DanglingStatus, func(a, b ID) int {
return bytes.Compare(a[:], b[:])
})
return &se return &se
} else { } else {
return nil return nil
@@ -943,8 +1065,9 @@ func (c *Cache) openFile(f FileArtifact) (r io.ReadCloser, err error) {
if !errors.Is(err, os.ErrNotExist) { if !errors.Is(err, os.ErrNotExist) {
return return
} }
id := c.Ident(f)
if c.msg.IsVerbose() { if c.msg.IsVerbose() {
rn := reportName(f, c.Ident(f)) rn := reportName(f, id)
c.msg.Verbosef("curing %s in memory...", rn) c.msg.Verbosef("curing %s in memory...", rn)
defer func() { defer func() {
if err == nil { if err == nil {
@@ -1527,6 +1650,7 @@ func (c *Cache) cure(a Artifact, curesExempt bool) (
t := TContext{ t := TContext{
c.base.Append(dirWork, ids), c.base.Append(dirWork, ids),
c.base.Append(dirTemp, ids), c.base.Append(dirTemp, ids),
ids, nil, nil, nil,
common{c}, common{c},
} }
switch ca := a.(type) { switch ca := a.(type) {
@@ -1714,6 +1838,7 @@ func open(
for _, name := range []string{ for _, name := range []string{
dirIdentifier, dirIdentifier,
dirChecksum, dirChecksum,
dirStatus,
dirWork, dirWork,
} { } {
if err := os.MkdirAll(base.Append(name).String(), 0700); err != nil && if err := os.MkdirAll(base.Append(name).String(), 0700); err != nil &&

View File

@@ -314,6 +314,11 @@ func checkWithCache(t *testing.T, testCases []cacheTestCase) {
t.Fatal(err) t.Fatal(err)
} }
// destroy non-deterministic status files
if err := os.RemoveAll(base.Append("status").String()); err != nil {
t.Fatal(err)
}
var checksum pkg.Checksum var checksum pkg.Checksum
if err := pkg.HashDir(&checksum, base); err != nil { if err := pkg.HashDir(&checksum, base); err != nil {
t.Fatalf("HashDir: error = %v", err) t.Fatalf("HashDir: error = %v", err)
@@ -382,6 +387,9 @@ func cureMany(t *testing.T, c *pkg.Cache, steps []cureStep) {
} else if step.pathname != ignorePathname && !pathname.Is(step.pathname) { } else if step.pathname != ignorePathname && !pathname.Is(step.pathname) {
t.Fatalf("Cure: pathname = %q, want %q", pathname, step.pathname) t.Fatalf("Cure: pathname = %q, want %q", pathname, step.pathname)
} else if checksum != makeChecksumH(step.checksum) { } else if checksum != makeChecksumH(step.checksum) {
if checksum == (unique.Handle[pkg.Checksum]{}) {
checksum = unique.Make(pkg.Checksum{})
}
t.Fatalf( t.Fatalf(
"Cure: checksum = %s, want %s", "Cure: checksum = %s, want %s",
pkg.Encode(checksum.Value()), pkg.Encode(step.checksum), pkg.Encode(checksum.Value()), pkg.Encode(step.checksum),

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newAttr() pkg.Artifact { func (t Toolchain) newAttr() (pkg.Artifact, string) {
const ( const (
version = "2.5.2" version = "2.5.2"
checksum = "YWEphrz6vg1sUMmHHVr1CRo53pFXRhq_pjN-AlG8UgwZK1y6m7zuDhxqJhD0SV0l" checksum = "YWEphrz6vg1sUMmHHVr1CRo53pFXRhq_pjN-AlG8UgwZK1y6m7zuDhxqJhD0SV0l"
@@ -62,11 +62,19 @@ ln -s ../../system/bin/perl /usr/bin
`, `,
}, (*MakeHelper)(nil), }, (*MakeHelper)(nil),
Perl, 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 ( const (
version = "2.3.2" version = "2.3.2"
checksum = "-fY5nwH4K8ZHBCRXrzLdguPkqjKI6WIiGu4dBtrZ1o0t6AIU73w8wwJz_UyjIS0P" checksum = "-fY5nwH4K8ZHBCRXrzLdguPkqjKI6WIiGu4dBtrZ1o0t6AIU73w8wwJz_UyjIS0P"
@@ -81,6 +89,14 @@ func (t Toolchain) newACL() pkg.Artifact {
SkipCheck: true, SkipCheck: true,
}, },
Attr, 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 }

View File

@@ -120,7 +120,10 @@ const (
Zlib Zlib
Zstd Zstd
buildcatrust // _presetUnexportedStart is the first unexported preset.
_presetUnexportedStart
buildcatrust = iota - 1
utilMacros utilMacros
// Musl is a standalone libc that does not depend on the toolchain. // Musl is a standalone libc that does not depend on the toolchain.
@@ -138,131 +141,59 @@ const (
_presetEnd _presetEnd
) )
var ( // Metadata is stage-agnostic information of a [PArtifact] not directly
// artifactsF is an array of functions for the result of [PArtifact]. // representable in the resulting [pkg.Artifact].
artifactsF [_presetEnd]func(t Toolchain) pkg.Artifact type Metadata struct {
f func(t Toolchain) (a pkg.Artifact, version string)
// artifacts stores the result of artifactsF. // Unique package name.
artifacts [_toolchainEnd][len(artifactsF)]pkg.Artifact 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 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]. // Load returns the resulting [pkg.Artifact] of [PArtifact].
func (t Toolchain) Load(p PArtifact) pkg.Artifact { func (t Toolchain) Load(p PArtifact) pkg.Artifact {
artifactsOnce[t][p].Do(func() { 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] 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. // ResolveName returns a [PArtifact] by name.
func ResolveName(name string) (p PArtifact, ok bool) { func ResolveName(name string) (p PArtifact, ok bool) {
p, ok = map[string]PArtifact{ for i := range _presetUnexportedStart {
"initramfs-image": ImageInitramfs, if name == artifactsM[i].Name {
return i, true
"kernel": Kernel, }
"kernel-headers": KernelHeaders, }
"kernel-source": KernelSource, return 0, false
"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
} }

52
internal/rosa/all_test.go Normal file
View File

@@ -0,0 +1,52 @@
package rosa
import "testing"
// PresetEnd is the total PArtifact count exported for testing.
const PresetEnd = _presetEnd
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)
}
})
}
}

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newArgpStandalone() pkg.Artifact { func (t Toolchain) newArgpStandalone() (pkg.Artifact, string) {
const ( const (
version = "1.3" version = "1.3"
checksum = "vtW0VyO2pJ-hPyYmDI2zwSLS8QL0sPAUKC1t3zNYbwN2TmsaE-fADhaVtNd3eNFl" checksum = "vtW0VyO2pJ-hPyYmDI2zwSLS8QL0sPAUKC1t3zNYbwN2TmsaE-fADhaVtNd3eNFl"
@@ -23,6 +23,14 @@ install -D -m755 libargp.a /work/system/lib/libargp.a
`, `,
}, },
Diffutils, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newBzip2() pkg.Artifact { func (t Toolchain) newBzip2() (pkg.Artifact, string) {
const ( const (
version = "1.0.8" version = "1.0.8"
checksum = "cTLykcco7boom-s05H1JVsQi1AtChYL84nXkg_92Dm1Xt94Ob_qlMg_-NSguIK-c" checksum = "cTLykcco7boom-s05H1JVsQi1AtChYL84nXkg_92Dm1Xt94Ob_qlMg_-NSguIK-c"
@@ -23,6 +23,14 @@ func (t Toolchain) newBzip2() pkg.Artifact {
"CC=cc", "CC=cc",
}, },
Install: "make PREFIX=/work/system install", 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 }

View File

@@ -8,7 +8,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newCMake() pkg.Artifact { func (t Toolchain) newCMake() (pkg.Artifact, string) {
const ( const (
version = "4.2.3" version = "4.2.3"
checksum = "Y4uYGnLrDQX78UdzH7fMzfok46Nt_1taDIHSmqgboU1yFi6f0iAXBDegMCu4eS-J" checksum = "Y4uYGnLrDQX78UdzH7fMzfok46Nt_1taDIHSmqgboU1yFi6f0iAXBDegMCu4eS-J"
@@ -102,9 +102,17 @@ index 2ead810437..f85cbb8b1c 100644
}, },
}, },
KernelHeaders, 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. // CMakeHelper is the [CMake] build system helper.
type CMakeHelper struct { type CMakeHelper struct {

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newCurl() pkg.Artifact { func (t Toolchain) newCurl() (pkg.Artifact, string) {
const ( const (
version = "8.18.0" version = "8.18.0"
checksum = "YpOolP_sx1DIrCEJ3elgVAu0wTLDS-EZMZFvOP0eha7FaLueZUlEpuMwDzJNyi7i" checksum = "YpOolP_sx1DIrCEJ3elgVAu0wTLDS-EZMZFvOP0eha7FaLueZUlEpuMwDzJNyi7i"
@@ -25,6 +25,14 @@ func (t Toolchain) newCurl() pkg.Artifact {
Libpsl, Libpsl,
OpenSSL, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newDTC() pkg.Artifact { func (t Toolchain) newDTC() (pkg.Artifact, string) {
const ( const (
version = "1.7.2" version = "1.7.2"
checksum = "vUoiRynPyYRexTpS6USweT5p4SVHvvVJs8uqFkkVD-YnFjwf6v3elQ0-Etrh00Dt" checksum = "vUoiRynPyYRexTpS6USweT5p4SVHvvVJs8uqFkkVD-YnFjwf6v3elQ0-Etrh00Dt"
@@ -28,6 +28,14 @@ func (t Toolchain) newDTC() pkg.Artifact {
M4, M4,
Coreutils, Coreutils,
Diffutils, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newElfutils() pkg.Artifact { func (t Toolchain) newElfutils() (pkg.Artifact, string) {
const ( const (
version = "0.194" version = "0.194"
checksum = "Q3XUygUPv9vR1TkWucwUsQ8Kb1_F6gzk-KMPELr3cC_4AcTrprhVPMvN0CKkiYRa" checksum = "Q3XUygUPv9vR1TkWucwUsQ8Kb1_F6gzk-KMPELr3cC_4AcTrprhVPMvN0CKkiYRa"
@@ -36,6 +36,14 @@ func (t Toolchain) newElfutils() pkg.Artifact {
MuslFts, MuslFts,
MuslObstack, MuslObstack,
KernelHeaders, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newFakeroot() pkg.Artifact { func (t Toolchain) newFakeroot() (pkg.Artifact, string) {
const ( const (
version = "1.37.2" version = "1.37.2"
checksum = "4ve-eDqVspzQ6VWDhPS0NjW3aSenBJcPAJq_BFT7OOFgUdrQzoTBxZWipDAGWxF8" checksum = "4ve-eDqVspzQ6VWDhPS0NjW3aSenBJcPAJq_BFT7OOFgUdrQzoTBxZWipDAGWxF8"
@@ -46,6 +46,14 @@ index f135ad9..85c784c 100644
Attr, Attr,
Libcap, Libcap,
KernelHeaders, 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 }

View File

@@ -4,7 +4,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newFlex() pkg.Artifact { func (t Toolchain) newFlex() (pkg.Artifact, string) {
const ( const (
version = "2.6.4" version = "2.6.4"
checksum = "p9POjQU7VhgOf3x5iFro8fjhy0NOanvA7CTeuWS_veSNgCixIJshTrWVkc5XLZkB" checksum = "p9POjQU7VhgOf3x5iFro8fjhy0NOanvA7CTeuWS_veSNgCixIJshTrWVkc5XLZkB"
@@ -16,6 +16,14 @@ func (t Toolchain) newFlex() pkg.Artifact {
pkg.TarGzip, pkg.TarGzip,
), nil, (*MakeHelper)(nil), ), nil, (*MakeHelper)(nil),
M4, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newFuse() pkg.Artifact { func (t Toolchain) newFuse() (pkg.Artifact, string) {
const ( const (
version = "3.18.1" version = "3.18.1"
checksum = "COb-BgJRWXLbt9XUkNeuiroQizpMifXqxgieE1SlkMXhs_WGSyJStrmyewAw2hd6" checksum = "COb-BgJRWXLbt9XUkNeuiroQizpMifXqxgieE1SlkMXhs_WGSyJStrmyewAw2hd6"
@@ -31,6 +31,14 @@ func (t Toolchain) newFuse() pkg.Artifact {
PyTest, PyTest,
KernelHeaders, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newGit() pkg.Artifact { func (t Toolchain) newGit() (pkg.Artifact, string) {
const ( const (
version = "2.52.0" version = "2.52.0"
checksum = "uH3J1HAN_c6PfGNJd2OBwW4zo36n71wmkdvityYnrh8Ak0D1IifiAvEWz9Vi9DmS" checksum = "uH3J1HAN_c6PfGNJd2OBwW4zo36n71wmkdvityYnrh8Ak0D1IifiAvEWz9Vi9DmS"
@@ -63,9 +63,17 @@ disable_test t2200-add-update
Curl, Curl,
OpenSSL, OpenSSL,
Libexpat, 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. // NewViaGit returns a [pkg.Artifact] for cloning a git repository.
func (t Toolchain) NewViaGit( func (t Toolchain) NewViaGit(

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newM4() pkg.Artifact { func (t Toolchain) newM4() (pkg.Artifact, string) {
const ( const (
version = "1.4.20" version = "1.4.20"
checksum = "RT0_L3m4Co86bVBY3lCFAEs040yI1WdeNmRylFpah8IZovTm6O4wI7qiHJN3qsW9" checksum = "RT0_L3m4Co86bVBY3lCFAEs040yI1WdeNmRylFpah8IZovTm6O4wI7qiHJN3qsW9"
@@ -18,11 +18,19 @@ chmod +w tests/test-c32ispunct.sh && echo '#!/bin/sh' > tests/test-c32ispunct.sh
`, `,
}, (*MakeHelper)(nil), }, (*MakeHelper)(nil),
Diffutils, 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 ( const (
version = "3.8.2" version = "3.8.2"
checksum = "BhRM6K7URj1LNOkIDCFDctSErLS-Xo5d9ba9seg10o6ACrgC1uNhED7CQPgIY29Y" checksum = "BhRM6K7URj1LNOkIDCFDctSErLS-Xo5d9ba9seg10o6ACrgC1uNhED7CQPgIY29Y"
@@ -35,11 +43,19 @@ func (t Toolchain) newBison() pkg.Artifact {
M4, M4,
Diffutils, Diffutils,
Sed, 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 ( const (
version = "4.9" version = "4.9"
checksum = "pe7HWH4PHNYrazOTlUoE1fXmhn2GOPFN_xE62i0llOr3kYGrH1g2_orDz0UtZ9Nt" checksum = "pe7HWH4PHNYrazOTlUoE1fXmhn2GOPFN_xE62i0llOr3kYGrH1g2_orDz0UtZ9Nt"
@@ -50,11 +66,19 @@ func (t Toolchain) newSed() pkg.Artifact {
pkg.TarGzip, pkg.TarGzip,
), nil, (*MakeHelper)(nil), ), nil, (*MakeHelper)(nil),
Diffutils, 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 ( const (
version = "2.72" version = "2.72"
checksum = "-c5blYkC-xLDer3TWEqJTyh1RLbOd1c5dnRLKsDnIrg_wWNOLBpaqMY8FvmUFJ33" checksum = "-c5blYkC-xLDer3TWEqJTyh1RLbOd1c5dnRLKsDnIrg_wWNOLBpaqMY8FvmUFJ33"
@@ -75,11 +99,19 @@ func (t Toolchain) newAutoconf() pkg.Artifact {
Perl, Perl,
Bash, Bash,
Diffutils, 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 ( const (
version = "1.18.1" version = "1.18.1"
checksum = "FjvLG_GdQP7cThTZJLDMxYpRcKdpAVG-YDs1Fj1yaHlSdh_Kx6nRGN14E0r_BjcG" checksum = "FjvLG_GdQP7cThTZJLDMxYpRcKdpAVG-YDs1Fj1yaHlSdh_Kx6nRGN14E0r_BjcG"
@@ -107,11 +139,19 @@ test_disable '#!/bin/sh' t/pr9.sh
Gzip, Gzip,
Autoconf, Autoconf,
Diffutils, 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 ( const (
version = "2.5.4" version = "2.5.4"
checksum = "pa6LSrQggh8mSJHQfwGjysAApmZlGJt8wif2cCLzqAAa2jpsTY0jZ-6stS3BWZ2Q" checksum = "pa6LSrQggh8mSJHQfwGjysAApmZlGJt8wif2cCLzqAAa2jpsTY0jZ-6stS3BWZ2Q"
@@ -128,11 +168,19 @@ func (t Toolchain) newLibtool() pkg.Artifact {
}, },
M4, M4,
Diffutils, 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 ( const (
version = "1.14" version = "1.14"
checksum = "NWhjUavnNfTDFkZJyAUonL9aCOak8GVajWX2OMlzpFnuI0ErpBFyj88mz2xSjz0q" checksum = "NWhjUavnNfTDFkZJyAUonL9aCOak8GVajWX2OMlzpFnuI0ErpBFyj88mz2xSjz0q"
@@ -144,11 +192,19 @@ func (t Toolchain) newGzip() pkg.Artifact {
), nil, &MakeHelper{ ), nil, &MakeHelper{
// dependency loop // dependency loop
SkipCheck: true, 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 ( const (
version = "1.0" version = "1.0"
checksum = "3MasKeEdPeFEgWgzsBKk7JqWqql1wEMbgPmzAfs-mluyokoW0N8oQVxPQoOnSdgC" checksum = "3MasKeEdPeFEgWgzsBKk7JqWqql1wEMbgPmzAfs-mluyokoW0N8oQVxPQoOnSdgC"
@@ -180,11 +236,19 @@ touch gettext-tools/autotools/archive.dir.tar
Sed, Sed,
KernelHeaders, 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 ( const (
version = "3.12" version = "3.12"
checksum = "9J5VAq5oA7eqwzS1Yvw-l3G5o-TccUrNQR3PvyB_lgdryOFAfxtvQfKfhdpquE44" 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 test_disable '#!/bin/sh' tests/cmp
`, `,
Flag: TEarly, 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 ( const (
version = "2.8" version = "2.8"
checksum = "MA0BQc662i8QYBD-DdGgyyfTwaeALZ1K0yusV9rAmNiIsQdX-69YC4t9JEGXZkeR" checksum = "MA0BQc662i8QYBD-DdGgyyfTwaeALZ1K0yusV9rAmNiIsQdX-69YC4t9JEGXZkeR"
@@ -225,11 +297,19 @@ test_disable '#!/bin/sh' tests/ed-style
test_disable '#!/bin/sh' tests/need-filename test_disable '#!/bin/sh' tests/need-filename
`, `,
Flag: TEarly, 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 ( const (
version = "5.3" version = "5.3"
checksum = "4LQ_GRoB_ko-Ih8QPf_xRKA02xAm_TOxQgcJLmFDT6udUPxTAWrsj-ZNeuTusyDq" checksum = "4LQ_GRoB_ko-Ih8QPf_xRKA02xAm_TOxQgcJLmFDT6udUPxTAWrsj-ZNeuTusyDq"
@@ -245,11 +325,19 @@ func (t Toolchain) newBash() pkg.Artifact {
Configure: [][2]string{ Configure: [][2]string{
{"without-bash-malloc"}, {"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 ( const (
version = "9.9" version = "9.9"
checksum = "B1_TaXj1j5aiVIcazLWu8Ix03wDV54uo2_iBry4qHG6Y-9bjDpUPlkNLmU_3Nvw6" checksum = "B1_TaXj1j5aiVIcazLWu8Ix03wDV54uo2_iBry4qHG6Y-9bjDpUPlkNLmU_3Nvw6"
@@ -281,11 +369,19 @@ test_disable 'int main(){return 0;}' gnulib-tests/test-lchown.c
Bash, Bash,
KernelHeaders, 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 ( const (
version = "7.2" version = "7.2"
checksum = "9EelM5b7QGMAY5DKrAm_El8lofBGuFWlaBPSBhh7l_VQE8054MBmC0KBvGrABqjv" checksum = "9EelM5b7QGMAY5DKrAm_El8lofBGuFWlaBPSBhh7l_VQE8054MBmC0KBvGrABqjv"
@@ -299,11 +395,19 @@ func (t Toolchain) newTexinfo() pkg.Artifact {
SkipCheck: true, SkipCheck: true,
}, },
Perl, 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 ( const (
version = "3.3" version = "3.3"
checksum = "RtIy9pPb_Bb8-31J2Nw-rRGso2JlS-lDlVhuNYhqR7Nt4xM_nObznxAlBMnarJv7" checksum = "RtIy9pPb_Bb8-31J2Nw-rRGso2JlS-lDlVhuNYhqR7Nt4xM_nObznxAlBMnarJv7"
@@ -314,11 +418,19 @@ func (t Toolchain) newGperf() pkg.Artifact {
pkg.TarGzip, pkg.TarGzip,
), nil, (*MakeHelper)(nil), ), nil, (*MakeHelper)(nil),
Diffutils, 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 ( const (
version = "5.3.2" version = "5.3.2"
checksum = "uIs0d14h_d2DgMGYwrPtegGNyt_bxzG3D6Fe-MmExx_pVoVkQaHzrtmiXVr6NHKk" checksum = "uIs0d14h_d2DgMGYwrPtegGNyt_bxzG3D6Fe-MmExx_pVoVkQaHzrtmiXVr6NHKk"
@@ -332,11 +444,19 @@ func (t Toolchain) newGawk() pkg.Artifact {
}, &MakeHelper{ }, &MakeHelper{
// dependency loop // dependency loop
SkipCheck: true, 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 ( const (
version = "3.12" version = "3.12"
checksum = "qMB4RjaPNRRYsxix6YOrjE8gyAT1zVSTy4nW4wKW9fqa0CHYAuWgPwDTirENzm_1" checksum = "qMB4RjaPNRRYsxix6YOrjE8gyAT1zVSTy4nW4wKW9fqa0CHYAuWgPwDTirENzm_1"
@@ -355,11 +475,19 @@ test_disable 'int main(){return 0;}' gnulib-tests/test-c32ispunct.c
`, `,
}, (*MakeHelper)(nil), }, (*MakeHelper)(nil),
Diffutils, 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 ( const (
version = "4.10.0" version = "4.10.0"
checksum = "ZXABdNBQXL7QjTygynRRTdXYWxQKZ0Wn5eMd3NUnxR0xaS0u0VfcKoTlbo50zxv6" checksum = "ZXABdNBQXL7QjTygynRRTdXYWxQKZ0Wn5eMd3NUnxR0xaS0u0VfcKoTlbo50zxv6"
@@ -377,11 +505,19 @@ echo 'int main(){return 0;}' > tests/xargs/test-sigusr.c
Diffutils, Diffutils,
XZ, XZ,
Sed, 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 ( const (
version = "1.08.2" version = "1.08.2"
checksum = "8h6f3hjV80XiFs6v9HOPF2KEyg1kuOgn5eeFdVspV05ODBVQss-ey5glc8AmneLy" checksum = "8h6f3hjV80XiFs6v9HOPF2KEyg1kuOgn5eeFdVspV05ODBVQss-ey5glc8AmneLy"
@@ -397,11 +533,19 @@ func (t Toolchain) newBC() pkg.Artifact {
}, (*MakeHelper)(nil), }, (*MakeHelper)(nil),
Perl, Perl,
Texinfo, 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 ( const (
version = "1.18" version = "1.18"
checksum = "iV5q3VxP5VPdJ-X7O5OQI4fGm8VjeYb5viLd1L3eAHg26bbHb2_Qn63XPF3ucVZr" 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", nil, "https://ftpmirror.gnu.org/gnu/libiconv/libiconv-"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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 ( const (
version = "1.35" version = "1.35"
checksum = "zSaoSlVUDW0dSfm4sbL4FrXLFR8U40Fh3zY5DWhR5NCIJ6GjU6Kc4VZo2-ZqpBRA" checksum = "zSaoSlVUDW0dSfm4sbL4FrXLFR8U40Fh3zY5DWhR5NCIJ6GjU6Kc4VZo2-ZqpBRA"
@@ -442,11 +594,19 @@ func (t Toolchain) newTar() pkg.Artifact {
Gzip, Gzip,
Bzip2, Bzip2,
Zstd, 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 ( const (
version = "2.45" version = "2.45"
checksum = "hlLtqqHDmzAT2OQVHaKEd_io2DGFvJkaeS-igBuK8bRRir7LUKGHgHYNkDVKaHTT" checksum = "hlLtqqHDmzAT2OQVHaKEd_io2DGFvJkaeS-igBuK8bRRir7LUKGHgHYNkDVKaHTT"
@@ -457,11 +617,19 @@ func (t Toolchain) newBinutils() pkg.Artifact {
pkg.TarBzip2, pkg.TarBzip2,
), nil, (*MakeHelper)(nil), ), nil, (*MakeHelper)(nil),
Bash, 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 ( const (
version = "6.3.0" version = "6.3.0"
checksum = "yrgbgEDWKDdMWVHh7gPbVl56-sRtVVhfvv0M_LX7xMUUk_mvZ1QOJEAnt7g4i3k5" checksum = "yrgbgEDWKDdMWVHh7gPbVl56-sRtVVhfvv0M_LX7xMUUk_mvZ1QOJEAnt7g4i3k5"
@@ -473,11 +641,19 @@ func (t Toolchain) newGMP() pkg.Artifact {
pkg.TarBzip2, pkg.TarBzip2,
), nil, (*MakeHelper)(nil), ), nil, (*MakeHelper)(nil),
M4, 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 ( const (
version = "4.2.2" version = "4.2.2"
checksum = "wN3gx0zfIuCn9r3VAn_9bmfvAYILwrRfgBjYSD1IjLqyLrLojNN5vKyQuTE9kA-B" checksum = "wN3gx0zfIuCn9r3VAn_9bmfvAYILwrRfgBjYSD1IjLqyLrLojNN5vKyQuTE9kA-B"
@@ -489,11 +665,19 @@ func (t Toolchain) newMPFR() pkg.Artifact {
pkg.TarBzip2, pkg.TarBzip2,
), nil, (*MakeHelper)(nil), ), nil, (*MakeHelper)(nil),
GMP, 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 ( const (
version = "1.3.1" version = "1.3.1"
checksum = "o8r8K9R4x7PuRx0-JE3-bC5jZQrtxGV2nkB773aqJ3uaxOiBDCID1gKjPaaDxX4V" checksum = "o8r8K9R4x7PuRx0-JE3-bC5jZQrtxGV2nkB773aqJ3uaxOiBDCID1gKjPaaDxX4V"
@@ -506,11 +690,19 @@ func (t Toolchain) newMPC() pkg.Artifact {
), nil, (*MakeHelper)(nil), ), nil, (*MakeHelper)(nil),
GMP, GMP,
MPFR, 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 ( const (
version = "15.2.0" version = "15.2.0"
checksum = "TXJ5WrbXlGLzy1swghQTr4qxgDCyIZFgJry51XEPTBZ8QYbVmFeB4lZbSMtPJ-a1" checksum = "TXJ5WrbXlGLzy1swghQTr4qxgDCyIZFgJry51XEPTBZ8QYbVmFeB4lZbSMtPJ-a1"
@@ -710,6 +902,14 @@ ln -s system/lib /work/
Zlib, Zlib,
Libucontext, Libucontext,
KernelHeaders, 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 }

View File

@@ -62,7 +62,7 @@ ln -s \
))) )))
} }
func (t Toolchain) newGoLatest() pkg.Artifact { func (t Toolchain) newGoLatest() (pkg.Artifact, string) {
var ( var (
bootstrapEnv []string bootstrapEnv []string
bootstrapExtra []pkg.Artifact bootstrapExtra []pkg.Artifact
@@ -153,9 +153,13 @@ rm \
`, go123, `, go123,
) )
const (
version = "1.26.0"
checksum = "uHLcrgBc0NMcyTMDLRNAZIcOx0RyQlyekSl9xbWSwj3esEFWJysYLfLa3S8p39Nh"
)
return t.newGo( return t.newGo(
"1.26.0", version,
"uHLcrgBc0NMcyTMDLRNAZIcOx0RyQlyekSl9xbWSwj3esEFWJysYLfLa3S8p39Nh", checksum,
finalEnv, ` finalEnv, `
sed -i \ sed -i \
's,/lib/ld-musl-`+linuxArch()+`.so.1,/system/bin/linker,' \ 's,/lib/ld-musl-`+linuxArch()+`.so.1,/system/bin/linker,' \
@@ -164,6 +168,14 @@ sed -i \
rm \ rm \
os/root_unix_test.go os/root_unix_test.go
`, go125, `, 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 }

View File

@@ -7,7 +7,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newGLib() pkg.Artifact { func (t Toolchain) newGLib() (pkg.Artifact, string) {
const ( const (
version = "2.86.4" version = "2.86.4"
checksum = "AfTjBrrxtXXPL6dFa1LfTe40PyPSth62CoIkM5m_VJTUngGLOFHw6I4XE7RGQE8G" checksum = "AfTjBrrxtXXPL6dFa1LfTe40PyPSth62CoIkM5m_VJTUngGLOFHw6I4XE7RGQE8G"
@@ -46,6 +46,14 @@ func (t Toolchain) newGLib() pkg.Artifact {
PCRE2, PCRE2,
Libffi, Libffi,
Zlib, 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 }

View File

@@ -58,7 +58,8 @@ func main() {
))) )))
} }
func init() { func init() {
artifactsF[Hakurei] = func(t Toolchain) pkg.Artifact { artifactsM[Hakurei] = Metadata{
f: func(t Toolchain) (pkg.Artifact, string) {
return t.newHakurei("", ` return t.newHakurei("", `
mkdir -p /work/system/libexec/hakurei/ mkdir -p /work/system/libexec/hakurei/
@@ -83,12 +84,23 @@ mkdir -p /work/system/bin/
hakurei \ hakurei \
sharefs \ sharefs \
../../bin/) ../../bin/)
`) `), hakureiVersion
},
Name: "hakurei",
Description: "low-level userspace tooling for Rosa OS",
Website: "https://hakurei.app/",
} }
artifactsF[HakureiDist] = func(t Toolchain) pkg.Artifact { artifactsM[HakureiDist] = Metadata{
f: func(t Toolchain) (pkg.Artifact, string) {
return t.newHakurei("-dist", ` return t.newHakurei("-dist", `
export HAKUREI_VERSION export HAKUREI_VERSION
DESTDIR=/work /usr/src/hakurei/dist/release.sh 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/",
} }
} }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" 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{ return t.New("initramfs", TNoToolchain, []pkg.Artifact{
t.Load(Zstd), t.Load(Zstd),
t.Load(Hakurei), t.Load(Hakurei),
@@ -14,6 +14,13 @@ dir /dev 0755 0 0
nod /dev/null 0666 0 0 c 1 3 nod /dev/null 0666 0 0 c 1 3
nod /dev/console 0600 0 0 c 5 1 nod /dev/console 0600 0 0 c 5 1
file /init /system/libexec/hakurei/earlyinit 0555 0 0 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 }

View File

@@ -11,16 +11,24 @@ var kernelSource = pkg.NewHTTPGetTar(
pkg.TarGzip, 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, ` return t.New("kernel-"+kernelVersion+"-src", 0, nil, nil, nil, `
mkdir -p /work/usr/src/ mkdir -p /work/usr/src/
cp -r /usr/src/linux /work/usr/src/ cp -r /usr/src/linux /work/usr/src/
chmod -R +w /work/usr/src/linux/ 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{ return t.NewPackage("kernel-headers", kernelVersion, kernelSource, &PackageAttr{
Flag: TEarly, Flag: TEarly,
}, &MakeHelper{ }, &MakeHelper{
@@ -38,11 +46,19 @@ func (t Toolchain) newKernelHeaders() pkg.Artifact {
Install: "# headers installed during make", Install: "# headers installed during make",
}, },
Rsync, 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{ return t.NewPackage("kernel", kernelVersion, kernelSource, &PackageAttr{
Env: []string{ Env: []string{
"PATH=/system/sbin", "PATH=/system/sbin",
@@ -123,14 +139,29 @@ rm -v /work/lib/modules/` + kernelVersion + `/build
OpenSSL, OpenSSL,
UtilLinux, UtilLinux,
KernelHeaders, 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, ` return t.New("gen_init_cpio-"+kernelVersion, 0, nil, nil, nil, `
mkdir -p /work/system/bin/ mkdir -p /work/system/bin/
cc -o /work/system/bin/gen_init_cpio /usr/src/linux/usr/gen_init_cpio.c 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newKmod() pkg.Artifact { func (t Toolchain) newKmod() (pkg.Artifact, string) {
const ( const (
version = "34.2" version = "34.2"
checksum = "0K7POeTKxMhExsaTsnKAC6LUNsRSfe6sSZxWONPbOu-GI_pXOw3toU_BIoqfBhJV" checksum = "0K7POeTKxMhExsaTsnKAC6LUNsRSfe6sSZxWONPbOu-GI_pXOw3toU_BIoqfBhJV"
@@ -28,6 +28,14 @@ func (t Toolchain) newKmod() pkg.Artifact {
Zstd, Zstd,
OpenSSL, OpenSSL,
KernelHeaders, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newLibcap() pkg.Artifact { func (t Toolchain) newLibcap() (pkg.Artifact, string) {
const ( const (
version = "2.77" version = "2.77"
checksum = "2GOTFU4cl2QoS7Dv5wh0c9-hxsQwIzMB9Y_gfAo5xKHqcM13fiHt1RbPkfemzjmB" checksum = "2GOTFU4cl2QoS7Dv5wh0c9-hxsQwIzMB9Y_gfAo5xKHqcM13fiHt1RbPkfemzjmB"
@@ -39,6 +39,14 @@ ln -s ../system/bin/bash /bin/
}, },
Bash, Bash,
Diffutils, 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 }

View File

@@ -6,7 +6,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newLibexpat() pkg.Artifact { func (t Toolchain) newLibexpat() (pkg.Artifact, string) {
const ( const (
version = "2.7.3" version = "2.7.3"
checksum = "GmkoD23nRi9cMT0cgG1XRMrZWD82UcOMzkkvP1gkwSFWCBgeSXMuoLpa8-v8kxW-" checksum = "GmkoD23nRi9cMT0cgG1XRMrZWD82UcOMzkkvP1gkwSFWCBgeSXMuoLpa8-v8kxW-"
@@ -19,6 +19,14 @@ func (t Toolchain) newLibexpat() pkg.Artifact {
pkg.TarBzip2, pkg.TarBzip2,
), nil, (*MakeHelper)(nil), ), nil, (*MakeHelper)(nil),
Bash, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newLibffi() pkg.Artifact { func (t Toolchain) newLibffi() (pkg.Artifact, string) {
const ( const (
version = "3.4.5" version = "3.4.5"
checksum = "apIJzypF4rDudeRoI_n3K7N-zCeBLTbQlHRn9NSAZqdLAWA80mR0gXPTpHsL7oMl" checksum = "apIJzypF4rDudeRoI_n3K7N-zCeBLTbQlHRn9NSAZqdLAWA80mR0gXPTpHsL7oMl"
@@ -14,6 +14,14 @@ func (t Toolchain) newLibffi() pkg.Artifact {
pkg.TarGzip, pkg.TarGzip,
), nil, (*MakeHelper)(nil), ), nil, (*MakeHelper)(nil),
KernelHeaders, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newLibgd() pkg.Artifact { func (t Toolchain) newLibgd() (pkg.Artifact, string) {
const ( const (
version = "2.3.3" version = "2.3.3"
checksum = "8T-sh1_FJT9K9aajgxzh8ot6vWIF-xxjcKAHvTak9MgGUcsFfzP8cAvvv44u2r36" checksum = "8T-sh1_FJT9K9aajgxzh8ot6vWIF-xxjcKAHvTak9MgGUcsFfzP8cAvvv44u2r36"
@@ -21,6 +21,14 @@ mkdir /dev/shm/gd
`, `,
}, (*MakeHelper)(nil), }, (*MakeHelper)(nil),
Zlib, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newLibpsl() pkg.Artifact { func (t Toolchain) newLibpsl() (pkg.Artifact, string) {
const ( const (
version = "0.21.5" version = "0.21.5"
checksum = "XjfxSzh7peG2Vg4vJlL8z4JZJLcXqbuP6pLWkrGCmRxlnYUFTKNBqWGHCxEOlCad" checksum = "XjfxSzh7peG2Vg4vJlL8z4JZJLcXqbuP6pLWkrGCmRxlnYUFTKNBqWGHCxEOlCad"
@@ -21,6 +21,14 @@ test_disable 'int main(){return 0;}' tests/test-is-public-builtin.c
`, `,
}, (*MakeHelper)(nil), }, (*MakeHelper)(nil),
Python, 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 }

View File

@@ -1,10 +1,8 @@
package rosa package rosa
import ( import "hakurei.app/internal/pkg"
"hakurei.app/internal/pkg"
)
func (t Toolchain) newLibseccomp() pkg.Artifact { func (t Toolchain) newLibseccomp() (pkg.Artifact, string) {
const ( const (
version = "2.6.0" version = "2.6.0"
checksum = "mMu-iR71guPjFbb31u-YexBaanKE_nYPjPux-vuBiPfS_0kbwJdfCGlkofaUm-EY" checksum = "mMu-iR71guPjFbb31u-YexBaanKE_nYPjPux-vuBiPfS_0kbwJdfCGlkofaUm-EY"
@@ -24,6 +22,14 @@ ln -s ../system/bin/bash /bin/
Gperf, Gperf,
KernelHeaders, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newLibucontext() pkg.Artifact { func (t Toolchain) newLibucontext() (pkg.Artifact, string) {
const ( const (
version = "1.5" version = "1.5"
checksum = "Ggk7FMmDNBdCx1Z9PcNWWW6LSpjGYssn2vU0GK5BLXJYw7ZxZbA2m_eSgT9TFnIG" checksum = "Ggk7FMmDNBdCx1Z9PcNWWW6LSpjGYssn2vU0GK5BLXJYw7ZxZbA2m_eSgT9TFnIG"
@@ -25,6 +25,14 @@ func (t Toolchain) newLibucontext() pkg.Artifact {
"ARCH=" + linuxArch(), "ARCH=" + linuxArch(),
}, },
Install: "make prefix=/system DESTDIR=/work install", 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 }

View File

@@ -6,7 +6,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newLibxml2() pkg.Artifact { func (t Toolchain) newLibxml2() (pkg.Artifact, string) {
const ( const (
version = "2.15.1" version = "2.15.1"
checksum = "pYzAR3cNrEHezhEMirgiq7jbboLzwMj5GD7SQp0jhSIMdgoU4G9oU9Gxun3zzUIU" checksum = "pYzAR3cNrEHezhEMirgiq7jbboLzwMj5GD7SQp0jhSIMdgoU4G9oU9Gxun3zzUIU"
@@ -21,6 +21,14 @@ func (t Toolchain) newLibxml2() pkg.Artifact {
}, (*MakeHelper)(nil), }, (*MakeHelper)(nil),
Diffutils, Diffutils,
XZ, 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 }

View File

@@ -6,7 +6,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newLibxslt() pkg.Artifact { func (t Toolchain) newLibxslt() (pkg.Artifact, string) {
const ( const (
version = "1.1.45" version = "1.1.45"
checksum = "vw72UbREQnA3YDYuZ9-93hDr9BYCaKV6oh_U4Kt4n1Js_na4E-nFj-ksZnZ0kvEK" checksum = "vw72UbREQnA3YDYuZ9-93hDr9BYCaKV6oh_U4Kt4n1Js_na4E-nFj-ksZnZ0kvEK"
@@ -27,6 +27,14 @@ func (t Toolchain) newLibxslt() pkg.Artifact {
PkgConfig, PkgConfig,
Libxml2, 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 }

View File

@@ -216,6 +216,10 @@ func (t Toolchain) newLLVM() (musl, compilerRT, runtimes, clang pkg.Artifact) {
{"LLVM_ENABLE_LIBXML2", "OFF"}, {"LLVM_ENABLE_LIBXML2", "OFF"},
} }
muslHeaders, _ := t.newMusl(true, []string{
"CC=clang",
})
compilerRT = t.newLLVMVariant("compiler-rt", &llvmAttr{ compilerRT = t.newLLVMVariant("compiler-rt", &llvmAttr{
env: stage0ExclConcat(t, []string{}, env: stage0ExclConcat(t, []string{},
"LDFLAGS="+earlyLDFLAGS(false), "LDFLAGS="+earlyLDFLAGS(false),
@@ -237,9 +241,9 @@ func (t Toolchain) newLLVM() (musl, compilerRT, runtimes, clang pkg.Artifact) {
{"COMPILER_RT_BUILD_XRAY", "OFF"}, {"COMPILER_RT_BUILD_XRAY", "OFF"},
}, },
append: []string{"compiler-rt"}, append: []string{"compiler-rt"},
nonStage0: []pkg.Artifact{t.newMusl(true, []string{ nonStage0: []pkg.Artifact{
"CC=clang", muslHeaders,
})}, },
script: ` script: `
mkdir -p "/work/system/lib/clang/21/lib/" mkdir -p "/work/system/lib/clang/21/lib/"
ln -s \ ln -s \
@@ -255,7 +259,7 @@ ln -s \
`, `,
}) })
musl = t.newMusl(false, stage0ExclConcat(t, []string{ musl, _ = t.newMusl(false, stage0ExclConcat(t, []string{
"CC=clang", "CC=clang",
"LIBCC=/system/lib/clang/21/lib/" + "LIBCC=/system/lib/clang/21/lib/" +
triplet() + "/libclang_rt.builtins.a", triplet() + "/libclang_rt.builtins.a",

View File

@@ -7,7 +7,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newMake() pkg.Artifact { func (t Toolchain) newMake() (pkg.Artifact, string) {
const ( const (
version = "4.4.1" version = "4.4.1"
checksum = "YS_B07ZcAy9PbaK5_vKGj64SrxO2VMpnMKfc9I0Q9IC1rn0RwOH7802pJoj2Mq4a" checksum = "YS_B07ZcAy9PbaK5_vKGj64SrxO2VMpnMKfc9I0Q9IC1rn0RwOH7802pJoj2Mq4a"
@@ -24,9 +24,17 @@ cd "$(mktemp -d)"
nil, "https://ftpmirror.gnu.org/gnu/make/make-"+version+".tar.gz", nil, "https://ftpmirror.gnu.org/gnu/make/make-"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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. // MakeHelper is the [Make] build system helper.
type MakeHelper struct { type MakeHelper struct {

View File

@@ -7,7 +7,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newMeson() pkg.Artifact { func (t Toolchain) newMeson() (pkg.Artifact, string) {
const ( const (
version = "1.10.1" version = "1.10.1"
checksum = "w895BXF_icncnXatT_OLCFe2PYEtg4KrKooMgUYdN-nQVvbFX3PvYWHGEpogsHtd" checksum = "w895BXF_icncnXatT_OLCFe2PYEtg4KrKooMgUYdN-nQVvbFX3PvYWHGEpogsHtd"
@@ -27,9 +27,17 @@ python3 setup.py \
version+"/meson-"+version+".tar.gz", version+"/meson-"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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. // MesonHelper is the [Meson] build system helper.
type MesonHelper struct { type MesonHelper struct {

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newMksh() pkg.Artifact { func (t Toolchain) newMksh() (pkg.Artifact, string) {
const ( const (
version = "59c" version = "59c"
checksum = "0Zj-k4nXEu3IuJY4lvwD2OrC2t27GdZj8SPy4DoaeuBRH1padWb7oREpYgwY8JNq" 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", "https://mbsd.evolvis.org/MirOS/dist/mir/mksh/mksh-R"+version+".tgz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newMuslFts() pkg.Artifact { func (t Toolchain) newMuslFts() (pkg.Artifact, string) {
const ( const (
version = "1.2.7" version = "1.2.7"
checksum = "N_p_ZApX3eHt7xoDCw1hLf6XdJOw7ZSx7xPvpvAP0knG2zgU0zeN5w8tt5Pg60XJ" checksum = "N_p_ZApX3eHt7xoDCw1hLf6XdJOw7ZSx7xPvpvAP0knG2zgU0zeN5w8tt5Pg60XJ"
@@ -25,6 +25,14 @@ func (t Toolchain) newMuslFts() pkg.Artifact {
Automake, Automake,
Libtool, Libtool,
PkgConfig, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newMuslObstack() pkg.Artifact { func (t Toolchain) newMuslObstack() (pkg.Artifact, string) {
const ( const (
version = "1.2.3" version = "1.2.3"
checksum = "tVRY_KjIlkkMszcaRlkKdBVQHIXTT_T_TiMxbwErlILXrOBosocg8KklppZhNdCG" checksum = "tVRY_KjIlkkMszcaRlkKdBVQHIXTT_T_TiMxbwErlILXrOBosocg8KklppZhNdCG"
@@ -25,6 +25,14 @@ func (t Toolchain) newMuslObstack() pkg.Artifact {
Automake, Automake,
Libtool, Libtool,
PkgConfig, 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 }

View File

@@ -6,7 +6,7 @@ func (t Toolchain) newMusl(
headers bool, headers bool,
env []string, env []string,
extra ...pkg.Artifact, extra ...pkg.Artifact,
) pkg.Artifact { ) (pkg.Artifact, string) {
const ( const (
version = "1.2.5" version = "1.2.5"
checksum = "y6USdIeSdHER_Fw2eT2CNjqShEye85oEg2jnOur96D073ukmIpIqDOLmECQroyDb" checksum = "y6USdIeSdHER_Fw2eT2CNjqShEye85oEg2jnOur96D073ukmIpIqDOLmECQroyDb"
@@ -50,10 +50,16 @@ rmdir -v /work/lib
Env: env, Env: env,
}, &helper, }, &helper,
Coreutils, Coreutils,
) ), version
} }
func init() { func init() {
artifactsF[Musl] = func(t Toolchain) pkg.Artifact { artifactsM[Musl] = Metadata{
f: func(t Toolchain) (pkg.Artifact, string) {
return t.newMusl(false, nil) return t.newMusl(false, nil)
},
Name: "musl",
Description: "an implementation of the C standard library",
Website: "https://musl.libc.org/",
} }
} }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newNcurses() pkg.Artifact { func (t Toolchain) newNcurses() (pkg.Artifact, string) {
const ( const (
version = "6.6" version = "6.6"
checksum = "XvWp4xi6hR_hH8XUoGY26L_pqBSDapJYulhzZqPuR0KNklqypqNc1yNXU-nOjf5w" checksum = "XvWp4xi6hR_hH8XUoGY26L_pqBSDapJYulhzZqPuR0KNklqypqNc1yNXU-nOjf5w"
@@ -21,6 +21,14 @@ func (t Toolchain) newNcurses() pkg.Artifact {
}, },
}, },
PkgConfig, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newNinja() pkg.Artifact { func (t Toolchain) newNinja() (pkg.Artifact, string) {
const ( const (
version = "1.13.2" version = "1.13.2"
checksum = "ygKWMa0YV2lWKiFro5hnL-vcKbc_-RACZuPu0Io8qDvgQlZ0dxv7hPNSFkt4214v" checksum = "ygKWMa0YV2lWKiFro5hnL-vcKbc_-RACZuPu0Io8qDvgQlZ0dxv7hPNSFkt4214v"
@@ -33,6 +33,14 @@ cp ninja /work/system/bin/
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, pkg.TarGzip,
), false, ), 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newOpenSSL() pkg.Artifact { func (t Toolchain) newOpenSSL() (pkg.Artifact, string) {
const ( const (
version = "3.5.5" version = "3.5.5"
checksum = "I2Hp1LxcTR8j4G6LFEQMVy6EJH-Na1byI9Ti-ThBot6EMLNRnjGXGq-WXrim3Fkz" checksum = "I2Hp1LxcTR8j4G6LFEQMVy6EJH-Na1byI9Ti-ThBot6EMLNRnjGXGq-WXrim3Fkz"
@@ -35,6 +35,14 @@ func (t Toolchain) newOpenSSL() pkg.Artifact {
Zlib, Zlib,
KernelHeaders, 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 }

View File

@@ -4,7 +4,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newPCRE2() pkg.Artifact { func (t Toolchain) newPCRE2() (pkg.Artifact, string) {
const ( const (
version = "10.43" version = "10.43"
checksum = "iyNw-POPSJwiZVJfUK5qACA6q2uMzP-84WieimN_CskaEkuw5fRnRTZhEv6ry2Yo" checksum = "iyNw-POPSJwiZVJfUK5qACA6q2uMzP-84WieimN_CskaEkuw5fRnRTZhEv6ry2Yo"
@@ -28,6 +28,14 @@ ln -s ../system/bin/toybox /bin/echo
}, },
}, },
Diffutils, 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 }

View File

@@ -6,7 +6,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newPerl() pkg.Artifact { func (t Toolchain) newPerl() (pkg.Artifact, string) {
const ( const (
version = "5.42.0" version = "5.42.0"
checksum = "2KR7Jbpk-ZVn1a30LQRwbgUvg2AXlPQZfzrqCr31qD5-yEsTwVQ_W76eZH-EdxM9" checksum = "2KR7Jbpk-ZVn1a30LQRwbgUvg2AXlPQZfzrqCr31qD5-yEsTwVQ_W76eZH-EdxM9"
@@ -45,9 +45,17 @@ rm -f /system/bin/ps # perl does not like toybox ps
"test_harness", "test_harness",
}, },
Install: "./perl -Ilib -I. installperl --destdir=/work", 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. // newViaPerlModuleBuild installs a perl module via Build.PL.
func (t Toolchain) newViaPerlModuleBuild( 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 ( const (
version = "0.4234" version = "0.4234"
checksum = "ZKxEFG4hE1rqZt52zBL2LRZBMkYzhjb5-cTBXcsyA52EbPeeYyVxU176yAea8-Di" checksum = "ZKxEFG4hE1rqZt52zBL2LRZBMkYzhjb5-cTBXcsyA52EbPeeYyVxU176yAea8-Di"
@@ -82,9 +90,17 @@ func (t Toolchain) newPerlModuleBuild() pkg.Artifact {
"Module-Build-"+version+".tar.gz", "Module-Build-"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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. // newViaPerlMakeMaker installs a perl module via Makefile.PL.
func (t Toolchain) newViaPerlMakeMaker( 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 ( const (
version = "1.07" version = "1.07"
checksum = "cFq4BKFD1MWSoa7lsrPjpdo9kzPqd0jlRcBFUyL1L1isw8m3D_Sge_ff0MAu_9J3" checksum = "cFq4BKFD1MWSoa7lsrPjpdo9kzPqd0jlRcBFUyL1L1isw8m3D_Sge_ff0MAu_9J3"
@@ -124,11 +140,19 @@ func (t Toolchain) newPerlLocaleGettext() pkg.Artifact {
"Locale-gettext-"+version+".tar.gz", "Locale-gettext-"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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 ( const (
version = "1.67" version = "1.67"
checksum = "RdURu9mOfExk_loCp6abxlcQV3FycSNbTqhRS9i6JUqnYfGGEgercK30g0gjYyqe" checksum = "RdURu9mOfExk_loCp6abxlcQV3FycSNbTqhRS9i6JUqnYfGGEgercK30g0gjYyqe"
@@ -138,11 +162,19 @@ func (t Toolchain) newPerlPodParser() pkg.Artifact {
"Pod-Parser-"+version+".tar.gz", "Pod-Parser-"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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 ( const (
version = "1.1" version = "1.1"
checksum = "aZijn4MUqD-wfyZgdcCruCwl4SgDdu25cNmJ4_UvdAk9a7uz4gzMQdoeB6DQ6QOy" checksum = "aZijn4MUqD-wfyZgdcCruCwl4SgDdu25cNmJ4_UvdAk9a7uz4gzMQdoeB6DQ6QOy"
@@ -152,11 +184,19 @@ func (t Toolchain) newPerlSGMLS() pkg.Artifact {
"SGMLSpm-"+version+".tar.gz", "SGMLSpm-"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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 ( const (
version = "2.38" version = "2.38"
checksum = "qerL8Xo7kD0f42PZoiEbmE8Roc_S9pOa27LXelY4DN_0UNy_u5wLrGHI8utNlaiI" checksum = "qerL8Xo7kD0f42PZoiEbmE8Roc_S9pOa27LXelY4DN_0UNy_u5wLrGHI8utNlaiI"
@@ -166,11 +206,19 @@ func (t Toolchain) newPerlTermReadKey() pkg.Artifact {
"TermReadKey-"+version+".tar.gz", "TermReadKey-"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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 ( const (
version = "0.04" version = "0.04"
checksum = "G2p5RHU4_HiZ23ZusBA_enTlVMxz0J4esUx4CGcOPhY6xYTbp-aXWRN6lYZpzBw2" checksum = "G2p5RHU4_HiZ23ZusBA_enTlVMxz0J4esUx4CGcOPhY6xYTbp-aXWRN6lYZpzBw2"
@@ -180,11 +228,19 @@ func (t Toolchain) newPerlTextCharWidth() pkg.Artifact {
"Text-CharWidth-"+version+".tar.gz", "Text-CharWidth-"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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 ( const (
version = "0.06" version = "0.06"
checksum = "Vmo89qLgxUqyQ6QmWJVqu60aQAUjrNKRjFQSXGnvClxofzRjiCa6idzPgJ4VkixM" checksum = "Vmo89qLgxUqyQ6QmWJVqu60aQAUjrNKRjFQSXGnvClxofzRjiCa6idzPgJ4VkixM"
@@ -196,11 +252,19 @@ func (t Toolchain) newPerlTextWrapI18N() pkg.Artifact {
pkg.TarGzip, pkg.TarGzip,
), nil, ), nil,
PerlTextCharWidth, 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 ( const (
version = "1.013.1" version = "1.013.1"
checksum = "Ou_ukcrOa1cgtE3mptinb-os3bdL1SXzbRDFZQF3prrJj-drc3rp_huay7iDLJol" checksum = "Ou_ukcrOa1cgtE3mptinb-os3bdL1SXzbRDFZQF3prrJj-drc3rp_huay7iDLJol"
@@ -210,11 +274,19 @@ func (t Toolchain) newPerlMIMECharset() pkg.Artifact {
"MIME-Charset-"+version+".tar.gz", "MIME-Charset-"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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 ( const (
version = "2019.001" version = "2019.001"
checksum = "ZHVkh7EDgAUHnTpvXsnPAuWpgNoBImtY_9_8TIbo2co_WgUwEb0MtXPhI8pAZ5OH" checksum = "ZHVkh7EDgAUHnTpvXsnPAuWpgNoBImtY_9_8TIbo2co_WgUwEb0MtXPhI8pAZ5OH"
@@ -226,11 +298,19 @@ func (t Toolchain) newPerlUnicodeGCString() pkg.Artifact {
pkg.TarGzip, pkg.TarGzip,
), nil, ), nil,
PerlMIMECharset, 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 ( const (
version = "1.76" version = "1.76"
checksum = "V1MV4KPym1LxSw8CRXqPR3K-l1hGHbT5Ob4t-9xju6R9X_CWyw6hI8wsMaNdHdBY" checksum = "V1MV4KPym1LxSw8CRXqPR3K-l1hGHbT5Ob4t-9xju6R9X_CWyw6hI8wsMaNdHdBY"
@@ -240,6 +320,14 @@ func (t Toolchain) newPerlYAMLTiny() pkg.Artifact {
"YAML-Tiny-"+version+".tar.gz", "YAML-Tiny-"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newPkgConfig() pkg.Artifact { func (t Toolchain) newPkgConfig() (pkg.Artifact, string) {
const ( const (
version = "0.29.2" version = "0.29.2"
checksum = "gi7yAvkwo20Inys1tHbeYZ3Wjdm5VPkrnO0Q6_QZPCAwa1zrA8F4a63cdZDd-717" checksum = "gi7yAvkwo20Inys1tHbeYZ3Wjdm5VPkrnO0Q6_QZPCAwa1zrA8F4a63cdZDd-717"
@@ -17,6 +17,14 @@ func (t Toolchain) newPkgConfig() pkg.Artifact {
{"CFLAGS", "'-Wno-int-conversion'"}, {"CFLAGS", "'-Wno-int-conversion'"},
{"with-internal-glib"}, {"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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newProcps() pkg.Artifact { func (t Toolchain) newProcps() (pkg.Artifact, string) {
const ( const (
version = "4.0.6" version = "4.0.6"
checksum = "pl_fZLvDlv6iZTkm8l_tHFpzTDVFGCiSJEs3eu0zAX6u36AV36P_En8K7JPScRWM" checksum = "pl_fZLvDlv6iZTkm8l_tHFpzTDVFGCiSJEs3eu0zAX6u36AV36P_En8K7JPScRWM"
@@ -27,6 +27,14 @@ func (t Toolchain) newProcps() pkg.Artifact {
Gzip, Gzip,
PkgConfig, 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 }

View File

@@ -7,7 +7,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newPython() pkg.Artifact { func (t Toolchain) newPython() (pkg.Artifact, string) {
const ( const (
version = "3.14.2" version = "3.14.2"
checksum = "7nZunVMGj0viB-CnxpcRego2C90X5wFsMTgsoewd5z-KSZY2zLuqaBwG-14zmKys" checksum = "7nZunVMGj0viB-CnxpcRego2C90X5wFsMTgsoewd5z-KSZY2zLuqaBwG-14zmKys"
@@ -59,19 +59,34 @@ func (t Toolchain) newPython() pkg.Artifact {
OpenSSL, OpenSSL,
Bzip2, Bzip2,
XZ, 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. // newViaPip is a helper for installing python dependencies via pip.
func (t Toolchain) newViaPip( func newViaPip(
name, version, abi, platform, checksum, prefix string, name, description, version, abi, platform, checksum, prefix string,
extra ...pkg.Artifact, extra ...PArtifact,
) pkg.Artifact { ) Metadata {
wname := name + "-" + version + "-py3-" + abi + "-" + platform + ".whl" wname := name + "-" + version + "-py3-" + abi + "-" + platform + ".whl"
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{ return t.New(name+"-"+version, 0, slices.Concat([]pkg.Artifact{
t.Load(Python), t.Load(Python),
}, extra), nil, nil, ` }, extraRes), nil, nil, `
pip3 install \ pip3 install \
--no-index \ --no-index \
--prefix=/system \ --prefix=/system \
@@ -80,10 +95,16 @@ pip3 install \
`, pkg.Path(AbsUsrSrc.Append(wname), false, pkg.NewHTTPGet( `, pkg.Path(AbsUsrSrc.Append(wname), false, pkg.NewHTTPGet(
nil, prefix+wname, nil, prefix+wname,
mustDecode(checksum), 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 ( const (
version = "80.10.1" version = "80.10.1"
checksum = "p3rlwEmy1krcUH1KabprQz1TCYjJ8ZUjOQknQsWh3q-XEqLGEd3P4VrCc7ouHGXU" checksum = "p3rlwEmy1krcUH1KabprQz1TCYjJ8ZUjOQknQsWh3q-XEqLGEd3P4VrCc7ouHGXU"
@@ -101,53 +122,64 @@ pip3 install \
"v"+version+".tar.gz", "v"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, pkg.TarGzip,
))) ))), version
} }
func init() { artifactsF[Setuptools] = Toolchain.newSetuptools } func init() {
artifactsM[Setuptools] = Metadata{
f: Toolchain.newSetuptools,
func (t Toolchain) newPygments() pkg.Artifact { Name: "setuptools",
return t.newViaPip("pygments", "2.19.2", "none", "any", 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", "ak_lwTalmSr7W4Mjy2XBZPG9I6a0gwSy2pS87N8x4QEuZYif0ie9z0OcfRfi9msd",
"https://files.pythonhosted.org/packages/"+ "https://files.pythonhosted.org/packages/"+
"c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/") "c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/",
} )
func init() { artifactsF[Pygments] = Toolchain.newPygments }
func (t Toolchain) newPluggy() pkg.Artifact { artifactsM[Pluggy] = newViaPip(
return t.newViaPip("pluggy", "1.6.0", "none", "any", "pluggy",
"the core framework used by the pytest, tox, and devpi projects",
"1.6.0", "none", "any",
"2HWYBaEwM66-y1hSUcWI1MyE7dVVuNNRW24XD6iJBey4YaUdAK8WeXdtFMQGC-4J", "2HWYBaEwM66-y1hSUcWI1MyE7dVVuNNRW24XD6iJBey4YaUdAK8WeXdtFMQGC-4J",
"https://files.pythonhosted.org/packages/"+ "https://files.pythonhosted.org/packages/"+
"54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/") "54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/",
} )
func init() { artifactsF[Pluggy] = Toolchain.newPluggy }
func (t Toolchain) newPackaging() pkg.Artifact { artifactsM[Packaging] = newViaPip(
return t.newViaPip("packaging", "26.0", "none", "any", "packaging",
"reusable core utilities for various Python Packaging interoperability specifications",
"26.0", "none", "any",
"iVVXcqdwHDskPKoCFUlh2x8J0Gyq-bhO4ns9DvUJ7oJjeOegRYtSIvLV33Bki-pP", "iVVXcqdwHDskPKoCFUlh2x8J0Gyq-bhO4ns9DvUJ7oJjeOegRYtSIvLV33Bki-pP",
"https://files.pythonhosted.org/packages/"+ "https://files.pythonhosted.org/packages/"+
"b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/") "b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/",
} )
func init() { artifactsF[Packaging] = Toolchain.newPackaging }
func (t Toolchain) newIniConfig() pkg.Artifact { artifactsM[IniConfig] = newViaPip(
const version = "2.3.0" "iniconfig",
return t.newViaPip("iniconfig", version, "none", "any", "a small and simple INI-file parser module",
"2.3.0", "none", "any",
"SDgs4S5bXi77aVOeKTPv2TUrS3M9rduiK4DpU0hCmDsSBWqnZcWInq9lsx6INxut", "SDgs4S5bXi77aVOeKTPv2TUrS3M9rduiK4DpU0hCmDsSBWqnZcWInq9lsx6INxut",
"https://github.com/pytest-dev/iniconfig/releases/download/"+ "https://files.pythonhosted.org/packages/"+
"v"+version+"/") "cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/",
} )
func init() { artifactsF[IniConfig] = Toolchain.newIniConfig } artifactsM[PyTest] = newViaPip(
"pytest",
func (t Toolchain) newPyTest() pkg.Artifact { "the pytest framework",
const version = "9.0.2" "9.0.2", "none", "any",
return t.newViaPip("pytest", version, "none", "any",
"IM2wDbLke1EtZhF92zvAjUl_Hms1uKDtM7U8Dt4acOaChMnDg1pW7ib8U0wYGDLH", "IM2wDbLke1EtZhF92zvAjUl_Hms1uKDtM7U8Dt4acOaChMnDg1pW7ib8U0wYGDLH",
"https://github.com/pytest-dev/pytest/releases/download/"+ "https://files.pythonhosted.org/packages/"+
version+"/", "3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/",
t.Load(IniConfig), IniConfig,
t.Load(Packaging), Packaging,
t.Load(Pluggy), Pluggy,
t.Load(Pygments), Pygments,
) )
} }
func init() { artifactsF[PyTest] = Toolchain.newPyTest }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newQEMU() pkg.Artifact { func (t Toolchain) newQEMU() (pkg.Artifact, string) {
const ( const (
version = "10.2.1" version = "10.2.1"
checksum = "rjLTSgHJd3X3Vgpxrsus_ZZiaYLiNix1YhcHaGbLd_odYixwZjCcAIt8CVQPJGdZ" checksum = "rjLTSgHJd3X3Vgpxrsus_ZZiaYLiNix1YhcHaGbLd_odYixwZjCcAIt8CVQPJGdZ"
@@ -93,6 +93,14 @@ EOF
Zstd, Zstd,
DTC, DTC,
KernelHeaders, 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 }

View File

@@ -0,0 +1,93 @@
package rosa_test
import (
"context"
"log"
"os"
"os/signal"
"sync"
"syscall"
"testing"
"hakurei.app/container"
"hakurei.app/container/check"
"hakurei.app/internal/pkg"
"hakurei.app/internal/rosa"
"hakurei.app/message"
)
var (
// skipBuildTest caches whether build tests are skipped.
skipBuildTest bool
// buildTestCache is populated by getCache and must not be accessed directly.
buildTestCache *pkg.Cache
// buildTestCacheCancel cancels buildTestCache.
buildTestCacheCancel context.CancelFunc
// buildTestCacheOnce synchronises access to buildTestCache.
buildTestCacheOnce sync.Once
)
func TestMain(m *testing.M) {
container.TryArgv0(nil)
code := m.Run()
if buildTestCache != nil {
buildTestCacheCancel()
buildTestCache.Close()
}
os.Exit(code)
}
func getCache(t *testing.T) *pkg.Cache {
t.Helper()
const env = "ROSA_BUILD_TEST_CACHE_DIR"
if !testing.Verbose() {
t.Skip("verbose flag not set")
}
buildTestCacheOnce.Do(func() {
if p, ok := os.LookupEnv(env); !ok {
skipBuildTest = true
return
} else if a, err := check.NewAbs(p); err != nil {
t.Fatal(err)
} else {
var ctx context.Context
ctx, buildTestCacheCancel = signal.NotifyContext(context.Background(),
syscall.SIGINT, syscall.SIGTERM)
msg := message.New(log.New(os.Stderr, "rosa: ", 0))
msg.SwapVerbose(true)
if buildTestCache, err = pkg.Open(ctx, msg, 0, a); err != nil {
t.Fatal(err)
}
}
})
if skipBuildTest {
t.Skip(env + " not set")
}
return buildTestCache
}
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)
t.Run(meta.Name, func(t *testing.T) {
t.Parallel()
if pathname, _, err := cache.Cure(a); err != nil {
t.Fatal(err)
} else {
t.Log(pathname)
}
})
}
}

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newRsync() pkg.Artifact { func (t Toolchain) newRsync() (pkg.Artifact, string) {
const ( const (
version = "3.4.1" version = "3.4.1"
checksum = "VBlTsBWd9z3r2-ex7GkWeWxkUc5OrlgDzikAC0pK7ufTjAJ0MbmC_N04oSVTGPiv" checksum = "VBlTsBWd9z3r2-ex7GkWeWxkUc5OrlgDzikAC0pK7ufTjAJ0MbmC_N04oSVTGPiv"
@@ -24,6 +24,14 @@ func (t Toolchain) newRsync() pkg.Artifact {
// circular dependency // circular dependency
SkipCheck: true, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newSquashfsTools() pkg.Artifact { func (t Toolchain) newSquashfsTools() (pkg.Artifact, string) {
const ( const (
version = "4.7.4" version = "4.7.4"
checksum = "pG0E_wkRJFS6bvPYF-hTKZT-cWnvo5BbIzCDZrJZVQDgJOx2Vc3ZfNSEV7Di7cSW" checksum = "pG0E_wkRJFS6bvPYF-hTKZT-cWnvo5BbIzCDZrJZVQDgJOx2Vc3ZfNSEV7Di7cSW"
@@ -16,7 +16,6 @@ func (t Toolchain) newSquashfsTools() pkg.Artifact {
// uses source tree as scratch space // uses source tree as scratch space
Writable: true, Writable: true,
Chmod: true, Chmod: true,
EnterSource: true,
Env: []string{ Env: []string{
"CONFIG=1", "CONFIG=1",
@@ -26,8 +25,8 @@ func (t Toolchain) newSquashfsTools() pkg.Artifact {
"COMP_DEFAULT=zstd", "COMP_DEFAULT=zstd",
"USE_PREBUILT_MANPAGES=y", "USE_PREBUILT_MANPAGES=y",
}, },
ScriptEarly: "cd squashfs-tools",
}, &MakeHelper{ }, &MakeHelper{
SkipConfigure: true, SkipConfigure: true,
InPlace: true, InPlace: true,
@@ -39,6 +38,14 @@ func (t Toolchain) newSquashfsTools() pkg.Artifact {
Zstd, Zstd,
Gzip, Gzip,
Zlib, 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 }

View File

@@ -4,7 +4,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newNSS() pkg.Artifact { func (t Toolchain) newNSS() (pkg.Artifact, string) {
const ( const (
version = "3_120" version = "3_120"
checksum = "9M0SNMrj9BJp6RH2rQnMm6bZWtP0Kgj64D5JNPHF7Cxr2_8kfy3msubIcvEPwC35" checksum = "9M0SNMrj9BJp6RH2rQnMm6bZWtP0Kgj64D5JNPHF7Cxr2_8kfy3msubIcvEPwC35"
@@ -63,20 +63,31 @@ cp -r \
Zlib, Zlib,
KernelHeaders, 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" 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", "k_FGzkRCLjbTWBkuBLzQJ1S8FPAz19neJZlMHm0t10F2Y0hElmvVwdSBRc03Rjo1",
"https://github.com/nix-community/buildcatrust/"+ "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{ return t.New("nss-cacert", 0, []pkg.Artifact{
t.Load(Bash), t.Load(Bash),
t.Load(Python), t.Load(Python),
@@ -92,6 +103,14 @@ buildcatrust \
--ca_unpacked_output /work/system/etc/ssl/certs/unbundled \ --ca_unpacked_output /work/system/etc/ssl/certs/unbundled \
--ca_hashed_unpacked_output /work/system/etc/ssl/certs/hashed \ --ca_hashed_unpacked_output /work/system/etc/ssl/certs/hashed \
--p11kit_output /work/system/etc/ssl/trust-source/ca-bundle.trust.p11-kit --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 }

View File

@@ -7,7 +7,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newStage0() pkg.Artifact { func (t Toolchain) newStage0() (pkg.Artifact, string) {
musl, compilerRT, runtimes, clang := t.NewLLVM() musl, compilerRT, runtimes, clang := t.NewLLVM()
return t.New("rosa-stage0", 0, []pkg.Artifact{ return t.New("rosa-stage0", 0, []pkg.Artifact{
musl, musl,
@@ -39,9 +39,16 @@ tar \
-C / \ -C / \
-f /work/stage0-`+triplet()+`.tar.bz2 \ -f /work/stage0-`+triplet()+`.tar.bz2 \
system bin usr/bin/env 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 ( var (
// stage0 stores the tarball unpack artifact. // stage0 stores the tarball unpack artifact.

View File

@@ -6,7 +6,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newTamaGo() pkg.Artifact { func (t Toolchain) newTamaGo() (pkg.Artifact, string) {
const ( const (
version = "1.26.0" version = "1.26.0"
checksum = "5XkfbpTpSdPJfwtTfUegfdu4LUy8nuZ7sCondiRIxTJI9eQONi8z_O_dq9yDkjw8" checksum = "5XkfbpTpSdPJfwtTfUegfdu4LUy8nuZ7sCondiRIxTJI9eQONi8z_O_dq9yDkjw8"
@@ -35,6 +35,14 @@ rm \
"tamago-go"+version+".tar.gz", "tamago-go"+version+".tar.gz",
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" 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 ( const (
version = "0.8.13" version = "0.8.13"
checksum = "rZ1V1ATDte2WeQZanxLVoiRGdfPXhMlEo5-exX-e-ml8cGn9qOv0ABEUVZpX3wTI" checksum = "rZ1V1ATDte2WeQZanxLVoiRGdfPXhMlEo5-exX-e-ml8cGn9qOv0ABEUVZpX3wTI"
@@ -56,14 +56,21 @@ ln -s ../../system/bin/env /work/usr/bin
Gzip, Gzip,
KernelHeaders, KernelHeaders,
) ), version
} }
func init() { func init() {
artifactsF[Toybox] = func(t Toolchain) pkg.Artifact { artifactsM[Toybox] = Metadata{
f: func(t Toolchain) (pkg.Artifact, string) {
return t.newToybox("", "") return t.newToybox("", "")
},
Name: "toybox",
Description: "many common Linux command line utilities",
Website: "https://landley.net/toybox/",
} }
artifactsF[toyboxEarly] = func(t Toolchain) pkg.Artifact { artifactsM[toyboxEarly] = Metadata{
f: func(t Toolchain) (pkg.Artifact, string) {
return t.newToybox("-early", ` return t.newToybox("-early", `
echo ' echo '
CONFIG_EXPR=y CONFIG_EXPR=y
@@ -72,5 +79,10 @@ CONFIG_AWK=y
CONFIG_DIFF=y CONFIG_DIFF=y
' >> .config ' >> .config
`) `)
},
Name: "toybox-early",
Description: "a build of toybox with unfinished tools enabled to break dependency loops",
Website: "https://landley.net/toybox/",
} }
} }

View File

@@ -6,7 +6,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newUnzip() pkg.Artifact { func (t Toolchain) newUnzip() (pkg.Artifact, string) {
const ( const (
version = "6.0" version = "6.0"
checksum = "fcqjB1IOVRNJ16K5gTGEDt3zCJDVBc7EDSra9w3H93stqkNwH1vaPQs_QGOpQZu1" checksum = "fcqjB1IOVRNJ16K5gTGEDt3zCJDVBc7EDSra9w3H93stqkNwH1vaPQs_QGOpQZu1"
@@ -29,6 +29,14 @@ mv unzip /work/system/bin/
mustDecode(checksum), mustDecode(checksum),
pkg.TarGzip, pkg.TarGzip,
), false, ), 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 }

View File

@@ -6,7 +6,7 @@ import (
"hakurei.app/internal/pkg" "hakurei.app/internal/pkg"
) )
func (t Toolchain) newUtilLinux() pkg.Artifact { func (t Toolchain) newUtilLinux() (pkg.Artifact, string) {
const ( const (
version = "2.41.3" version = "2.41.3"
checksum = "gPTd5JJ2ho_Rd0qainuogcLiiWwKSXEZPXN3yCCRl0m0KBgMaqwFuMjYgu9z8zCH" checksum = "gPTd5JJ2ho_Rd0qainuogcLiiWwKSXEZPXN3yCCRl0m0KBgMaqwFuMjYgu9z8zCH"
@@ -44,6 +44,14 @@ ln -s ../system/bin/bash /bin/
Bash, Bash,
KernelHeaders, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newWayland() pkg.Artifact { func (t Toolchain) newWayland() (pkg.Artifact, string) {
const ( const (
version = "1.24.0" version = "1.24.0"
checksum = "JxgLiFRRGw2D3uhVw8ZeDbs3V7K_d4z_ypDog2LBqiA_5y2vVbUAk5NT6D5ozm0m" checksum = "JxgLiFRRGw2D3uhVw8ZeDbs3V7K_d4z_ypDog2LBqiA_5y2vVbUAk5NT6D5ozm0m"
@@ -32,11 +32,19 @@ echo 'int main(){}' > tests/sanity-test.c
Libffi, Libffi,
Libexpat, Libexpat,
Libxml2, 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 ( const (
version = "1.47" version = "1.47"
checksum = "B_NodZ7AQfCstcx7kgbaVjpkYOzbAQq0a4NOk-SA8bQixAE20FY3p1-6gsbPgHn9" checksum = "B_NodZ7AQfCstcx7kgbaVjpkYOzbAQq0a4NOk-SA8bQixAE20FY3p1-6gsbPgHn9"
@@ -105,6 +113,14 @@ GitLab
Libffi, Libffi,
Libexpat, Libexpat,
Libxml2, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newUtilMacros() pkg.Artifact { func (t Toolchain) newUtilMacros() (pkg.Artifact, string) {
const ( const (
version = "1.17" version = "1.17"
checksum = "vYPO4Qq3B_WGcsBjG0-lfwZ6DZ7ayyrOLqfDrVOgTDcyLChuMGOAAVAa_UXLu5tD" checksum = "vYPO4Qq3B_WGcsBjG0-lfwZ6DZ7ayyrOLqfDrVOgTDcyLChuMGOAAVAa_UXLu5tD"
@@ -12,11 +12,19 @@ func (t Toolchain) newUtilMacros() pkg.Artifact {
"util-macros-"+version+".tar.bz2", "util-macros-"+version+".tar.bz2",
mustDecode(checksum), mustDecode(checksum),
pkg.TarBzip2, 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 ( const (
version = "7.0.23" version = "7.0.23"
checksum = "goxwWxV0jZ_3pNczXFltZWHAhq92x-aEreUGyp5Ns8dBOoOmgbpeNIu1nv0Zx07z" checksum = "goxwWxV0jZ_3pNczXFltZWHAhq92x-aEreUGyp5Ns8dBOoOmgbpeNIu1nv0Zx07z"
@@ -37,11 +45,19 @@ func (t Toolchain) newXproto() pkg.Artifact {
PkgConfig, PkgConfig,
utilMacros, 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 ( const (
version = "1.0.7" version = "1.0.7"
checksum = "bm768RoZZnHRe9VjNU1Dw3BhfE60DyS9D_bgSR-JLkEEyUWT_Hb_lQripxrXto8j" checksum = "bm768RoZZnHRe9VjNU1Dw3BhfE60DyS9D_bgSR-JLkEEyUWT_Hb_lQripxrXto8j"
@@ -64,6 +80,14 @@ func (t Toolchain) newLibXau() pkg.Artifact {
utilMacros, utilMacros,
Xproto, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newXCBProto() pkg.Artifact { func (t Toolchain) newXCBProto() (pkg.Artifact, string) {
const ( const (
version = "1.17.0" version = "1.17.0"
checksum = "_NtbKaJ_iyT7XiJz25mXQ7y-niTzE8sHPvLXZPcqtNoV_-vTzqkezJ8Hp2U1enCv" checksum = "_NtbKaJ_iyT7XiJz25mXQ7y-niTzE8sHPvLXZPcqtNoV_-vTzqkezJ8Hp2U1enCv"
@@ -13,11 +13,19 @@ func (t Toolchain) newXCBProto() pkg.Artifact {
pkg.TarGzip, pkg.TarGzip,
), nil, (*MakeHelper)(nil), ), nil, (*MakeHelper)(nil),
Python, 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 ( const (
version = "1.17.0" version = "1.17.0"
checksum = "hjjsc79LpWM_hZjNWbDDS6qRQUXREjjekS6UbUsDq-RR1_AjgNDxhRvZf-1_kzDd" checksum = "hjjsc79LpWM_hZjNWbDDS6qRQUXREjjekS6UbUsDq-RR1_AjgNDxhRvZf-1_kzDd"
@@ -33,6 +41,14 @@ func (t Toolchain) newXCB() pkg.Artifact {
XCBProto, XCBProto,
Xproto, Xproto,
LibXau, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newXZ() pkg.Artifact { func (t Toolchain) newXZ() (pkg.Artifact, string) {
const ( const (
version = "5.8.2" version = "5.8.2"
checksum = "rXT-XCp9R2q6cXqJ5qenp0cmGPfiENQiU3BWtUVeVgArfRmSsISeUJgvCR3zI0a0" checksum = "rXT-XCp9R2q6cXqJ5qenp0cmGPfiENQiU3BWtUVeVgArfRmSsISeUJgvCR3zI0a0"
@@ -14,6 +14,14 @@ func (t Toolchain) newXZ() pkg.Artifact {
pkg.TarBzip2, pkg.TarBzip2,
), nil, (*MakeHelper)(nil), ), nil, (*MakeHelper)(nil),
Diffutils, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newZlib() pkg.Artifact { func (t Toolchain) newZlib() (pkg.Artifact, string) {
const ( const (
version = "1.3.1" version = "1.3.1"
checksum = "E-eIpNzE8oJ5DsqH4UuA_0GDKuQF5csqI8ooDx2w7Vx-woJ2mb-YtSbEyIMN44mH" checksum = "E-eIpNzE8oJ5DsqH4UuA_0GDKuQF5csqI8ooDx2w7Vx-woJ2mb-YtSbEyIMN44mH"
@@ -20,6 +20,14 @@ func (t Toolchain) newZlib() pkg.Artifact {
Host: `""`, Host: `""`,
Build: `""`, 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 }

View File

@@ -2,7 +2,7 @@ package rosa
import "hakurei.app/internal/pkg" import "hakurei.app/internal/pkg"
func (t Toolchain) newZstd() pkg.Artifact { func (t Toolchain) newZstd() (pkg.Artifact, string) {
const ( const (
version = "1.5.7" version = "1.5.7"
checksum = "4XhfR7DwVkwo1R-TmYDAJOcx9YXv9WSFhcFUe3hWEAMmdMLPhFaznCqYIA19_xxV" checksum = "4XhfR7DwVkwo1R-TmYDAJOcx9YXv9WSFhcFUe3hWEAMmdMLPhFaznCqYIA19_xxV"
@@ -18,6 +18,14 @@ func (t Toolchain) newZstd() pkg.Artifact {
{"CMAKE_BUILD_TYPE", "Release"}, {"CMAKE_BUILD_TYPE", "Release"},
{"CMAKE_INSTALL_LIBDIR", "lib"}, {"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 }