diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/l3build/l3build-stdmain.lua |
Initial commit
Diffstat (limited to 'macros/latex/contrib/l3build/l3build-stdmain.lua')
-rw-r--r-- | macros/latex/contrib/l3build/l3build-stdmain.lua | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/macros/latex/contrib/l3build/l3build-stdmain.lua b/macros/latex/contrib/l3build/l3build-stdmain.lua new file mode 100644 index 0000000000..668b2d02d0 --- /dev/null +++ b/macros/latex/contrib/l3build/l3build-stdmain.lua @@ -0,0 +1,185 @@ +--[[ + +File l3build-stdmain.lua Copyright (C) 2018 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 exit = os.exit +local insert = table.insert + +-- List all modules +function listmodules() + local modules = { } + local exclmodules = exclmodules or { } + for entry in lfs.dir(".") do + if entry ~= "." and entry ~= ".." then + local attr = lfs.attributes(entry) + assert(type(attr) == "table") + if attr.mode == "directory" then + if not exclmodules[entry] then + insert(modules, entry) + end + end + end + end + return modules +end + +target_list = + { + -- Some hidden targets + bundlecheck = + { + func = check, + pre = function() + if names then + print("Bundle checks should not list test names") + help() + exit(1) + end + return 0 + end + }, + bundlectan = + { + func = bundlectan + }, + bundleunpack = + { + func = bundleunpack, + pre = function() return(depinstall(unpackdeps)) end + }, + -- Public targets + check = + { + bundle_target = true, + desc = "Run all automated tests", + func = check, + }, + clean = + { + bundle_func = bundleclean, + desc = "Clean out directory tree", + func = clean + }, + ctan = + { + bundle_func = ctan, + desc = "Create CTAN-ready archive", + func = ctan + }, + doc = + { + desc = "Typesets all documentation files", + func = doc + }, + install = + { + desc = "Installs files into the local textmf tree", + func = install + }, + manifest = + { + desc = "Creates a manifest file", + func = manifest + }, + save = + { + desc = "Saves test validation log", + func = save + }, + tag = + { + bundle_func = function(names) + local modules = modules or listmodules() + local errorlevel = call(modules,"tag") + -- Deal with any files in the bundle dir itself + if errorlevel == 0 then + errorlevel = tag(names) + end + return errorlevel + end, + desc = "Updates release tags in files", + func = tag, + pre = function(names) + if names and #names > 1 then + print("Too many tags specified; exactly one required") + exit(1) + end + return 0 + end + }, + uninstall = + { + desc = "Uninstalls files from the local textmf tree", + func = uninstall + }, + unpack= + { + bundle_target = true, + desc = "Unpacks the source files into the build tree", + func = unpack + }, + upload = + { + desc = "Send archive to CTAN for public release", + func = upload + }, + } + +-- +-- The overall main function +-- + +function stdmain(target,names) + -- Deal with unknown targets up-front + if not target_list[target] then + help() + exit(1) + end + local errorlevel = 0 + if module == "" then + modules = modules or listmodules() + if target_list[target].bundle_func then + errorlevel = target_list[target].bundle_func(names) + else + -- Detect all of the modules + if target_list[target].bundle_target then + target = "bundle" .. target + end + errorlevel = call(modules,target) + end + else + if target_list[target].pre then + errorlevel = target_list[target].pre(names) + if errorlevel ~= 0 then + exit(1) + end + end + errorlevel = target_list[target].func(names) + end + -- All done, finish up + if errorlevel ~= 0 then + exit(1) + else + exit(0) + end +end |