From acb133d1b1a68847bd85c545312c3e221a6f7c0b Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
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 741336571..e60f00044 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 == "<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
 
-- 
GitLab