--[[ File l3build-aux.lua Copyright (C) 2018-2020 The LaTeX3 Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this license or (at your option) any later version. The latest version of this license is in the file http://www.latex-project.org/lppl.txt This file is part of the "l3build bundle" (The Work in LPPL) and all files in that bundle must be distributed together. ----------------------------------------------------------------------- The development version of the bundle can be found at https://github.com/latex3/l3build for those people who are interested. --]] local match = string.match local pairs = pairs local print = print local lookup = kpse.lookup -- -- Auxiliary functions which are used by more than one main function -- function normalise_epoch() -- If given as an ISO date, turn into an epoch number local y, m, d = match(epoch, "^(%d%d%d%d)-(%d%d)-(%d%d)$") if y then epoch = os_time({year = y, month = m, day = d, hour = 0, sec = 0, isdst = nil}) - os_time({year = 1970, month = 1, day = 1, hour = 0, sec = 0, isdst = nil}) elseif match(epoch, "^%d+$") then epoch = tonumber(epoch) else epoch = 0 end end function setepoch() return os_setenv .. " SOURCE_DATE_EPOCH=" .. epoch .. os_concat .. os_setenv .. " SOURCE_DATE_EPOCH_TEX_PRIMITIVES=1" .. os_concat .. os_setenv .. " FORCE_SOURCE_DATE=1" .. os_concat end local function getscriptname() if match(arg[0], "l3build$") or match(arg[0], "l3build%.lua$") then return lookup("l3build.lua") else return arg[0] end end -- Do some subtarget for all modules in a bundle function call(dirs, target, opts) -- Turn the option table into a string local opts = opts or options local s = "" for k,v in pairs(opts) do if k ~= "names" and k ~= "target" then -- Special cases local t = option_list[k] or { } local arg = "" if t["type"] == "string" then arg = arg .. "=" .. v end if t["type"] == "table" then for _,a in pairs(v) do if arg == "" then arg = "=" .. a -- Add the initial "=" here else arg = arg .. "," .. a end end end s = s .. " --" .. k .. arg end end if opts["names"] then for _,v in pairs(opts["names"]) do s = s .. " " .. v end end local scriptname = getscriptname() for _,i in ipairs(dirs) do local text = " for module " .. i if i == "." and opts["config"] then text = " with configuration " .. opts["config"][1] end print("Running l3build with target \"" .. target .. "\"" .. text ) local errorlevel = run( i, "texlua " .. scriptname .. " " .. target .. s ) if errorlevel ~= 0 then return errorlevel end end return 0 end -- Unpack files needed to support testing/typesetting/unpacking function depinstall(deps) local errorlevel for _,i in ipairs(deps) do print("Installing dependency: " .. i) errorlevel = run(i, "texlua " .. getscriptname() .. " unpack -q") if errorlevel ~= 0 then return errorlevel end end return 0 end