1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #!/usr/bin/env python3
- import argparse
- import itertools
- import jinja2
- import os
- import re
- import sys
- def semver(v):
- if not re.fullmatch(r'\d+\.\d+\.\d+', v):
- raise ValueError
- return v
- if __name__ == '__main__':
- parser = argparse.ArgumentParser()
- parser.add_argument('--version', required=True, type=semver, help='Library version number')
- parser.add_argument('output', help='Output directory for nlohmann_json.natvis')
- args = parser.parse_args()
- namespaces = ['nlohmann']
- abi_prefix = 'json_abi'
- abi_tags = ['_diag', '_ldvcmp']
- version = '_v' + args.version.replace('.', '_')
- inline_namespaces = []
- # generate all combinations of inline namespace names
- for n in range(0, len(abi_tags) + 1):
- for tags in itertools.combinations(abi_tags, n):
- ns = abi_prefix + ''.join(tags)
- inline_namespaces += [ns, ns + version]
- namespaces += [f'{namespaces[0]}::{ns}' for ns in inline_namespaces]
- env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath=sys.path[0]), autoescape=True, trim_blocks=True,
- lstrip_blocks=True, keep_trailing_newline=True)
- template = env.get_template('nlohmann_json.natvis.j2')
- natvis = template.render(namespaces=namespaces)
- with open(os.path.join(args.output, 'nlohmann_json.natvis'), 'w') as f:
- f.write(natvis)
|