summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-03-26 00:45:57 +0800
committerruki <[email protected]>2021-03-26 23:09:48 +0800
commit55db717033eac0d71650149d9deef7744ecacd13 (patch)
treea4da30719f76c561de36746cb82259c94b8469ed
parent49953b37d748a0116626a74f87faebf198c2d688 (diff)
linkdeps
-rw-r--r--xmake/core/package/package.lua29
-rw-r--r--xmake/modules/private/action/require/impl/package.lua17
2 files changed, 27 insertions, 19 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index 7438896b7..3ca8c6ed8 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -252,6 +252,11 @@ function _instance:orderdeps()
return self._ORDERDEPS
end
+-- get link deps
+function _instance:linkdeps()
+ return self._LINKDEPS
+end
+
-- get parents
function _instance:parents()
return self._PARENTS
@@ -1230,19 +1235,17 @@ function _instance:fetchdeps()
return
end
fetchinfo = table.copy(fetchinfo) -- avoid the cached fetchinfo be modified
- local orderdeps = self:orderdeps()
- if orderdeps then
- local total = #orderdeps
- for idx, _ in ipairs(orderdeps) do
- local dep = orderdeps[total + 1 - idx]
- if dep:is_library() then
- local depinfo = dep:fetch()
- if depinfo then
- for name, values in pairs(depinfo) do
- if name ~= "license" and name ~= "version" then
- fetchinfo[name] = table.wrap(fetchinfo[name])
- table.join2(fetchinfo[name], values)
- end
+ local linkdeps = self:linkdeps()
+ if linkdeps then
+ local total = #linkdeps
+ for idx, _ in ipairs(linkdeps) do
+ local dep = linkdeps[total + 1 - idx]
+ local depinfo = dep:fetch()
+ if depinfo then
+ for name, values in pairs(depinfo) do
+ if name ~= "license" and name ~= "version" then
+ fetchinfo[name] = table.wrap(fetchinfo[name])
+ table.join2(fetchinfo[name], values)
end
end
end
diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua
index cc6d43afd..ddfb0210e 100644
--- a/xmake/modules/private/action/require/impl/package.lua
+++ b/xmake/modules/private/action/require/impl/package.lua
@@ -195,14 +195,18 @@ end
--
-- orderdeps: c -> b -> a
--
-function _sort_packagedeps(package)
+function _sort_packagedeps(package, onlylink)
+ -- we must use native deps list instead of package:deps() to generate correct linkdeps
+ -- TODO filter package name
local orderdeps = {}
- local deps = package:deps()
+ local deps = package:get("deps")
if deps then
- for _, depname in ipairs(table.orderkeys(deps)) do
- local dep = deps[depname]
- table.join2(orderdeps, _sort_packagedeps(dep))
- table.insert(orderdeps, dep)
+ for _, depname in ipairs(deps) do
+ local dep = package:dep(depname)
+ if dep and (onlylink ~= true or dep:is_library()) then
+ table.join2(orderdeps, _sort_packagedeps(dep, onlylink))
+ table.insert(orderdeps, dep)
+ end
end
end
return orderdeps
@@ -654,6 +658,7 @@ function _load_packages(requires, opt)
end
package._DEPS = packagedeps
package._ORDERDEPS = table.unique(_sort_packagedeps(package))
+ package._LINKDEPS = table.unique(_sort_packagedeps(package, true))
end
end