You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2016/09/23 01:01:30 UTC

incubator-mynewt-newt git commit: newt - Remove spurious warns of overridden syscfg.

Repository: incubator-mynewt-newt
Updated Branches:
  refs/heads/develop 190713e59 -> f4244ec7d


newt - Remove spurious warns of overridden syscfg.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/commit/f4244ec7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/tree/f4244ec7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/diff/f4244ec7

Branch: refs/heads/develop
Commit: f4244ec7dd3512a57fe45c71fd10870e1335e076
Parents: 190713e
Author: Christopher Collins <cc...@apache.org>
Authored: Thu Sep 22 18:00:51 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Thu Sep 22 18:00:51 2016 -0700

----------------------------------------------------------------------
 newt/builder/build.go   |   6 +--
 newt/cli/target_cmds.go |   2 +-
 newt/syscfg/syscfg.go   | 125 ++++++++++++++++++++++++++++---------------
 3 files changed, 87 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/f4244ec7/newt/builder/build.go
----------------------------------------------------------------------
diff --git a/newt/builder/build.go b/newt/builder/build.go
index 17b64d1..5b1106d 100644
--- a/newt/builder/build.go
+++ b/newt/builder/build.go
@@ -61,7 +61,7 @@ func NewBuilder(t *TargetBuilder, buildName string) (*Builder, error) {
 		LinkElf:          "",
 		target:           t,
 		injectedSettings: map[string]string{},
-		Cfg:              syscfg.Cfg{},
+		Cfg:              syscfg.NewCfg(),
 	}
 
 	return b, nil
@@ -125,8 +125,8 @@ func (b *Builder) reloadCfg() (bool, error) {
 	}
 
 	changed := false
