17e0e3c0cSAndrew Geissler#!/usr/bin/env python3 27e0e3c0cSAndrew Geissler# 37e0e3c0cSAndrew Geissler# Conversion script to rename variables to versions with improved terminology. 4*45852739SPatrick Williams# Also highlights potentially problematic language and removed variables. 57e0e3c0cSAndrew Geissler# 67e0e3c0cSAndrew Geissler# Copyright (C) 2021 Richard Purdie 77e0e3c0cSAndrew Geissler# Copyright (C) 2022 Wind River Systems, Inc. 87e0e3c0cSAndrew Geissler# 97e0e3c0cSAndrew Geissler# SPDX-License-Identifier: GPL-2.0-only 107e0e3c0cSAndrew Geissler# 117e0e3c0cSAndrew Geissler 127e0e3c0cSAndrew Geisslerimport re 137e0e3c0cSAndrew Geisslerimport os 147e0e3c0cSAndrew Geisslerimport sys 157e0e3c0cSAndrew Geisslerimport tempfile 167e0e3c0cSAndrew Geisslerimport shutil 177e0e3c0cSAndrew Geisslerimport mimetypes 187e0e3c0cSAndrew Geissler 197e0e3c0cSAndrew Geisslerif len(sys.argv) < 2: 207e0e3c0cSAndrew Geissler print("Please specify a directory to run the conversion script against.") 217e0e3c0cSAndrew Geissler sys.exit(1) 227e0e3c0cSAndrew Geissler 237e0e3c0cSAndrew Geisslerrenames = { 247e0e3c0cSAndrew Geissler"BB_ENV_WHITELIST" : "BB_ENV_PASSTHROUGH", 257e0e3c0cSAndrew Geissler"BB_ENV_EXTRAWHITE" : "BB_ENV_PASSTHROUGH_ADDITIONS", 267e0e3c0cSAndrew Geissler"BB_HASHCONFIG_WHITELIST" : "BB_HASHCONFIG_IGNORE_VARS", 277e0e3c0cSAndrew Geissler"BB_SETSCENE_ENFORCE_WHITELIST" : "BB_SETSCENE_ENFORCE_IGNORE_TASKS", 287e0e3c0cSAndrew Geissler"BB_HASHBASE_WHITELIST" : "BB_BASEHASH_IGNORE_VARS", 297e0e3c0cSAndrew Geissler"BB_HASHTASK_WHITELIST" : "BB_TASKHASH_IGNORE_TASKS", 307e0e3c0cSAndrew Geissler"CVE_CHECK_PN_WHITELIST" : "CVE_CHECK_SKIP_RECIPE", 317e0e3c0cSAndrew Geissler"CVE_CHECK_WHITELIST" : "CVE_CHECK_IGNORE", 327e0e3c0cSAndrew Geissler"MULTI_PROVIDER_WHITELIST" : "BB_MULTI_PROVIDER_ALLOWED", 337e0e3c0cSAndrew Geissler"PNBLACKLIST" : "SKIP_RECIPE", 347e0e3c0cSAndrew Geissler"SDK_LOCAL_CONF_BLACKLIST" : "ESDK_LOCALCONF_REMOVE", 357e0e3c0cSAndrew Geissler"SDK_LOCAL_CONF_WHITELIST" : "ESDK_LOCALCONF_ALLOW", 367e0e3c0cSAndrew Geissler"SDK_INHERIT_BLACKLIST" : "ESDK_CLASS_INHERIT_DISABLE", 377e0e3c0cSAndrew Geissler"SSTATE_DUPWHITELIST" : "SSTATE_ALLOW_OVERLAP_FILES", 387e0e3c0cSAndrew Geissler"SYSROOT_DIRS_BLACKLIST" : "SYSROOT_DIRS_IGNORE", 397e0e3c0cSAndrew Geissler"UNKNOWN_CONFIGURE_WHITELIST" : "UNKNOWN_CONFIGURE_OPT_IGNORE", 407e0e3c0cSAndrew Geissler"ICECC_USER_CLASS_BL" : "ICECC_CLASS_DISABLE", 417e0e3c0cSAndrew Geissler"ICECC_SYSTEM_CLASS_BL" : "ICECC_CLASS_DISABLE", 427e0e3c0cSAndrew Geissler"ICECC_USER_PACKAGE_WL" : "ICECC_RECIPE_ENABLE", 437e0e3c0cSAndrew Geissler"ICECC_USER_PACKAGE_BL" : "ICECC_RECIPE_DISABLE", 447e0e3c0cSAndrew Geissler"ICECC_SYSTEM_PACKAGE_BL" : "ICECC_RECIPE_DISABLE", 457e0e3c0cSAndrew Geissler"LICENSE_FLAGS_WHITELIST" : "LICENSE_FLAGS_ACCEPTED", 467e0e3c0cSAndrew Geissler} 477e0e3c0cSAndrew Geissler 487e0e3c0cSAndrew Geisslerremoved_list = [ 497e0e3c0cSAndrew Geissler"BB_STAMP_WHITELIST", 507e0e3c0cSAndrew Geissler"BB_STAMP_POLICY", 517e0e3c0cSAndrew Geissler"INHERIT_BLACKLIST", 527e0e3c0cSAndrew Geissler"TUNEABI_WHITELIST", 537e0e3c0cSAndrew Geissler] 547e0e3c0cSAndrew Geissler 557e0e3c0cSAndrew Geisslercontext_check_list = [ 567e0e3c0cSAndrew Geissler"blacklist", 577e0e3c0cSAndrew Geissler"whitelist", 587e0e3c0cSAndrew Geissler"abort", 597e0e3c0cSAndrew Geissler] 607e0e3c0cSAndrew Geissler 617e0e3c0cSAndrew Geisslerdef processfile(fn): 627e0e3c0cSAndrew Geissler 637e0e3c0cSAndrew Geissler print("processing file '%s'" % fn) 647e0e3c0cSAndrew Geissler try: 657e0e3c0cSAndrew Geissler fh, abs_path = tempfile.mkstemp() 667e0e3c0cSAndrew Geissler modified = False 677e0e3c0cSAndrew Geissler with os.fdopen(fh, 'w') as new_file: 687e0e3c0cSAndrew Geissler with open(fn, "r") as old_file: 697e0e3c0cSAndrew Geissler lineno = 0 707e0e3c0cSAndrew Geissler for line in old_file: 717e0e3c0cSAndrew Geissler lineno += 1 727e0e3c0cSAndrew Geissler if not line or "BB_RENAMED_VARIABLE" in line: 737e0e3c0cSAndrew Geissler continue 747e0e3c0cSAndrew Geissler # Do the renames 757e0e3c0cSAndrew Geissler for old_name, new_name in renames.items(): 767e0e3c0cSAndrew Geissler if old_name in line: 777e0e3c0cSAndrew Geissler line = line.replace(old_name, new_name) 787e0e3c0cSAndrew Geissler modified = True 797e0e3c0cSAndrew Geissler # Find removed names 807e0e3c0cSAndrew Geissler for removed_name in removed_list: 817e0e3c0cSAndrew Geissler if removed_name in line: 829aee5003SAndrew Geissler print("%s needs further work at line %s because %s has been deprecated" % (fn, lineno, removed_name)) 837e0e3c0cSAndrew Geissler for check_word in context_check_list: 847e0e3c0cSAndrew Geissler if re.search(check_word, line, re.IGNORECASE): 857e0e3c0cSAndrew Geissler print("%s needs further work at line %s since it contains %s"% (fn, lineno, check_word)) 867e0e3c0cSAndrew Geissler new_file.write(line) 877e0e3c0cSAndrew Geissler new_file.close() 887e0e3c0cSAndrew Geissler if modified: 897e0e3c0cSAndrew Geissler print("*** Modified file '%s'" % (fn)) 907e0e3c0cSAndrew Geissler shutil.copymode(fn, abs_path) 917e0e3c0cSAndrew Geissler os.remove(fn) 927e0e3c0cSAndrew Geissler shutil.move(abs_path, fn) 937e0e3c0cSAndrew Geissler except UnicodeDecodeError: 947e0e3c0cSAndrew Geissler pass 957e0e3c0cSAndrew Geissler 967e0e3c0cSAndrew Geisslerourname = os.path.basename(sys.argv[0]) 977e0e3c0cSAndrew Geisslerourversion = "0.1" 987e0e3c0cSAndrew Geissler 997e0e3c0cSAndrew Geisslerif os.path.isfile(sys.argv[1]): 1007e0e3c0cSAndrew Geissler processfile(sys.argv[1]) 1017e0e3c0cSAndrew Geissler sys.exit(0) 1027e0e3c0cSAndrew Geissler 1037e0e3c0cSAndrew Geisslerfor targetdir in sys.argv[1:]: 1047e0e3c0cSAndrew Geissler print("processing directory '%s'" % targetdir) 1057e0e3c0cSAndrew Geissler for root, dirs, files in os.walk(targetdir): 1067e0e3c0cSAndrew Geissler for name in files: 1077e0e3c0cSAndrew Geissler if name == ourname: 1087e0e3c0cSAndrew Geissler continue 1097e0e3c0cSAndrew Geissler fn = os.path.join(root, name) 1107e0e3c0cSAndrew Geissler if os.path.islink(fn): 1117e0e3c0cSAndrew Geissler continue 1127e0e3c0cSAndrew Geissler 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"): 1137e0e3c0cSAndrew Geissler continue 1147e0e3c0cSAndrew Geissler processfile(fn) 1157e0e3c0cSAndrew Geissler 1167e0e3c0cSAndrew Geisslerprint("All files processed with version %s" % ourversion) 117