summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-02-19 22:41:40 +0800
committerSaikari <[email protected]>2026-02-20 16:31:35 +0300
commit9f1c3a8e8115a0746a2f7de435fa660a9504978e (patch)
tree0aeb0ba9aaba07e33a444ee9677248d9061577d8
parentd98330b24d4897430a9f26680dbdc7f910b0e948 (diff)
improve os.tmpdir
-rw-r--r--xmake/core/base/os.lua18
1 files changed, 11 insertions, 7 deletions
diff --git a/xmake/core/base/os.lua b/xmake/core/base/os.lua
index d50ce19f2..b8ce09f68 100644
--- a/xmake/core/base/os.lua
+++ b/xmake/core/base/os.lua
@@ -200,6 +200,15 @@ function os._ramdir()
return ramdir_root or nil
end
+-- if tmpdir_root is a symbolic link, os.tmpdir() may return a path that differs
+-- from the path style returned by os.curdir() (e.g. on Haiku).
+function os._resolve_tmpdir(tmpdir_root)
+ if os.islink(tmpdir_root) then
+ tmpdir_root = os.readlink(tmpdir_root) or tmpdir_root
+ end
+ return tmpdir_root
+end
+
-- set on change environments callback for scheduler
function os._sched_chenvs_set(envs)
os._SCHED_CHENVS = envs
@@ -771,19 +780,14 @@ function os.tmpdir(opt)
tmpdir_root = os._ROOT_TMPDIR
if os._ROOT_TMPDIR == nil then
tmpdir_root = (os.getenv("XMAKE_TMPDIR") or os.getenv("TMPDIR") or os._tmpdir()):trim()
- -- TODO
- if os.islink(tmpdir_root) then
- tmpdir_root = os.readlink(tmpdir_root) or tmpdir_root
- end
+ tmpdir_root = os._resolve_tmpdir(tmpdir_root)
os._ROOT_TMPDIR = tmpdir_root
end
else
tmpdir_root = os._ROOT_TMPDIR_RAM
if os._ROOT_TMPDIR_RAM == nil then
tmpdir_root = (os.getenv("XMAKE_TMPDIR") or os._ramdir() or os.getenv("TMPDIR") or os._tmpdir()):trim()
- if os.islink(tmpdir_root) then
- tmpdir_root = os.readlink(tmpdir_root) or tmpdir_root
- end
+ tmpdir_root = os._resolve_tmpdir(tmpdir_root)
os._ROOT_TMPDIR_RAM = tmpdir_root
end
end