From e2bb68489dadf8b708387c062c8dcb676645bd90 Mon Sep 17 00:00:00 2001 From: Li Jie Date: Fri, 14 Nov 2025 12:38:54 +0800 Subject: [PATCH] build: override vars in alt pkg --- internal/build/build.go | 48 +++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/internal/build/build.go b/internal/build/build.go index 0de41c43..5faca519 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -132,9 +132,11 @@ type Config struct { CheckLinkArgs bool // check linkargs valid ForceEspClang bool // force to use esp-clang Tags string - GlobalRewrites map[string]string // pkg.name => data + GlobalRewrites map[string]Rewrites // pkg => var => value } +type Rewrites map[string]string + func NewDefaultConf(mode Mode) *Config { bin := os.Getenv("GOBIN") if bin == "" { @@ -336,8 +338,8 @@ func Do(args []string, conf *Config) ([]Package, error) { } // default runtime globals must be registered before packages are built - addDefaultGlobalString(conf, "runtime.defaultGOROOT="+runtime.GOROOT(), nil) - addDefaultGlobalString(conf, "runtime.buildVersion="+runtime.Version(), nil) + addGlobalString(conf, "runtime.defaultGOROOT="+runtime.GOROOT(), nil) + addGlobalString(conf, "runtime.buildVersion="+runtime.Version(), nil) pkgs, err := buildAllPkgs(ctx, initial, verbose) check(err) if mode == ModeGen { @@ -626,10 +628,6 @@ var ( ) func addGlobalString(conf *Config, arg string, mainPkgs []string) { - addGlobalStringWith(conf, arg, mainPkgs, false) -} - -func addDefaultGlobalString(conf *Config, arg string, mainPkgs []string) { addGlobalStringWith(conf, arg, mainPkgs, true) } @@ -648,18 +646,22 @@ func addGlobalStringWith(conf *Config, arg string, mainPkgs []string, skipIfExis return } if conf.GlobalRewrites == nil { - conf.GlobalRewrites = make(map[string]string) + conf.GlobalRewrites = make(map[string]Rewrites) } - suffix := arg[dot:eq] + varName := arg[dot+1 : eq] value := arg[eq+1:] for _, realPkg := range pkgs { - name := realPkg + suffix + vars := conf.GlobalRewrites[realPkg] + if vars == nil { + vars = make(Rewrites) + conf.GlobalRewrites[realPkg] = vars + } if skipIfExists { - if _, exists := conf.GlobalRewrites[name]; exists { + if _, exists := vars[varName]; exists { continue } } - conf.GlobalRewrites[name] = value + vars[varName] = value } } @@ -1177,18 +1179,18 @@ func allPkgs(ctx *context, initial []*packages.Package, verbose bool) (all []*aP func collectRewriteVars(ctx *context, pkgPath string) map[string]string { var rewrites map[string]string - add := func(name, value string) { - if rewrites == nil { - rewrites = make(map[string]string) - } - rewrites[name] = value - } + basePath := strings.TrimPrefix(pkgPath, altPkgPathPrefix) if data := ctx.buildConf.GlobalRewrites; len(data) != 0 { - prefix := pkgPath + "." - for name, value := range data { - if strings.HasPrefix(name, prefix) { - add(name, value) - delete(data, name) + for pkg, vars := range data { + trimmed := strings.TrimPrefix(pkg, altPkgPathPrefix) + if trimmed != basePath { + continue + } + for name, value := range vars { + if rewrites == nil { + rewrites = make(map[string]string) + } + rewrites[pkgPath+"."+name] = value } } }