summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2024-10-21 22:55:32 +0800
committerruki <[email protected]>2024-10-21 22:55:32 +0800
commit9c42ce00a2aba9448699626b3cfb290c88c0e542 (patch)
tree17f0311daa1c0502501ae5196eaebfcc44804e47
parentcb6f7672a99ed0f72de045b435127d2205fd016b (diff)
support config array for add_requires #5727
-rw-r--r--xmake/modules/private/action/require/impl/package.lua14
1 files changed, 12 insertions, 2 deletions
diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua
index 86df86bfb..721025344 100644
--- a/xmake/modules/private/action/require/impl/package.lua
+++ b/xmake/modules/private/action/require/impl/package.lua
@@ -88,6 +88,7 @@ end
-- simply configs as string:
-- add_requires("boost[iostreams,system,thread,key=value] >=1.78.0")
-- add_requires("boost[iostreams,thread=n] >=1.78.0")
+-- add_requires("libplist[shared,debug,codecs=[foo,bar,zoo]]")
--
function _parse_require(require_str)
@@ -148,14 +149,19 @@ function _load_require(require_str, requires_extra, parentinfo)
require_extra = requires_extra[require_str] or {}
end
+
-- parse configs from package name
-- @see https://github.com/xmake-io/xmake/issues/5727#issuecomment-2421040107
--
-- e.g.
-- add_requires("boost[iostreams,system,thread,key=value] >=1.78.0")
+ -- add_requires("libplist[shared,debug,codecs=[foo,bar,zoo]]")
--
- local packagename_raw, configs_str = packagename:match("(.+)%[(.+)%]")
+ local packagename_raw, configs_str = packagename:match("(.-)%[(.*)%]")
if packagename_raw and configs_str then
+ configs_str = configs_str:gsub("%[(.*)%]", function (w)
+ return w:replace(",", ":")
+ end)
packagename = packagename_raw
local splitinfo = configs_str:split(",", {plain = true})
for _, v in ipairs(splitinfo) do
@@ -165,7 +171,11 @@ function _load_require(require_str, requires_extra, parentinfo)
require_extra.configs = require_extra.configs or {}
local configs = require_extra.configs
if v then
- configs[k] = option.boolean(v)
+ if v:find(":", 1 ,true) then
+ configs[k] = v:split(":", {plain = true})
+ else
+ configs[k] = option.boolean(v)
+ end
else
configs[k] = true
end