#!/usr/libexec/flua
local ucl = require("ucl")
pkg_suffixes = {
{
"%-dev%-lib32$", "(32-bit development files)",
"This package contains development files for compiling "..
"32-bit applications on a 64-bit host."
},
{
"%-dbg%-lib32$", "(32-bit debugging symbols)",
"This package contains 32-bit external debugging symbols "..
"for use with a source-level debugger.",
},
{
"%-man%-lib32$", "(32-bit manual pages)",
"This package contains the online manual pages for 32-bit "..
"components on a 64-bit host.",
},
{
"%-lib32$", "(32-bit libraries)",
"This package contains 32-bit libraries for running 32-bit "..
"applications on a 64-bit host.",
},
{
"%-lib$", "(libraries)",
"This package contains runtime shared libraries.",
},
{
"%-dev$", "(development files)",
"This package contains development files for "..
"compiling applications."
},
{
"%-man$", "(manual pages)",
"This package contains the online manual pages."
},
{
"%-dbg$", "(debugging symbols)",
"This package contains external debugging symbols for use "..
"with a source-level debugger.",
},
}
local no_suffix_pkgs = {
["kernel-man"] = true,
}
function add_suffixes(obj)
local pkgname = obj["name"]
for _,pattern in pairs(pkg_suffixes) do
if pkgname:match(pattern[1]) ~= nil then
obj["comment"] = obj["comment"] .. " " .. pattern[2]
obj["desc"] = obj["desc"] .. "\n\n" .. pattern[3]
return
end
end
end
local no_gen_deps = {
["libcompat-dev"] = true,
["libcompat-dev-lib32"] = true,
["libcompat-man"] = true,
["libcompiler_rt-dev"] = true,
["libcompiler_rt-dev-lib32"] = true,
["liby-dev"] = true,
["liby-dev-lib32"] = true,
["kernel-man"] = true,
}
function add_gen_dep(pkgname, pkggenname)
if pkgname == pkggenname then
return false
end
if pkgname == nil or pkggenname == nil then
return false
end
if no_gen_deps[pkgname] ~= nil then
return false
end
if pkgname:match("%-lib$") ~= nil then
return false
end
if pkggenname == "kernel" then
return false
end
return true
end
local pkgname = nil
local pkggenname = nil
local pkgprefix = nil
local pkgversion = nil
local parser = ucl.parser()
if #arg < 2 or #arg % 2 ~= 0 then
io.stderr:write(arg[0] .. ": expected an even number of arguments, got " .. #arg)
os.exit(1)
end
for i = 2, #arg - 2, 2 do
local varname = arg[i - 1]
local varvalue = arg[i]
if varname == "PKGNAME" and #varvalue > 0 then
pkgname = varvalue
elseif varname == "PKGGENNAME" and #varvalue > 0 then
pkggenname = varvalue
elseif varname == "VERSION" and #varvalue > 0 then
pkgversion = varvalue
elseif varname == "PKG_NAME_PREFIX" and #varvalue > 0 then
pkgprefix = varvalue
end
parser:register_variable(varname, varvalue)
end
local res,err = parser:parse_file(arg[#arg - 1])
if not res then
io.stderr:write(arg[0] .. ": fail to parse("..arg[#arg - 1].."): "..err)
os.exit(1)
end
local obj = parser:get_object()
if add_gen_dep(pkgname, pkggenname) then
if obj["deps"] == nil then
obj["deps"] = {}
end
obj["deps"][pkggenname] = {
["version"] = pkgversion,
["origin"] = "base"
}
end
if pkgprefix ~= nil and obj["deps"] ~= nil then
newdeps = {}
for dep, opts in pairs(obj["deps"]) do
local newdep = pkgprefix .. "-" .. dep
newdeps[newdep] = opts
end
obj["deps"] = newdeps
end
if no_suffix_pkgs[pkgname] == nil then
add_suffixes(obj)
end
local f,err = io.open(arg[#arg], "w")
if not f then
io.stderr:write(arg[0] .. ": fail to open("..arg[#arg].."): ".. err)
os.exit(1)
end
f:write(ucl.to_format(obj, 'ucl', true))
f:close()