diff --git a/xmake/core/project/policy.lua b/xmake/core/project/policy.lua index 3e02d210d9f..7327918a234 100644 --- a/xmake/core/project/policy.lua +++ b/xmake/core/project/policy.lua @@ -100,6 +100,8 @@ function policy.policies() ["run.autobuild"] = {description = "Automatically build before running.", type = "boolean"}, -- Enable install rpath ["install.rpath"] = {description = "Enable install rpath.", default = true, type = "boolean"}, + -- Strip package libraries for installation + ["install.strip_packagelibs"] = {description = "Strip package libraries for installation.", default = true, type = "boolean"}, -- Preprocessor configuration for ccache/distcc, we can disable linemarkers to speed up preprocess ["preprocessor.linemarkers"] = {description = "Enable linemarkers for preprocessor.", default = true, type = "boolean"}, -- Preprocessor configuration for ccache/distcc, we can disable it to avoid cache object file with __DATE__, __TIME__ diff --git a/xmake/modules/target/action/install/main.lua b/xmake/modules/target/action/install/main.lua index 257bdcedc75..45f43a7cb0c 100644 --- a/xmake/modules/target/action/install/main.lua +++ b/xmake/modules/target/action/install/main.lua @@ -21,6 +21,7 @@ -- imports import("core.base.option") import("core.base.hashset") +import("core.project.project") import("utils.binary.deplibs", {alias = "get_depend_libraries"}) import("utils.binary.rpath", {alias = "rpath_utils"}) @@ -60,10 +61,12 @@ function _get_target_package_libfiles(target, opt) end end -- we can only reserve used libraries - if target:is_binary() or target:is_shared() then - local depends = hashset.new() - _get_target_package_deplibs(target, depends, libfiles, target:targetfile()) - table.remove_if(libfiles, function (_, libfile) return not depends:has(path.filename(libfile)) end) + if project.policy("install.strip_packagelibs") then + if target:is_binary() or target:is_shared() then + local depends = hashset.new() + _get_target_package_deplibs(target, depends, libfiles, target:targetfile()) + table.remove_if(libfiles, function (_, libfile) return not depends:has(path.filename(libfile)) end) + end end return libfiles end diff --git a/xmake/modules/target/action/uninstall/main.lua b/xmake/modules/target/action/uninstall/main.lua index ab2333207be..912e5140f6c 100644 --- a/xmake/modules/target/action/uninstall/main.lua +++ b/xmake/modules/target/action/uninstall/main.lua @@ -21,6 +21,7 @@ -- imports import("core.base.option") import("core.base.hashset") +import("core.project.project") import("utils.binary.deplibs", {alias = "get_depend_libraries"}) import("private.action.clean.remove_files") @@ -61,10 +62,12 @@ function _get_target_package_libfiles(target, opt) end end -- we can only reserve used libraries - if target:is_binary() or target:is_shared() then - local depends = hashset.new() - _get_target_package_deplibs(target, depends, libfiles, target:targetfile()) - table.remove_if(libfiles, function (_, libfile) return not depends:has(path.filename(libfile)) end) + if project.policy("install.strip_packagelibs") then + if target:is_binary() or target:is_shared() then + local depends = hashset.new() + _get_target_package_deplibs(target, depends, libfiles, target:targetfile()) + table.remove_if(libfiles, function (_, libfile) return not depends:has(path.filename(libfile)) end) + end end return libfiles end