Учитывая этот файл BUILD для Bazel ниже, как я могу получить абсолютный путь к верхнему уровню группы файлов compiler_files? Я пробовал использовать $(location //X:Y) и его варианты, но получаю просто огромный список файлов с указанием их путей относительно песочницы. Каков идиоматический способ обновления переменной среды PATH в правиле с путем к инструменту, указанному в атрибуте tools?
package(default_visibility = ['//visibility:public'])
filegroup(
name = "script",
srcs = ["src/inspect.sh"],
)
genrule(
name = "inspect",
srcs = [":script"],
cmd = """
# Instead of /tmp below I need to refer to the path of one of the tools
# export PATH=/tmp:$$PATH
source $(location :script)
cp output.txt $(RULEDIR)/
""",
tools = [
"@emsdk//emscripten_toolchain:compiler_files"
],
outs = ["generated.txt"]
)





Обычный трюк для этого — напрямую зависеть от файла в каталоге, в который вы хотите добавить $PATH, а затем ссылаться на имя его каталога в скрипте genrule. Так, например, чтобы добавить местоположение emcc.sh:
genrule(
name = "inspect",
srcs = [":script"],
cmd = """
export PATH=$$(dirname $$(realpath $(location @emsdk//emscripten_toolchain:emcc.sh))):$$PATH
source $(location :script)
cp output.txt $(RULEDIR)/
""",
tools = [
"@emsdk//emscripten_toolchain:emcc.sh",
"@emsdk//emscripten_toolchain:compiler_files",
],
outs = ["generated.txt"]
)
У меня это работает: export PATH=$$(dirname $$(realpath $(location @emsdk//emscripten_toolchain:emcc.sh))):$$PATH
Это почти решение, однако в конце отсутствует скобка, а имя_каталога возвращает не абсолютный путь, а только относительный, который, я думаю, не работает в PATH, верно?