aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/all.go
blob: 04ac52215115071007dfbd1127d94339b10b3448 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package rosa

import (
	"sync"

	"hakurei.app/internal/pkg"
)

// PArtifact is a lazily-initialised [pkg.Artifact] preset.
type PArtifact int

const (
	ACL PArtifact = iota
	Attr
	Autoconf
	Automake
	Bash
	CMake
	Coreutils
	Diffutils
	Findutils
	Fuse
	Gawk
	Gettext
	Git
	Go
	Gperf
	Grep
	Gzip
	Hakurei
	HakureiDist
	IniConfig
	KernelHeaders
	LibXau
	Libexpat
	Libffi
	Libgd
	Libtool
	Libseccomp
	Libxml2
	M4
	Make
	Meson
	Mksh
	NSS
	NSSCACert
	Ninja
	OpenSSL
	Packaging
	Patch
	Perl
	PkgConfig
	Pluggy
	PyTest
	Pygments
	Python
	Rsync
	Sed
	Setuptools
	Toybox
	toyboxEarly
	utilMacros
	Wayland
	WaylandProtocols
	XCB
	XCBProto
	Xproto
	XZ
	Zlib

	buildcatrust

	// _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,
		"attr":              Attr,
		"autoconf":          Autoconf,
		"automake":          Automake,
		"bash":              Bash,
		"cmake":             CMake,
		"coreutils":         Coreutils,
		"diffutils":         Diffutils,
		"findutils":         Findutils,
		"fuse":              Fuse,
		"gawk":              Gawk,
		"gettext":           Gettext,
		"git":               Git,
		"go":                Go,
		"gperf":             Gperf,
		"grep":              Grep,
		"gzip":              Gzip,
		"hakurei":           Hakurei,
		"hakurei-dist":      HakureiDist,
		"iniconfig":         IniConfig,
		"kernel-headers":    KernelHeaders,
		"libXau":            LibXau,
		"libexpat":          Libexpat,
		"libseccomp":        Libseccomp,
		"libxml2":           Libxml2,
		"libffi":            Libffi,
		"libgd":             Libgd,
		"libtool":           Libtool,
		"m4":                M4,
		"make":              Make,
		"meson":             Meson,
		"mksh":              Mksh,
		"nss":               NSS,
		"nss-cacert":        NSSCACert,
		"ninja":             Ninja,
		"openssl":           OpenSSL,
		"packaging":         Packaging,
		"patch":             Patch,
		"perl":              Perl,
		"pkg-config":        PkgConfig,
		"pluggy":            Pluggy,
		"pytest":            PyTest,
		"pygments":          Pygments,
		"python":            Python,
		"rsync":             Rsync,
		"sed":               Sed,
		"setuptools":        Setuptools,
		"toybox":            Toybox,
		"wayland":           Wayland,
		"wayland-protocols": WaylandProtocols,
		"xcb":               XCB,
		"xcb-proto":         XCBProto,
		"xproto":            Xproto,
		"xz":                XZ,
		"zlib":              Zlib,
	}[name]
	return
}