diff options
| author | ruki <[email protected]> | 2025-10-04 22:01:04 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-10-04 22:01:04 +0800 |
| commit | 09cf7e0e4d59fad0ab52f438ff1b4d242af0df24 (patch) | |
| tree | a2e0858688c3d5c899cb6bb87794ef4b0962ee95 | |
| parent | 05525e2450c8af5344bd1ace78d4b532955de76c (diff) | |
| parent | d31622c8fb0c962262f3397bc8cb1ac670abd001 (diff) | |
Merge pull request #6889 from xmake-io/compat
fix os.getenvs compat
| -rw-r--r-- | xmake/core/base/hash.lua | 11 | ||||
| -rw-r--r-- | xmake/core/base/os.lua | 29 |
2 files changed, 37 insertions, 3 deletions
diff --git a/xmake/core/base/hash.lua b/xmake/core/base/hash.lua index e846ba302..9d7ca40ed 100644 --- a/xmake/core/base/hash.lua +++ b/xmake/core/base/hash.lua @@ -120,9 +120,14 @@ end -- generate hash32 from string, e.g. "91e8ecf1" function hash.strhash32(str) - local data = libc.ptraddr(libc.dataptr(str)) - local size = #str - return hash._xxhash(32, data, size) + if hash._rand32 then + local data = libc.ptraddr(libc.dataptr(str)) + local size = #str + return hash._xxhash(32, data, size) + else + -- we need to be compatible with the old binary core (<= v3.0.3) + return hash.uuid4(str):split("-", {plain = true})[1]:lower() + end end -- generate hash64 from string, e.g. "91e8ecf191e8ecf1" diff --git a/xmake/core/base/os.lua b/xmake/core/base/os.lua index 988d9e4bf..e6422c549 100644 --- a/xmake/core/base/os.lua +++ b/xmake/core/base/os.lua @@ -42,6 +42,7 @@ os._tmpdir = os._tmpdir or os.tmpdir os._curdir = os._curdir or os.curdir os._fscase = os._fscase or os.fscase os._setenv = os._setenv or os.setenv +os._getenvs = os._getenvs or os.getenvs os._cpuinfo = os._cpuinfo or os.cpuinfo os._meminfo = os._meminfo or os.meminfo os._readlink = os._readlink or os.readlink @@ -1300,6 +1301,34 @@ function os.term() return require("base/tty").term() end +-- get all current environments variables +function os.getenvs() + local envs = os._getenvs() + if envs then + -- we need to be compatible with the old binary core, if it's array (<= v3.0.3) + if envs[1] ~= nil then + local result = {} + for _, line in ipairs(envs) do + local p = line:find('=', 1, true) + if p then + local key = line:sub(1, p - 1):trim() + -- only translate Path to PATH on windows + -- @see https://github.com/xmake-io/xmake/issues/3752 + if os.host() == "windows" and key:lower() == "path" then + key = key:upper() + end + local values = line:sub(p + 1):trim() + if #key > 0 then + result[key] = values + end + end + end + envs = result + end + end + return envs +end + -- set all current environment variables -- e.g. envs["PATH"] = "/xxx:/yyy/foo" function os.setenvs(envs) |
