| Age | Commit message (Collapse) | Author |
|
...instead of os.path.exists(). This more closely mimics the test in the
C implementation, which boils down to fopen(file, "r") == NULL.
Could open(filename) and catch exceptions too, but it might be
overkilling things.
|
|
This code in zconf.l says !=, not ==. Thought the behavior seemed weird.
if (!f && name != NULL && name[0] != '/') {
env = getenv(SRCTREE);
if (env) {
sprintf(fullname, "%s/%s", env, name);
f = fopen(fullname, "r");
}
}
return f;
Thankfully only broken for a short while. Also gives much simpler code.
|
|
_clean_up_path() was only ever passed filenames, so stripping trailing
slashes was redundant. Better to strike at the root of the problem too,
which is the os.path.join() with 'base_dir' defaulting to ".".
The old hack gave incorrect results in obscure cases: Turning .//oops
into /oops is wrong.
The new version should be Windows-friendly as well.
|
|
|
|
Previously, $srctree/path/to/defconfig would be looked up before
/path/to/defconfig, and the code wouldn't check if /path/to/defconfig
was an absolute path ($srctree is ignored otherwise). Sloppy old
oversights. The behavior now fully matches the C implementation.
Also fix some related things:
- An 'if m' suffices to select a defconfig. We previously required 'y'.
- Make the code less hacky and possibly more Windows-friendly by using
os.path.relpath() to de-absolutize paths, and stop using
os.path.normpath() as it could change the meaning of paths that
contain symbolic links.
- Explain what happens if 'option defconfig_list' is set on multiple
symbols and print a warning in that case.
- Fix get_srctree(). It would previously return "." instead of None if
$srctree was unset at parse time. Somehow forgot to to test this. The
code is now much more straightforward.
|
|
There's already parse_val_and_cond(), which handles '<x> if <y>' where
both <x> and <y> need to be parsed. Add a corresponding _parse_cond()
helper which can be used in cases where only <y> should be parsed (for
'select', 'imply', and 'range').
Also move both _parse_val_and_cond() and _parse_cond() outside
_parse_properties(). More explicit, and shows a small performance
improvement during parsing.
|
|
Makes ANDs between nonexistent expressions yield a nonexistent
expression.
|
|
|
|
- Get rid of _sym_str_string(), which was only used here.
- Remove 'if expr is None' case that could never trigger
- Add a test for printing string symbols, as they are a bit tricky:
Default values should not be evaluated to tristate values.
|
|
Store simple (<operator>, <operand 1>, <operand 2>) tuples instead of
(<operator>, [list of operands]) tuples.
The thought process behind the original representation was to avoid
creating lots of nodes for long X && Y && Z && ... chains that sometimes
appear, and possibly speed up evaluation. In retrospect, it's pretty
bad, for the following reasons:
1) _make_and() and _make_or() created lots of new merged lists instead
of simply reusing the tuples already allocated for the
subexpressions. This is slow and memory hungry.
2) Any gain in evaluating long expressions would barely offset slower
evaluation of short expressions.
3) The code became more complex.
Most importantly, this change makes expressions more straightforward to
work with for people peeking into internals.
|
|
Supported since Python 2.7, which is seven years old, plus it was
already used in a few spots.
Do some minor cleanup in the printing routines at the same time.
Also remove dubious string append performance note, where it's more
about wanting to pass something mutable anyway.
|
|
|
|
No need to set 'end_line_tokens' to None if we use 'end_line' as a flag.
Also clarify the comments to make it clear that end_line* is only used
for the first line after a block of properties.
Also fix comment typo: s/nested functions/nested menus/
|
|
Extend TOKEN_TO_TYPE to map T_DEF_BOOL and T_DEF_TRISTATE to BOOL and
TRISTATE as a convenience.
|
|
|
|
Was added upstream in 31847b67 (kconfig: allow use of relations other
than (in)equality). Completely unused (and undocumented) in the kernel
except for in DEBUG_UART_8250_WORD in arch/arm/Kconfig.debug:
depends on DEBUG_UART_8250_SHIFT >= 2
(That line was added before lt/gt support by the way, and assumed a
feature that wasn't there.)
This change (and the upstream one) also slightly changes how
(in)equality comparisons work, making e.g.
MY_HEX = 0x00037
evaluate to 'y' if MY_HEX is 0x37. Prior to this change, the strings
needed to match exactly.
|
|
Isn't needed to be compatible with the latest upstream, but is kept
around for compatibility.
|
|
|
|
Old version was a bit roundabout.
|
|
Previously, only WEIRD_1 and not WEIRD_2 would be considered not a
choice symbol in the following fragment. This lead to a weird warning in
U-Boot.
choice
config FOO
config WEIRD_1
depends on FOO
if FOO
config WEIRD_2
endif
endchoice
Also add some testcases for weird choice symbols.
|
|
Do the block.append() after parsing the complete item. More obvious.
|
|
Require callers to always pass the list to append items to and remove
the return values from _parse_file() and _parse_block(). Initialize
menu.block and choice.block to [] rather than None.
|
|
This is like a 'select' that only changes the default value of a symbol,
not limiting what values the user can set it to (with one exception: A
symbol implied to 'y' can't be set to 'm').
Symbol.get_implied_symbols() was added, corresponding to
Symbol.get_selected_symbols(), and Symbol.__str__() was extended to
print implied symbols and weak reverse dependencies. Weak reverse
dependencies are the 'imply' version of 'select's reverse dependencies.
|
|
This mirrors the following kconfig commit. Triggered a few test suite
failures for ARM and SH.
commit fa64e5f6a35efd5e77d639125d973077ca506074
Author: Dirk Gouders <dirk@gouders.net>
Date: Fri Apr 29 10:24:52 2016 +0200
kconfig/symbol.c: handle choice_values that depend on 'm' symbols
If choices consist of choice_values of type tristate that depend on
symbols set to 'm', those choice_values are not set to 'n' if the
choice is changed from 'm' to 'y' (in which case only one active
choice_value is allowed). Those values are also written to the config
file causing modules to be built when they should not.
The following config can be used to reproduce and examine the problem;
with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
then set "Tristate Choice" to 'y' and save the configuration:
config modules
boolean modules
default y
option modules
config dependency
tristate "Dependency"
default m
choice
prompt "Tristate Choice"
default choice0
config choice0
tristate "Choice 0"
config choice1
tristate "Choice 1"
depends on dependency
endchoice
This patch sets tristate choice_values' visibility that depend on
symbols set to 'm' to 'n' if the corresponding choice is set to 'y'.
This makes them disappear from the choice list and will also cause the
choice_values' value set to 'n' in sym_calc_value() and as a result
they are written as "not set" to the resulting .config file.
Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Dirk Gouders <dirk@gouders.net>
Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Tested-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Michal Marek <mmarek@suse.com>
|
|
Portable to non-Unix platforms.
|
|
Makes the prefix used in .config files configurable.
Also add pip installation note to README.
|
|
Saves a few source lines as well as bytes of bytecode.
|
|
Saves a source line as well as some bytecode.
Tuple evaluation is guaranteed to be from left to right:
https://docs.python.org/2/reference/expressions.html#evaluation-order
|
|
Saves a few source lines as well as bytes of bytecode.
|
|
Ifs do not have an object representation, so 'parent' can never be an
if.
|
|
|
|
Typo - 'res' should be 'line'.
Only affected .config header reading.
|
|
|
|
|
|
This is what the C implementation does, and it simplifies the code a
bit.
|
|
|
|
|
|
Don't bother with the accessors internally as they're unlikely to do
anything but return a variable. Direct access shaves a percent or two
off parsing.
|
|
Was returning a dict_values.
|
|
|
|
Consistent with other internal names and avoids the collision with the
function in a neater way.
|
|
- Inline _add_dependent_ignore_siblings().
- Copy the original 'dep' set and add the recursive dependencies to it
instead of creating an initially empty set.
No discernible performance improvement, but bit neater.
|
|
Make somewhat consistent with the other classes.
|
|
Make somewhat consistent with the other classes.
|
|
Put getters together and make consistent with Symbol.
|
|
Put getters together.
|
|
Split into logical sections and put more related methods closer to one
another.
|
|
The old note no longer seems to apply. Going through the defconfig part
of the test suite without verification in PyPy drops from ~5:50 to
~5:30, and line_prof shows some improvement for CPython too.
Passing the 'write' method around instead was a bit slower.
|
|
|
|
Cleaner to just check for more tokens in the few spots that used it.
Seems slightly faster too, though it might be in the noise.
|