Home | History | Annotate | Download | only in generated
      1 %YAML 1.2
      2 --- |
      3   <%!
      4   import json
      5   import os
      6 
      7   def proto_headers(src):
      8     out = []
      9     for f in src:
     10       name, ext = os.path.splitext(f)
     11       if ext == '.proto':
     12         out.extend(fmt % name for fmt in ['%s.grpc.pb.h', '%s.pb.h', '%s_mock.grpc.pb.h'])
     13     return out
     14 
     15   def all_targets(targets, libs, filegroups):
     16     for tgt in targets:
     17       yield ('target', tgt)
     18     for tgt in libs:
     19       yield ('lib', tgt)
     20     for tgt in filegroups:
     21       yield ('filegroup', tgt)
     22 
     23   def no_protos_filter(src):
     24   	return os.path.splitext(src)[1] != '.proto'
     25 
     26   def no_third_party_filter(src):
     27   	return not src.startswith('third_party/')
     28 
     29   def filter_srcs(srcs, filters):
     30   	out = []
     31   	for s in srcs:
     32   		filter_passes = (f(s) for f in filters)
     33   		if all(filter_passes):
     34   			out.append(s)
     35   	return out
     36   %>
     37 
     38   ${json.dumps([{"name": tgt.name,
     39                  "type": typ,
     40                  "is_filegroup": False,
     41                  "language": tgt.language,
     42                  "third_party": tgt.boringssl or tgt.zlib,
     43                  "src": sorted(
     44                      filter_srcs(tgt.own_src, (no_protos_filter, no_third_party_filter)) +
     45                      filter_srcs(tgt.own_public_headers, (no_protos_filter, no_third_party_filter)) +
     46                      filter_srcs(tgt.own_headers, (no_third_party_filter,))),
     47                  "headers": sorted(
     48                      tgt.own_public_headers +
     49                      tgt.own_headers +
     50                      proto_headers(tgt.own_src)),
     51                  "deps": sorted(tgt.get('deps', []) +
     52                                 tgt.get('uses', []) +
     53                                 tgt.get('filegroups', []))}
     54                 for typ, tgt in all_targets(targets, libs, [])] +
     55                 [{"name": tgt.name,
     56                  "type": typ,
     57                  "is_filegroup": True,
     58                  "language": tgt.language,
     59                  "third_party": tgt.boringssl or tgt.zlib,
     60                  "src": sorted(
     61                      filter_srcs(tgt.own_src, (no_protos_filter, no_third_party_filter)) +
     62                      filter_srcs(tgt.own_public_headers, (no_protos_filter, no_third_party_filter)) +
     63                      filter_srcs(tgt.own_headers, (no_third_party_filter,))),
     64                  "headers": sorted(
     65                      tgt.own_public_headers +
     66                      tgt.own_headers +
     67                      proto_headers(tgt.own_src)),
     68                  "deps": sorted(tgt.get('deps', []) +
     69                                 tgt.get('uses', []) +
     70                                 tgt.get('filegroups', []))}
     71                 for typ, tgt in all_targets([], [], filegroups)],
     72                sort_keys=True, indent=2)}
     73