aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/bison.go
blob: 4ca95093528c3fdf0cc00dfc8c97da3e3d1d60f3 (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
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(Toolchain.newBison, &Metadata{
		Name:        "bison",
		Description: "a general-purpose parser generator",
		Website:     "https://www.gnu.org/software/bison/",

		ID: 193,
	})
}