summaryrefslogtreecommitdiff
path: root/xmake/plugins/pack/batchcmds.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2024-07-17 00:57:22 +0800
committerruki <[email protected]>2024-07-17 00:57:22 +0800
commitad8a223ce684cd394179aca49fbea9c7b2e0d4c0 (patch)
tree336c5e99524b50b66780eb4da5fcd31b3543c24a /xmake/plugins/pack/batchcmds.lua
parent10df5c458fcf66832c0ef437157c7397f2283b18 (diff)
add rpath for xpack
Diffstat (limited to 'xmake/plugins/pack/batchcmds.lua')
-rw-r--r--xmake/plugins/pack/batchcmds.lua28
1 files changed, 28 insertions, 0 deletions
diff --git a/xmake/plugins/pack/batchcmds.lua b/xmake/plugins/pack/batchcmds.lua
index e745cd19d..6245a345c 100644
--- a/xmake/plugins/pack/batchcmds.lua
+++ b/xmake/plugins/pack/batchcmds.lua
@@ -100,6 +100,33 @@ function _copy_file_with_symlinks(batchcmds_, srcfile, outputdir)
end
end
+-- update install rpath, we can only get and update rpathdirs with `{installonly = true}`
+-- e.g. add_rpathdirs("@loader_path/../lib", {installonly = true})
+function _update_target_install_rpath(target, batchcmds_, opt)
+ if target:is_plat("windows", "mingw") then
+ return
+ end
+ local package = opt.package
+ local bindir = _get_target_bindir(package, target)
+ local targetfile = path.join(bindir, target:filename())
+ batchcmds_:clean_rpath(targetfile, {plat = target:plat(), arch = target:arch()})
+ if target:policy("install.rpath") then
+ local result, sources = target:get_from("rpathdirs", "*")
+ if result and sources then
+ for idx, rpathdirs in ipairs(result) do
+ local source = sources[idx]
+ local extraconf = target:extraconf_from("rpathdirs", source)
+ for _, rpathdir in ipairs(rpathdirs) do
+ local extra = extraconf[rpathdir]
+ if extra and extra.installonly then
+ batchcmds_:insert_rpath(targetfile, rpathdir, {plat = target:plat(), arch = target:arch()})
+ end
+ end
+ end
+ end
+ end
+end
+
-- install target files
function _install_target_files(target, batchcmds_, opt)
local package = opt.package
@@ -233,6 +260,7 @@ function _on_target_installcmd_binary(target, batchcmds_, opt)
batchcmds_:cp(target:symbolfile(), path.join(bindir, path.filename(target:symbolfile())))
end
_install_target_shared_libraries(target, batchcmds_, opt)
+ _update_target_install_rpath(target, batchcmds_, opt)
end
-- on install shared target command