aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/buildgen/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'tools/buildgen/plugins')
-rwxr-xr-xtools/buildgen/plugins/expand_filegroups.py45
-rwxr-xr-xtools/buildgen/plugins/list_protos.py41
2 files changed, 86 insertions, 0 deletions
diff --git a/tools/buildgen/plugins/expand_filegroups.py b/tools/buildgen/plugins/expand_filegroups.py
new file mode 100755
index 0000000000..108debefd5
--- /dev/null
+++ b/tools/buildgen/plugins/expand_filegroups.py
@@ -0,0 +1,45 @@
+"""Buildgen expand filegroups plugin.
+
+This takes the list of libs from our json dictionary,
+and expands any and all filegroup.
+
+"""
+
+
+def excluded(filename, exclude_res):
+ for r in exclude_res:
+ if r.search(filename):
+ return True
+ return False
+
+
+def mako_plugin(dictionary):
+ """The exported plugin code for expand_filegroups.
+
+ The list of libs in the build.json file can contain "filegroups" tags.
+ These refer to the filegroups in the root object. We will expand and
+ merge filegroups on the src, headers and public_headers properties.
+
+ """
+ libs = dictionary.get('libs')
+ filegroups_list = dictionary.get('filegroups')
+ filegroups = {}
+
+ for fg in filegroups_list:
+ filegroups[fg['name']] = fg
+
+ for lib in libs:
+ for fg_name in lib.get('filegroups', []):
+ fg = filegroups[fg_name]
+
+ src = lib.get('src', [])
+ src.extend(fg.get('src', []))
+ lib['src'] = src
+
+ headers = lib.get('headers', [])
+ headers.extend(fg.get('headers', []))
+ lib['headers'] = headers
+
+ public_headers = lib.get('public_headers', [])
+ public_headers.extend(fg.get('public_headers', []))
+ lib['public_headers'] = public_headers
diff --git a/tools/buildgen/plugins/list_protos.py b/tools/buildgen/plugins/list_protos.py
new file mode 100755
index 0000000000..c5a09dd4d0
--- /dev/null
+++ b/tools/buildgen/plugins/list_protos.py
@@ -0,0 +1,41 @@
+"""Buildgen .proto files list plugin.
+
+This parses the list of targets from the json build file, and creates
+a list called "protos" that contains all of the proto file names.
+
+"""
+
+
+import re
+
+
+def mako_plugin(dictionary):
+ """The exported plugin code for list_protos.
+
+ Some projects generators may want to get the full list of unique .proto files
+ that are being included in a project. This code extracts all files referenced
+ in any library or target that ends in .proto, and builds and exports that as
+ a list called "protos".
+
+ """
+
+ libs = dictionary.get('libs', [])
+ targets = dictionary.get('targets', [])
+
+ proto_re = re.compile('(.*)\\.proto')
+
+ protos = set()
+ for lib in libs:
+ for src in lib.get('src', []):
+ m = proto_re.match(src)
+ if m:
+ protos.add(m.group(1))
+ for tgt in targets:
+ for src in tgt.get('src', []):
+ m = proto_re.match(src)
+ if m:
+ protos.add(m.group(1))
+
+ protos = sorted(protos)
+
+ dictionary['protos'] = protos