Commit acb133d1 authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

makeqstrdata.py: Add support for conditionally defined qstrs.

Syntax is usual C #if*/#endif, but each qstr must be wrapped individually.
parent 881d9af0
......@@ -29,6 +29,7 @@ def do_work(infiles):
for infile in infiles:
with open(infile, 'rt') as f:
line_number = 0
conditional = None
for line in f:
line_number += 1
line = line.strip()
......@@ -37,6 +38,18 @@ def do_work(infiles):
if len(line) == 0 or line.startswith('//'):
continue
if line[0] == '#':
if conditional == "<endif>":
assert line == "#endif"
conditional = None
else:
assert conditional is None
conditional = line
continue
if conditional == "<endif>":
assert False, "#endif expected before '%s'" % line
# verify line is of the correct form
match = re.match(r'Q\((.+)\)$', line)
if not match:
......@@ -52,15 +65,21 @@ def do_work(infiles):
continue
# add the qstr to the list, with order number to retain original order in file
qstrs[ident] = (len(qstrs), ident, qstr)
qstrs[ident] = (len(qstrs), ident, qstr, conditional)
if conditional is not None:
conditional = "<endif>"
# process the qstrs, printing out the generated C header file
print('// This file was automatically generated by makeqstrdata.py')
print('')
for order, ident, qstr in sorted(qstrs.values(), key=lambda x: x[0]):
for order, ident, qstr, conditional in sorted(qstrs.values(), key=lambda x: x[0]):
qhash = compute_hash(qstr)
qlen = len(qstr)
if conditional:
print(conditional)
print('Q({}, (const byte*)"\\x{:02x}\\x{:02x}\\x{:02x}\\x{:02x}" "{}")'.format(ident, qhash & 0xff, (qhash >> 8) & 0xff, qlen & 0xff, (qlen >> 8) & 0xff, qstr))
if conditional:
print('#endif')
return True
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment