diff options
| author | ruki <[email protected]> | 2021-05-10 23:55:02 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-05-10 23:55:02 +0800 |
| commit | 11832cdb3acdd30b1d001dd624d96695d3435b52 (patch) | |
| tree | 606eef47ece310d015aa8f3efd6580c84356ea1a | |
| parent | db7819842079a77f29d40a61f72f29c79b5ede44 (diff) | |
add addenvs
| -rw-r--r-- | xmake/core/base/os.lua | 36 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/os.lua | 1 |
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 |
