summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-07-25 22:51:16 +0800
committerruki <[email protected]>2023-07-25 22:51:16 +0800
commit7a8e94418617f26c4d9805c1202c8a8054855c24 (patch)
tree4ab5170ed0d4c28cc9099da7259b7df1b49f0951
parent03989ea64f8d591310cb388c432d0311884ad472 (diff)
improve install and uninstall for soname
-rw-r--r--xmake/modules/target/action/install/unix.lua19
-rw-r--r--xmake/modules/target/action/uninstall/unix.lua17
2 files changed, 34 insertions, 2 deletions
diff --git a/xmake/modules/target/action/install/unix.lua b/xmake/modules/target/action/install/unix.lua
index ed49460dc..fa4834df2 100644
--- a/xmake/modules/target/action/install/unix.lua
+++ b/xmake/modules/target/action/install/unix.lua
@@ -112,7 +112,24 @@ function install_shared(target, opt)
-- install libraries
local librarydir = path.join(target:installdir(), opt and opt.libdir or "lib")
os.mkdir(librarydir)
- os.vcp(target:targetfile(), librarydir)
+ local targetfile = target:targetfile()
+ if os.islink(targetfile) then
+ local targetfile_with_soname = os.readlink(targetfile)
+ if not path.is_absolute(targetfile_with_soname) then
+ targetfile_with_soname = path.join(target:targetdir(), targetfile_with_soname)
+ end
+ if os.islink(targetfile_with_soname) then
+ local targetfile_with_version = os.readlink(targetfile_with_soname)
+ if not path.is_absolute(targetfile_with_version) then
+ targetfile_with_version = path.join(target:targetdir(), targetfile_with_version)
+ end
+ os.vcp(targetfile_with_version, librarydir, {symlink = true})
+ end
+ os.vcp(targetfile_with_soname, librarydir, {symlink = true})
+ os.vcp(targetfile, librarydir, {symlink = true})
+ else
+ os.vcp(targetfile, librarydir)
+ end
-- install shared libraries for all packages
_install_shared_for_packages(target, librarydir)
diff --git a/xmake/modules/target/action/uninstall/unix.lua b/xmake/modules/target/action/uninstall/unix.lua
index 1ad1d78ae..695fc1194 100644
--- a/xmake/modules/target/action/uninstall/unix.lua
+++ b/xmake/modules/target/action/uninstall/unix.lua
@@ -91,7 +91,22 @@ function uninstall_shared(target, opt)
-- remove the target file
local librarydir = path.join(target:installdir(), opt and opt.libdir or "lib")
- os.vrm(path.join(librarydir, path.filename(target:targetfile())))
+ local targetfile = path.join(librarydir, path.filename(target:targetfile()))
+ if os.islink(targetfile) then
+ local targetfile_with_soname = os.readlink(targetfile)
+ if not path.is_absolute(targetfile_with_soname) then
+ targetfile_with_soname = path.join(librarydir, targetfile_with_soname)
+ end
+ if os.islink(targetfile_with_soname) then
+ local targetfile_with_version = os.readlink(targetfile_with_soname)
+ if not path.is_absolute(targetfile_with_version) then
+ targetfile_with_version = path.join(librarydir, targetfile_with_version)
+ end
+ os.vrm(targetfile_with_version)
+ end
+ os.vrm(targetfile_with_soname)
+ end
+ os.vrm(targetfile)
-- remove headers from the include directory
_uninstall_headers(target, opt)