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
|
#!/usr/bin/env lua
--[[
Copyright (c) 2017 Vadim "mva" Misbakh-Soloviov
This file is distributed under terms of MIT license (just as most Lua Programs).
--]]
local expert
local libexec="/usr/libexec/srlua"
if os.getenv("IKNOWWHATIAMDOING") then
expert=true
end
local function p(...)
io.stderr:write(...)
io.stderr:write("\n")
end
local function getabis(abi)
local ret={}
local abistr
local abi=abi or "*"
local arch
if abi=="default" then
arch=io.popen("uname -m"):read()
abi="lua"..(_VERSION:match("Lua (%S+)$") or "")..(arch or "")
if jit and jit.version then
local jit_v=jit.version:match("LuaJIT (%d.%d)")
abi="luajit"..(jit_v and "-"..jit_v.."*" or "")..(arch and "."..arch or "")
end
end
abistr=(io.popen(("echo %s/%s/srlua*"):format(libexec,abi)):read() or "")
if abistr:match("%*") then abistr="" end -- failed matching -> nothing found
if #abistr>8 then
for abi in abistr:gmatch(libexec.."/(%S*)/srlua") do
table.insert(ret,abi)
end
end
return ret
end
local function help(err,msg)
if err then
p("Invalid command syntax"..((msg and (#msg>0)) and (": "..msg) or "!").."\n")
p""
end
p"Description:"
p"This is a wrapper on original `srglue` program from `srlua` package"
p"The only difference is that you should pass 'ABI' string instead of path to `srlua`"
p""
p"Usage:"
p("\t"..arg[0].." [<ABI>] <prorgam.lua> [<out_program_name>]")
p""
p"\tWhere <ABI> is <lua_interpreter>.<multilib_abi>."
p"\tIf you see 'default' value in the list below, then <ABI> can be an optional argument. Otherwise it is mandatory."
p"\tAlso, if you see '<none>' value, it means this installation is broken and this program will not work at all."
p""
p"List of ABIs supported on tis system:"
local abilist=getabis()
if #abilist>0 then
for _,abi in ipairs(abilist) do
p("\t"..abi)
end
local defabi=getabis("default")
if #defabi==1 then
p("\tdefault (will be expanded to '"..defabi[1].."')")
end
else
p"\t<none>"
end
os.exit(err and 1 or 0)
end
local function argparse(argv)
local srlua=argv[1]
local script=argv[2]
local out=argv[3] or "a.out"
if srlua:match(".*%.lua") and (not expert) then
out=script or out
script=srlua
srlua="default"
end
local abi=getabis(srlua)
if #abi==0 then
help(true,"There is no such ABI that you specified.")
elseif #abi>1 then
help(true,("Multiple ABIs (%d) matched your ABI selection. Please, be more specific."):format(#abi))
--local interpreter, multilib = k:match("(%S*)%.(%w-)$")
else
abi=abi[1]
end
if not script:match(".*%.lua") and not expert then
help(true,"Invalid Lua Program name. Only '*.lua' files are allowed (to prevent unexpected results).\nIf you're sure you want to continue anyway, set IKNOWWHATIAMDOING environment variable.")
end
local chmod, chmod_mod
chmod="chmod" -- TODO: setfacl support
chmod_mod="755"
local abidir=libexec.."/"..abi
os.exit(os.execute(("%s/glue %s/srlua %s %s && %s %s %s"):format(abidir,abidir,script,out,chmod,chmod_mod,out)))
end
if #arg>3 or #arg==0 then
-- TODO: maybe add support to squish
help(#arg~=0, "wrong paramaters count (maximum: 3)\nIf you need to glue more then one Lua Program, then squish them in single file first.")
else
argparse(arg)
end
|