summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-10-26 22:49:42 +0800
committerruki <[email protected]>2023-10-26 22:49:42 +0800
commit76b45e616eef765de745f0e4fa71b8d64fd0a9a7 (patch)
tree0274c8399e6d8507258f8a1a275e9e45b30f3407
parentf9dde79e33a58184a40d876faf350cd47391e2c0 (diff)
improve dep source
-rw-r--r--xmake/core/project/target.lua48
1 files changed, 40 insertions, 8 deletions
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index d179855bb..21fd0315f 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -310,10 +310,15 @@ function _instance:_get_from_deps(name, result_values, result_sources, opt)
table.insert(result_values, values)
table.insert(result_sources, "dep::" .. dep:name())
end
- --[[TODO
- table.join2(values, dep:get_from_opts(name, opt))
- table.join2(values, dep:get_from_pkgs(name, opt))
- ]]
+ local dep_values = {}
+ local dep_sources = {}
+ dep:_get_from_options(name, dep_values, dep_sources, opt)
+ dep:_get_from_packages(name, dep_values, dep_sources, opt)
+ for idx, values in ipairs(dep_values) do
+ local dep_source = dep_sources[idx]
+ table.insert(result_values, values)
+ table.insert(result_sources, "dep::" .. depname .. "/" .. dep_source)
+ end
end
end
end
@@ -396,12 +401,33 @@ function _instance:_get_from_source(name, source, result_values, result_sources,
if depname == "*" then
self:_get_from_deps(name, result_values, result_sources, opt)
else
+ local depsource
+ local splitinfo = depname:split("/", {plain = true})
+ if #splitinfo == 2 then
+ depname = splitinfo[1]
+ depsource = splitinfo[2]
+ end
local dep = self:dep(depname)
if dep then
- local values = dep:get(name, opt)
- if values ~= nil then
- table.insert(result_values, values)
- table.insert(result_sources, source)
+ -- e.g.
+ -- dep::foo/option::bar
+ -- dep::foo/package::bar
+ if depsource then
+ local dep_values = {}
+ local dep_sources = {}
+ dep:_get_from_source(name, depsource, dep_values, dep_sources, opt)
+ for idx, values in ipairs(dep_values) do
+ local dep_source = dep_sources[idx]
+ table.insert(result_values, values)
+ table.insert(result_sources, "dep::" .. depname .. "/" .. dep_source)
+ end
+ else
+ -- dep::foo
+ local values = dep:get(name, opt)
+ if values ~= nil then
+ table.insert(result_values, values)
+ table.insert(result_sources, source)
+ end
end
end
end
@@ -588,6 +614,12 @@ end
-- target:get_from("links", "package::foo")
-- target:get_from("links", "package::*")
--
+-- from the given dep/option, dep/package
+-- target:get_from("links", "dep::foo/option::bar")
+-- target:get_from("links", "dep::foo/option::*")
+-- target:get_from("links", "dep::foo/package::bar")
+-- target:get_from("links", "dep::foo/package::*")
+--
-- from the multiple sources:
-- target:get_from("links", {"self", "option::foo", "dep::bar", "package::zoo"})
-- target:get_from("links", {"self", "option::*", "dep::*", "package::*"})