[Add] 打通Kconfiglib配置操作
This commit is contained in:
76
scripts/kconfig/Kconfiglib/listnewconfig.py
Executable file
76
scripts/kconfig/Kconfiglib/listnewconfig.py
Executable file
@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2018-2019, Ulf Magnusson
|
||||
# SPDX-License-Identifier: ISC
|
||||
|
||||
"""
|
||||
Lists all user-modifiable symbols that are not given a value in the
|
||||
configuration file. Usually, these are new symbols that have been added to the
|
||||
Kconfig files.
|
||||
|
||||
The default configuration filename is '.config'. A different filename can be
|
||||
passed in the KCONFIG_CONFIG environment variable.
|
||||
"""
|
||||
from __future__ import print_function
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
from kconfiglib import Kconfig, BOOL, TRISTATE, INT, HEX, STRING, TRI_TO_STR
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
description=__doc__)
|
||||
|
||||
parser.add_argument(
|
||||
"--show-help", "-l",
|
||||
action="store_true",
|
||||
help="Show any help texts as well")
|
||||
|
||||
parser.add_argument(
|
||||
"kconfig",
|
||||
metavar="KCONFIG",
|
||||
nargs="?",
|
||||
default="Kconfig",
|
||||
help="Top-level Kconfig file (default: Kconfig)")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
kconf = Kconfig(args.kconfig, suppress_traceback=True)
|
||||
# Make it possible to filter this message out
|
||||
print(kconf.load_config(), file=sys.stderr)
|
||||
|
||||
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
|
||||
|
||||
print(s, end="")
|
||||
if args.show_help:
|
||||
for node in sym.nodes:
|
||||
if node.help is not None:
|
||||
# Indent by two spaces. textwrap.indent() is not
|
||||
# available in Python 2 (it's 3.3+).
|
||||
print("\n".join(" " + line
|
||||
for line in node.help.split("\n")))
|
||||
break
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user