xref: /OK3568_Linux_fs/yocto/poky/scripts/contrib/convert-variable-renames.py (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/usr/bin/env python3
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# Conversion script to rename variables to versions with improved terminology.
4*4882a593Smuzhiyun# Also highlights potentially problematic language and removed variables.
5*4882a593Smuzhiyun#
6*4882a593Smuzhiyun# Copyright (C) 2021 Richard Purdie
7*4882a593Smuzhiyun# Copyright (C) 2022 Wind River Systems, Inc.
8*4882a593Smuzhiyun#
9*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only
10*4882a593Smuzhiyun#
11*4882a593Smuzhiyun
12*4882a593Smuzhiyunimport re
13*4882a593Smuzhiyunimport os
14*4882a593Smuzhiyunimport sys
15*4882a593Smuzhiyunimport tempfile
16*4882a593Smuzhiyunimport shutil
17*4882a593Smuzhiyunimport mimetypes
18*4882a593Smuzhiyun
19*4882a593Smuzhiyunif len(sys.argv) < 2:
20*4882a593Smuzhiyun    print("Please specify a directory to run the conversion script against.")
21*4882a593Smuzhiyun    sys.exit(1)
22*4882a593Smuzhiyun
23*4882a593Smuzhiyunrenames = {
24*4882a593Smuzhiyun"BB_ENV_WHITELIST" : "BB_ENV_PASSTHROUGH",
25*4882a593Smuzhiyun"BB_ENV_EXTRAWHITE" : "BB_ENV_PASSTHROUGH_ADDITIONS",
26*4882a593Smuzhiyun"BB_HASHCONFIG_WHITELIST" : "BB_HASHCONFIG_IGNORE_VARS",
27*4882a593Smuzhiyun"BB_SETSCENE_ENFORCE_WHITELIST" : "BB_SETSCENE_ENFORCE_IGNORE_TASKS",
28*4882a593Smuzhiyun"BB_HASHBASE_WHITELIST" : "BB_BASEHASH_IGNORE_VARS",
29*4882a593Smuzhiyun"BB_HASHTASK_WHITELIST" : "BB_TASKHASH_IGNORE_TASKS",
30*4882a593Smuzhiyun"CVE_CHECK_PN_WHITELIST" : "CVE_CHECK_SKIP_RECIPE",
31*4882a593Smuzhiyun"CVE_CHECK_WHITELIST" : "CVE_CHECK_IGNORE",
32*4882a593Smuzhiyun"MULTI_PROVIDER_WHITELIST" : "BB_MULTI_PROVIDER_ALLOWED",
33*4882a593Smuzhiyun"PNBLACKLIST" : "SKIP_RECIPE",
34*4882a593Smuzhiyun"SDK_LOCAL_CONF_BLACKLIST" : "ESDK_LOCALCONF_REMOVE",
35*4882a593Smuzhiyun"SDK_LOCAL_CONF_WHITELIST" : "ESDK_LOCALCONF_ALLOW",
36*4882a593Smuzhiyun"SDK_INHERIT_BLACKLIST" : "ESDK_CLASS_INHERIT_DISABLE",
37*4882a593Smuzhiyun"SSTATE_DUPWHITELIST" : "SSTATE_ALLOW_OVERLAP_FILES",
38*4882a593Smuzhiyun"SYSROOT_DIRS_BLACKLIST" : "SYSROOT_DIRS_IGNORE",
39*4882a593Smuzhiyun"UNKNOWN_CONFIGURE_WHITELIST" : "UNKNOWN_CONFIGURE_OPT_IGNORE",
40*4882a593Smuzhiyun"ICECC_USER_CLASS_BL" : "ICECC_CLASS_DISABLE",
41*4882a593Smuzhiyun"ICECC_SYSTEM_CLASS_BL" : "ICECC_CLASS_DISABLE",
42*4882a593Smuzhiyun"ICECC_USER_PACKAGE_WL" : "ICECC_RECIPE_ENABLE",
43*4882a593Smuzhiyun"ICECC_USER_PACKAGE_BL" : "ICECC_RECIPE_DISABLE",
44*4882a593Smuzhiyun"ICECC_SYSTEM_PACKAGE_BL" : "ICECC_RECIPE_DISABLE",
45*4882a593Smuzhiyun"LICENSE_FLAGS_WHITELIST" : "LICENSE_FLAGS_ACCEPTED",
46*4882a593Smuzhiyun}
47*4882a593Smuzhiyun
48*4882a593Smuzhiyunremoved_list = [
49*4882a593Smuzhiyun"BB_STAMP_WHITELIST",
50*4882a593Smuzhiyun"BB_STAMP_POLICY",
51*4882a593Smuzhiyun"INHERIT_BLACKLIST",
52*4882a593Smuzhiyun"TUNEABI_WHITELIST",
53*4882a593Smuzhiyun]
54*4882a593Smuzhiyun
55*4882a593Smuzhiyuncontext_check_list = [
56*4882a593Smuzhiyun"blacklist",
57*4882a593Smuzhiyun"whitelist",
58*4882a593Smuzhiyun"abort",
59*4882a593Smuzhiyun]
60*4882a593Smuzhiyun
61*4882a593Smuzhiyundef processfile(fn):
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun    print("processing file '%s'" % fn)
64*4882a593Smuzhiyun    try:
65*4882a593Smuzhiyun        fh, abs_path = tempfile.mkstemp()
66*4882a593Smuzhiyun        modified = False
67*4882a593Smuzhiyun        with os.fdopen(fh, 'w') as new_file:
68*4882a593Smuzhiyun            with open(fn, "r") as old_file:
69*4882a593Smuzhiyun                lineno = 0
70*4882a593Smuzhiyun                for line in old_file:
71*4882a593Smuzhiyun                    lineno += 1
72*4882a593Smuzhiyun                    if not line or "BB_RENAMED_VARIABLE" in line:
73*4882a593Smuzhiyun                        continue
74*4882a593Smuzhiyun                    # Do the renames
75*4882a593Smuzhiyun                    for old_name, new_name in renames.items():
76*4882a593Smuzhiyun                        if old_name in line:
77*4882a593Smuzhiyun                            line = line.replace(old_name, new_name)
78*4882a593Smuzhiyun                            modified = True
79*4882a593Smuzhiyun                    # Find removed names
80*4882a593Smuzhiyun                    for removed_name in removed_list:
81*4882a593Smuzhiyun                        if removed_name in line:
82*4882a593Smuzhiyun                            print("%s needs further work at line %s because %s has been deprecated" % (fn, lineno, removed_name))
83*4882a593Smuzhiyun                    for check_word in context_check_list:
84*4882a593Smuzhiyun                        if re.search(check_word, line, re.IGNORECASE):
85*4882a593Smuzhiyun                            print("%s needs further work at line %s since it contains %s"% (fn, lineno, check_word))
86*4882a593Smuzhiyun                    new_file.write(line)
87*4882a593Smuzhiyun            new_file.close()
88*4882a593Smuzhiyun            if modified:
89*4882a593Smuzhiyun                print("*** Modified file '%s'" % (fn))
90*4882a593Smuzhiyun                shutil.copymode(fn, abs_path)
91*4882a593Smuzhiyun                os.remove(fn)
92*4882a593Smuzhiyun                shutil.move(abs_path, fn)
93*4882a593Smuzhiyun    except UnicodeDecodeError:
94*4882a593Smuzhiyun        pass
95*4882a593Smuzhiyun
96*4882a593Smuzhiyunourname = os.path.basename(sys.argv[0])
97*4882a593Smuzhiyunourversion = "0.1"
98*4882a593Smuzhiyun
99*4882a593Smuzhiyunif os.path.isfile(sys.argv[1]):
100*4882a593Smuzhiyun    processfile(sys.argv[1])
101*4882a593Smuzhiyun    sys.exit(0)
102*4882a593Smuzhiyun
103*4882a593Smuzhiyunfor targetdir in sys.argv[1:]:
104*4882a593Smuzhiyun    print("processing directory '%s'" % targetdir)
105*4882a593Smuzhiyun    for root, dirs, files in os.walk(targetdir):
106*4882a593Smuzhiyun        for name in files:
107*4882a593Smuzhiyun            if name == ourname:
108*4882a593Smuzhiyun                continue
109*4882a593Smuzhiyun            fn = os.path.join(root, name)
110*4882a593Smuzhiyun            if os.path.islink(fn):
111*4882a593Smuzhiyun                continue
112*4882a593Smuzhiyun            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"):
113*4882a593Smuzhiyun                continue
114*4882a593Smuzhiyun            processfile(fn)
115*4882a593Smuzhiyun
116*4882a593Smuzhiyunprint("All files processed with version %s" % ourversion)
117