| %YAML 1.2 |
| --- | |
| <%! |
| import json |
| import os |
| |
| def proto_headers(src): |
| out = [] |
| for f in src: |
| name, ext = os.path.splitext(f) |
| if ext == '.proto': |
| out.extend(fmt % name for fmt in ['%s.grpc.pb.h', '%s.pb.h', '%s_mock.grpc.pb.h']) |
| return out |
| |
| def all_targets(targets, libs, filegroups): |
| for tgt in targets: |
| yield ('target', tgt) |
| for tgt in libs: |
| yield ('lib', tgt) |
| for tgt in filegroups: |
| yield ('filegroup', tgt) |
| |
| def no_protos_filter(src): |
| return os.path.splitext(src)[1] != '.proto' |
| |
| def no_third_party_filter(src): |
| return not src.startswith('third_party/') |
| |
| def filter_srcs(srcs, filters): |
| out = [] |
| for s in srcs: |
| filter_passes = (f(s) for f in filters) |
| if all(filter_passes): |
| out.append(s) |
| return out |
| %> |
| |
| ${json.dumps([{"name": tgt.name, |
| "type": typ, |
| "is_filegroup": False, |
| "language": tgt.language, |
| "third_party": tgt.boringssl or tgt.zlib, |
| "src": sorted( |
| filter_srcs(tgt.own_src, (no_protos_filter, no_third_party_filter)) + |
| filter_srcs(tgt.own_public_headers, (no_protos_filter, no_third_party_filter)) + |
| filter_srcs(tgt.own_headers, (no_third_party_filter,))), |
| "headers": sorted( |
| tgt.own_public_headers + |
| tgt.own_headers + |
| proto_headers(tgt.own_src)), |
| "deps": sorted(tgt.get('deps', []) + |
| tgt.get('uses', []) + |
| tgt.get('filegroups', []))} |
| for typ, tgt in all_targets(targets, libs, [])] + |
| [{"name": tgt.name, |
| "type": typ, |
| "is_filegroup": True, |
| "language": tgt.language, |
| "third_party": tgt.boringssl or tgt.zlib, |
| "src": sorted( |
| filter_srcs(tgt.own_src, (no_protos_filter, no_third_party_filter)) + |
| filter_srcs(tgt.own_public_headers, (no_protos_filter, no_third_party_filter)) + |
| filter_srcs(tgt.own_headers, (no_third_party_filter,))), |
| "headers": sorted( |
| tgt.own_public_headers + |
| tgt.own_headers + |
| proto_headers(tgt.own_src)), |
| "deps": sorted(tgt.get('deps', []) + |
| tgt.get('uses', []) + |
| tgt.get('filegroups', []))} |
| for typ, tgt in all_targets([], [], filegroups)], |
| sort_keys=True, indent=2)} |