根据我的一条规则,我想通过unzip -d
解压缩文件,以便可以访问某些标头。
当前,我是通过使用PATH上的任何解压缩来实现的。
ctx.actions.run(
...
executable = "unzip",
)
或者,我可以使用/usr/bin/unzip
来避免依赖我的PATH。但是,尚不清楚应采用哪种惯用方法。根据我对文档的阅读,理想情况下,我会为unzip
设置某种规则会调用的Bazel二进制目标。不过,还不清楚我将如何定义该二进制目标,也许是sh_binary
。
答案 0 :(得分:1)
正确的解决方案是在您的存储库中包含一个解压缩实用程序。 (要么在源树中,要么作为外部存储库导入。)
否则,我认为最原则的方法是编写一个存储库规则,使用unzip
从PATH中查找repository_ctx.which
(或者只是希望存在“ / usr / bin / unzip”)并使用包含封装sh_binary
工具的unzip
创建一个BUILD文件(repository_ctx.file
)。
在两种情况下,您都必须向使用规则添加标签属性“ _unzip_tool”:
"_unzip_tool": attr.label(
executable = True,
cfg = "host",
default = Label("@unzip//:unzip_tool"),
),
并像这样使用它:
ctx.actions.run(
...,
executable = ctx.executable._unzip_tool,
)