summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--py/makeqstrdefs.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/py/makeqstrdefs.py b/py/makeqstrdefs.py
index 95e7c80a44..194d901d26 100644
--- a/py/makeqstrdefs.py
+++ b/py/makeqstrdefs.py
@@ -16,7 +16,8 @@ QSTRING_BLACK_LIST = {'NULL', 'number_of', }
def write_out(fname, output):
if output:
- fname = fname.replace("/", "__").replace("..", "@@")
+ for m, r in [("/", "__"), ("\\", "__"), (":", "@"), ("..", "@@")]:
+ fname = fname.replace(m, r)
with open(args.output_dir + "/" + fname + ".qstr", "w") as f:
f.write("\n".join(output) + "\n")
@@ -24,11 +25,11 @@ def process_file(f):
output = []
last_fname = None
for line in f:
- if line and line[0:2] == "# ":
- comp = line.split()
- fname = comp[2]
- assert fname[0] == '"' and fname[-1] == '"'
- fname = fname[1:-1]
+ # match gcc-like output (# n "file") and msvc-like output (#line n "file")
+ if line and (line[0:2] == "# " or line[0:5] == "#line"):
+ m = re.match(r"#[line]*\s\d+\s\"([^\"]+)\"", line)
+ assert m is not None
+ fname = m.group(1)
if fname[0] == "/" or not fname.endswith(".c"):
continue
if fname != last_fname:
@@ -70,6 +71,11 @@ def cat_together():
pass
if old_hash != new_hash:
print("QSTR updated")
+ try:
+ # rename below might fail if file exists
+ os.remove(args.output_file)
+ except:
+ pass
os.rename(args.output_dir + "/out", args.output_file)
with open(args.output_file + ".hash", "w") as f:
f.write(new_hash)