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 <ccoll...@apache.org>
Authored: Thu Sep 22 18:00:51 2016 -0700
Committer: Christopher Collins <ccoll...@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)
 

Reply via email to