internal/rosa/package: migrate remaining trivial packages
All checks were successful
Test / Create distribution (push) Successful in 1m5s
Test / Sandbox (push) Successful in 2m49s
Test / ShareFS (push) Successful in 3m48s
Test / Hakurei (push) Successful in 4m0s
Test / Sandbox (race detector) (push) Successful in 5m32s
Test / Hakurei (race detector) (push) Successful in 6m31s
Test / Flake checks (push) Successful in 1m22s

The rest are migrated individually.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-05-20 05:57:13 +09:00
parent 1a9974ffdc
commit 656059278d
24 changed files with 341 additions and 419 deletions

View File

@@ -91,6 +91,10 @@ func main() {
addr net.UnixAddr
)
c := command.New(os.Stderr, log.Printf, "mbf", func([]string) error {
if !rosa.Native().HasStage0() {
return pkg.UnsupportedArchError(runtime.GOARCH)
}
if flagPT {
log.Println("parsed in", rosa.ParseTime())
}
@@ -127,7 +131,7 @@ func main() {
}
rosa.Native().DropCaches(flagArch, flags)
if !rosa.HasStage0() {
if !rosa.Native().HasStage0() {
return pkg.UnsupportedArchError(flagArch)
}
}

View File

@@ -0,0 +1,20 @@
package rdfind {
description = "a program that finds duplicate files";
website = "https://rdfind.pauldreik.se";
anitya = 231641;
version* = "1.8.0";
source = remoteTar {
url = "https://rdfind.pauldreik.se/rdfind-"+version+".tar.gz";
checksum = "PoaeJ2WIG6yyfe5VAYZlOdAQiR3mb3WhAUMj2ziTCx_IIEal4640HMJUb4SzU9U3";
compress = gzip;
};
exec = make {
// test suite hard codes /bin/echo
preCheck = "\nln -s ../system/bin/toybox /bin/echo\n";
};
inputs = [ nettle ];
runtime = [ nettle ];
}

View File

@@ -0,0 +1,27 @@
package rsync {
description = "an open source utility that provides fast incremental file transfer";
website = "https://rsync.samba.org";
anitya = 4217;
version* = "3.4.2";
source = remoteTar {
url = "https://download.samba.org/pub/rsync/src/"+
"rsync-"+version+".tar.gz";
checksum = "t7PxS4WHXzefLMKKc_3hJgxUmlGG6KgHMZ8i4DZvCQAUAizxbclNKwfLyOHyq5BX";
compress = gzip;
};
toyboxEarly = true;
exec = make {
configure = {
"disable-openssl";
"disable-xxhash";
"disable-zstd";
"disable-lz4";
};
// circular dependency
skipCheck = true;
};
}

View File

@@ -0,0 +1,51 @@
package squashfs-tools {
description = "tools to create and extract Squashfs filesystems";
website = "https://github.com/plougher/squashfs-tools";
anitya = 4879;
version* = "4.7.5";
source = remoteGitHubRelease {
suffix = "plougher/squashfs-tools";
tag = version;
name = "squashfs-tools-"+version+".tar.gz";
checksum = "rF52wLQP-jeAmcD-48wqJcck8ZWRFwkax3T-7snaRf5EBnCQQh0YypMY9lwcivLz";
compress = gzip;
};
// uses source tree as scratch space
writable = true;
chmod = true;
env = [
"CONFIG=1",
"XZ_SUPPORT=0",
"LZO_SUPPORT=0",
"LZ4_SUPPORT=0",
"COMP_DEFAULT=zstd",
"USE_PREBUILT_MANPAGES=y",
];
early = "cd squashfs-tools";
exec = make {
skipConfigure = true;
inPlace = true;
skipCheck = true;
install = "make INSTALL_PREFIX=/work/system install";
};
inputs = [
sed,
zstd,
gzip,
zlib,
];
runtime = [
zstd,
gzip,
zlib,
];
}

View File

@@ -0,0 +1,17 @@
package stage0-dist {
description = "Rosa OS stage0 bootstrap seed";
version* = "20260504";
output = remoteTar {
url = "https://hakurei.app/seed/"+version+"/"+
"stage0-"+triple+".tar.bz2";
checksum = arch {
amd64 = "IQjFDkiAVLo1XzflgMMiLP3gnVY2hhDMTzl-QqJDCQhcLQ3lLtRzjI5WCxGyW_lk";
arm64 = "6fmwl2Umx2QssKQvxxb1JOGkAjzfA_MXKku0jVdGjYGb35OvwEVA5NYtd0HIy3yH";
riscv64 = "Z2ODV0rIoo9iQRUIu35bsaOBeXc_9qQfGcyb2aGneatzNUJlXh5emSpEV2bOklUL";
default = 0;
};
compress = bzip2;
};
}

View File

@@ -0,0 +1,38 @@
package strace {
description = "a diagnostic, debugging and instructional userspace utility";
website = "https://strace.io";
anitya = 4897;
version* = "6.19";
source = remoteFile {
url = "https://strace.io/files/"+version+"/strace-"+version+".tar.xz";
checksum = "XJFJJ9XLh_1rHS3m_QNjLKzkkBAooE-QT9p9lJNNWowAmd54IJop_fI4-IFtjeeL";
};
early = `
sed -i 's/off64_t/off_t/g' \
tests/readahead.c \
tests/sync_file_range.c \
tests/sync_file_range2.c
sed -i 's/unsigned int msg_len;$/uint32_t msg_len;/g' \
tests/nlattr.c
`;
exec = make {
configure = {
// tests broken on clang
"disable-gcc-Werror";
"enable-mpers": "no";
};
// does not compile on musl
skipCheck = true;
};
inputs = [
xz,
kernel-headers,
];
}

View File

@@ -0,0 +1,59 @@
package util-linux {
description = "a random collection of Linux utilities";
website = "https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git";
anitya = 8179;
// release candidates confuse Anitya
latest = anityaFallback;
version* = "2.42";
source = remoteTar {
url = "https://www.kernel.org/pub/linux/utils/util-linux/"+
"v"+join {
elems = slice {
elems = split {
s = version;
sep = ".";
n = 3;
};
end = 2;
};
sep = ".";
}+"/util-linux-"+version+".tar.gz";
checksum = "Uy8Nxg9DsW5YwDoeaZeZTyQJ2YmnaaL_fSsQXsLUiFFUd7wnZeD_3SEaVO7ClJlk";
compress = gzip;
};
early = "\nln -s ../system/bin/bash /bin/\n";
exec = make {
configure = {
"disable-use-tty-group";
"disable-makeinstall-setuid";
"disable-makeinstall-chown";
"enable-fs-paths-default": join {
elems = [
"/system/sbin",
"/system/sbin/fs.d",
"/system/sbin/fs",
];
sep = ":";
};
"disable-su";
"disable-liblastlog2";
"disable-pam-lastlog2";
};
// check script claims:
// For development purpose only.
// Don't execute on production system!
skipCheck = true;
};
inputs = [
bash,
kernel-headers,
];
}

View File

@@ -0,0 +1,30 @@
package vim {
description = "a greatly improved version of the good old UNIX editor Vi";
website = "https://www.vim.org";
anitya = 5092;
version* = "9.2.0461";
source = remoteGitHub {
suffix = "vim/vim";
tag = "v"+version;
checksum = "18Rr_5oIf_PkKuqVkN4CMZIGkZEgpN1vamlrsvPLBjn4mN98CRuoJmhzRZ7MoVYM";
};
writable = true;
chmod = true;
enterSource = true;
exec = make {
inPlace = true;
configure = {
"with-tlib": "ncursesw";
};
check = [ "test" ];
// very expensive
skipCheck = true;
};
inputs = [ ncurses ];
runtime = [ ncurses ];
}

View File

@@ -0,0 +1,18 @@
package xz {
description = "XZ Utils";
website = "https://tukaani.org/xz";
anitya = 5277;
version* = "5.8.3";
source = remoteGitHubRelease {
suffix = "tukaani-project/xz";
tag = "v"+version;
name = "xz-"+version+".tar.bz2";
checksum = "nCdayphPGdIdVoAZ2hR4vYlhDG9LeVKho_i7ealTud4Vxy5o5dWe0VwFlN7utuUL";
compress = bzip2;
};
exec = make {};
inputs = [ diffutils ];
}

View File

@@ -0,0 +1,28 @@
package zlib {
description = "lossless data-compression library";
website = "https://zlib.net";
anitya = 5303;
version* = "1.3.2";
source = remoteTar {
url = "https://www.zlib.net/fossils/zlib-"+version+".tar.gz";
checksum = "KHZrePe42vL2XvOUE3KlJkp1UgWhWkl0jjT_BOvFhuM4GzieEH9S7CioepOFVGYB";
compress = gzip;
};
exec = cmake {
cache = {
"CMAKE_C_FLAGS": "-fPIC";
"ZLIB_BUILD_TESTING": "ON";
"ZLIB_BUILD_SHARED": "ON";
"ZLIB_BUILD_STATIC": "ON";
"ZLIB_BUILD_MINIZIP": "OFF";
"ZLIB_INSTALL": "ON";
"ZLIB_PREFIX": "OFF";
};
// ninja dependency loop
make = true;
};
}

View File

@@ -0,0 +1,31 @@
package zstd {
description = "a fast compression algorithm";
website = "https://facebook.github.io/zstd";
anitya = 12083;
version* = "1.5.7";
source = remoteGitHubRelease {
suffix = "facebook/zstd";
tag = "v"+version;
name = "zstd-"+version+".tar.gz";
checksum = "4XhfR7DwVkwo1R-TmYDAJOcx9YXv9WSFhcFUe3hWEAMmdMLPhFaznCqYIA19_xxV";
compress = gzip;
};
// tests Makefile assumes writable source
writable = true;
chmod = true;
exec = cmake {
append = [ "build", "cmake" ];
test = `
make -C /usr/src/zstd/tests datagen
ZSTD_BIN=/cure/programs/zstd /usr/src/zstd/tests/playTests.sh
`;
};
inputs = [
make,
diffutils,
];
}

View File

@@ -1,35 +0,0 @@
package rosa
import "hakurei.app/internal/pkg"
func (t Toolchain) newRdfind() (pkg.Artifact, string) {
const (
version = "1.8.0"
checksum = "PoaeJ2WIG6yyfe5VAYZlOdAQiR3mb3WhAUMj2ziTCx_IIEal4640HMJUb4SzU9U3"
)
return t.NewPackage("rdfind", version, newTar(
"https://rdfind.pauldreik.se/rdfind-"+version+".tar.gz",
checksum,
pkg.TarGzip,
), nil, &MakeHelper{
// test suite hard codes /bin/echo
ScriptCheckEarly: `
ln -s ../system/bin/toybox /bin/echo
`,
},
Nettle,
), version
}
func init() {
native.mustRegister(Toolchain.newRdfind, &Metadata{
Name: "rdfind",
Description: "a program that finds duplicate files",
Website: "https://rdfind.pauldreik.se/",
Dependencies: P{
Nettle,
},
ID: 231641,
})
}

View File

@@ -224,8 +224,14 @@ const (
THostNet
)
// The Mksh shell is added by [Toolchain.New] and used by almost all packages.
var Mksh = H("mksh")
var (
// stage0Dist is a binary distribution of an initial toolchain [Stage]. It
// is used by [Toolchain.New] as stageEarly.
stage0Dist = H("stage0-dist")
// The Mksh shell is added by [Toolchain.New] and used by almost all packages.
Mksh = H("mksh")
)
// New returns a [pkg.Artifact] based on a [Toolchain] via s.
func (t Toolchain) New(

View File

@@ -1,37 +0,0 @@
package rosa
import "hakurei.app/internal/pkg"
func (t Toolchain) newRsync() (pkg.Artifact, string) {
const (
version = "3.4.2"
checksum = "t7PxS4WHXzefLMKKc_3hJgxUmlGG6KgHMZ8i4DZvCQAUAizxbclNKwfLyOHyq5BX"
)
return t.NewPackage("rsync", version, newTar(
"https://download.samba.org/pub/rsync/src/"+
"rsync-"+version+".tar.gz",
checksum,
pkg.TarGzip,
), &PackageAttr{
Flag: TEarly,
}, &MakeHelper{
Configure: []KV{
{"disable-openssl"},
{"disable-xxhash"},
{"disable-zstd"},
{"disable-lz4"},
},
// circular dependency
SkipCheck: true,
}), version
}
func init() {
native.mustRegister(Toolchain.newRsync, &Metadata{
Name: "rsync",
Description: "an open source utility that provides fast incremental file transfer",
Website: "https://rsync.samba.org/",
ID: 4217,
})
}

View File

@@ -1,58 +0,0 @@
package rosa
import "hakurei.app/internal/pkg"
func (t Toolchain) newSquashfsTools() (pkg.Artifact, string) {
const (
version = "4.7.5"
checksum = "rF52wLQP-jeAmcD-48wqJcck8ZWRFwkax3T-7snaRf5EBnCQQh0YypMY9lwcivLz"
)
return t.NewPackage("squashfs-tools", version, newFromGitHubRelease(
"plougher/squashfs-tools",
version,
"squashfs-tools-"+version+".tar.gz",
checksum,
pkg.TarGzip,
), &PackageAttr{
// uses source tree as scratch space
Writable: true,
Chmod: true,
Env: []string{
"CONFIG=1",
"XZ_SUPPORT=0",
"LZO_SUPPORT=0",
"LZ4_SUPPORT=0",
"COMP_DEFAULT=zstd",
"USE_PREBUILT_MANPAGES=y",
},
ScriptEarly: "cd squashfs-tools",
}, &MakeHelper{
SkipConfigure: true,
InPlace: true,
SkipCheck: true,
Install: "make INSTALL_PREFIX=/work/system install",
},
Sed,
Zstd,
Gzip,
Zlib,
), version
}
func init() {
native.mustRegister(Toolchain.newSquashfsTools, &Metadata{
Name: "squashfs-tools",
Description: "tools to create and extract Squashfs filesystems",
Website: "https://github.com/plougher/squashfs-tools",
Dependencies: P{
Zstd,
Gzip,
Zlib,
},
ID: 4879,
})
}

View File

@@ -29,31 +29,11 @@ tar \
})
}
func init() {
meta := Metadata{
Name: "stage0-dist",
Description: "Rosa OS stage0 bootstrap seed",
Version: "20260504",
}
native.MustRegister(meta.Name, func(t Toolchain) (*Metadata, pkg.Artifact) {
return &meta, newTar(
"https://hakurei.app/seed/"+meta.Version+"/"+
"stage0-"+t.triple()+".tar.bz2",
perArch[string]{
"amd64": "IQjFDkiAVLo1XzflgMMiLP3gnVY2hhDMTzl-QqJDCQhcLQ3lLtRzjI5WCxGyW_lk",
"arm64": "6fmwl2Umx2QssKQvxxb1JOGkAjzfA_MXKku0jVdGjYGb35OvwEVA5NYtd0HIy3yH",
"riscv64": "Z2ODV0rIoo9iQRUIu35bsaOBeXc_9qQfGcyb2aGneatzNUJlXh5emSpEV2bOklUL",
}.unwrap(t.S),
pkg.TarBzip2,
)
})
}
// HasStage0 returns whether a stage0 distribution is available.
func HasStage0() (ok bool) {
func (s *S) HasStage0() (ok bool) {
func() {
defer func() { ok = recover() == nil }()
native.New(stageEarly).Load(stage0Dist)
s.New(stageEarly).MustLoad(stage0Dist)
}()
return
}

View File

@@ -189,6 +189,8 @@ type S struct {
// Target architecture.
arch string
// For matching arch-specific values.
identArch unique.Handle[azalea.Ident]
// For initialising arch.
archOnce sync.Once
@@ -227,6 +229,7 @@ func (s *S) wantsArch() {
s.archOnce.Do(func() {
if s.arch == "" {
s.arch = runtime.GOARCH
s.identArch = unique.Make(azalea.Ident(s.arch))
}
})
}
@@ -245,6 +248,7 @@ func (s *S) DropCaches(targetArch string, flags int) {
}
s.arch = targetArch
s.identArch = unique.Make(azalea.Ident(s.arch))
s.opts = flags
for i := range s.c {
s.c[i].Clear()
@@ -422,10 +426,7 @@ func (s *S) getFrame() azalea.Frame {
return unique.Make(azalea.Ident(name))
}
var (
identDefault = k("default")
identArch = k(s.arch)
)
var identDefault = k("default")
enumCompress := map[unique.Handle[azalea.Ident]]any{
k("uncompressed"): uint32(pkg.TarUncompressed),
@@ -434,6 +435,7 @@ func (s *S) getFrame() azalea.Frame {
}
s.frame.Val = map[unique.Handle[azalea.Ident]]any{
k("triple"): s.triple(),
k("linuxArch"): s.linuxArch(),
k("earlyLDFLAGS"): s.earlyLDFLAGS(false),
@@ -625,7 +627,7 @@ func (s *S) getFrame() azalea.Frame {
fallback = arg.V
continue
case identArch:
case s.identArch:
return arg.V, true, nil
}
}

View File

@@ -55,8 +55,6 @@ var (
M4 = H("m4")
NSS = H("nss")
NSSCACert = H("nss-cacert")
Ncurses = H("ncurses")
Nettle = H("nettle")
Patch = H("patch")
Pixman = H("pixman")
PkgConfig = H("pkg-config")
@@ -71,13 +69,11 @@ var (
WaylandProtocols = H("wayland-protocols")
XCB = H("xcb")
XCBProto = H("xcb-proto")
XZ = H("xz")
Xkbcomp = H("xkbcomp")
XkeyboardConfig = H("xkeyboard-config")
XorgProto = H("xorgproto")
Zlib = H("zlib")
Zstd = H("zstd")
stage0Dist = H("stage0-dist")
llvmSource = H("llvm-project")
earlyCompilerRT = H("early-compiler-rt")
earlyRuntimes = H("early-runtimes")

View File

@@ -1,47 +0,0 @@
package rosa
import "hakurei.app/internal/pkg"
func (t Toolchain) newStrace() (pkg.Artifact, string) {
const (
version = "6.19"
checksum = "XJFJJ9XLh_1rHS3m_QNjLKzkkBAooE-QT9p9lJNNWowAmd54IJop_fI4-IFtjeeL"
)
return t.NewPackage("strace", version, pkg.NewHTTPGet(
nil, "https://strace.io/files/"+version+"/strace-"+version+".tar.xz",
mustDecode(checksum),
), &PackageAttr{
// patch not possible with nonzero SourceKind
ScriptEarly: `
sed -i 's/off64_t/off_t/g' \
tests/readahead.c \
tests/sync_file_range.c \
tests/sync_file_range2.c
sed -i 's/unsigned int msg_len;$/uint32_t msg_len;/g' \
tests/nlattr.c
`,
}, &MakeHelper{
Configure: []KV{
// tests broken on clang
{"disable-gcc-Werror"},
{"enable-mpers", "no"},
},
// does not compile on musl, hangs after patch
SkipCheck: true,
},
XZ,
KernelHeaders,
), version
}
func init() {
native.mustRegister(Toolchain.newStrace, &Metadata{
Name: "strace",
Description: "a diagnostic, debugging and instructional userspace utility",
Website: "https://strace.io/",
ID: 4897,
})
}

View File

@@ -1,60 +0,0 @@
package rosa
import (
"strings"
"hakurei.app/internal/pkg"
)
func (t Toolchain) newUtilLinux() (pkg.Artifact, string) {
const (
version = "2.42"
checksum = "Uy8Nxg9DsW5YwDoeaZeZTyQJ2YmnaaL_fSsQXsLUiFFUd7wnZeD_3SEaVO7ClJlk"
)
return t.NewPackage("util-linux", version, newTar(
"https://www.kernel.org/pub/linux/utils/util-linux/"+
"v"+strings.Join(strings.SplitN(version, ".", 3)[:2], ".")+
"/util-linux-"+version+".tar.gz",
checksum,
pkg.TarGzip,
), &PackageAttr{
ScriptEarly: `
ln -s ../system/bin/bash /bin/
`,
}, &MakeHelper{
Configure: []KV{
{"disable-use-tty-group"},
{"disable-makeinstall-setuid"},
{"disable-makeinstall-chown"},
{"enable-fs-paths-default", "" +
"/system/sbin:" +
"/system/sbin/fs.d:" +
"/system/sbin/fs"},
{"disable-su"},
{"disable-liblastlog2"},
{"disable-pam-lastlog2"},
},
// check script claims:
// For development purpose only.
// Don't execute on production system!
SkipCheck: true,
},
Bash,
KernelHeaders,
), version
}
func init() {
native.mustRegister(Toolchain.newUtilLinux, &Metadata{
Name: "util-linux",
Description: "a random collection of Linux utilities",
Website: "https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git",
ID: 8179,
// release candidates confuse Anitya
latest: (*Versions).getStable,
})
}

View File

@@ -1,43 +0,0 @@
package rosa
import "hakurei.app/internal/pkg"
func (t Toolchain) newVIM() (pkg.Artifact, string) {
const (
version = "9.2.0461"
checksum = "18Rr_5oIf_PkKuqVkN4CMZIGkZEgpN1vamlrsvPLBjn4mN98CRuoJmhzRZ7MoVYM"
)
return t.NewPackage("vim", version, newFromGitHub(
"vim/vim",
"v"+version,
checksum,
), &PackageAttr{
Chmod: true,
Writable: true,
EnterSource: true,
}, &MakeHelper{
InPlace: true,
Configure: []KV{
{"with-tlib", "ncursesw"},
},
Check: []string{"test"},
// very expensive
SkipCheck: true,
},
Ncurses,
), version
}
func init() {
native.mustRegister(Toolchain.newVIM, &Metadata{
Name: "vim",
Description: "a greatly improved version of the good old UNIX editor Vi",
Website: "https://www.vim.org",
Dependencies: P{
Ncurses,
},
ID: 5092,
})
}

View File

@@ -1,28 +0,0 @@
package rosa
import "hakurei.app/internal/pkg"
func (t Toolchain) newXZ() (pkg.Artifact, string) {
const (
version = "5.8.3"
checksum = "nCdayphPGdIdVoAZ2hR4vYlhDG9LeVKho_i7ealTud4Vxy5o5dWe0VwFlN7utuUL"
)
return t.NewPackage("xz", version, newFromGitHubRelease(
"tukaani-project/xz",
"v"+version,
"xz-"+version+".tar.bz2",
checksum,
pkg.TarBzip2,
), nil, (*MakeHelper)(nil),
Diffutils,
), version
}
func init() {
native.mustRegister(Toolchain.newXZ, &Metadata{
Name: "xz",
Description: "XZ Utils",
Website: "https://tukaani.org/xz/",
ID: 5277,
})
}

View File

@@ -1,38 +0,0 @@
package rosa
import "hakurei.app/internal/pkg"
func (t Toolchain) newZlib() (pkg.Artifact, string) {
const (
version = "1.3.2"
checksum = "KHZrePe42vL2XvOUE3KlJkp1UgWhWkl0jjT_BOvFhuM4GzieEH9S7CioepOFVGYB"
)
return t.NewPackage("zlib", version, newTar(
"https://www.zlib.net/fossils/zlib-"+version+".tar.gz",
checksum,
pkg.TarGzip,
), nil, &CMakeHelper{
Cache: []KV{
{"CMAKE_C_FLAGS", "-fPIC"},
{"ZLIB_BUILD_TESTING", "ON"},
{"ZLIB_BUILD_SHARED", "ON"},
{"ZLIB_BUILD_STATIC", "ON"},
{"ZLIB_BUILD_MINIZIP", "OFF"},
{"ZLIB_INSTALL", "ON"},
{"ZLIB_PREFIX", "OFF"},
},
// ninja dependency loop
Make: true,
}), version
}
func init() {
native.mustRegister(Toolchain.newZlib, &Metadata{
Name: "zlib",
Description: "lossless data-compression library",
Website: "https://zlib.net/",
ID: 5303,
})
}

View File

@@ -1,39 +0,0 @@
package rosa
import "hakurei.app/internal/pkg"
func (t Toolchain) newZstd() (pkg.Artifact, string) {
const (
version = "1.5.7"
checksum = "4XhfR7DwVkwo1R-TmYDAJOcx9YXv9WSFhcFUe3hWEAMmdMLPhFaznCqYIA19_xxV"
)
return t.NewPackage("zstd", version, newFromGitHubRelease(
"facebook/zstd",
"v"+version,
"zstd-"+version+".tar.gz",
checksum,
pkg.TarGzip,
), &PackageAttr{
// tests Makefile assumes writable source
Writable: true,
Chmod: true,
}, &CMakeHelper{
Append: []string{"build", "cmake"},
Test: `
make -C /usr/src/zstd/tests datagen
ZSTD_BIN=/cure/programs/zstd /usr/src/zstd/tests/playTests.sh
`,
},
Make,
Diffutils,
), version
}
func init() {
native.mustRegister(Toolchain.newZstd, &Metadata{
Name: "zstd",
Description: "a fast compression algorithm",
Website: "https://facebook.github.io/zstd/",
ID: 12083,
})
}