-	for k, v := range cfg {
-		oldval, ok := b.Cfg[k]
+	for k, v := range cfg.Settings {
+		oldval, ok := b.Cfg.Settings[k]
 		if !ok || len(oldval.History) != len(v.History) {
 			b.Cfg = cfg
 			changed = true

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/f4244ec7/newt/cli/target_cmds.go
----------------------------------------------------------------------
diff --git a/newt/cli/target_cmds.go b/newt/cli/target_cmds.go
index 364fbaf..dca4163 100644
--- a/newt/cli/target_cmds.go
+++ b/newt/cli/target_cmds.go
@@ -373,7 +373,7 @@ func printPkgCfg(pkgName string, cfg syscfg.Cfg, entries []syscfg.CfgEntry) {
 	sort.Strings(settingNames)
 
 	for _, name := range settingNames {
-		printSetting(cfg[name])
+		printSetting(cfg.Settings[name])
 	}
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/f4244ec7/newt/syscfg/syscfg.go
----------------------------------------------------------------------
diff --git a/newt/syscfg/syscfg.go b/newt/syscfg/syscfg.go
index 5d62b0e..9550aa8 100644
--- a/newt/syscfg/syscfg.go
+++ b/newt/syscfg/syscfg.go
@@ -81,14 +81,34 @@ type CfgEntry struct {
 	SettingType CfgSettingType
 }
 
-type Cfg map[string]CfgEntry
-
-type cfgRoster struct {
+type CfgRoster struct {
 	settings    map[string]string
 	pkgsPresent map[string]bool
 	apisPresent map[string]bool
 }
 
+type Cfg struct {
+	Settings map[string]CfgEntry
+	Roster   CfgRoster
+	Orphans  map[string][]CfgPoint
+}
+
+func newRoster() CfgRoster {
+	return CfgRoster{
+		settings:    map[string]string{},
+		pkgsPresent: map[string]bool{},
+		apisPresent: map[string]bool{},
+	}
+}
+
+func NewCfg() Cfg {
+	return Cfg{
+		Settings: map[string]CfgEntry{},
+		Roster:   newRoster(),
+		Orphans:  map[string][]CfgPoint{},
+	}
+}
+
 func WritePreamble(w io.Writer) {
 	fmt.Fprintf(w, "/**\n * This file was generated by %s\n */\n\n",
 		newtutil.NewtVersionStr)
@@ -109,7 +129,7 @@ func ValueIsTrue(val string) bool {
 
 func Features(cfg Cfg) map[string]bool {
 	features := map[string]bool{}
-	for k, v := range cfg {
+	for k, v := range cfg.Settings {
 		if v.IsTrue() {
 			features[k] = true
 		}
@@ -149,7 +169,7 @@ func (entry *CfgEntry) IsTrue() bool {
 }
 
 func appendValue(entry *CfgEntry, lpkg *pkg.LocalPackage, value interface{}) {
-	strval := fmt.Sprintf("%+v", value)
+	strval := stringValue(value)
 	point := CfgPoint{Value: strval, Source: lpkg}
 	entry.History = append(entry.History, point)
 	entry.Value = strval
@@ -202,27 +222,27 @@ func readOnce(cfg Cfg, lpkg *pkg.LocalPackage) error {
 					lpkg.Name(), err.Error())
 			}
 
-			if _, exists := cfg[k]; exists {
+			if _, exists := cfg.Settings[k]; exists {
 				// XXX: Better error message.
 				return util.FmtNewtError("setting %s redefined", k)
 			}
-			cfg[k] = entry
+			cfg.Settings[k] = entry
 		}
 	}
 
 	values := newtutil.GetStringMapFeatures(v, features, "pkg.syscfg_vals")
 	if values != nil {
 		for k, v := range values {
-			entry, ok := cfg[k]
+			entry, ok := cfg.Settings[k]
 			if ok {
 				appendValue(&entry, lpkg, v)
-				cfg[k] = entry
+				cfg.Settings[k] = entry
 			} else {
-				// XXX: We should not warn until the final iteration.  These
-				// settings may get defined later after dependencies are
-				// unlocked by additional settings.
-				log.Warnf("ignoring override of undefined setting; "+
-					"%s sets %s=%+v", lpkg.Name(), k, v)
+				orphan := CfgPoint{
+					Value:  stringValue(v),
+					Source: lpkg,
+				}
+				cfg.Orphans[k] = append(cfg.Orphans[k], orphan)
 			}
 
 		}
@@ -232,17 +252,17 @@ func readOnce(cfg Cfg, lpkg *pkg.LocalPackage) error {
 }
 
 func Log(cfg Cfg) {
-	keys := make([]string, len(cfg))
+	keys := make([]string, len(cfg.Settings))
 	i := 0
-	for k, _ := range cfg {
+	for k, _ := range cfg.Settings {
 		keys[i] = k
 		i++
 	}
 	sort.Strings(keys)
 
-	log.Debugf("syscfg settings (%d entries):", len(cfg))
+	log.Debugf("syscfg settings (%d entries):", len(cfg.Settings))
 	for _, k := range keys {
-		entry := cfg[k]
+		entry := cfg.Settings[k]
 
 		str := fmt.Sprintf("    %s=%s [", k, entry.Value)
 
@@ -256,6 +276,27 @@ func Log(cfg Cfg) {
 
 		log.Debug(str)
 	}
+
+	keys = make([]string, len(cfg.Orphans))
+	i = 0
+	for k, _ := range cfg.Orphans {
+		keys[i] = k
+		i++
+	}
+	sort.Strings(keys)
+
+	for _, k := range keys {
+		str := fmt.Sprintf("ignoring override of undefined setting %s [", k)
+		for i, p := range cfg.Orphans[k] {
+			if i != 0 {
+				str += ", "
+			}
+			str += fmt.Sprintf("%s:%s", p.Name(), p.Value)
+		}
+		str += "]"
+
+		log.Warnf(str)
+	}
 }
 
 func escapeStr(s string) string {
@@ -293,9 +334,9 @@ func apiPresentName(apiName string) string {
 func Read(lpkgs []*pkg.LocalPackage, apis []string,
 	injectedSettings map[string]string) (Cfg, error) {
 
-	cfg := Cfg{}
+	cfg := NewCfg()
 	for k, v := range injectedSettings {
-		cfg[k] = CfgEntry{
+		cfg.Settings[k] = CfgEntry{
 			Name:        k,
 			Description: "Injected setting",
 			Value:       v,
@@ -385,7 +426,7 @@ func calcPriorities(cfg Cfg, settingType CfgSettingType, max int,
 	// priority-value => entry
 	valEntries := map[int]CfgEntry{}
 
-	for name, entry := range cfg {
+	for name, entry := range cfg.Settings {
 		if entry.SettingType == settingType {
 			if entry.Value == SYSCFG_PRIO_ANY {
 				anyEntries[name] = entry
@@ -446,7 +487,7 @@ func calcPriorities(cfg Cfg, settingType CfgSettingType, max int,
 		}
 
 		entry.Value = strconv.Itoa(greatest)
-		cfg[name] = entry
+		cfg.Settings[name] = entry
 	}
 
 	return nil
@@ -482,7 +523,7 @@ func writeDefine(key string, value string, w io.Writer) {
 }
 
 func specialValues(cfg Cfg) (apis, pkgs, settings []string) {
-	for _, entry := range cfg {
+	for _, entry := range cfg.Settings {
 		if isApiVal(entry.Value) {
 			apis = append(apis, entry.Value)
 		} else if isPkgVal(entry.Value) {
@@ -496,15 +537,15 @@ func specialValues(cfg Cfg) (apis, pkgs, settings []string) {
 }
 
 func buildCfgRoster(cfg Cfg, lpkgs []*pkg.LocalPackage,
-	apis []string) cfgRoster {
+	apis []string) CfgRoster {
 
-	roster := cfgRoster{
-		settings:    make(map[string]string, len(cfg)),
+	roster := CfgRoster{
+		settings:    make(map[string]string, len(cfg.Settings)),
 		pkgsPresent: make(map[string]bool, len(lpkgs)),
 		apisPresent: make(map[string]bool, len(apis)),
 	}
 
-	for k, v := range cfg {
+	for k, v := range cfg.Settings {
 		roster.settings[settingName(k)] = v.Value
 	}
 
@@ -536,7 +577,7 @@ func buildCfgRoster(cfg Cfg, lpkgs []*pkg.LocalPackage,
 }
 
 func settingValueToConstant(value string,
-	roster cfgRoster) (string, bool, error) {
+	roster CfgRoster) (string, bool, error) {
 
 	seen := map[string]struct{}{}
 	curVal := value
@@ -578,8 +619,8 @@ func settingValueToConstant(value string,
 	return value, false, nil
 }
 
-func fixupSettings(cfg Cfg, roster cfgRoster) error {
-	for k, entry := range cfg {
+func fixupSettings(cfg Cfg, roster CfgRoster) error {
+	for k, entry := range cfg.Settings {
 		value, changed, err := settingValueToConstant(entry.Value, roster)
 		if err != nil {
 			return err
@@ -587,7 +628,7 @@ func fixupSettings(cfg Cfg, roster cfgRoster) error {
 
 		if changed {
 			entry.Value = value
-			cfg[k] = entry
+			cfg.Settings[k] = entry
 		}
 	}
 
@@ -601,7 +642,7 @@ func UnfixedValue(entry CfgEntry) string {
 
 func EntriesByPkg(cfg Cfg) map[string][]CfgEntry {
 	pkgEntries := map[string][]CfgEntry{}
-	for _, v := range cfg {
+	for _, v := range cfg.Settings {
 		name := v.History[0].Name()
 		pkgEntries[name] = append(pkgEntries[name], v)
 	}
@@ -621,7 +662,7 @@ func writeSettingsOnePkg(cfg Cfg, pkgName string, pkgEntries []CfgEntry,
 
 	first := true
 	for _, n := range names {
-		entry := cfg[n]
+		entry := cfg.Settings[n]
 		if entry.Value != "" {
 			if first {
 				first = false
@@ -639,7 +680,7 @@ func writeSettings(cfg Cfg, w io.Writer) {
 	// Group settings by package name so that the generated header file is
 	// easier to readOnce.
 	pkgEntries := EntriesByPkg(cfg)
-	for _, v := range cfg {
+	for _, v := range cfg.Settings {
 		name := v.History[0].Name()
 		pkgEntries[name] = append(pkgEntries[name], v)
 	}
@@ -659,7 +700,7 @@ func writeSettings(cfg Cfg, w io.Writer) {
 	}
 }
 
-func writePkgsPresent(roster cfgRoster, w io.Writer) {
+func writePkgsPresent(roster CfgRoster, w io.Writer) {
 	present := make([]string, 0, len(roster.pkgsPresent))
 	notPresent := make([]string, 0, len(roster.pkgsPresent))
 	for k, v := range roster.pkgsPresent {
@@ -687,7 +728,7 @@ func writePkgsPresent(roster cfgRoster, w io.Writer) {
 	}
 }
 
-func writeApisPresent(roster cfgRoster, w io.Writer) {
+func writeApisPresent(roster CfgRoster, w io.Writer) {
 	present := make([]string, 0, len(roster.apisPresent))
 	notPresent := make([]string, 0, len(roster.apisPresent))
 	for k, v := range roster.apisPresent {
@@ -715,7 +756,7 @@ func writeApisPresent(roster cfgRoster, w io.Writer) {
 	}
 }
 
-func write(cfg Cfg, roster cfgRoster, w io.Writer) {
+func write(cfg Cfg, w io.Writer) {
 	WritePreamble(w)
 
 	fmt.Fprintf(w, "#ifndef H_MYNEWT_SYSCFG_\n")
@@ -727,10 +768,10 @@ func write(cfg Cfg, roster cfgRoster, w io.Writer) {
 	writeSettings(cfg, w)
 	fmt.Fprintf(w, "\n")
 
-	writePkgsPresent(roster, w)
+	writePkgsPresent(cfg.Roster, w)
 	fmt.Fprintf(w, "\n")
 
-	writeApisPresent(roster, w)
+	writeApisPresent(cfg.Roster, w)
 	fmt.Fprintf(w, "\n")
 
 	fmt.Fprintf(w, "#endif\n")
@@ -771,13 +812,13 @@ func EnsureWritten(cfg Cfg, lpkgs []*pkg.LocalPackage,
 		return err
 	}
 
-	roster := buildCfgRoster(cfg, lpkgs, apis)
-	if err := fixupSettings(cfg, roster); err != nil {
+	cfg.Roster = buildCfgRoster(cfg, lpkgs, apis)
+	if err := fixupSettings(cfg, cfg.Roster); err != nil {
 		return err
 	}
 
 	buf := bytes.Buffer{}
-	write(cfg, roster, &buf)
+	write(cfg, &buf)
 
 	path := headerPath(targetPath)