From acb133d1b1a68847bd85c545312c3e221a6f7c0b Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 10 Apr 2014 03:38:42 +0300 Subject: [PATCH] makeqstrdata.py: Add support for conditionally defined qstrs. Syntax is usual C #if*/#endif, but each qstr must be wrapped individually. --- py/makeqstrdata.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/py/makeqstrdata.py b/py/makeqstrdata.py index 7413365712..e60f000440 100644 --- a/py/makeqstrdata.py +++ b/py/makeqstrdata.py @@ -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 == "": + assert line == "#endif" + conditional = None + else: + assert conditional is None + conditional = line + continue + + if conditional == "": + 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 = "" # 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