summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xmake/actions/require/impl/actions/install.lua6
-rw-r--r--xmake/core/package/package.lua12
2 files changed, 16 insertions, 2 deletions
diff --git a/xmake/actions/require/impl/actions/install.lua b/xmake/actions/require/impl/actions/install.lua
index 01079bb8b..9983f9868 100644
--- a/xmake/actions/require/impl/actions/install.lua
+++ b/xmake/actions/require/impl/actions/install.lua
@@ -181,6 +181,9 @@ function main(package)
end
-- enter the package environments
+ for _, dep in ipairs(package:orderdeps()) do
+ dep:envs_enter()
+ end
package:envs_enter()
-- fetch package and force to flush the cache
@@ -202,6 +205,9 @@ function main(package)
-- leave the package environments
package:envs_leave()
+ for _, dep in irpairs(package:orderdeps()) do
+ dep:envs_leave()
+ end
-- trace
tty.erase_line_to_start().cr()
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index 627081aaa..b46077f08 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -481,8 +481,16 @@ end
-- leave the package environments
function _instance:envs_leave()
- if self._OLDENVS then
- for name, values in pairs(self._OLDENVS) do
+ local oldenvs = self._OLDENVS
+ if oldenvs then
+ -- remove new added values
+ for name, _ in pairs(self:envs()) do
+ if not oldenvs[name] then
+ os.setenv(name, nil)
+ end
+ end
+ -- restore old values
+ for name, values in pairs(oldenvs) do
os.setenv(name, values)
end
self._OLDENVS = nil