#!/usr/bin/env python3 # # Conversion script to rename variables to versions with improved terminology. # Also highlights potentially problematic language and removed variables. # # Copyright (C) 2021 Richard Purdie # Copyright (C) 2022 Wind River Systems, Inc. # # SPDX-License-Identifier: GPL-2.0-only # import re import os import sys import tempfile import shutil import mimetypes if len(sys.argv) < 2: print("Please specify a directory to run the conversion script against.") sys.exit(1) renames = { "BB_ENV_WHITELIST" : "BB_ENV_PASSTHROUGH", "BB_ENV_EXTRAWHITE" : "BB_ENV_PASSTHROUGH_ADDITIONS", "BB_HASHCONFIG_WHITELIST" : "BB_HASHCONFIG_IGNORE_VARS", "BB_SETSCENE_ENFORCE_WHITELIST" : "BB_SETSCENE_ENFORCE_IGNORE_TASKS", "BB_HASHBASE_WHITELIST" : "BB_BASEHASH_IGNORE_VARS", "BB_HASHTASK_WHITELIST" : "BB_TASKHASH_IGNORE_TASKS", "CVE_CHECK_PN_WHITELIST" : "CVE_CHECK_SKIP_RECIPE", "CVE_CHECK_WHITELIST" : "CVE_CHECK_IGNORE", "MULTI_PROVIDER_WHITELIST" : "BB_MULTI_PROVIDER_ALLOWED", "PNBLACKLIST" : "SKIP_RECIPE", "SDK_LOCAL_CONF_BLACKLIST" : "ESDK_LOCALCONF_REMOVE", "SDK_LOCAL_CONF_WHITELIST" : "ESDK_LOCALCONF_ALLOW", "SDK_INHERIT_BLACKLIST" : "ESDK_CLASS_INHERIT_DISABLE", "SSTATE_DUPWHITELIST" : "SSTATE_ALLOW_OVERLAP_FILES", "SYSROOT_DIRS_BLACKLIST" : "SYSROOT_DIRS_IGNORE", "UNKNOWN_CONFIGURE_WHITELIST" : "UNKNOWN_CONFIGURE_OPT_IGNORE", "ICECC_USER_CLASS_BL" : "ICECC_CLASS_DISABLE", "ICECC_SYSTEM_CLASS_BL" : "ICECC_CLASS_DISABLE", "ICECC_USER_PACKAGE_WL" : "ICECC_RECIPE_ENABLE", "ICECC_USER_PACKAGE_BL" : "ICECC_RECIPE_DISABLE", "ICECC_SYSTEM_PACKAGE_BL" : "ICECC_RECIPE_DISABLE", "LICENSE_FLAGS_WHITELIST" : "LICENSE_FLAGS_ACCEPTED", } removed_list = [ "BB_STAMP_WHITELIST", "BB_STAMP_POLICY", "INHERIT_BLACKLIST", "TUNEABI_WHITELIST", ] context_check_list = [ "blacklist", "whitelist", "abort", ] def processfile(fn): print("processing file '%s'" % fn) try: fh, abs_path = tempfile.mkstemp() modified = False with os.fdopen(fh, 'w') as new_file: with open(fn, "r") as old_file: lineno = 0 for line in old_file: lineno += 1 if not line or "BB_RENAMED_VARIABLE" in line: continue # Do the renames for old_name, new_name in renames.items(): if old_name in line: line = line.replace(old_name, new_name) modified = True # Find removed names for removed_name in removed_list: if removed_name in line: print("%s needs further work at line %s because %s has been deprecated" % (fn, lineno, removed_name)) for check_word in context_check_list: if re.search(check_word, line, re.IGNORECASE): print("%s needs further work at line %s since it contains %s"% (fn, lineno, check_word)) new_file.write(line) new_file.close() if modified: print("*** Modified file '%s'" % (fn)) shutil.copymode(fn, abs_path) os.remove(fn) shutil.move(abs_path, fn) except UnicodeDecodeError: pass ourname = os.path.basename(sys.argv[0]) ourversion = "0.1" if os.path.isfile(sys.argv[1]): processfile(sys.argv[1]) sys.exit(0) for targetdir in sys.argv[1:]: print("processing directory '%s'" % targetdir) for root, dirs, files in os.walk(targetdir): for name in files: if name == ourname: continue fn = os.path.join(root, name) if os.path.islink(fn): continue if "ChangeLog" in fn or "/.git/" in fn or fn.endswith(".html") or fn.endswith(".patch") or fn.endswith(".m4") or fn.endswith(".diff") or fn.endswith(".orig"): continue processfile(fn) print("All files processed with version %s" % ourversion)