From 55db717033eac0d71650149d9deef7744ecacd13 Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 26 Mar 2021 00:45:57 +0800 Subject: linkdeps --- xmake/core/package/package.lua | 29 ++++++++++++---------- .../private/action/require/impl/package.lua | 17 ++++++++----- 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 -- cgit v1.3.1