diff options
author | Philipp Gesang <phg42.2a@gmail.com> | 2013-07-07 14:37:13 +0200 |
---|---|---|
committer | Philipp Gesang <phg42.2a@gmail.com> | 2013-07-07 14:37:13 +0200 |
commit | 06fbc4ffd0432f9f44bd4d8aa50b92f02917fcba (patch) | |
tree | 08391ab6b895c3a4bca0748fcc1ff91f8de20fb7 /mkfilelist | |
parent | 0ab9e98a0255b6cc3f70205644c506b4a7a5a627 (diff) | |
download | luaotfload-06fbc4ffd0432f9f44bd4d8aa50b92f02917fcba.tar.gz |
add mkfilelist (batch file hashing)
Diffstat (limited to 'mkfilelist')
-rw-r--r-- | mkfilelist | 115 |
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 () + |