aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/buildgen
diff options
context:
space:
mode:
authorGravatar Nicolas "Pixel" Noble <pixel@nobis-crew.org>2015-01-23 02:06:18 +0100
committerGravatar Nicolas "Pixel" Noble <pixel@nobis-crew.org>2015-01-23 02:06:18 +0100
commitb049ba8fc4792f283db410caf561d05c361d43d2 (patch)
tree2d56bade7205322e7b00dc440687ad0683ce825b /tools/buildgen
parentcc0994c8cbd302aa99483e42d6d2855b0cd59fd4 (diff)
parentfdd76ba414cde7e7ae827183fcf04c9b2874adf6 (diff)
Merge branch 'master' of github.com:google/grpc into vsprojects
Conflicts: templates/vsprojects/vs2013/grpc.sln.template
Diffstat (limited to 'tools/buildgen')
-rwxr-xr-xtools/buildgen/build-cleaner.py63
-rwxr-xr-xtools/buildgen/generate_projects.sh4
-rwxr-xr-xtools/buildgen/plugins/generate_vsprojects.py2
3 files changed, 66 insertions, 3 deletions
diff --git a/tools/buildgen/build-cleaner.py b/tools/buildgen/build-cleaner.py
new file mode 100755
index 0000000000..f9307360c3
--- /dev/null
+++ b/tools/buildgen/build-cleaner.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+# produces cleaner build.json files
+
+import collections
+import json
+import os
+import sys
+
+TEST = (os.environ.get('TEST', 'false') == 'true')
+
+_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.get('language', '_'), x['name']))
+ output = json.dumps(js, indent = 2)
+ # massage out trailing whitespace
+ lines = []
+ for line in output.splitlines():
+ lines.append(line.rstrip() + '\n')
+ output = ''.join(lines)
+ if TEST:
+ with open(filename) as f:
+ assert f.read() == output
+ else:
+ with open(filename, 'w') as f:
+ f.write(output)
+
diff --git a/tools/buildgen/generate_projects.sh b/tools/buildgen/generate_projects.sh
index 42b161388a..2e0636fcbe 100755
--- a/tools/buildgen/generate_projects.sh
+++ b/tools/buildgen/generate_projects.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-set -x
+set -e
if [ "x$TEST" == "x" ] ; then
TEST=false
@@ -32,7 +32,7 @@ for dir in . ; do
data=`for i in $json_files; do echo -n "-d $i "; done`
if [ $TEST == true ] ; then
actual_out=$out
- out=`mktemp`
+ out=`mktemp /tmp/gentXXXXXX`
fi
$mako_renderer $plugins $data -o $out $file
if [ $TEST == true ] ; then
diff --git a/tools/buildgen/plugins/generate_vsprojects.py b/tools/buildgen/plugins/generate_vsprojects.py
index 36eb8f7008..021b843868 100755
--- a/tools/buildgen/plugins/generate_vsprojects.py
+++ b/tools/buildgen/plugins/generate_vsprojects.py
@@ -30,7 +30,7 @@ def mako_plugin(dictionary):
projects = [project for project in projects if project.get('vs_project_guid', None)]
## Exclude C++ projects for now
- projects = [project for project in projects if not project.get('c++', False)]
+ projects = [project for project in projects if not project.language == 'c++']
project_dict = dict([(p['name'], p) for p in projects])