diff options
| author | ruki <[email protected]> | 2022-09-01 11:08:36 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-09-01 11:08:36 +0800 |
| commit | 4a3361f89da7ea73e4c39b7a632c2823267dfd02 (patch) | |
| tree | 98088fc11a1d2fb06fa2f31309f0dd5ebad9520d | |
| parent | 7cd426fe5f2afc2d785aff4c03c1d55519c2684a (diff) | |
| parent | 0b0df59ff40e8cf71ce0191b20a08acf07b959a0 (diff) | |
Merge pull request #2751 from xmake-io/pkgenvs
inherit package envs from deps
| -rw-r--r-- | xmake/core/project/target.lua | 39 |
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 |
