diff options
| author | ruki <[email protected]> | 2023-10-26 22:49:42 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-10-26 22:49:42 +0800 |
| commit | 76b45e616eef765de745f0e4fa71b8d64fd0a9a7 (patch) | |
| tree | 0274c8399e6d8507258f8a1a275e9e45b30f3407 | |
| parent | f9dde79e33a58184a40d876faf350cd47391e2c0 (diff) | |
improve dep source
| -rw-r--r-- | xmake/core/project/target.lua | 48 |
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::*"}) |
