summaryrefslogtreecommitdiff
path: root/xmake/plugins/pack/deb/main.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2024-06-14 22:43:19 +0800
committerruki <[email protected]>2024-06-14 22:43:19 +0800
commit8c65293ec7f60a3f6e72247b079c2dd458b72461 (patch)
tree7b3372b10a5b77486afb29310318a9f04f3490d9 /xmake/plugins/pack/deb/main.lua
parentc997b30ff40becdf6219e19e7273c10a16764f23 (diff)
add install/build cmds
Diffstat (limited to 'xmake/plugins/pack/deb/main.lua')
-rw-r--r--xmake/plugins/pack/deb/main.lua115
1 files changed, 115 insertions, 0 deletions
diff --git a/xmake/plugins/pack/deb/main.lua b/xmake/plugins/pack/deb/main.lua
index 91aa55add..bf28be243 100644
--- a/xmake/plugins/pack/deb/main.lua
+++ b/xmake/plugins/pack/deb/main.lua
@@ -39,6 +39,74 @@ function _get_archivefile(package)
return path.absolute(path.join(package:buildir(), package:name() .. "_" .. package:version() .. ".orig.tar.gz"))
end
+-- translate the file path
+function _translate_filepath(package, filepath)
+ return filepath:replace(package:install_rootdir(), "%{buildroot}/%{_exec_prefix}", {plain = true})
+end
+
+-- get install command
+function _get_customcmd(package, installcmds, cmd)
+ local opt = cmd.opt or {}
+ local kind = cmd.kind
+ if kind == "cp" then
+ local srcfiles = os.files(cmd.srcpath)
+ for _, srcfile in ipairs(srcfiles) do
+ -- the destination is directory? append the filename
+ local dstfile = _translate_filepath(package, cmd.dstpath)
+ if #srcfiles > 1 or path.islastsep(dstfile) then
+ if opt.rootdir then
+ dstfile = path.join(dstfile, path.relative(srcfile, opt.rootdir))
+ else
+ dstfile = path.join(dstfile, path.filename(srcfile))
+ end
+ end
+ table.insert(installcmds, string.format("install -Dpm0644 \"%s\" \"%s\"", srcfile, dstfile))
+ end
+ elseif kind == "rm" then
+ local filepath = _translate_filepath(package, cmd.filepath)
+ table.insert(installcmds, string.format("rm -f \"%s\"", filepath))
+ elseif kind == "rmdir" then
+ local dir = _translate_filepath(package, cmd.dir)
+ table.insert(installcmds, string.format("rm -rf \"%s\"", dir))
+ elseif kind == "mv" then
+ local srcpath = _translate_filepath(package, cmd.srcpath)
+ local dstpath = _translate_filepath(package, cmd.dstpath)
+ table.insert(installcmds, string.format("mv \"%s\" \"%s\"", srcfile, dstfile))
+ elseif kind == "cd" then
+ local dir = _translate_filepath(package, cmd.dir)
+ table.insert(installcmds, string.format("cd \"%s\"", dir))
+ elseif kind == "mkdir" then
+ local dir = _translate_filepath(package, cmd.dir)
+ table.insert(installcmds, string.format("mkdir -p \"%s\"", dir))
+ elseif cmd.program then
+ local argv = {}
+ for _, arg in ipairs(cmd.argv) do
+ if path.instance_of(arg) then
+ arg = arg:clone():set(_translate_filepath(package, arg:rawstr())):str()
+ elseif path.is_absolute(arg) then
+ arg = _translate_filepath(package, arg)
+ end
+ table.insert(argv, arg)
+ end
+ table.insert(installcmds, string.format("%s", os.args(table.join(cmd.program, argv))))
+ end
+end
+
+-- get build commands
+function _get_buildcmds(package, buildcmds, cmds)
+ for _, cmd in ipairs(cmds) do
+ _get_customcmd(package, buildcmds, cmd)
+ end
+end
+
+-- get install commands
+function _get_installcmds(package, installcmds, cmds)
+ for _, cmd in ipairs(cmds) do
+ _get_customcmd(package, installcmds, cmd)
+ end
+end
+
+
-- get specvars
function _get_specvars(package)
local specvars = table.clone(package:specvars())
@@ -49,6 +117,53 @@ function _get_specvars(package)
specvars.PACKAGE_DATE = datestr or ""
local author = package:get("author") or "unknown <[email protected]>"
specvars.PACKAGE_COPYRIGHT = os.date("%Y") .. " " .. author
+ specvars.PACKAGE_INSTALLCMDS = function ()
+ local prefixdir = package:get("prefixdir")
+ package:set("prefixdir", nil)
+ local installcmds = {}
+ _get_installcmds(package, installcmds, batchcmds.get_installcmds(package):cmds())
+ for _, component in table.orderpairs(package:components()) do
+ if component:get("default") ~= false then
+ _get_installcmds(package, installcmds, batchcmds.get_installcmds(component):cmds())
+ end
+ end
+ package:set("prefixdir", prefixdir)
+ return table.concat(installcmds, "\n")
+ end
+ specvars.PACKAGE_BUILDCMDS = function ()
+ local buildcmds = {}
+ _get_buildcmds(package, buildcmds, batchcmds.get_buildcmds(package):cmds())
+ return table.concat(buildcmds, "\n")
+ end
+ specvars.PACKAGE_BUILDREQUIRES = function ()
+ local requires = {}
+ local buildrequires = package:get("buildrequires")
+ if buildrequires then
+ for _, buildrequire in ipairs(buildrequires) do
+ table.insert(requires, " " .. buildrequire .. ",")
+ end
+ else
+ local programs = hashset.new()
+ for _, cmd in ipairs(batchcmds.get_buildcmds(package):cmds()) do
+ local program = cmd.program
+ if program then
+ programs:insert(program)
+ end
+ end
+ local map = {
+ xmake = "xmake",
+ cmake = "cmake",
+ make = "make"
+ }
+ for _, program in programs:keys() do
+ local requirename = map[program]
+ if requirename then
+ table.insert(requires, " " .. requirename .. ",")
+ end
+ end
+ end
+ return table.concat(requires, "\n")
+ end
return specvars
end