1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
if not modules then modules = { } end modules ['data-use'] = {
version = 1.001,
comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local format = string.format
local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
local report_mounts = logs.reporter("resolvers","mounts")
local resolvers = resolvers
local findfile = resolvers.findfile
-- -- This should mount a zip file so that we can run from zip files but I never went
-- -- on with it. It's really old code, from right when we started with luatex and
-- -- mkiv. Nowadays I'd use a lua specification file instead of a line based url.tmi,
-- -- file so just to be modern I patched it but it's untested. This is a normally a
-- -- startup-only feature.
--
-- do
--
-- local mounted = { }
--
-- function resolvers.automount(usecache)
-- local mountpaths = resolvers.cleanpathlist(resolvers.expansion('TEXMFMOUNT'))
-- if (not mountpaths or #mountpaths == 0) and usecache then
-- mountpaths = caches.getreadablepaths("mount")
-- end
-- if mountpaths and #mountpaths > 0 then
-- resolvers.starttiming()
-- for k=1,#mountpaths do
-- local root = mountpaths[k]
-- local list = table.load("automount.lua")
-- if list then
-- local archives = list.archives
-- if archives then
-- for i=1,#archives do
-- local archive = archives[i]
-- local already = false
-- for i=1,#mounted do
-- if archive == mounted[i] then
-- already = true
-- break
-- end
-- end
-- if not already then
-- mounted[#mounted+1] = archive
-- resolvers.usezipfile(archive)
-- end
-- end
-- end
-- end
-- end
-- resolvers.stoptiming()
-- end
-- end
--
-- end
-- status info
statistics.register("used config file", function() return caches.configfiles() end)
statistics.register("used cache path", function() return caches.usedpaths() end)
-- experiment (code will move)
function statistics.savefmtstatus(texname,formatbanner,sourcefile,banner) -- texname == formatname
local enginebanner = status.banner
if formatbanner and enginebanner and sourcefile then
local luvname = file.replacesuffix(texname,"luv") -- utilities.lua.suffixes.luv
local luvdata = {
enginebanner = enginebanner,
formatbanner = formatbanner,
sourcehash = md5.hex(io.loaddata(findfile(sourcefile)) or "unknown"),
sourcefile = sourcefile,
luaversion = LUAVERSION,
formatid = LUATEXFORMATID,
functionality = LUATEXFUNCTIONALITY,
}
io.savedata(luvname,table.serialize(luvdata,true))
lua.registerfinalizer(function()
if jit then
logs.report("format banner","%s lua: %s jit",banner,LUAVERSION)
else
logs.report("format banner","%s lua: %s",banner,LUAVERSION)
end
logs.newline()
end)
end
end
-- todo: check this at startup and return (say) 999 as signal that the run
-- was aborted due to a wrong format in which case mtx-context can trigger
-- a remake
function statistics.checkfmtstatus(texname)
local enginebanner = status.banner
if enginebanner and texname then
local luvname = file.replacesuffix(texname,"luv") -- utilities.lua.suffixes.luv
if lfs.isfile(luvname) then
local luv = dofile(luvname)
if luv and luv.sourcefile then
local sourcehash = md5.hex(io.loaddata(findfile(luv.sourcefile)) or "unknown")
local luvbanner = luv.enginebanner or "?"
if luvbanner ~= enginebanner then
return format("engine mismatch (luv: %s <> bin: %s)",luvbanner,enginebanner)
end
local luvhash = luv.sourcehash or "?"
if luvhash ~= sourcehash then
return format("source mismatch (luv: %s <> bin: %s)",luvhash,sourcehash)
end
local luvluaversion = luv.luaversion or 0
local engluaversion = LUAVERSION or 0
if luvluaversion ~= engluaversion then
return format("lua mismatch (luv: %s <> bin: %s)",luvluaversion,engluaversion)
end
local luvfunctionality = luv.functionality or 0
local engfunctionality = status.development_id or 0
if luvfunctionality ~= engfunctionality then
return format("functionality mismatch (luv: %s <> bin: %s)",luvfunctionality,engfunctionality)
end
local luvformatid = luv.formatid or 0
local engformatid = status.format_id or 0
if luvformatid ~= engformatid then
return format("formatid mismatch (luv: %s <> bin: %s)",luvformatid,engformatid)
end
else
return "invalid status file"
end
else
return "missing status file"
end
end
return true
end
|