From f1ffb180bc34e16648fa2e83378244dabc60af7d Mon Sep 17 00:00:00 2001 From: Ophestra Date: Mon, 10 Aug 2026 17:50:36 +0900 Subject: [PATCH] internal/rosa: optionally block packages from early stages This helps avoid inadvertently increasing bootstrap input count. Signed-off-by: Ophestra --- internal/rosa/package/python/package.az | 3 +++ internal/rosa/rosa.go | 14 ++++++++++++++ internal/rosa/state.go | 4 ++++ 3 files changed, 21 insertions(+) diff --git a/internal/rosa/package/python/package.az b/internal/rosa/package/python/package.az index 6678409e..eb159e10 100644 --- a/internal/rosa/package/python/package.az +++ b/internal/rosa/package/python/package.az @@ -3,6 +3,9 @@ package python { website = "https://www.python.org"; anitya = 13254; + // too many inputs; early variant available + bootstrap = false; + version# = "3.14.7"; source = remoteTar { url = "https://www.python.org/ftp/python/"+version+ diff --git a/internal/rosa/rosa.go b/internal/rosa/rosa.go index f5a67a98..32c1bd00 100644 --- a/internal/rosa/rosa.go +++ b/internal/rosa/rosa.go @@ -320,6 +320,8 @@ type PackageAttr struct { // Whether to replace /usr/bin/ with a symlink to /bin/. PopulateUsrBin bool + // Whether this package is disallowed from bootstrap stages. + Std bool // Hint for an early variant of toybox to be used when available. Early bool // Whether to omit output colour environment variables. @@ -375,6 +377,14 @@ func (t Toolchain) Append(a []pkg.Artifact, handles ...ArtifactH) []pkg.Artifact return a } +// A BootstrapError describes a package disallowed from bootstrap stages. +type BootstrapError string + +func (e BootstrapError) Error() string { + return "package " + strconv.Quote(string(e)) + + " must not be built by bootstrap stages" +} + // New constructs a [pkg.Artifact] via a build system helper. func (t Toolchain) New( name, version string, @@ -387,6 +397,10 @@ func (t Toolchain) New( attr = new(PackageAttr) } + if attr.Std && !t.stage.isStd() { + panic(BootstrapError(name)) + } + if name == "" || version == "" { panic("name must be non-empty") } diff --git a/internal/rosa/state.go b/internal/rosa/state.go index 9d864a53..767038ba 100644 --- a/internal/rosa/state.go +++ b/internal/rosa/state.go @@ -998,6 +998,8 @@ func (ctx *evalContext) pf( overlay string inputs, runtimes, extra azalea.Array + + bootstrap = true ) if err = args.Apply(map[unique.Handle[azalea.Ident]]any{ k("description"): &meta.Description, @@ -1020,6 +1022,7 @@ func (ctx *evalContext) pf( k("exclusive"): &attr.Exclusive, k("toyboxEarly"): &attr.Early, k("minimal"): &attr.NoToolchain, + k("bootstrap"): &bootstrap, k("checksum"): &kc, k("output"): &output, @@ -1032,6 +1035,7 @@ func (ctx *evalContext) pf( }); err != nil { return } + attr.Std = !bootstrap var inputsH, extraH P if inputsH, err = toHandles(inputs); err != nil { return