diff options
Diffstat (limited to 'tools/buildgen/plugins')
-rwxr-xr-x | tools/buildgen/plugins/expand_filegroups.py | 45 | ||||
-rwxr-xr-x | tools/buildgen/plugins/list_protos.py | 41 |
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 |