diff options
| author | ruki <[email protected]> | 2021-08-19 15:32:57 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-08-19 15:32:57 +0800 |
| commit | 6c3bd03a0eba41d906ce89246c8046bbe39320f9 (patch) | |
| tree | a3c2edfff71d35835e24fb46261e39a1c2cee9d4 /xmake/modules/target | |
| parent | 8bf73a6626116b4b7368cb2acc630887f3a3768a (diff) | |
Update unix.lua
Diffstat (limited to 'xmake/modules/target')
| -rw-r--r-- | xmake/modules/target/action/install/unix.lua | 80 |
1 files changed, 69 insertions, 11 deletions
diff --git a/xmake/modules/target/action/install/unix.lua b/xmake/modules/target/action/install/unix.lua index d4311aeea..af3f710a1 100644 --- a/xmake/modules/target/action/install/unix.lua +++ b/xmake/modules/target/action/install/unix.lua @@ -18,15 +18,8 @@ -- @file unix.lua -- --- install library -function _install_library(target, opt) - - -- install libraries - local librarydir = path.join(target:installdir(), opt and opt.libdir or "lib") - os.mkdir(librarydir) - os.vcp(target:targetfile(), librarydir) - - -- install headers +-- install headers +function _install_headers(target, opt) local includedir = path.join(target:installdir(), opt and opt.includedir or "include") os.mkdir(includedir) local srcheaders, dstheaders = target:headerfiles(includedir) @@ -42,19 +35,84 @@ function _install_library(target, opt) end end +-- install shared libraries for package +function _install_shared_for_package(target, pkg, outputdir) + for _, sopath in ipairs(table.wrap(pkg:get("libfiles"))) do + if sopath:endswith(".so") or sopath:endswith(".dylib") then + local soname = path.filename(dllpath) + if os.isfile(path.join(outputdir, soname)) then + wprint("'%s' already exists in install dir, overwriting it from package(%s).", soname, pkg:name()) + end + os.vcp(sopath, outputdir) + end + end +end + +-- install shared libraries for packages +function _install_shared_for_packages(target, outputdir) + _g.installed_packages = _g.installed_packages or {} + for _, pkg in ipairs(target:orderpkgs()) do + if not _g.installed_packages[pkg:name()] then + if pkg:enabled() and pkg:get("libfiles") then + _install_shared_for_package(target, pkg, outputdir) + end + _g.installed_packages[pkg:name()] = true + end + end +end + -- install binary function install_binary(target, opt) + + -- install binary local binarydir = path.join(target:installdir(), opt and opt.bindir or "bin") os.mkdir(binarydir) os.vcp(target:targetfile(), binarydir) + + -- install libraries + local librarydir = path.join(target:installdir(), opt and opt.libdir or "lib") + os.mkdir(librarydir) + + -- install the dependent shared (*.so) target + -- @see https://github.com/xmake-io/xmake/issues/961 + for _, dep in ipairs(target:orderdeps()) do + if dep:kind() == "shared" then + local depfile = dep:targetfile() + if os.isfile(depfile) then + os.vcp(depfile, librarydir) + end + end + -- install all shared libraries in packages in all deps + _install_shared_for_packages(dep, librarydir) + end + + -- install shared libraries for all packages + _install_shared_for_packages(target, librarydir) end -- install shared library function install_shared(target, opt) - _install_library(target, opt) + + -- install libraries + local librarydir = path.join(target:installdir(), opt and opt.libdir or "lib") + os.mkdir(librarydir) + os.vcp(target:targetfile(), librarydir) + + -- install shared libraries for all packages + _install_shared_for_packages(target, librarydir) + + -- install headers + _install_headers(target, opt) end -- install static library function install_static(target, opt) - _install_library(target, opt) + + -- install libraries + local librarydir = path.join(target:installdir(), opt and opt.libdir or "lib") + os.mkdir(librarydir) + os.vcp(target:targetfile(), librarydir) + + -- install headers + _install_headers(target, opt) end |
