From 77917148714110c223a2e45ee4a35c5b1ab34aa2 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Fri, 15 May 2026 12:27:59 +0900 Subject: [PATCH] internal/rosa/azalea: ast and parser This syntax is not final, but acts as a stopgap solution and a proof of concept. Signed-off-by: Ophestra --- internal/rosa/azalea/azalea_test.go | 64 +++------------------------- internal/rosa/azalea/testdata/gcc.az | 57 +++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 59 deletions(-) create mode 100644 internal/rosa/azalea/testdata/gcc.az diff --git a/internal/rosa/azalea/azalea_test.go b/internal/rosa/azalea/azalea_test.go index c3018e94..21a69813 100644 --- a/internal/rosa/azalea/azalea_test.go +++ b/internal/rosa/azalea/azalea_test.go @@ -1,6 +1,7 @@ package azalea_test import ( + _ "embed" "reflect" "strings" "testing" @@ -9,6 +10,9 @@ import ( "hakurei.app/internal/rosa/azalea" ) +//go:embed testdata/gcc.az +var sample string + func TestParse(t *testing.T) { t.Parallel() @@ -56,65 +60,7 @@ func TestParse(t *testing.T) { {"truncated array", `[ "\x00"`, nil, azalea.ExprError(scanner.EOF)}, - {"gcc", ` -package gcc { - description = "The GNU Compiler Collection"; - website = "https://www.gnu.org/software/gcc"; - anitya = 6502; - - version* = "16.1.0"; - source = remoteTar { - url = "https://ftp.tsukuba.wide.ad.jp/software/gcc/releases/"+ - "gcc-"+version+"/gcc-"+version+".tar.gz"; - checksum = "4ASoWbxaA2FW7PAB0zzHDPC5XnNhyaAyjtDPpGzceSLeYnEIXsNYZR3PA_Zu5P0K"; - compress = gzip; - }; - patches = [ - "musl-off64_t-loff_t.patch", - "musl-legacy-lfs.patch", - ]; - - // GCC spends most of its time in its many configure scripts, however - // it also saturates the CPU for a consequential amount of time. - exclusive = true; - - exec = make { - configure = { - "disable-multilib"; - "enable-default-pie"; - "disable-nls"; - "with-gnu-as"; - "with-gnu-ld"; - "with-system-zlib"; - "enable-languages": "c,c++,go"; - "with-native-system-header-dir": "/system/include"; - "with-multilib-list": arch { - amd64, arm64 = "''"; - default = unset; - }; - }; - make = [ - "BOOT_CFLAGS='-O2 -g'", - noop { key = value; }, - "bootstrap", - ]; - - // This toolchain is hacked to pieces, it is not expected to ever work - // well in its current state. That does not matter as long as the - // toolchain it produces passes its own test suite. - skip-check = true; - }; - - inputs = [ - binutils, - - mpc, - zlib, - libucontext, - kernel-headers, - ]; -} -`, []any{azalea.Func{ + {"gcc", sample, []any{azalea.Func{ Ident: "gcc", Package: true, diff --git a/internal/rosa/azalea/testdata/gcc.az b/internal/rosa/azalea/testdata/gcc.az new file mode 100644 index 00000000..c6e5693b --- /dev/null +++ b/internal/rosa/azalea/testdata/gcc.az @@ -0,0 +1,57 @@ +package gcc { + description = "The GNU Compiler Collection"; + website = "https://www.gnu.org/software/gcc"; + anitya = 6502; + + version* = "16.1.0"; + source = remoteTar { + url = "https://ftp.tsukuba.wide.ad.jp/software/gcc/releases/"+ + "gcc-"+version+"/gcc-"+version+".tar.gz"; + checksum = "4ASoWbxaA2FW7PAB0zzHDPC5XnNhyaAyjtDPpGzceSLeYnEIXsNYZR3PA_Zu5P0K"; + compress = gzip; + }; + patches = [ + "musl-off64_t-loff_t.patch", + "musl-legacy-lfs.patch", + ]; + + // GCC spends most of its time in its many configure scripts, however + // it also saturates the CPU for a consequential amount of time. + exclusive = true; + + exec = make { + configure = { + "disable-multilib"; + "enable-default-pie"; + "disable-nls"; + "with-gnu-as"; + "with-gnu-ld"; + "with-system-zlib"; + "enable-languages": "c,c++,go"; + "with-native-system-header-dir": "/system/include"; + "with-multilib-list": arch { + amd64, arm64 = "''"; + default = unset; + }; + }; + make = [ + "BOOT_CFLAGS='-O2 -g'", + noop { key = value; }, + "bootstrap", + ]; + + // This toolchain is hacked to pieces, it is not expected to ever work + // well in its current state. That does not matter as long as the + // toolchain it produces passes its own test suite. + skip-check = true; + }; + + inputs = [ + binutils, + + mpc, + zlib, + libucontext, + kernel-headers, + ]; +}