summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/moveconfig.py102
1 files changed, 71 insertions, 31 deletions
diff --git a/tools/moveconfig.py b/tools/moveconfig.py
index 5283689d8e..5576b574a8 100755
--- a/tools/moveconfig.py
+++ b/tools/moveconfig.py
@@ -47,21 +47,23 @@ It looks like one of the following:
This config option was moved to the defconfig
- CONFIG_... is not defined in Kconfig. Do nothing.
- The entry for this CONFIG was not found in Kconfig.
+ The entry for this CONFIG was not found in Kconfig. The option is not
+ defined in the config header, either. So, this case can be just skipped.
+
+ - CONFIG_... is not defined in Kconfig (suspicious). Do nothing.
+ This option is defined in the config header, but its entry was not found
+ in Kconfig.
There are two common cases:
- You forgot to create an entry for the CONFIG before running
this tool, or made a typo in a CONFIG passed to this tool.
- The entry was hidden due to unmet 'depends on'.
- This is correct behavior.
+ The tool does not know if the result is reasonable, so please check it
+ manually.
- 'CONFIG_...' is the same as the define in Kconfig. Do nothing.
The define in the config header matched the one in Kconfig.
We do not need to touch it.
- - Undefined. Do nothing.
- This config option was not found in the config header.
- Nothing to do.
-
- Compiler is missing. Do nothing.
The compiler specified for this architecture was not found
in your PATH environment.
@@ -136,6 +138,12 @@ Available options
If not specified, "make savedefconfig" only occurs for cases
where at least one CONFIG was moved.
+ -S, --spl
+ Look for moved config options in spl/include/autoconf.mk instead of
+ include/autoconf.mk. This is useful for moving options for SPL build
+ because SPL related options (mostly prefixed with CONFIG_SPL_) are
+ sometimes blocked by CONFIG_SPL_BUILD ifdef conditionals.
+
-H, --headers-only
Only cleanup the headers; skip the defconfig processing
@@ -214,7 +222,8 @@ STATE_SAVEDEFCONFIG = 3
ACTION_MOVE = 0
ACTION_NO_ENTRY = 1
-ACTION_NO_CHANGE = 2
+ACTION_NO_ENTRY_WARN = 2
+ACTION_NO_CHANGE = 3
COLOR_BLACK = '0;30'
COLOR_RED = '0;31'
@@ -611,6 +620,8 @@ class KconfigParser:
self.options = options
self.dotconfig = os.path.join(build_dir, '.config')
self.autoconf = os.path.join(build_dir, 'include', 'autoconf.mk')
+ self.spl_autoconf = os.path.join(build_dir, 'spl', 'include',
+ 'autoconf.mk')
self.config_autoconf = os.path.join(build_dir, 'include', 'config',
'auto.conf')
self.defconfig = os.path.join(build_dir, 'defconfig')
@@ -663,14 +674,6 @@ class KconfigParser:
"""
not_set = '# %s is not set' % config
- for line in dotconfig_lines:
- line = line.rstrip()
- if line.startswith(config + '=') or line == not_set:
- old_val = line
- break
- else:
- return (ACTION_NO_ENTRY, config)
-
for line in autoconf_lines:
line = line.rstrip()
if line.startswith(config + '='):
@@ -679,6 +682,17 @@ class KconfigParser:
else:
new_val = not_set
+ for line in dotconfig_lines:
+ line = line.rstrip()
+ if line.startswith(config + '=') or line == not_set:
+ old_val = line
+ break
+ else:
+ if new_val == not_set:
+ return (ACTION_NO_ENTRY, config)
+ else:
+ return (ACTION_NO_ENTRY_WARN, config)
+
# If this CONFIG is neither bool nor trisate
if old_val[-2:] != '=y' and old_val[-2:] != '=m' and old_val != not_set:
# tools/scripts/define2mk.sed changes '1' to 'y'.
@@ -708,11 +722,26 @@ class KconfigParser:
results = []
updated = False
+ suspicious = False
+ rm_files = [self.config_autoconf, self.autoconf]
+
+ if self.options.spl:
+ if os.path.exists(self.spl_autoconf):
+ autoconf_path = self.spl_autoconf
+ rm_files.append(self.spl_autoconf)
+ else:
+ for f in rm_files:
+ os.remove(f)
+ return (updated, suspicious,
+ color_text(self.options.color, COLOR_BROWN,
+ "SPL is not enabled. Skipped.") + '\n')
+ else:
+ autoconf_path = self.autoconf
with open(self.dotconfig) as f:
dotconfig_lines = f.readlines()
- with open(self.autoconf) as f:
+ with open(autoconf_path) as f:
autoconf_lines = f.readlines()
for config in self.configs:
@@ -729,10 +758,17 @@ class KconfigParser:
elif action == ACTION_NO_ENTRY:
actlog = "%s is not defined in Kconfig. Do nothing." % value
log_color = COLOR_LIGHT_BLUE
+ elif action == ACTION_NO_ENTRY_WARN:
+ actlog = "%s is not defined in Kconfig (suspicious). Do nothing." % value
+ log_color = COLOR_YELLOW
+ suspicious = True
elif action == ACTION_NO_CHANGE:
actlog = "'%s' is the same as the define in Kconfig. Do nothing." \
% value
log_color = COLOR_LIGHT_PURPLE
+ elif action == ACTION_SPL_NOT_EXIST:
+ actlog = "SPL is not enabled for this defconfig. Skip."
+ log_color = COLOR_PURPLE
else:
sys.exit("Internal Error. This should not happen.")
@@ -745,10 +781,10 @@ class KconfigParser:
updated = True
self.results = results
- os.remove(self.config_autoconf)
- os.remove(self.autoconf)
+ for f in rm_files:
+ os.remove(f)
- return (updated, log)
+ return (updated, suspicious, log)
def check_defconfig(self):
"""Check the defconfig after savedefconfig
@@ -802,8 +838,8 @@ class Slot:
self.reference_src_dir = reference_src_dir
self.parser = KconfigParser(configs, options, self.build_dir)
self.state = STATE_IDLE
- self.failed_boards = []
- self.suspicious_boards = []
+ self.failed_boards = set()
+ self.suspicious_boards = set()
def __del__(self):
"""Delete the working directory
@@ -927,7 +963,9 @@ class Slot:
def do_savedefconfig(self):
"""Update the .config and run 'make savedefconfig'."""
- (updated, log) = self.parser.update_dotconfig()
+ (updated, suspicious, log) = self.parser.update_dotconfig()
+ if suspicious:
+ self.suspicious_boards.add(self.defconfig)
self.log += log
if not self.options.force_sync and not updated:
@@ -950,7 +988,7 @@ class Slot:
log = self.parser.check_defconfig()
if log:
- self.suspicious_boards.append(self.defconfig)
+ self.suspicious_boards.add(self.defconfig)
self.log += log
orig_defconfig = os.path.join('configs', self.defconfig)
new_defconfig = os.path.join(self.build_dir, 'defconfig')
@@ -984,21 +1022,21 @@ class Slot:
sys.exit("Exit on error.")
# If --exit-on-error flag is not set, skip this board and continue.
# Record the failed board.
- self.failed_boards.append(self.defconfig)
+ self.failed_boards.add(self.defconfig)
self.progress.inc()
self.progress.show()
self.state = STATE_IDLE
def get_failed_boards(self):
- """Returns a list of failed boards (defconfigs) in this slot.
+ """Returns a set of failed boards (defconfigs) in this slot.
"""
return self.failed_boards
def get_suspicious_boards(self):
- """Returns a list of boards (defconfigs) with possible misconversion.
+ """Returns a set of boards (defconfigs) with possible misconversion.
"""
- return self.suspicious_boards
+ return self.suspicious_boards - self.failed_boards
class Slots:
@@ -1061,11 +1099,11 @@ class Slots:
def show_failed_boards(self):
"""Display all of the failed boards (defconfigs)."""
- boards = []
+ boards = set()
output_file = 'moveconfig.failed'
for slot in self.slots:
- boards += slot.get_failed_boards()
+ boards |= slot.get_failed_boards()
if boards:
boards = '\n'.join(boards) + '\n'
@@ -1080,11 +1118,11 @@ class Slots:
def show_suspicious_boards(self):
"""Display all boards (defconfigs) with possible misconversion."""
- boards = []
+ boards = set()
output_file = 'moveconfig.suspicious'
for slot in self.slots:
- boards += slot.get_suspicious_boards()
+ boards |= slot.get_suspicious_boards()
if boards:
boards = '\n'.join(boards) + '\n'
@@ -1204,6 +1242,8 @@ def main():
help='exit immediately on any error')
parser.add_option('-s', '--force-sync', action='store_true', default=False,
help='force sync by savedefconfig')
+ parser.add_option('-S', '--spl', action='store_true', default=False,
+ help='parse config options defined for SPL build')
parser.add_option('-H', '--headers-only', dest='cleanup_headers_only',
action='store_true', default=False,
help='only cleanup the headers')