summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mkfilelist115
1 files changed, 115 insertions, 0 deletions
diff --git a/mkfilelist b/mkfilelist
new file mode 100644
index 0000000..756bfe0
--- /dev/null
+++ b/mkfilelist
@@ -0,0 +1,115 @@
+#!/usr/bin/env texlua
+-----------------------------------------------------------------------
+-- FILE: mkfilelist.lua
+-- USAGE: ./mkfilelist.lua
+-- DESCRIPTION: part of the luaotfload package
+-- REQUIREMENTS: luatex, the lualibs package
+-- AUTHOR: Philipp Gesang (Phg), <phg42.2a@gmail.com>
+-- VERSION: 1.0
+-- CREATED: 2013-07-07 14:01:12+0200
+-----------------------------------------------------------------------
+--
+-- This script generates a list of hashes that serves as the input
+-- for the file integrity check (option --diagnose). md5 is all we can
+-- assume in Luatex, so it’s really only a superficial test.
+
+kpse.set_program_name "luatex"
+
+local md5 = require "md5"
+
+require "lualibs"
+
+local stringformat = string.format
+local md5sumhexa = md5.sumhexa
+local ioloaddata = io.loaddata
+local iosavedata = io.savedata
+
+-----------------------------------------------------------------------
+-- settings
+-----------------------------------------------------------------------
+
+local filelist = "luaotfload-files.lua" --- result
+
+local names = {
+ --- only the runtime files and scripts
+ "luaotfload-auxiliary.lua",
+ "luaotfload-basics-gen.lua",
+ "luaotfload-basics-nod.lua",
+ "luaotfload-characters.lua",
+ "luaotfload-colors.lua",
+ "luaotfload-database.lua",
+ "luaotfload-extralibs.lua",
+ "luaotfload-features.lua",
+ "luaotfload-fonts-cbk.lua",
+ "luaotfload-fonts-def.lua",
+ "luaotfload-fonts-enc.lua",
+ "luaotfload-fonts-ext.lua",
+ "luaotfload-fonts-lua.lua",
+ "luaotfload-fonts-tfm.lua",
+ "luaotfload-glyphlist.lua",
+ "luaotfload-letterspace.lua",
+ "luaotfload-loaders.lua",
+ "luaotfload.lua",
+ "luaotfload-merged.lua",
+ "luaotfload-override.lua",
+ "luaotfload-tool.lua",
+ "luaotfload-typo-krn.lua",
+ "mkcharacters",
+ "mkfilelist",
+ "mkglyphlist",
+}
+
+-----------------------------------------------------------------------
+-- helpers
+-----------------------------------------------------------------------
+
+local die = function (...)
+ io.stderr:write "[fatal error]: "
+ io.stderr:write (stringformat (...))
+ io.stderr:write "\naborting.\n"
+ os.exit (1)
+end
+
+-----------------------------------------------------------------------
+-- functionality
+-----------------------------------------------------------------------
+
+local hash_file = function (fname)
+ if not lfs.isfile (fname) then
+ die ("cannot find %s.", fname)
+ end
+ local raw = ioloaddata (fname)
+ if not raw then
+ die ("cannot read from %s.", fname)
+ end
+ return md5sumhexa (raw)
+end
+
+local hash_all
+hash_all = function (list, acc)
+ if list == nil then
+ return hash_all (table.fastcopy (names), { })
+ end
+
+ local fname = list[#list]
+ list[#list] = nil
+ if fname then
+ local sum = hash_file (fname)
+ acc[#acc+1] = { fname, sum }
+ return hash_all (list, acc)
+ end
+ return acc
+end
+
+local main = function ()
+ local hashes = hash_all ()
+ local serialized = table.serialize (hashes, true)
+ local success = io.savedata (filelist, serialized)
+ if success == false then
+ die ("could not write to %s.", filelist)
+ end
+ return 0
+end
+
+return main ()
+