sprites/util/tup-ext.lua
Christopher Monsanto f49484f901 tup-ext: makecmd takes display argument
tup syntax `^ display^ ` is arcane
2020-05-01 20:24:42 -04:00

56 lines
1.3 KiB
Lua

-- Some Tup convenience functions extracted from Smogon's old build system
-- TODO: extract treerule() for naming intermediates?
function glob(pats)
local results = {}
for pat in iter(astable(pats)) do
for file in iter(tup.glob(pat)) do
-- Workaround a weird issue pre reported
file = file:gsub("//", "/")
table.insert(results, file)
end
end
return results
end
-- Convenience iterator so you can do
-- `for path in iglob{...}` instead of `for path in iter(glob{...})`
function iglob(pats)
return iter(glob(pats))
end
-- getconfig returning an empty string on absence is inconvenient
function getconfig(str)
local v = tup.getconfig(str)
if v == "" then
return nil
else
return v
end
end
function symlink(input, output)
-- The path must be relative from output, walk back to the root
local prefix = ""
for _ in output:gmatch("/") do
prefix = "../" .. prefix
end
tup.foreach_rule(
input,
"^ symlink %f -> %o^ ln -s " .. prefix .. "%f %o",
output
)
end
function makecmd(cmds)
local cmd = ""
if cmds.display then
cmd = rep{"^ {display}^ ", display=cmds.display}
cmds.display = nil
end
cmd = cmd .. table.concat(flatten(cmds), " && ")
return cmd
end