Add support for externs files.
--
MOS_MIGRATED_REVID=97334355
diff --git a/tools/build_rules/closure/closure_js_binary.bzl b/tools/build_rules/closure/closure_js_binary.bzl
index 419f8a5..01790e3 100644
--- a/tools/build_rules/closure/closure_js_binary.bzl
+++ b/tools/build_rules/closure/closure_js_binary.bzl
@@ -46,8 +46,10 @@
}
def _impl(ctx):
+ externs = set(order="compile")
srcs = set(order="compile")
for dep in ctx.attr.deps:
+ externs += dep.transitive_js_externs
srcs += dep.transitive_js_srcs
args = [
@@ -56,7 +58,8 @@
"--language_in=ECMASCRIPT5_STRICT",
"--manage_closure_dependencies",
"--warning_level=VERBOSE",
- ] + ["--js=%s" % src.path for src in srcs]
+ ] + (["--js=%s" % src.path for src in srcs] +
+ ["--externs=%s" % extern.path for extern in externs])
# Set the compilation level.
if ctx.attr.compilation_level in _COMPILATION_LEVELS:
@@ -77,7 +80,8 @@
implementation=_impl,
attrs={
"deps": attr.label_list(
- allow_files=False, providers=["transitive_js_srcs"]),
+ allow_files=False,
+ providers=["transitive_js_externs", "transitive_js_srcs"]),
"main": attr.string(default="%{name}"),
"compilation_level": attr.string(default="advanced"),
"_closure_compiler": attr.label(
diff --git a/tools/build_rules/closure/closure_js_library.bzl b/tools/build_rules/closure/closure_js_library.bzl
index 7dcfb2b..72a4c12 100644
--- a/tools/build_rules/closure/closure_js_library.bzl
+++ b/tools/build_rules/closure/closure_js_library.bzl
@@ -27,16 +27,23 @@
_JS_FILE_TYPE = FileType([".js"])
def _impl(ctx):
+ externs = set(order="compile")
srcs = set(order="compile")
for dep in ctx.attr.deps:
+ externs += dep.transitive_js_externs
srcs += dep.transitive_js_srcs
+ externs += _JS_FILE_TYPE.filter(ctx.files.externs)
srcs += _JS_FILE_TYPE.filter(ctx.files.srcs)
- return struct(files=set(), transitive_js_srcs=srcs)
+
+ return struct(
+ files=set(), transitive_js_externs=externs, transitive_js_srcs=srcs)
closure_js_library = rule(
implementation=_impl,
attrs={
+ "externs": attr.label_list(allow_files=_JS_FILE_TYPE),
"srcs": attr.label_list(allow_files=_JS_FILE_TYPE),
- "deps": attr.label_list(providers=["transitive_js_srcs"])
+ "deps": attr.label_list(
+ providers=["transitive_js_externs", "transitive_js_srcs"])
})
diff --git a/tools/build_rules/closure/closure_stylesheet_library.bzl b/tools/build_rules/closure/closure_stylesheet_library.bzl
index 3dc6b13..7b90b17 100644
--- a/tools/build_rules/closure/closure_stylesheet_library.bzl
+++ b/tools/build_rules/closure/closure_stylesheet_library.bzl
@@ -58,6 +58,7 @@
return struct(
files=set([ctx.outputs.out]),
transitive_gss_srcs=srcs,
+ transitive_js_externs=set(),
transitive_js_srcs=[ctx.outputs.out_renaming])
# There are two outputs:
diff --git a/tools/build_rules/closure/closure_template_library.bzl b/tools/build_rules/closure/closure_template_library.bzl
index 20fb839..e41cc2d 100644
--- a/tools/build_rules/closure/closure_template_library.bzl
+++ b/tools/build_rules/closure/closure_template_library.bzl
@@ -46,7 +46,9 @@
arguments=args,
executable=ctx.executable._closure_templates)
- return struct(files=set(), transitive_js_srcs=set([ctx.outputs.out]))
+ return struct(
+ files=set(), transitive_js_externs=set(),
+ transitive_js_srcs=set([ctx.outputs.out]))
closure_template_library = rule(
implementation=_impl,