_browser_names = [ "android", "chrome", "firefox", "ie", "ios", ] def _closure_lang_file_impl(ctx): binaries = {} suffixes = ["_%s" % n for n in _browser_names] for d in ctx.attr.deps: if getattr(d, "closure_js_binary", None): name = d.label.name.replace("-", "_") for suffix in suffixes: if name.endswith(suffix): name = name[0:-len(suffix)] binaries.update({name: d.closure_js_binary.bin}) args = ctx.actions.args() args.add(ctx.attr.lang) args.add(ctx.outputs.out) args.add(ctx.attr.preamble) args.add(ctx.attr.utf8) for key in sorted(binaries.keys()): args.add(key) args.add(binaries[key]) ctx.actions.run( executable = ctx.executable._lang_gen, arguments = [args], inputs = binaries.values(), outputs = [ ctx.outputs.out, ], ) return [ DefaultInfo(files = depset([ctx.outputs.out])), ] closure_lang_file = rule( _closure_lang_file_impl, attrs = { "deps": attr.label_list( allow_empty = False, allow_files = False, ), "lang": attr.string( values = ["cc", "hdecl", "hh", "java"], mandatory = True, ), "preamble": attr.string( default = "", ), "out": attr.output(), "_lang_gen": attr.label( default = "//javascript/private:gen_file", executable = True, cfg = "exec", ), "utf8": attr.bool( doc = "Generate utf8 or not. UTF8 with generate string and char. " + "If false, genereation with use wchar_t and wstring. Defaults to False", default = False, ), }, )