%YAML 1.2
--- |
  <%!
  # TODO (mxyan): Make this list from build.yaml
  textual_headers = ["include/grpc/support/atm_gcc_atomic.h",
                     "include/grpc/support/atm_gcc_sync.h",
                     "include/grpc/support/atm_windows.h",
                     "include/grpc/support/sync_custom.h",
                     "include/grpc/support/sync_posix.h",
                     "include/grpc/support/sync_windows.h",
                     "include/grpc/support/tls_gcc.h",
                     "include/grpc/support/tls_msvc.h",
                     "include/grpc/support/tls_pthread.h",
                     "include/grpc/impl/codegen/atm_gcc_atomic.h",
                     "include/grpc/impl/codegen/atm_gcc_sync.h",
                     "include/grpc/impl/codegen/atm_windows.h",
                     "include/grpc/impl/codegen/sync_custom.h",
                     "include/grpc/impl/codegen/sync_posix.h",
                     "include/grpc/impl/codegen/sync_windows.h"]

  def grpc_public_headers_no_dir(libs):
    out = []
    for lib in libs:
      if lib.name in ("grpc", "gpr"):
        out += lib.get('public_headers', [])
    out = [f for f in out if f not in textual_headers]
    out = [hdr.split('/', 2)[2] for hdr in out]
    return out

  # Generate the list of platform-specific headers as textual headers so that
  # they are not built when the module is built but only when they are named by
  # an #include directive.
  def grpc_public_textual_headers_no_dir(libs):
    out = []
    for lib in libs:
      if lib.name in ("grpc", "gpr"):
        out += lib.get('public_headers', [])
    out = [f for f in out if f in textual_headers]
    out = [hdr.split('/', 2)[2] for hdr in out]
    return out

  def header_lines(files):
    return ('\n  ').join('header "%s"' % f for f in files)

  def textual_header_lines(files):
    return ('\n  ').join('textual header "%s"' % f for f in files)
  %>
  framework module grpc {
    umbrella header "grpc.h"

    ${header_lines(grpc_public_headers_no_dir(libs))}

    ${textual_header_lines(grpc_public_textual_headers_no_dir(libs))}

    export *
    module * { export * }
  }

