diff options
author | 2015-01-18 11:31:37 -0800 | |
---|---|---|
committer | 2015-01-18 11:31:37 -0800 | |
commit | 7acce50cdd72566e4eb15be02a86ef581e838039 (patch) | |
tree | 8e5e04e6b09b49afc1c045ccb5ee820cc2a8c849 /tools/buildgen/build-cleaner.py | |
parent | 17ec5f9ebfd03cd156bf0f87c38d02e8cd725fea (diff) |
Rename
Diffstat (limited to 'tools/buildgen/build-cleaner.py')
-rwxr-xr-x | tools/buildgen/build-cleaner.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tools/buildgen/build-cleaner.py b/tools/buildgen/build-cleaner.py new file mode 100755 index 0000000000..66ee99773e --- /dev/null +++ b/tools/buildgen/build-cleaner.py @@ -0,0 +1,56 @@ +#!/usr/bin/python +# produces cleaner build.json files + +import collections +import json +import os +import sys + +_TOP_LEVEL_KEYS = ['settings', 'filegroups', 'libs', 'targets'] +_VERSION_KEYS = ['major', 'minor', 'micro', 'build'] +_ELEM_KEYS = [ + 'name', + 'build', + 'language', + 'public_headers', + 'headers', + 'src', + 'deps'] + +def rebuild_as_ordered_dict(indict, special_keys): + outdict = collections.OrderedDict() + for key in special_keys: + if key in indict: + outdict[key] = indict[key] + for key in sorted(indict.keys()): + if key in special_keys: continue + outdict[key] = indict[key] + return outdict + +def clean_elem(indict): + for name in ['public_headers', 'headers', 'src']: + if name not in indict: continue + inlist = indict[name] + protos = set(x for x in inlist if os.path.splitext(x)[1] == '.proto') + others = set(x for x in inlist if x not in protos) + indict[name] = sorted(protos) + sorted(others) + return rebuild_as_ordered_dict(indict, _ELEM_KEYS) + +for filename in sys.argv[1:]: + with open(filename) as f: + js = json.load(f) + js = rebuild_as_ordered_dict(js, _TOP_LEVEL_KEYS) + js['settings']['version'] = rebuild_as_ordered_dict( + js['settings']['version'], _VERSION_KEYS) + for grp in ['filegroups', 'libs', 'targets']: + if grp not in js: continue + js[grp] = sorted([clean_elem(x) for x in js[grp]], + key=lambda x: x['name']) + output = json.dumps(js, indent = 2) + # massage out trailing whitespace + lines = [] + for line in output.splitlines(): + lines.append(line.rstrip() + '\n') + with open(filename, 'w') as f: + f.write(''.join(lines)) + |