| import argparse |
| import subprocess |
| import json |
| import os |
| import re |
| |
| if __name__== '__main__': |
| parser = argparse.ArgumentParser() |
| parser.add_argument('input') |
| parser.add_argument('output') |
| parser.add_argument('buildroot') |
| |
| args = parser.parse_known_args() |
| |
| # c_args might contain things that are essential for crosscompilation, but |
| # are not included in cc.cmd_array(), so we have to look them up ourselves |
| host_cargs = [] |
| buildroot = args[0].buildroot |
| with open(os.path.join(buildroot, 'meson-info', 'intro-buildoptions.json')) as json_file: |
| bopts = json.load(json_file) |
| for opt in bopts: |
| if opt['name'] == 'c_args' and opt['section'] == 'compiler' and opt['machine'] == 'host': |
| host_cargs = opt['value'] |
| break |
| |
| cpp = args[1] |
| ret = subprocess.run(cpp + host_cargs + [args[0].input], stdout=subprocess.PIPE, check=True) |
| |
| stdout = ret.stdout.decode('utf8') |
| |
| with open(args[0].output, 'w') as out: |
| write = True |
| for l in stdout.split('\n'): |
| l = l.strip('\r') |
| if l.startswith('CUT_OUT_BEGIN'): |
| write = False |
| |
| if write and l: |
| stripped = re.sub('^\s+', '', l) |
| stripped = re.sub('\s*,\s*', ',', stripped) |
| if not stripped.isspace() and stripped: |
| out.write('%s\n' % stripped) |
| |
| if l.startswith('CUT_OUT_END'): |
| write = True |