diff options
| author | ruki <[email protected]> | 2023-10-27 00:43:52 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-10-27 00:43:52 +0800 |
| commit | 5361a0c73673a5760297bd56a6ac8a035b396d6e (patch) | |
| tree | 3bb3b3d54965e7cd057754a9ef8a5f1f5459fd53 | |
| parent | 9bc1e3b553d3c8cd3f96c46cbc7b4aab23b29bfc (diff) | |
improve default config value
| -rw-r--r-- | xmake/modules/private/action/require/impl/package.lua | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index ef8ce27bb..ad3194139 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -308,11 +308,22 @@ function _sort_librarydeps(package, opt) return orderdeps end +-- get builtin configuration default values +function _get_default_config_value_of(name) + local defaults = { + debug = false, + shared = false, + pic = true, + } + return defaults[name] +end + -- add some builtin configurations to package function _add_package_configurations(package) -- we can define configs to override it and it's default value in package() if package:extraconf("configs", "debug", "default") == nil then - package:add("configs", "debug", {builtin = true, description = "Enable debug symbols.", default = false, type = "boolean"}) + local default = _get_default_config_value_of("debug") + package:add("configs", "debug", {builtin = true, description = "Enable debug symbols.", default = default, type = "boolean"}) end if package:extraconf("configs", "shared", "default") == nil then -- we always use static library if it's for wasm platform @@ -320,10 +331,12 @@ function _add_package_configurations(package) if package:is_plat("wasm") then readonly = true end - package:add("configs", "shared", {builtin = true, description = "Build shared library.", default = false, readonly = readonly, type = "boolean"}) + local default = _get_default_config_value_of("shared") + package:add("configs", "shared", {builtin = true, description = "Build shared library.", default = default, readonly = readonly, type = "boolean"}) end if package:extraconf("configs", "pic", "default") == nil then - package:add("configs", "pic", {builtin = true, description = "Enable the position independent code.", default = true, type = "boolean"}) + local default = _get_default_config_value_of("pic") + package:add("configs", "pic", {builtin = true, description = "Enable the position independent code.", default = default, type = "boolean"}) end if package:extraconf("configs", "lto", "default") == nil then package:add("configs", "lto", {builtin = true, description = "Enable the link-time build optimization.", type = "boolean"}) @@ -502,17 +515,12 @@ function _init_requireinfo(requireinfo, package, opt) if project.policy("package.inherit_external_configs") then requireinfo.configs.vs_runtime = requireinfo.configs.vs_runtime or get_config("vs_runtime") end - local function initconfig(key, default) - if requireinfo.configs[key] == nil then - requireinfo.configs[key] = default - end - -- set false key as nil so hashes match - if not requireinfo.configs[key] then - requireinfo.configs[key] = nil - end + if requireinfo.configs.lto == nil then + requireinfo.configs.lto = project.policy("build.optimization.lto") + end + if requireinfo.configs.asan == nil then + requireinfo.configs.asan = project.policy("build.sanitizer.address") end - initconfig("asan", project.policy("build.sanitizer.address")) - initconfig("lto", project.policy("build.optimization.lto")) end -- but we will ignore some configs for buildhash in the headeronly and host/binary package -- @note on_test still need these configs, @see https://github.com/xmake-io/xmake/issues/4124 @@ -546,6 +554,14 @@ function _finish_requireinfo(requireinfo, package) requireinfo.configs[name] = nil end end + -- sync default value to prevent cache mismatch (buildhash) + -- @see https://github.com/xmake-io/xmake/pull/4324 + for k, v in pairs(requireinfo.configs) do + local default = _get_default_config_value_of(k) + if v == default then + requireinfo.configs[k] = nil + end + end end -- merge requireinfo from `add_requireconfs()` @@ -655,10 +671,6 @@ function _inherit_parent_configs(requireinfo, package, parentinfo) if requireinfo_configs.pic == nil then requireinfo_configs.pic = parentinfo_configs.pic end - -- remove pic entry if pic is true (to prevent cache mismatch), as it the default behavior - if requireinfo_configs.pic == true then - requireinfo_configs.pic = nil -- pic is enabled by default - end end if parentinfo.plat then requireinfo.plat = parentinfo.plat @@ -669,13 +681,7 @@ function _inherit_parent_configs(requireinfo, package, parentinfo) requireinfo_configs.toolchains = requireinfo_configs.toolchains or parentinfo_configs.toolchains requireinfo_configs.vs_runtime = requireinfo_configs.vs_runtime or parentinfo_configs.vs_runtime requireinfo_configs.lto = requireinfo_configs.lto or parentinfo_configs.lto - if not requireinfo_configs.lto then - requireinfo_configs.lto = nil - end requireinfo_configs.asan = requireinfo_configs.asan or parentinfo_configs.asan - if not requireinfo_configs.asan then - requireinfo_configs.asan = nil - end requireinfo.configs = requireinfo_configs end end |
