xref: /openbmc/openbmc/poky/scripts/contrib/convert-variable-renames.py (revision 45852739b8823d99a818e714b72961886759fe2e)
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