Message ID | 1432694362-2602-1-git-send-email-yamada.masahiro@socionext.com |
---|---|
State | Accepted |
Delegated to: | Tom Rini |
Headers | show |
On Wed, May 27, 2015 at 4:39 AM, Masahiro Yamada <yamada.masahiro at socionext.com> wrote: > This commit imports some updates of kconfiglib.py from > https://github.com/ulfalizer/Kconfiglib > > - Warn about and ignore the "allnoconfig_y" Kconfig option > - Statements in choices inherit menu/if deps > - Add Symbol.is_allnoconfig_y() > - Hint that modules are still supported despite warnings. > - Add warning related to get_defconfig_filename(). > - Fix typo in docs. > - Allow digits in $-references to symbols. > > Signed-off-by: Ulf Magnusson <ulfalizer at gmail.com> > Signed-off-by: Philip Craig <philipjcraig at gmail.com> > Signed-off-by: Jakub Sitnicki <jsitnicki at gmail.com> > Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com> > --- > > tools/buildman/kconfiglib.py | 42 +++++++++++++++++++++++++++++++++++------- > 1 file changed, 35 insertions(+), 7 deletions(-) > > diff --git a/tools/buildman/kconfiglib.py b/tools/buildman/kconfiglib.py > index 655cf44..c662b64 100644 > --- a/tools/buildman/kconfiglib.py > +++ b/tools/buildman/kconfiglib.py > @@ -429,7 +429,15 @@ class Config(): > If the environment variable 'srctree' was set when the Config was > created, get_defconfig_filename() will first look relative to that > directory before looking in the current directory; see > - Config.__init__().""" > + Config.__init__(). > + > + WARNING: A wart here is that scripts/kconfig/Makefile sometimes uses the > + --defconfig=<defconfig> option when calling the C implementation of e.g. > + 'make defconfig'. This option overrides the 'option defconfig_list' > + symbol, meaning the result from get_defconfig_filename() might not > + match what 'make defconfig' would use. That probably ought to be worked > + around somehow, so that this function always gives the "expected" > + result.""" > > if self.defconfig_sym is None: > return None > @@ -506,7 +514,7 @@ class Config(): > For example, if FOO and BAR are tristate symbols at least one of which > has the value "y", then config.eval("y && (FOO || BAR)") => "y" > > - This functions always yields a tristate value. To get the value of > + This function always yields a tristate value. To get the value of > non-bool, non-tristate symbols, use Symbol.get_value(). > > The result of this function is consistent with how evaluation works for > @@ -1066,7 +1074,7 @@ class Config(): > choice.block = self._parse_block(line_feeder, > T_ENDCHOICE, > choice, > - None, > + deps, > visible_if_deps) > > choice._determine_actual_symbols() > @@ -1326,10 +1334,21 @@ error, and you should e-mail kconfiglib at gmail.com. > elif tokens.check(T_MODULES): > self._warn("the 'modules' option is not supported. " > "Let me know if this is a problem for you; " > - "it shouldn't be that hard to implement.", > + "it shouldn't be that hard to implement. " > + "(Note that modules are still supported -- " > + "Kconfiglib just assumes the symbol name " > + "MODULES.)", > filename, > linenr) > > + elif tokens.check(T_ALLNOCONFIG_Y): > + if not isinstance(stmt, Symbol): > + _parse_error(line, > + "the 'allnoconfig_y' option is only valid for symbols.", > + filename, > + linenr) > + stmt.allnoconfig_y = True > + > else: > _parse_error(line, "unrecognized option.", filename, linenr) > > @@ -2023,8 +2042,8 @@ def _make_and(e1, e2): > T_OPTIONAL, T_PROMPT, T_DEFAULT, > T_BOOL, T_TRISTATE, T_HEX, T_INT, T_STRING, > T_DEF_BOOL, T_DEF_TRISTATE, > - T_SELECT, T_RANGE, T_OPTION, T_ENV, > - T_DEFCONFIG_LIST, T_MODULES, T_VISIBLE) = range(0, 38) > + T_SELECT, T_RANGE, T_OPTION, T_ALLNOCONFIG_Y, T_ENV, > + T_DEFCONFIG_LIST, T_MODULES, T_VISIBLE) = range(0, 39) > > # Keyword to token map > keywords = { > @@ -2056,6 +2075,7 @@ keywords = { > "select" : T_SELECT, > "range" : T_RANGE, > "option" : T_OPTION, > + "allnoconfig_y" : T_ALLNOCONFIG_Y, > "env" : T_ENV, > "defconfig_list" : T_DEFCONFIG_LIST, > "modules" : T_MODULES, > @@ -2080,7 +2100,7 @@ set_re = re.compile(r"CONFIG_(\w+)=(.*)") > unset_re = re.compile(r"# CONFIG_(\w+) is not set") > > # Regular expression for finding $-references to symbols in strings > -sym_ref_re = re.compile(r"\$[A-Za-z_]+") > +sym_ref_re = re.compile(r"\$[A-Za-z0-9_]+") > > # Integers representing symbol types > UNKNOWN, BOOL, TRISTATE, STRING, HEX, INT = range(0, 6) > @@ -2765,6 +2785,11 @@ class Symbol(Item, _HasVisibility): > and sym.get_parent().get_selection() is sym'.""" > return self.is_choice_symbol_ and self.parent.get_selection() is self > > + def is_allnoconfig_y(self): > + """Returns True if the symbol has the 'allnoconfig_y' option set; > + otherwise, returns False.""" > + return self.allnoconfig_y > + > def __str__(self): > """Returns a string containing various information about the symbol.""" > return self.config._get_sym_or_choice_str(self) > @@ -2862,6 +2887,9 @@ class Symbol(Item, _HasVisibility): > # Does the symbol get its value from the environment? > self.is_from_env = False > > + # Does the symbol have the 'allnoconfig_y' option set? > + self.allnoconfig_y = False > + > def _invalidate(self): > if self.is_special_: > return > -- > 1.9.1 > Hello, I also added APIs for getting symbol and choice prompts (in 06309e3). That was a pretty bad oversight. The old code will keep working though, so nothing critical. /Ulf
On Wed, May 27, 2015 at 11:39:22AM +0900, Masahiro Yamada wrote: > This commit imports some updates of kconfiglib.py from > https://github.com/ulfalizer/Kconfiglib > > - Warn about and ignore the "allnoconfig_y" Kconfig option > - Statements in choices inherit menu/if deps > - Add Symbol.is_allnoconfig_y() > - Hint that modules are still supported despite warnings. > - Add warning related to get_defconfig_filename(). > - Fix typo in docs. > - Allow digits in $-references to symbols. > > Signed-off-by: Ulf Magnusson <ulfalizer@gmail.com> > Signed-off-by: Philip Craig <philipjcraig@gmail.com> > Signed-off-by: Jakub Sitnicki <jsitnicki@gmail.com> > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Applied to u-boot/master, thanks!
diff --git a/tools/buildman/kconfiglib.py b/tools/buildman/kconfiglib.py index 655cf44..c662b64 100644 --- a/tools/buildman/kconfiglib.py +++ b/tools/buildman/kconfiglib.py @@ -429,7 +429,15 @@ class Config(): If the environment variable 'srctree' was set when the Config was created, get_defconfig_filename() will first look relative to that directory before looking in the current directory; see - Config.__init__().""" + Config.__init__(). + + WARNING: A wart here is that scripts/kconfig/Makefile sometimes uses the + --defconfig=<defconfig> option when calling the C implementation of e.g. + 'make defconfig'. This option overrides the 'option defconfig_list' + symbol, meaning the result from get_defconfig_filename() might not + match what 'make defconfig' would use. That probably ought to be worked + around somehow, so that this function always gives the "expected" + result.""" if self.defconfig_sym is None: return None @@ -506,7 +514,7 @@ class Config(): For example, if FOO and BAR are tristate symbols at least one of which has the value "y", then config.eval("y && (FOO || BAR)") => "y" - This functions always yields a tristate value. To get the value of + This function always yields a tristate value. To get the value of non-bool, non-tristate symbols, use Symbol.get_value(). The result of this function is consistent with how evaluation works for @@ -1066,7 +1074,7 @@ class Config(): choice.block = self._parse_block(line_feeder, T_ENDCHOICE, choice, - None, + deps, visible_if_deps) choice._determine_actual_symbols() @@ -1326,10 +1334,21 @@ error, and you should e-mail kconfiglib@gmail.com. elif tokens.check(T_MODULES): self._warn("the 'modules' option is not supported. " "Let me know if this is a problem for you; " - "it shouldn't be that hard to implement.", + "it shouldn't be that hard to implement. " + "(Note that modules are still supported -- " + "Kconfiglib just assumes the symbol name " + "MODULES.)", filename, linenr) + elif tokens.check(T_ALLNOCONFIG_Y): + if not isinstance(stmt, Symbol): + _parse_error(line, + "the 'allnoconfig_y' option is only valid for symbols.", + filename, + linenr) + stmt.allnoconfig_y = True + else: _parse_error(line, "unrecognized option.", filename, linenr) @@ -2023,8 +2042,8 @@ def _make_and(e1, e2): T_OPTIONAL, T_PROMPT, T_DEFAULT, T_BOOL, T_TRISTATE, T_HEX, T_INT, T_STRING, T_DEF_BOOL, T_DEF_TRISTATE, - T_SELECT, T_RANGE, T_OPTION, T_ENV, - T_DEFCONFIG_LIST, T_MODULES, T_VISIBLE) = range(0, 38) + T_SELECT, T_RANGE, T_OPTION, T_ALLNOCONFIG_Y, T_ENV, + T_DEFCONFIG_LIST, T_MODULES, T_VISIBLE) = range(0, 39) # Keyword to token map keywords = { @@ -2056,6 +2075,7 @@ keywords = { "select" : T_SELECT, "range" : T_RANGE, "option" : T_OPTION, + "allnoconfig_y" : T_ALLNOCONFIG_Y, "env" : T_ENV, "defconfig_list" : T_DEFCONFIG_LIST, "modules" : T_MODULES, @@ -2080,7 +2100,7 @@ set_re = re.compile(r"CONFIG_(\w+)=(.*)") unset_re = re.compile(r"# CONFIG_(\w+) is not set") # Regular expression for finding $-references to symbols in strings -sym_ref_re = re.compile(r"\$[A-Za-z_]+") +sym_ref_re = re.compile(r"\$[A-Za-z0-9_]+") # Integers representing symbol types UNKNOWN, BOOL, TRISTATE, STRING, HEX, INT = range(0, 6) @@ -2765,6 +2785,11 @@ class Symbol(Item, _HasVisibility): and sym.get_parent().get_selection() is sym'.""" return self.is_choice_symbol_ and self.parent.get_selection() is self + def is_allnoconfig_y(self): + """Returns True if the symbol has the 'allnoconfig_y' option set; + otherwise, returns False.""" + return self.allnoconfig_y + def __str__(self): """Returns a string containing various information about the symbol.""" return self.config._get_sym_or_choice_str(self) @@ -2862,6 +2887,9 @@ class Symbol(Item, _HasVisibility): # Does the symbol get its value from the environment? self.is_from_env = False + # Does the symbol have the 'allnoconfig_y' option set? + self.allnoconfig_y = False + def _invalidate(self): if self.is_special_: return