diff options
| author | ruki <[email protected]> | 2023-07-25 22:51:16 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-07-25 22:51:16 +0800 |
| commit | 7a8e94418617f26c4d9805c1202c8a8054855c24 (patch) | |
| tree | 4ab5170ed0d4c28cc9099da7259b7df1b49f0951 | |
| parent | 03989ea64f8d591310cb388c432d0311884ad472 (diff) | |
improve install and uninstall for soname
| -rw-r--r-- | xmake/modules/target/action/install/unix.lua | 19 | ||||
| -rw-r--r-- | xmake/modules/target/action/uninstall/unix.lua | 17 |
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) |
