diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-05-18 22:21:36 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-05-18 22:29:53 +0900 |
| commit | eb2b53307a195cfdb46187771f137eef93b8c4ba (patch) | |
| tree | a0581bee80cbabb1fee6f67002f457253dc0da74 /internal/rosa/bison.go | |
| parent | 682b3a2ce53252b2bd0c0da86c89c392f74f68e0 (diff) | |
internal/rosa/package: migrate gcc
The azalea implementation used an adaptation of this as testdata.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/rosa/bison.go')
| -rw-r--r-- | internal/rosa/bison.go | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/internal/rosa/bison.go b/internal/rosa/bison.go new file mode 100644 index 00000000..b79ed9e1 --- /dev/null +++ b/internal/rosa/bison.go @@ -0,0 +1,78 @@ +package rosa + +import ( + "slices" + "strconv" + "strings" + + "hakurei.app/internal/pkg" +) + +// skipGNUTests generates a string for skipping specific tests by number in a +// GNU test suite. This is nontrivial because the test suite does not support +// excluding tests in any way, so ranges for all but the skipped tests have to +// be specified instead. +// +// For example, to skip test 764, ranges around the skipped test must be +// specified: +// +// 1-763 765- +// +// Tests are numbered starting from 1. The resulting string is unquoted. +func skipGNUTests(tests ...int) string { + tests = slices.Clone(tests) + slices.Sort(tests) + + var buf strings.Builder + + if tests[0] != 1 { + buf.WriteString("1-") + } + + for i, n := range tests { + if n != 1 && (i == 0 || tests[i-1] != n-1) { + buf.WriteString(strconv.Itoa(n - 1)) + buf.WriteString(" ") + } + if i == len(tests)-1 || tests[i+1] != n+1 { + buf.WriteString(strconv.Itoa(n + 1)) + buf.WriteString("-") + } + } + return buf.String() +} + +func (t Toolchain) newBison() (pkg.Artifact, string) { + const ( + version = "3.8.2" + checksum = "BhRM6K7URj1LNOkIDCFDctSErLS-Xo5d9ba9seg10o6ACrgC1uNhED7CQPgIY29Y" + ) + return t.NewPackage("bison", version, newTar( + "https://ftpmirror.gnu.org/gnu/bison/bison-"+version+".tar.gz", + checksum, + pkg.TarGzip, + ), nil, &MakeHelper{ + Check: []string{ + "TESTSUITEFLAGS=" + jobsFlagE + "' " + skipGNUTests( + // clang miscompiles (SIGILL) + 764, + ) + "'", + "check", + }, + }, + M4, + Diffutils, + Sed, + ), version +} +func init() { + native.MustRegister(&Artifact{ + f: Toolchain.newBison, + + Name: "bison", + Description: "a general-purpose parser generator", + Website: "https://www.gnu.org/software/bison/", + + ID: 193, + }) +} |
