aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/buildgen/build-cleaner.py
diff options
context:
space:
mode:
authorGravatar Craig Tiller <craig.tiller@gmail.com>2015-01-18 11:31:37 -0800
committerGravatar Craig Tiller <craig.tiller@gmail.com>2015-01-18 11:31:37 -0800
commit7acce50cdd72566e4eb15be02a86ef581e838039 (patch)
tree8e5e04e6b09b49afc1c045ccb5ee820cc2a8c849 /tools/buildgen/build-cleaner.py
parent17ec5f9ebfd03cd156bf0f87c38d02e8cd725fea (diff)
Rename
Diffstat (limited to 'tools/buildgen/build-cleaner.py')
-rwxr-xr-xtools/buildgen/build-cleaner.py56
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))
+