%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']) 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)}