summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-09-01 11:08:36 +0800
committerGitHub <[email protected]>2022-09-01 11:08:36 +0800
commit4a3361f89da7ea73e4c39b7a632c2823267dfd02 (patch)
tree98088fc11a1d2fb06fa2f31309f0dd5ebad9520d
parent7cd426fe5f2afc2d785aff4c03c1d55519c2684a (diff)
parent0b0df59ff40e8cf71ce0191b20a08acf07b959a0 (diff)
Merge pull request #2751 from xmake-io/pkgenvs
inherit package envs from deps
-rw-r--r--xmake/core/project/target.lua39
1 files changed, 27 insertions, 12 deletions
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index 61f928819..755535706 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -29,6 +29,7 @@ local path = require("base/path")
local utils = require("base/utils")
local table = require("base/table")
local baseoption = require("base/option")
+local hashset = require("base/hashset")
local deprecated = require("base/deprecated")
local memcache = require("cache/memcache")
local rule = require("project/rule")
@@ -852,21 +853,35 @@ end
function _instance:pkgenvs()
local pkgenvs = self._PKGENVS
if pkgenvs == nil then
+ local pkgs = hashset.new()
for _, pkgname in ipairs(table.wrap(self:get("packages"))) do
local pkg = self:pkg(pkgname)
if pkg then
- local envs = pkg:get("envs")
- if envs then
- for name, values in pairs(envs) do
- if type(values) == "table" then
- values = path.joinenv(values)
- end
- pkgenvs = pkgenvs or {}
- if pkgenvs[name] then
- pkgenvs[name] = pkgenvs[name] .. path.envsep() .. values
- else
- pkgenvs[name] = values
- end
+ pkgs:insert(pkg)
+ end
+ end
+ -- we can also get package envs from deps (public package)
+ -- @see https://github.com/xmake-io/xmake/issues/2729
+ for _, dep in ipairs(self:orderdeps()) do
+ for _, pkgname in ipairs(table.wrap(dep:get("packages", {interface = true}))) do
+ local pkg = dep:pkg(pkgname)
+ if pkg then
+ pkgs:insert(pkg)
+ end
+ end
+ end
+ for _, pkg in pkgs:keys() do
+ local envs = pkg:get("envs")
+ if envs then
+ for name, values in pairs(envs) do
+ if type(values) == "table" then
+ values = path.joinenv(values)
+ end
+ pkgenvs = pkgenvs or {}
+ if pkgenvs[name] then
+ pkgenvs[name] = pkgenvs[name] .. path.envsep() .. values
+ else
+ pkgenvs[name] = values
end
end
end