On Wed, May 27, 2015 at 4:39 AM, Masahiro Yamada <[email protected]> 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 <[email protected]> > Signed-off-by: Philip Craig <[email protected]> > Signed-off-by: Jakub Sitnicki <[email protected]> > Signed-off-by: Masahiro Yamada <[email protected]> > --- > > 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 [email protected]. > 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 -- Currently looking for a job. _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

