diff options
Diffstat (limited to 'listnewconfig.py')
| -rwxr-xr-x | listnewconfig.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/listnewconfig.py b/listnewconfig.py new file mode 100755 index 0000000..bd35502 --- /dev/null +++ b/listnewconfig.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python + +# Copyright (c) 2018, Ulf Magnusson +# SPDX-License-Identifier: ISC + +# Works like 'make listnewconfig', listing all modifiable symbols that are not +# assigned in the configuration file. +# +# The default output filename is '.config'. A different filename can be passed +# in the KCONFIG_CONFIG environment variable. + +import sys + +from kconfiglib import standard_kconfig, BOOL, TRISTATE, INT, HEX, STRING, \ + TRI_TO_STR +import kconfiglib + +def main(): + kconf = standard_kconfig() + kconf.load_config() + for sym in kconf.unique_defined_syms: + # Only show symbols that can be toggled. Choice symbols are a special + # case in that sym.assignable will be (2,) (length 1) for visible + # symbols in choices in y mode, but they can still be toggled by + # selecting some other symbol. + if sym.user_value is None and \ + (len(sym.assignable) > 1 or \ + (sym.visibility and (sym.orig_type in (INT, HEX, STRING) or + sym.choice))): + + # Don't reuse the 'config_string' format for bool/tristate symbols, + # to show n-valued symbols as 'CONFIG_FOO=n' instead of + # '# CONFIG_FOO is not set'. This matches the C tools. + if sym.orig_type in (BOOL, TRISTATE): + s = "{}{}={}\n".format(kconf.config_prefix, sym.name, + TRI_TO_STR[sym.tri_value]) + else: + s = sym.config_string + + sys.stdout.write(s) + +if __name__ == "__main__": + main() |
