summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/l3build/l3build-stdmain.lua
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /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.lua185
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