diff --git a/internal/rosa/meson.go b/internal/rosa/meson.go index d6f9b1fb..569db9b7 100644 --- a/internal/rosa/meson.go +++ b/internal/rosa/meson.go @@ -5,10 +5,16 @@ import ( "strings" ) -var _meson = H("meson") +var ( + _muon = H("muon") + _meson = H("meson") +) // MesonHelper builds and tests a meson project. type MesonHelper struct { + // Use muon instead of meson. + Muon bool + // Runs after setup. ScriptCompileEarly string // Runs after compile. @@ -29,7 +35,12 @@ type MesonHelper struct { var _ Helper = new(MesonHelper) // extra returns hardcoded meson runtime dependencies. -func (*MesonHelper) extra(int) P { return P{_meson} } +func (attr *MesonHelper) extra(int) P { + if !attr.isPython() { + return P{_muon} + } + return P{_meson} +} // wantsChmod returns false. func (*MesonHelper) wantsChmod() bool { return false } @@ -43,6 +54,12 @@ func (*MesonHelper) scriptEarly() string { return "" } // wantsDir requests a new directory in TMPDIR. func (*MesonHelper) wantsDir() (string, bool) { return `"$(mktemp -d)"`, false } +// isPython returns whether the legacy python implementation is used. +func (attr *MesonHelper) isPython() bool { + return attr != nil && + (!attr.Muon || len(attr.SkipTests) != 0 || attr.InteractiveTest) +} + // script generates the cure script. func (attr *MesonHelper) script(t Toolchain, name string) string { if attr == nil { @@ -54,13 +71,28 @@ func (attr *MesonHelper) script(t Toolchain, name string) string { scriptCompiled = "\n" + scriptCompiled } + python := attr.isPython() + muon := "muon" + compile := " samu " + jobsFlagE + destdir := "-d" + if python { + muon = "meson" + compile = " compile " + jobsFlagE + " " + loadFlagE + destdir = "--destdir" + } + var scriptTest string if !attr.SkipTest && t.opts&OptSkipCheck == 0 { scriptTest = ` -meson test \ +` + muon + ` test \ ` + jobsFlagE + ` \ - -t 10 \ + -t 10` + if python { + scriptTest += ` \ --print-errorlogs` + } else { + scriptTest += " -Rv" + } if attr.InteractiveTest { scriptTest += ` \ --interactive` @@ -71,13 +103,12 @@ meson test \ } return ` -cd "$(mktemp -d)" -meson setup \ +` + muon + ` setup \ ` + strings.Join(slices.Collect(func(yield func(string) bool) { for _, v := range append([]KV{ - {"wrap-mode", "nofallback"}, - {"prefix", "/system"}, - {"buildtype", "release"}, + {"Dwrap_mode", "nofallback"}, + {"Dprefix", "/system"}, + {"Dbuildtype", "release"}, }, attr.Setup...) { s := "-" + v[0] if len(v[0]) > 0 && v[0][0] != 'D' { @@ -91,11 +122,9 @@ meson setup \ } } }), " \\\n\t") + ` \ - . '/usr/src/` + name + `' -meson compile \ - ` + jobsFlagE + ` \ - ` + loadFlagE + scriptCompiled + scriptTest + ` -meson install \ - --destdir=/work + '/usr/src/` + name + `' +` + muon + compile + scriptCompiled + scriptTest + ` +` + muon + ` install \ + ` + destdir + ` /work ` + attr.Script } diff --git a/internal/rosa/package/muon.az b/internal/rosa/package/muon.az index a5c8cda4..512844a9 100644 --- a/internal/rosa/package/muon.az +++ b/internal/rosa/package/muon.az @@ -49,7 +49,7 @@ sed -i '/common.220 fs module/d' subprojects/meson-tests/meson.build /usr/src/muon /boot/muon-bootstrap samu `+jobsFlagE+` `; - check = "./muon test "+jobsFlagE+" -R\n"; + check = "./muon test "+jobsFlagE+" -Rv\n"; install = "./muon install -d /work\n"; }; @@ -57,4 +57,6 @@ sed -i '/common.220 fs module/d' subprojects/meson-tests/meson.build python-early, kernel-headers, ]; + + runtime = [ pkg-config ]; } diff --git a/internal/rosa/state.go b/internal/rosa/state.go index 12a9d9e2..a14f4a5d 100644 --- a/internal/rosa/state.go +++ b/internal/rosa/state.go @@ -878,6 +878,7 @@ func (s *S) getFrame() azalea.Frame { ) (v any, set bool, err error) { var attr MesonHelper if err = args.Apply(map[unique.Handle[azalea.Ident]]any{ + k("muon"): &attr.Muon, k("preCompile"): &attr.ScriptCompileEarly, k("postCompile"): &attr.ScriptCompiled, k("postInstall"): &attr.Script,