diff options
| author | Sebastian Bøe <sebastian.boe@nordicsemi.no> | 2018-01-15 12:46:30 +0100 |
|---|---|---|
| committer | Sebastian Bøe <sebastian.boe@nordicsemi.no> | 2018-01-15 13:39:15 +0100 |
| commit | 94c63de77c7a3422347e59e168b05174d0b9e84d (patch) | |
| tree | 5580ef57db28ef4ad508d19e836d17755f21b95b | |
| parent | 0ae6a04dc3e1c799ae7bd2aa6df63e30309fef36 (diff) | |
Support disabling warnings for redundant assignments
The Linux Kernel's merge_config.sh defaults to disabling warnings for
redundant assignments and has support for enabling them
specifically. This patch reproduces this behaviour in kconfiglib
except that we retaing kconfiglib's default behaviour of enabling the
warnings.
Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
| -rw-r--r-- | kconfiglib.py | 35 | ||||
| -rw-r--r-- | testsuite.py | 7 |
2 files changed, 36 insertions, 6 deletions
diff --git a/kconfiglib.py b/kconfiglib.py index 261dc93..d91c27c 100644 --- a/kconfiglib.py +++ b/kconfiglib.py @@ -486,6 +486,7 @@ class Kconfig(object): __slots__ = ( "_choices", "_print_undef_assign", + "_print_redun_assign", "_print_warnings", "_set_re_match", "_unset_re_match", @@ -561,6 +562,7 @@ class Kconfig(object): self._print_warnings = warn self._print_undef_assign = False + self._print_redun_assign = True self.syms = {} self.const_syms = {} @@ -808,10 +810,14 @@ class Kconfig(object): display_val = val display_user_val = sym.user_value - self._warn('{} set more than once. Old value: "{}", new ' - 'value: "{}".' - .format(name, display_user_val, display_val), - filename, linenr) + warn_msg = '{} set more than once. Old value: "{}", new value: "{}".'.format( + name, display_user_val, display_val + ) + + if display_user_val == display_val: + self._warn_redun_assign(warn_msg, filename, linenr) + else: + self._warn( warn_msg, filename, linenr) sym.set_value(val) @@ -1032,6 +1038,19 @@ class Kconfig(object): """ self._print_undef_assign = False + def enable_redun_warnings(self): + """ + Enables warnings for redundant assignments to symbols. Printed to + stderr. Enabled by default. + """ + self._print_redun_assign = True + + def disable_redun_warnings(self): + """ + See enable_redun_warnings(). + """ + self._print_redun_assign = False + def __repr__(self): """ Returns a string with information about the Kconfig object when it is @@ -1046,6 +1065,8 @@ class Kconfig(object): "warnings " + ("enabled" if self._print_warnings else "disabled"), "undef. symbol assignment warnings " + ("enabled" if self._print_undef_assign else "disabled"), + "redundant symbol assignment warnings " + + ("enabled" if self._print_redun_assign else "disabled") ))) # @@ -2122,6 +2143,12 @@ class Kconfig(object): 'attempt to assign the value "{}" to the undefined symbol {}' \ .format(val, name), filename, linenr) + def _warn_redun_assign(self, msg, filename=None, linenr=None): + """ + See the class documentation. + """ + if self._print_redun_assign: + _stderr_msg("warning: " + msg, filename, linenr) class Symbol(object): """ diff --git a/testsuite.py b/testsuite.py index 62a06ab..2f00e2f 100644 --- a/testsuite.py +++ b/testsuite.py @@ -676,7 +676,7 @@ choice print("Testing Kconfig.__repr__()") verify_repr(c, """ -<configuration with 15 symbols, main menu prompt "Linux Kernel Configuration", srctree not set, config symbol prefix "CONFIG_", warnings disabled, undef. symbol assignment warnings disabled> +<configuration with 15 symbols, main menu prompt "Linux Kernel Configuration", srctree not set, config symbol prefix "CONFIG_", warnings disabled, undef. symbol assignment warnings disabled, redundant symbol assignment warnings enabled> """) os.environ["srctree"] = "srctree value" @@ -684,10 +684,11 @@ choice c = Kconfig("Kconfiglib/tests/Krepr", warn=False) c.enable_warnings() + c.disable_redun_warnings() c.enable_undef_warnings() verify_repr(c, """ -<configuration with 15 symbols, main menu prompt "Linux Kernel Configuration", srctree "srctree value", config symbol prefix "CONFIG_ value", warnings enabled, undef. symbol assignment warnings enabled> +<configuration with 15 symbols, main menu prompt "Linux Kernel Configuration", srctree "srctree value", config symbol prefix "CONFIG_ value", warnings enabled, undef. symbol assignment warnings enabled, redundant symbol assignment warnings disabled> """) os.environ.pop("srctree", None) @@ -1816,6 +1817,8 @@ def test_sanity(conf, arch): conf.modules conf.defconfig_list conf.defconfig_filename + conf.enable_redun_warnings() + conf.disable_redun_warnings() conf.enable_undef_warnings() conf.disable_undef_warnings() conf.enable_warnings() |
