From 418c90a02d13a2dd05bd604250ff8da889e1ef86 Mon Sep 17 00:00:00 2001 From: Alberto Sartori Date: Tue, 6 Dec 2022 10:52:47 +0100 Subject: add latexmk rule... ...the main improvement wrt to standalone rule is the usage of latexmk, which automatically runs latex the right number of times, and, if needed, can call bibtex as well. Co-authored-by: Oliver Reiche --- latex/EXPRESSIONS | 211 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 latex/EXPRESSIONS (limited to 'latex/EXPRESSIONS') diff --git a/latex/EXPRESSIONS b/latex/EXPRESSIONS new file mode 100644 index 0000000..640f587 --- /dev/null +++ b/latex/EXPRESSIONS @@ -0,0 +1,211 @@ +{ "call latex": + { "vars": + [ "srcs" + , "main" + , "deps" + , "stage" + , "env" + , "executable" + , "runner" + , "runner type" + , "opts" + , "output file extension" + ] + , "expression": + { "type": "let*" + , "bindings": + [ [ "stage" + , { "type": "join" + , "separator": "/" + , "$1": {"type": "var", "name": "stage"} + } + ] + , [ "srcs" + , { "type": "disjoint_map_union" + , "msg": "Sources may not conflict" + , "$1": + { "type": "foreach" + , "var": "x" + , "range": {"type": "var", "name": "srcs"} + , "body": + { "type": "map_union" + , "$1": + [ {"type": "DEP_RUNFILES", "dep": {"type": "var", "name": "x"}} + , { "type": "DEP_ARTIFACTS" + , "dep": {"type": "var", "name": "x"} + } + ] + } + } + } + ] + , [ "main" + , { "type": "assert_non_empty" + , "msg": "Entry-point main cannot be empty" + , "$1": {"type": "join", "$1": {"type": "var", "name": "main"}} + } + ] + , [ "_" + , { "type": "if" + , "cond": + { "type": "==" + , "$1": + { "type": "lookup" + , "map": {"type": "var", "name": "srcs"} + , "key": + { "type": "join" + , "$1": [{"type": "var", "name": "main"}, ".tex"] + } + } + , "$2": null + } + , "then": + { "type": "fail" + , "msg": + [ "main not the base name of a .tex file in srcs" + , "main has value" + , {"type": "var", "name": "main"} + , "srcs have file names" + , {"type": "keys", "$1": {"type": "var", "name": "srcs"}} + ] + } + } + ] + , [ "main" + , { "type": "if" + , "cond": + {"type": "==", "$1": {"type": "var", "name": "stage"}, "$2": ""} + , "then": {"type": "var", "name": "main"} + , "else": + { "type": "join" + , "separator": "/" + , "$1": + [ {"type": "var", "name": "stage"} + , {"type": "var", "name": "main"} + ] + } + } + ] + , [ "srcs" + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "stage"} + , "$1": {"type": "var", "name": "srcs"} + } + ] + , [ "deps" + , { "type": "disjoint_map_union" + , "msg": "Dependencies may not conflict" + , "$1": + { "type": "foreach" + , "var": "x" + , "range": {"type": "var", "name": "deps"} + , "body": + {"type": "DEP_RUNFILES", "dep": {"type": "var", "name": "x"}} + } + } + ] + , [ "tex inputs" + , { "type": "to_subdir" + , "subdir": "work" + , "$1": + { "type": "disjoint_map_union" + , "msg": "Staging conflict between staged sources and deps" + , "$1": + [ {"type": "var", "name": "deps"} + , {"type": "var", "name": "srcs"} + ] + } + } + ] + , [ "env" + , { "type": "map_union" + , "$1": + [ { "type": "singleton_map" + , "key": "PATH" + , "value": "/bin:/usr/bin:/usr/local/bin" + } + , { "type": "singleton_map" + , "key": "SOURCE_DATE_EPOCH" + , "value": "0" + } + , {"type": "var", "name": "env"} + ] + } + ] + , [ "cmd" + , { "type": "if" + , "cond": + { "type": "==" + , "$1": {"type": "var", "name": "runner type"} + , "$2": "latexmk" + } + , "then": + { "type": "++" + , "$1": + [ ["sh", "runner"] + , [{"type": "var", "name": "executable"}] + , [{"type": "var", "name": "main"}] + , { "type": "if" + , "cond": {"type": "var", "name": "opts"} + , "then": {"type": "var", "name": "opts"} + , "else": ["-pdf"] + } + ] + } + , "else": + [ "./runner" + , {"type": "var", "name": "executable"} + , {"type": "var", "name": "main"} + ] + } + ] + , [ "output file" + , { "type": "ACTION" + , "inputs": + { "type": "map_union" + , "$1": + [ {"type": "var", "name": "tex inputs"} + , {"type": "var", "name": "runner"} + ] + } + , "outs": + [ { "type": "join" + , "$1": + [ "work/" + , {"type": "var", "name": "main"} + , { "type": "join" + , "separator": "" + , "$1": {"type": "var", "name": "output file extension"} + } + ] + } + ] + , "cmd": {"type": "var", "name": "cmd"} + , "env": {"type": "var", "name": "env"} + } + ] + , [ "output file" + , { "type": "map_union" + , "$1": + { "type": "foreach_map" + , "var_key": "name" + , "var_val": "file" + , "range": {"type": "var", "name": "output file"} + , "body": + { "type": "singleton_map" + , "key": + {"type": "basename", "$1": {"type": "var", "name": "name"}} + , "value": {"type": "var", "name": "file"} + } + } + } + ] + ] + , "body": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "output file"} + , "runfiles": {"type": "var", "name": "output file"} + } + } + } +} -- cgit v1.2.3