summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-08-07 16:33:21 +0800
committerGitHub <[email protected]>2023-08-07 16:33:21 +0800
commite8dbb835082d8ace3558ea7b0ba908512e3848b0 (patch)
tree1e242726be229c01851e7f324ccff50be153d8c8
parent5ea087bef461d178caba95890c2ebbc52f34b888 (diff)
parent2abd761c324b21c1c307c2a24b1adb5c66e41101 (diff)
Merge pull request #4047 from xmake-io/envs
improve target envs #4033
-rw-r--r--xmake/actions/build/build.lua33
1 files changed, 26 insertions, 7 deletions
diff --git a/xmake/actions/build/build.lua b/xmake/actions/build/build.lua
index 87dda4857..69b1de5da 100644
--- a/xmake/actions/build/build.lua
+++ b/xmake/actions/build/build.lua
@@ -116,7 +116,8 @@ function _add_batchjobs_for_target(batchjobs, rootjob, target)
end
-- add after_build job for target
- local oldenvs
+ local pkgenvs = _g.pkgenvs or {}
+ _g.pkgenvs = pkgenvs
local job_build_after = batchjobs:addjob(target:name() .. "/after_build", function (index, total)
-- do after_build
@@ -140,8 +141,15 @@ function _add_batchjobs_for_target(batchjobs, rootjob, target)
end
-- restore environments
- if oldenvs then
- os.setenvs(oldenvs)
+ if target:pkgenvs() then
+ pkgenvs.oldenvs = pkgenvs.oldenvs or os.getenvs()
+ pkgenvs.newenvs = pkgenvs.newenvs or {}
+ pkgenvs.newenvs[target] = nil
+ local newenvs = pkgenvs.oldenvs
+ for _, envs in pairs(pkgenvs.newenvs) do
+ newenvs = os.joinenvs(envs, newenvs)
+ end
+ os.setenvs(newenvs)
end
end, {rootjob = rootjob})
@@ -153,7 +161,21 @@ function _add_batchjobs_for_target(batchjobs, rootjob, target)
local job_build_before = batchjobs:addjob(target:name() .. "/before_build", function (index, total)
-- enter package environments
- oldenvs = os.addenvs(target:pkgenvs())
+ -- https://github.com/xmake-io/xmake/issues/4033
+ --
+ -- maybe mixing envs isn't a great solution,
+ -- but it's the most efficient compromise compared to setting envs in every on_build_file.
+ --
+ if target:pkgenvs() then
+ pkgenvs.oldenvs = pkgenvs.oldenvs or os.getenvs()
+ pkgenvs.newenvs = pkgenvs.newenvs or {}
+ pkgenvs.newenvs[target] = target:pkgenvs()
+ local newenvs = pkgenvs.oldenvs
+ for _, envs in pairs(pkgenvs.newenvs) do
+ newenvs = os.joinenvs(envs, newenvs)
+ end
+ os.setenvs(newenvs)
+ end
-- clean target if rebuild
if option.get("rebuild") and not option.get("dry-run") then
@@ -266,6 +288,3 @@ function main(targetname, group_pattern)
end
end
-
-
-