diff options
| author | ruki <[email protected]> | 2023-08-07 16:33:21 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-08-07 16:33:21 +0800 |
| commit | e8dbb835082d8ace3558ea7b0ba908512e3848b0 (patch) | |
| tree | 1e242726be229c01851e7f324ccff50be153d8c8 | |
| parent | 5ea087bef461d178caba95890c2ebbc52f34b888 (diff) | |
| parent | 2abd761c324b21c1c307c2a24b1adb5c66e41101 (diff) | |
Merge pull request #4047 from xmake-io/envs
improve target envs #4033
| -rw-r--r-- | xmake/actions/build/build.lua | 33 |
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 - - - |
