build: override vars in alt pkg

This commit is contained in:
Li Jie
2025-11-14 12:38:54 +08:00
parent 9b76be9e9e
commit e2bb68489d

View File

@@ -132,9 +132,11 @@ type Config struct {
CheckLinkArgs bool // check linkargs valid CheckLinkArgs bool // check linkargs valid
ForceEspClang bool // force to use esp-clang ForceEspClang bool // force to use esp-clang
Tags string 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 { func NewDefaultConf(mode Mode) *Config {
bin := os.Getenv("GOBIN") bin := os.Getenv("GOBIN")
if bin == "" { if bin == "" {
@@ -336,8 +338,8 @@ func Do(args []string, conf *Config) ([]Package, error) {
} }
// default runtime globals must be registered before packages are built // default runtime globals must be registered before packages are built
addDefaultGlobalString(conf, "runtime.defaultGOROOT="+runtime.GOROOT(), nil) addGlobalString(conf, "runtime.defaultGOROOT="+runtime.GOROOT(), nil)
addDefaultGlobalString(conf, "runtime.buildVersion="+runtime.Version(), nil) addGlobalString(conf, "runtime.buildVersion="+runtime.Version(), nil)
pkgs, err := buildAllPkgs(ctx, initial, verbose) pkgs, err := buildAllPkgs(ctx, initial, verbose)
check(err) check(err)
if mode == ModeGen { if mode == ModeGen {
@@ -626,10 +628,6 @@ var (
) )
func addGlobalString(conf *Config, arg string, mainPkgs []string) { 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) addGlobalStringWith(conf, arg, mainPkgs, true)
} }
@@ -648,18 +646,22 @@ func addGlobalStringWith(conf *Config, arg string, mainPkgs []string, skipIfExis
return return
} }
if conf.GlobalRewrites == nil { 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:] value := arg[eq+1:]
for _, realPkg := range pkgs { for _, realPkg := range pkgs {
name := realPkg + suffix vars := conf.GlobalRewrites[realPkg]
if vars == nil {
vars = make(Rewrites)
conf.GlobalRewrites[realPkg] = vars
}
if skipIfExists { if skipIfExists {
if _, exists := conf.GlobalRewrites[name]; exists { if _, exists := vars[varName]; exists {
continue 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 { func collectRewriteVars(ctx *context, pkgPath string) map[string]string {
var rewrites map[string]string var rewrites map[string]string
add := func(name, value string) { basePath := strings.TrimPrefix(pkgPath, altPkgPathPrefix)
if rewrites == nil {
rewrites = make(map[string]string)
}
rewrites[name] = value
}
if data := ctx.buildConf.GlobalRewrites; len(data) != 0 { if data := ctx.buildConf.GlobalRewrites; len(data) != 0 {
prefix := pkgPath + "." for pkg, vars := range data {
for name, value := range data { trimmed := strings.TrimPrefix(pkg, altPkgPathPrefix)
if strings.HasPrefix(name, prefix) { if trimmed != basePath {
add(name, value) continue
delete(data, name) }
for name, value := range vars {
if rewrites == nil {
rewrites = make(map[string]string)
}
rewrites[pkgPath+"."+name] = value
} }
} }
} }