summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-01-01 21:10:31 +0800
committerruki <[email protected]>2021-01-01 21:10:31 +0800
commit0650d385e898d4bea721fa1014b5d881f4120c5d (patch)
tree128740f489f4e0ef2bd4245072f03096b3cd3060
parente1e70e4d1867f92f5591e7dd068ca13819955ed4 (diff)
support multi packages with different configs
-rw-r--r--tests/projects/package/depconfigs/xmake.lua2
-rw-r--r--xmake/actions/require/impl/package.lua44
2 files changed, 23 insertions, 23 deletions
diff --git a/tests/projects/package/depconfigs/xmake.lua b/tests/projects/package/depconfigs/xmake.lua
index 54a25e738..33af8338a 100644
--- a/tests/projects/package/depconfigs/xmake.lua
+++ b/tests/projects/package/depconfigs/xmake.lua
@@ -5,7 +5,7 @@ add_requires("libpng", {system = false, configs = {vs_runtime = "MD"},
end})
add_requires("libtiff", {system = false, configs = {vs_runtime = "MD"},
- depconfigs = {cxflags = "-DTEST2"}})
+ deps = {system = false, configs = {cxflags = "-DTEST2"}}})
target("test")
set_kind("binary")
diff --git a/xmake/actions/require/impl/package.lua b/xmake/actions/require/impl/package.lua
index 142a48756..c11f43005 100644
--- a/xmake/actions/require/impl/package.lua
+++ b/xmake/actions/require/impl/package.lua
@@ -75,22 +75,25 @@ end
-- - add_requires("zlib~shared", {configs = {shared = true}, alias = "zlib_shared"})
--
-- pass configs to all dependent packages
--- - add_requires("libpng", {depconfigs = {shared = true, cxflags = "-DTEST"}})
+-- - add_requires("libpng", {deps = {system = false, configs = {shared = true, cxflags = "-DTEST"}}})
--
-- {system = nil/true/false}:
-- nil: get local or system packages
-- true: only get system package
-- false: only get local packages
--
+-- custom on_load/after_load package script
+-- - add_requires("libpng", {after_load = function (package)
+-- -- modify dependent package version and configs
+-- -- package:set("deps", "zlib 1.2.10", {system = false, configs = {cxflags = "-DTEST"}})
+--
+-- -- only modify dependent package configs
+-- package:extraconf_set("deps", "zlib", {system = false, configs = {cxflags = "-DTEST"}})
+-- end})
+--
+--
function _parse_require(require_str, requires_extra, parentinfo)
- -- get it from cache first
- local requires = _memcache():get("requires") or {}
- local required = requires[require_str]
- if required then
- return required.packagename, required.requireinfo
- end
-
-- split package and version info
local splitinfo = require_str:split('%s+')
assert(splitinfo and #splitinfo > 0, "require(\"%s\"): invalid!", require_str)
@@ -175,7 +178,7 @@ function _parse_require(require_str, requires_extra, parentinfo)
system = require_extra.system, -- default: true, we can set it to disable system package manually
option = require_extra.option, -- set and attach option
configs = require_build_configs, -- the required building configurations
- depconfigs = require_extra.depconfigs,-- the configuration passed to dependent packages
+ deps = require_extra.deps, -- the configuration passed to dependent packages
default = require_extra.default, -- default: true, we can set it to disable package manually
optional = parentinfo.optional or require_extra.optional, -- default: false, inherit parentinfo.optional
verify = require_extra.verify, -- default: true, we can set false to ignore sha256sum and select any version
@@ -183,12 +186,6 @@ function _parse_require(require_str, requires_extra, parentinfo)
on_load = require_extra.on_load, -- optional, we use it to override package().on_load
after_load = require_extra.after_load -- optional, we use it to load some user custom configuration after loading package()
}
-
- -- save this required item to cache
- requires[require_str] = required
- _memcache():set("requires", requires)
-
- -- ok
return required.packagename, required.requireinfo
end
@@ -447,11 +444,12 @@ function _load_package_depconfigs(package)
local extraconfs = package:extraconf("deps") or {}
-- inherit depconfigs of root package
- -- e.g. add_requires("libpng", {depconfigs = {...}})
+ -- e.g. add_requires("libpng", {deps = {...}})
--
local deps = package:get("deps")
local requireinfo = package:requireinfo()
- if requireinfo and requireinfo.depconfigs then
+ if requireinfo and requireinfo.deps then
+ local requiredeps = requireinfo.deps
for _, depstr in ipairs(deps) do
local depconf = extraconfs[depstr]
if not depconf then
@@ -459,9 +457,12 @@ function _load_package_depconfigs(package)
extraconfs[depstr] = depconf
end
depconf.configs = depconf.configs or {}
- for k, v in pairs(requireinfo.depconfigs) do
- if depconf.configs[k] == nil then
- depconf.configs[k] = v
+ for k, v in pairs(requiredeps.configs) do
+ depconf.configs[k] = v
+ end
+ for k, v in pairs(requiredeps) do
+ if k ~= "configs" then
+ depconf[k] = v
end
end
end
@@ -805,8 +806,7 @@ function load_packages(requires, opt)
local unique = {}
local packages = {}
for _, package in ipairs(_load_packages(requires, opt)) do
- -- remove repeat packages with same the package name and version
- local key = package:name() .. (package:version_str() or "")
+ local key = _get_packagekey(package:name(), package:requireinfo())
if not unique[key] then
table.insert(packages, package)
unique[key] = true