В Starlark, как мне сгенерировать файл, связанный с исполняемыми файлами? - PullRequest
0 голосов
/ 28 марта 2019

В файле Starlark, который используется в Bazel, если я создаю файл с ctx.actions.declare_file(), есть ли способ связать с ним зависимости / datafiles / runfiles?Например:

Я могу создать и записать в файл:

script_file = ctx.actions.declare_file("myscript.sh")
ctx.actions.write(
    script_file,
    "echo hello from myscript.sh\n",
    is_executable = True
)

... и тогда я могу использовать script_file любым способом, каким захочу.Например, ctx.actions.run или ctx.actions.run_shell.

Теперь предположим, что myscript.sh зависит от data.txt:

data_file = ctx.actions.declare_file("data.txt")
ctx.actions.write(data_file, "hello from data.txt\n")

script_file = ctx.actions.declare_file("myscript.sh")
ctx.actions.write(
    script_file,
    "cat {}\n".format(data_file.path),
    is_executable = True
)

И тогда я могу запустить его (в этом примере правило, котороевызываемый this имеет вывод с именем "main"):

ctx.actions.run_shell(
    tools = [script_file, data_file],
    outputs = [ctx.outputs.main],
    command = "{} > {}".format(script_file.path, ctx.outputs.main.path)
)

Хорошо.Но на самом деле грязно указывать script_file и data_file в массиве tools.Я хотел бы указать только script_file и автоматически выбрать data_file в качестве файла запуска script_file.

Есть ли способ для этого?Если так, то как?Если нет, есть ли другой, лучший способ для меня, чтобы приблизиться к этому?

...