summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-05-10 23:55:02 +0800
committerruki <[email protected]>2021-05-10 23:55:02 +0800
commit11832cdb3acdd30b1d001dd624d96695d3435b52 (patch)
tree606eef47ece310d015aa8f3efd6580c84356ea1a
parentdb7819842079a77f29d40a61f72f29c79b5ede44 (diff)
add addenvs
-rw-r--r--xmake/core/base/os.lua36
-rw-r--r--xmake/core/sandbox/modules/os.lua1
2 files changed, 33 insertions, 4 deletions
diff --git a/xmake/core/base/os.lua b/xmake/core/base/os.lua
index 4afa5ef3e..accc6c7dd 100644
--- a/xmake/core/base/os.lua
+++ b/xmake/core/base/os.lua
@@ -990,6 +990,7 @@ function os.term()
end
-- get all current environment variables
+-- e.g. envs["PATH"] = "/xxx:/yyy/foo"
function os.getenvs()
local envs = {}
for _, line in ipairs(os._getenvs()) do
@@ -1009,6 +1010,7 @@ function os.getenvs()
end
-- set all current environment variables
+-- e.g. envs["PATH"] = "/xxx:/yyy/foo"
function os.setenvs(envs)
if envs then
local changed = false
@@ -1016,15 +1018,17 @@ function os.setenvs(envs)
local curenvs = os.getenvs()
for name, _ in pairs(curenvs) do
if not envs[name] then
- os._setenv(name, "")
- changed = true
+ if os._setenv(name, "") then
+ changed = true
+ end
end
end
-- change values
for name, values in pairs(envs) do
if curenvs[name] ~= values then
- os._setenv(name, values)
- changed = true
+ if os._setenv(name, values) then
+ changed = true
+ end
end
end
-- update envs for scheduler
@@ -1034,6 +1038,30 @@ function os.setenvs(envs)
end
end
+-- add environment variables
+-- e.g. envs["PATH"] = "/xxx:/yyy/foo"
+function os.addenvs(envs)
+ if envs then
+ local changed = false
+ for name, values in pairs(envs) do
+ local ok
+ local oldenv = os.getenv(name)
+ if oldenv == "" or oldenv == nil then
+ ok = os._setenv(name, values)
+ else
+ ok = os._setenv(name, values .. path.envsep() .. oldenv)
+ end
+ if ok then
+ changed = true
+ end
+ end
+ -- update envs for scheduler
+ if changed and os._SCHED_CHENVS then
+ os._SCHED_CHENVS()
+ end
+ end
+end
+
-- set values to environment variable
function os.setenv(name, ...)
local ok
diff --git a/xmake/core/sandbox/modules/os.lua b/xmake/core/sandbox/modules/os.lua
index 34d749429..d84ca64a1 100644
--- a/xmake/core/sandbox/modules/os.lua
+++ b/xmake/core/sandbox/modules/os.lua
@@ -60,6 +60,7 @@ sandbox_os.setenvp = os.setenvp
sandbox_os.addenvp = os.addenvp
sandbox_os.getenvs = os.getenvs
sandbox_os.setenvs = os.setenvs
+sandbox_os.addenvs = os.addenvs
sandbox_os.pbpaste = os.pbpaste
sandbox_os.pbcopy = os.pbcopy
sandbox_os.cpuinfo = os.cpuinfo