summaryrefslogtreecommitdiff
path: root/Master/tlpkg/texlua/mktexupd.texlua
blob: 0b191da84818482e5cac4ccf27b50509d9cd2c14 (plain)
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
#!/usr/bin/env texlua
--[[ Written in lua by Norbert Preining (2008) based on the shell script by
Thomas Esser.
Copyright 2008 Norbert Preining
License: GPL
]]

--[[ Changelog
 0.1
 - first initial version
]]

progname = 'mktexupd (texlua version)';
version = '0.1';
usage = 'Usage: ' .. progname .. ' [-h|--help] DIR FILE\
\
  Update the ls-R file with an entry for FILE in DIR.\
\
	 -h|--help\t\t Show this help\
         -V|--version\t\t Print the version of the program\
';


function die (str)
  io.stderr:write(str)
  os.exit(1)
end
  
while table.maxn(arg) > 0 and string.match(arg[1],'^%-') do
   curr_arg = table.remove(arg,1)
   if string.match (curr_arg,'-h') or string.match (curr_arg,'--help') then
      print (usage);
      os.exit(0);
   elseif string.match (curr_arg,'-V') or string.match (curr_arg,'--version') then
      print (progname .. ' version: ' .. version );
      os.exit(0);
   end
end

if not arg[2] then
   print (usage);
   return
end

--[[ initialize kpathsea ]]
kpse.set_program_name("mktexupd")

dir = arg[1]
file = arg[2]
fullfile = dir .. '/' .. file

if (not lfs.isdir(dir)) then
  die (progname .. ': ' .. dir .. ' not a directory.\n')
end
if (not lfs.isfile(fullfile)) then
  die (progname .. ': ' .. fullfile .. ' not a file.\n')
end

--[[
--  we have to get the list of all directories where ls-R files are present
--  using TEXMFDBS. In the shell code `kpsewhich  -show-path=ls-R was used
--  we do it with kpse.expand_braces("$TEXMFDBS") and then split at : and
--  remove the !!
--]]

texmfdbs = kpse.expand_braces("$TEXMFDBS")
for d in string.gmatch(texmfdbs,"[^:]+") do 
  if string.match(d,"^!!") then
    d = string.sub(d,3)
  end
  pel =  string.match(dir,d.."/(.*)$") 
  if pel then
    target = d
    pathcomponent = pel
  end
end
if (not target) then
  --[[ no path found, just give up ]]
  os.exit(0)
end

db_file = target..'/ls-R'
db_file_lc = target..'/ls-r'

if (not(lfs.isfile(db_file))) then
  if lfs.isfile(db_file_lc) then
    db_file = db_file_lc
  end
end
    
if (not(lfs.isfile(db_file))) then
  print ('Calling mktexlsr for '..target)
  os.execute("mktexlsr "..target)
  os.exit()
end

ls_R_magic = '% ls-R -- filename database for kpathsea; do not change this line.'
--[[ Old ls-R files should continue to work. ]]
old_ls_R_magic='% ls-R -- maintained by MakeTeXls-R; do not change this line.'


--[[ read first line of ls-R file ]]
lsrfh = io.open(db_file)
if (not(lsrfh)) then
  die('that should not happen ...\n')
end
firstline = lsrfh:read()
io.close(lsrfh)

if (firstline ~= ls_R_magic) then
  if (firstline ~= old_ls_R_magic) then
    die(progname..': '..db_file..' lacks magic string '..ls_R_magic..'\n')
  end
end

--[[ ok we are that far, try to open the file for writing ]]
lsrfh,erro = io.open(db_file,"a+")
if (not(lsrfh)) then
  die(progname..': cannot open '..db_file..' for writing: '..erro..'\n')
end

--[[ 
--   May as well always put in a new directory entry; presumably cron will
--   come along soon enough and clean things up.
--]]
lsrfh:write('./'..pathcomponent..':\n')
lsrfh:write(file..'\n')
io.close(lsrfh)

os.exit(0)