forked from security/hakurei
Initially, libarchive was going to be used, but its test suite simply does not want to work under musl, not even with libiconv. The ticket last discussing this ceased any activity in 2020. Signed-off-by: Ophestra <cat@gensokyo.uk>
224 lines
4.5 KiB
Go
224 lines
4.5 KiB
Go
package rosa
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"hakurei.app/internal/pkg"
|
|
)
|
|
|
|
// PArtifact is a lazily-initialised [pkg.Artifact] preset.
|
|
type PArtifact int
|
|
|
|
const (
|
|
ACL PArtifact = iota
|
|
ArgpStandalone
|
|
Attr
|
|
Autoconf
|
|
Automake
|
|
BC
|
|
Bash
|
|
Binutils
|
|
Bison
|
|
Bzip2
|
|
CMake
|
|
Coreutils
|
|
Curl
|
|
DTC
|
|
Diffutils
|
|
Elfutils
|
|
Findutils
|
|
Flex
|
|
Fuse
|
|
GMP
|
|
GLib
|
|
Gawk
|
|
Gettext
|
|
Git
|
|
Go
|
|
Gperf
|
|
Grep
|
|
Gzip
|
|
Hakurei
|
|
HakureiDist
|
|
IniConfig
|
|
KernelHeaders
|
|
KernelSource
|
|
Kmod
|
|
LibXau
|
|
Libexpat
|
|
Libiconv
|
|
Libpsl
|
|
Libffi
|
|
Libgd
|
|
Libtool
|
|
Libseccomp
|
|
Libucontext
|
|
Libxml2
|
|
M4
|
|
MPC
|
|
MPFR
|
|
Make
|
|
Meson
|
|
Mksh
|
|
MuslFts
|
|
MuslObstack
|
|
NSS
|
|
NSSCACert
|
|
Ninja
|
|
OpenSSL
|
|
PCRE2
|
|
Packaging
|
|
Patch
|
|
Perl
|
|
PkgConfig
|
|
Pluggy
|
|
Procps
|
|
PyTest
|
|
Pygments
|
|
Python
|
|
QEMU
|
|
Rsync
|
|
Sed
|
|
Setuptools
|
|
SquashfsTools
|
|
TamaGo
|
|
Tar
|
|
Texinfo
|
|
Toybox
|
|
toyboxEarly
|
|
Unzip
|
|
UtilLinux
|
|
Wayland
|
|
WaylandProtocols
|
|
XCB
|
|
XCBProto
|
|
Xproto
|
|
XZ
|
|
Zlib
|
|
Zstd
|
|
|
|
buildcatrust
|
|
utilMacros
|
|
|
|
// gcc is a hacked-to-pieces GCC toolchain meant for use in intermediate
|
|
// stages only. This preset and its direct output must never be exposed.
|
|
gcc
|
|
|
|
// Stage0 is a tarball containing all compile-time dependencies of artifacts
|
|
// part of the [Std] toolchain.
|
|
Stage0
|
|
|
|
// _presetEnd is the total number of presets and does not denote a preset.
|
|
_presetEnd
|
|
)
|
|
|
|
var (
|
|
// artifactsF is an array of functions for the result of [PArtifact].
|
|
artifactsF [_presetEnd]func(t Toolchain) pkg.Artifact
|
|
|
|
// artifacts stores the result of artifactsF.
|
|
artifacts [_toolchainEnd][len(artifactsF)]pkg.Artifact
|
|
// artifactsOnce is for lazy initialisation of artifacts.
|
|
artifactsOnce [_toolchainEnd][len(artifactsF)]sync.Once
|
|
)
|
|
|
|
// Load returns the resulting [pkg.Artifact] of [PArtifact].
|
|
func (t Toolchain) Load(p PArtifact) pkg.Artifact {
|
|
artifactsOnce[t][p].Do(func() {
|
|
artifacts[t][p] = artifactsF[p](t)
|
|
})
|
|
return artifacts[t][p]
|
|
}
|
|
|
|
// ResolveName returns a [PArtifact] by name.
|
|
func ResolveName(name string) (p PArtifact, ok bool) {
|
|
p, ok = map[string]PArtifact{
|
|
"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,
|
|
"findutils": Findutils,
|
|
"flex": Flex,
|
|
"fuse": Fuse,
|
|
"gmp": GMP,
|
|
"glib": GLib,
|
|
"gawk": Gawk,
|
|
"gettext": Gettext,
|
|
"git": Git,
|
|
"go": Go,
|
|
"gperf": Gperf,
|
|
"grep": Grep,
|
|
"gzip": Gzip,
|
|
"hakurei": Hakurei,
|
|
"hakurei-dist": HakureiDist,
|
|
"iniconfig": IniConfig,
|
|
"kernel-headers": KernelHeaders,
|
|
"kernel-source": KernelSource,
|
|
"kmod": Kmod,
|
|
"libXau": LibXau,
|
|
"libexpat": Libexpat,
|
|
"libiconv": Libiconv,
|
|
"libpsl": Libpsl,
|
|
"libseccomp": Libseccomp,
|
|
"libucontext": Libucontext,
|
|
"libxml2": Libxml2,
|
|
"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,
|
|
"ninja": Ninja,
|
|
"openssl": OpenSSL,
|
|
"pcre2": PCRE2,
|
|
"packaging": Packaging,
|
|
"patch": Patch,
|
|
"perl": Perl,
|
|
"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
|
|
}
|