@@ -40,22 +40,39 @@ def _ruby_binary_impl(ctx):
4040 deps = _transitive_deps (
4141 ctx ,
4242 extra_files = interpreter_file_deps + [executable ],
43- extra_deps = interpreter_trans_deps ,
43+ extra_deps = interpreter_trans_deps + ctx . attr . _misc_deps ,
4444 )
4545
4646 rubyopt = reversed (deps .rubyopt .to_list ())
47-
47+ intermediate_executable = ctx . actions . declare_file ( "%s.tpl.intermediate" % ctx . attr . name )
4848 ctx .actions .expand_template (
4949 template = ctx .file ._wrapper_template ,
50- output = executable ,
50+ output = intermediate_executable ,
5151 substitutions = {
52- "{interpreter}" : interpreter .short_path ,
5352 "{loadpaths}" : repr (deps .incpaths .to_list ()),
5453 "{rubyopt}" : repr (rubyopt ),
5554 "{main}" : repr (_to_manifest_path (ctx , main )),
55+ "{interpreter}" : _to_manifest_path (ctx , interpreter ),
5656 },
57- is_executable = True ,
5857 )
58+ if sdk .is_host :
59+ ctx .actions .run_shell (
60+ inputs = [intermediate_executable ],
61+ outputs = [executable ],
62+ command = "grep -v '^#shell ' %s > %s" % (
63+ intermediate_executable .path ,
64+ executable .path ,
65+ ),
66+ )
67+ else :
68+ ctx .actions .run_shell (
69+ inputs = [intermediate_executable ],
70+ outputs = [executable ],
71+ command = "sed 's/^#shell //' %s > %s" % (
72+ intermediate_executable .path ,
73+ executable .path ,
74+ ),
75+ )
5976 return [DefaultInfo (
6077 executable = executable ,
6178 default_runfiles = deps .default_files ,
@@ -81,6 +98,10 @@ _ATTRS = {
8198 allow_single_file = True ,
8299 default = "binary_wrapper.tpl" ,
83100 ),
101+ "_misc_deps" : attr .label_list (
102+ allow_files = True ,
103+ default = ["@bazel_tools//tools/bash/runfiles" ],
104+ ),
84105}
85106
86107ruby_binary = rule (
0 commit comments