summaryrefslogtreecommitdiffstatshomepage
path: root/py/makeqstrdefs.py
diff options
context:
space:
mode:
Diffstat (limited to 'py/makeqstrdefs.py')
-rw-r--r--py/makeqstrdefs.py47
1 files changed, 34 insertions, 13 deletions
diff --git a/py/makeqstrdefs.py b/py/makeqstrdefs.py
index 03ea1afc79..9449a46ee9 100644
--- a/py/makeqstrdefs.py
+++ b/py/makeqstrdefs.py
@@ -13,17 +13,27 @@ import io
import os
+# Extract MP_QSTR_FOO macros.
+_MODE_QSTR = "qstr"
+
+# Extract MP_COMPRESSED_ROM_TEXT("") macros. (Which come from MP_ERROR_TEXT)
+_MODE_COMPRESS = "compress"
+
+
def write_out(fname, output):
if output:
for m, r in [("/", "__"), ("\\", "__"), (":", "@"), ("..", "@@")]:
fname = fname.replace(m, r)
- with open(args.output_dir + "/" + fname + ".qstr", "w") as f:
+ with open(args.output_dir + "/" + fname + "." + args.mode, "w") as f:
f.write("\n".join(output) + "\n")
def process_file(f):
re_line = re.compile(r"#[line]*\s\d+\s\"([^\"]+)\"")
- re_qstr = re.compile(r"MP_QSTR_[_a-zA-Z0-9]+")
+ if args.mode == _MODE_QSTR:
+ re_match = re.compile(r"MP_QSTR_[_a-zA-Z0-9]+")
+ elif args.mode == _MODE_COMPRESS:
+ re_match = re.compile(r'MP_COMPRESSED_ROM_TEXT\("([^"]*)"\)')
output = []
last_fname = None
for line in f:
@@ -41,9 +51,12 @@ def process_file(f):
output = []
last_fname = fname
continue
- for match in re_qstr.findall(line):
- name = match.replace("MP_QSTR_", "")
- output.append("Q(" + name + ")")
+ for match in re_match.findall(line):
+ if args.mode == _MODE_QSTR:
+ name = match.replace("MP_QSTR_", "")
+ output.append("Q(" + name + ")")
+ elif args.mode == _MODE_COMPRESS:
+ output.append(match)
write_out(last_fname, output)
return ""
@@ -56,7 +69,7 @@ def cat_together():
hasher = hashlib.md5()
all_lines = []
outf = open(args.output_dir + "/out", "wb")
- for fname in glob.glob(args.output_dir + "/*.qstr"):
+ for fname in glob.glob(args.output_dir + "/*." + args.mode):
with open(fname, "rb") as f:
lines = f.readlines()
all_lines += lines
@@ -73,8 +86,11 @@ def cat_together():
old_hash = f.read()
except IOError:
pass
+ mode_full = "QSTR"
+ if args.mode == _MODE_COMPRESS:
+ mode_full = "Compressed data"
if old_hash != new_hash:
- print("QSTR updated")
+ print(mode_full, "updated")
try:
# rename below might fail if file exists
os.remove(args.output_file)
@@ -84,12 +100,12 @@ def cat_together():
with open(args.output_file + ".hash", "w") as f:
f.write(new_hash)
else:
- print("QSTR not updated")
+ print(mode_full, "not updated")
if __name__ == "__main__":
- if len(sys.argv) != 5:
- print("usage: %s command input_filename output_dir output_file" % sys.argv[0])
+ if len(sys.argv) != 6:
+ print("usage: %s command mode input_filename output_dir output_file" % sys.argv[0])
sys.exit(2)
class Args:
@@ -97,9 +113,14 @@ if __name__ == "__main__":
args = Args()
args.command = sys.argv[1]
- args.input_filename = sys.argv[2]
- args.output_dir = sys.argv[3]
- args.output_file = sys.argv[4]
+ args.mode = sys.argv[2]
+ args.input_filename = sys.argv[3] # Unused for command=cat
+ args.output_dir = sys.argv[4]
+ args.output_file = None if len(sys.argv) == 5 else sys.argv[5] # Unused for command=split
+
+ if args.mode not in (_MODE_QSTR, _MODE_COMPRESS):
+ print("error: mode %s unrecognised" % sys.argv[2])
+ sys.exit(2)
try:
os.makedirs(args.output_dir)