From 6de1d37f23278896de0a7f022c700ba5ff714904 Mon Sep 17 00:00:00 2001
From: Hans Hagen <pragma@wxs.nl>
Date: Tue, 30 Mar 2010 18:56:00 +0200
Subject: beta 2010.03.30 18:56

---
 scripts/context/lua/luatools.lua         | 87 +++++++++++++++++++++++++++-----
 scripts/context/lua/mtx-watch.lua        |  6 +--
 scripts/context/lua/mtxrun.lua           | 87 +++++++++++++++++++++++++++-----
 scripts/context/stubs/mswin/luatools.lua | 87 +++++++++++++++++++++++++++-----
 scripts/context/stubs/mswin/mtxrun.lua   | 87 +++++++++++++++++++++++++++-----
 scripts/context/stubs/unix/luatools      | 87 +++++++++++++++++++++++++++-----
 scripts/context/stubs/unix/mtxrun        | 87 +++++++++++++++++++++++++++-----
 7 files changed, 447 insertions(+), 81 deletions(-)

(limited to 'scripts')

diff --git a/scripts/context/lua/luatools.lua b/scripts/context/lua/luatools.lua
index 9a04cc0b2..36c6c6e38 100644
--- a/scripts/context/lua/luatools.lua
+++ b/scripts/context/lua/luatools.lua
@@ -5253,18 +5253,70 @@ end
 
 local args = environment and environment.original_arguments or arg -- this needs a cleanup
 
-resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
-resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
-resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
+--~ resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
+--~ resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
+--~ resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
 
-resolvers.autoselfdir = true -- false may be handy for debugging
+--~ resolvers.autoselfdir = true -- false may be handy for debugging
+
+--~ function resolvers.getownpath()
+--~     if not resolvers.ownpath then
+--~         if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
+--~             resolvers.ownpath = os.selfdir
+--~         else
+--~             local binary = resolvers.ownbin
+--~             if os.binsuffix ~= "" then
+--~                 binary = file.replacesuffix(binary,os.binsuffix)
+--~             end
+--~             for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+--~                 local b = file.join(p,binary)
+--~                 if lfs.isfile(b) then
+--~                     -- we assume that after changing to the path the currentdir function
+--~                     -- resolves to the real location and use this side effect here; this
+--~                     -- trick is needed because on the mac installations use symlinks in the
+--~                     -- path instead of real locations
+--~                     local olddir = lfs.currentdir()
+--~                     if lfs.chdir(p) then
+--~                         local pp = lfs.currentdir()
+--~                         if trace_locating and p ~= pp then
+--~                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
+--~                         end
+--~                         resolvers.ownpath = pp
+--~                         lfs.chdir(olddir)
+--~                     else
+--~                         if trace_locating then
+--~                             logs.report("fileio","unable to check path '%s'",p)
+--~                         end
+--~                         resolvers.ownpath =  p
+--~                     end
+--~                     break
+--~                 end
+--~             end
+--~         end
+--~         if not resolvers.ownpath then resolvers.ownpath = '.' end
+--~     end
+--~     return resolvers.ownpath
+--~ end
+
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = string.gsub(resolvers.ownbin,"\\","/")
 
 function resolvers.getownpath()
-    if not resolvers.ownpath then
-        if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
-            resolvers.ownpath = os.selfdir
-        else
-            local binary = resolvers.ownbin
+    local ownpath = resolvers.ownpath or os.selfdir
+    if not ownpath or ownpath == "" then
+        ownpath = args[-1] or arg[-1]
+        ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        if not ownpath or ownpath == "" then
+            ownpath = args[-0] or arg[-0]
+            ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        end
+        local binary = resolvers.ownbin
+        if not ownpath or ownpath == "" then
+            ownpath = ownpath and file.dirname(binary)
+        end
+        if not ownpath or ownpath == "" then
             if os.binsuffix ~= "" then
                 binary = file.replacesuffix(binary,os.binsuffix)
             end
@@ -5281,21 +5333,30 @@ function resolvers.getownpath()
                         if trace_locating and p ~= pp then
                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
                         end
-                        resolvers.ownpath = pp
+                        ownpath = pp
                         lfs.chdir(olddir)
                     else
                         if trace_locating then
                             logs.report("fileio","unable to check path '%s'",p)
                         end
-                        resolvers.ownpath =  p
+                        ownpath =  p
                     end
                     break
                 end
             end
         end
-        if not resolvers.ownpath then resolvers.ownpath = '.' end
+        if not ownpath or ownpath == "" then
+            ownpath = "."
+            logs.report("fileio","forcing fallback ownpath .")
+        else
+            logs.report("fileio","using ownpath '%s'",ownpath)
+        end
+    end
+    resolvers.ownpath = ownpath
+    function resolvers.getownpath()
+        return resolvers.ownpath
     end
-    return resolvers.ownpath
+    return ownpath
 end
 
 local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
diff --git a/scripts/context/lua/mtx-watch.lua b/scripts/context/lua/mtx-watch.lua
index 33dc08928..8864b44ba 100644
--- a/scripts/context/lua/mtx-watch.lua
+++ b/scripts/context/lua/mtx-watch.lua
@@ -145,10 +145,10 @@ function scripts.watch.watch()
                                     local path, base = replacements.outputpath, file.basename(replacements.filename)
                                     joblog.runtime = clock() - joblog.runtime
                                     if base ~= "" then
-                                        joblog.result  = file.replacesuffix(file.join(path,base),"pdf")
-                                        joblog.size    = lfs.attributes(joblog.result,"size")
+                                        joblog.result = file.replacesuffix(file.join(path,base),"pdf")
+                                        joblog.size   = lfs.attributes(joblog.result,"size")
                                     end
-                                    joblog.status  = "finished"
+                                    joblog.status = "finished"
                                 else
                                     joblog.status = "invalid command"
                                 end
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index b1327ae52..d940eae46 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -8343,18 +8343,70 @@ end
 
 local args = environment and environment.original_arguments or arg -- this needs a cleanup
 
-resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
-resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
-resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
+--~ resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
+--~ resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
+--~ resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
 
-resolvers.autoselfdir = true -- false may be handy for debugging
+--~ resolvers.autoselfdir = true -- false may be handy for debugging
+
+--~ function resolvers.getownpath()
+--~     if not resolvers.ownpath then
+--~         if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
+--~             resolvers.ownpath = os.selfdir
+--~         else
+--~             local binary = resolvers.ownbin
+--~             if os.binsuffix ~= "" then
+--~                 binary = file.replacesuffix(binary,os.binsuffix)
+--~             end
+--~             for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+--~                 local b = file.join(p,binary)
+--~                 if lfs.isfile(b) then
+--~                     -- we assume that after changing to the path the currentdir function
+--~                     -- resolves to the real location and use this side effect here; this
+--~                     -- trick is needed because on the mac installations use symlinks in the
+--~                     -- path instead of real locations
+--~                     local olddir = lfs.currentdir()
+--~                     if lfs.chdir(p) then
+--~                         local pp = lfs.currentdir()
+--~                         if trace_locating and p ~= pp then
+--~                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
+--~                         end
+--~                         resolvers.ownpath = pp
+--~                         lfs.chdir(olddir)
+--~                     else
+--~                         if trace_locating then
+--~                             logs.report("fileio","unable to check path '%s'",p)
+--~                         end
+--~                         resolvers.ownpath =  p
+--~                     end
+--~                     break
+--~                 end
+--~             end
+--~         end
+--~         if not resolvers.ownpath then resolvers.ownpath = '.' end
+--~     end
+--~     return resolvers.ownpath
+--~ end
+
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = string.gsub(resolvers.ownbin,"\\","/")
 
 function resolvers.getownpath()
-    if not resolvers.ownpath then
-        if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
-            resolvers.ownpath = os.selfdir
-        else
-            local binary = resolvers.ownbin
+    local ownpath = resolvers.ownpath or os.selfdir
+    if not ownpath or ownpath == "" then
+        ownpath = args[-1] or arg[-1]
+        ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        if not ownpath or ownpath == "" then
+            ownpath = args[-0] or arg[-0]
+            ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        end
+        local binary = resolvers.ownbin
+        if not ownpath or ownpath == "" then
+            ownpath = ownpath and file.dirname(binary)
+        end
+        if not ownpath or ownpath == "" then
             if os.binsuffix ~= "" then
                 binary = file.replacesuffix(binary,os.binsuffix)
             end
@@ -8371,21 +8423,30 @@ function resolvers.getownpath()
                         if trace_locating and p ~= pp then
                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
                         end
-                        resolvers.ownpath = pp
+                        ownpath = pp
                         lfs.chdir(olddir)
                     else
                         if trace_locating then
                             logs.report("fileio","unable to check path '%s'",p)
                         end
-                        resolvers.ownpath =  p
+                        ownpath =  p
                     end
                     break
                 end
             end
         end
-        if not resolvers.ownpath then resolvers.ownpath = '.' end
+        if not ownpath or ownpath == "" then
+            ownpath = "."
+            logs.report("fileio","forcing fallback ownpath .")
+        elseif trace_locating then
+            logs.report("fileio","using ownpath '%s'",ownpath)
+        end
+    end
+    resolvers.ownpath = ownpath
+    function resolvers.getownpath()
+        return resolvers.ownpath
     end
-    return resolvers.ownpath
+    return ownpath
 end
 
 local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
diff --git a/scripts/context/stubs/mswin/luatools.lua b/scripts/context/stubs/mswin/luatools.lua
index 9a04cc0b2..36c6c6e38 100644
--- a/scripts/context/stubs/mswin/luatools.lua
+++ b/scripts/context/stubs/mswin/luatools.lua
@@ -5253,18 +5253,70 @@ end
 
 local args = environment and environment.original_arguments or arg -- this needs a cleanup
 
-resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
-resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
-resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
+--~ resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
+--~ resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
+--~ resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
 
-resolvers.autoselfdir = true -- false may be handy for debugging
+--~ resolvers.autoselfdir = true -- false may be handy for debugging
+
+--~ function resolvers.getownpath()
+--~     if not resolvers.ownpath then
+--~         if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
+--~             resolvers.ownpath = os.selfdir
+--~         else
+--~             local binary = resolvers.ownbin
+--~             if os.binsuffix ~= "" then
+--~                 binary = file.replacesuffix(binary,os.binsuffix)
+--~             end
+--~             for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+--~                 local b = file.join(p,binary)
+--~                 if lfs.isfile(b) then
+--~                     -- we assume that after changing to the path the currentdir function
+--~                     -- resolves to the real location and use this side effect here; this
+--~                     -- trick is needed because on the mac installations use symlinks in the
+--~                     -- path instead of real locations
+--~                     local olddir = lfs.currentdir()
+--~                     if lfs.chdir(p) then
+--~                         local pp = lfs.currentdir()
+--~                         if trace_locating and p ~= pp then
+--~                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
+--~                         end
+--~                         resolvers.ownpath = pp
+--~                         lfs.chdir(olddir)
+--~                     else
+--~                         if trace_locating then
+--~                             logs.report("fileio","unable to check path '%s'",p)
+--~                         end
+--~                         resolvers.ownpath =  p
+--~                     end
+--~                     break
+--~                 end
+--~             end
+--~         end
+--~         if not resolvers.ownpath then resolvers.ownpath = '.' end
+--~     end
+--~     return resolvers.ownpath
+--~ end
+
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = string.gsub(resolvers.ownbin,"\\","/")
 
 function resolvers.getownpath()
-    if not resolvers.ownpath then
-        if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
-            resolvers.ownpath = os.selfdir
-        else
-            local binary = resolvers.ownbin
+    local ownpath = resolvers.ownpath or os.selfdir
+    if not ownpath or ownpath == "" then
+        ownpath = args[-1] or arg[-1]
+        ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        if not ownpath or ownpath == "" then
+            ownpath = args[-0] or arg[-0]
+            ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        end
+        local binary = resolvers.ownbin
+        if not ownpath or ownpath == "" then
+            ownpath = ownpath and file.dirname(binary)
+        end
+        if not ownpath or ownpath == "" then
             if os.binsuffix ~= "" then
                 binary = file.replacesuffix(binary,os.binsuffix)
             end
@@ -5281,21 +5333,30 @@ function resolvers.getownpath()
                         if trace_locating and p ~= pp then
                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
                         end
-                        resolvers.ownpath = pp
+                        ownpath = pp
                         lfs.chdir(olddir)
                     else
                         if trace_locating then
                             logs.report("fileio","unable to check path '%s'",p)
                         end
-                        resolvers.ownpath =  p
+                        ownpath =  p
                     end
                     break
                 end
             end
         end
-        if not resolvers.ownpath then resolvers.ownpath = '.' end
+        if not ownpath or ownpath == "" then
+            ownpath = "."
+            logs.report("fileio","forcing fallback ownpath .")
+        else
+            logs.report("fileio","using ownpath '%s'",ownpath)
+        end
+    end
+    resolvers.ownpath = ownpath
+    function resolvers.getownpath()
+        return resolvers.ownpath
     end
-    return resolvers.ownpath
+    return ownpath
 end
 
 local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index b1327ae52..d940eae46 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -8343,18 +8343,70 @@ end
 
 local args = environment and environment.original_arguments or arg -- this needs a cleanup
 
-resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
-resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
-resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
+--~ resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
+--~ resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
+--~ resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
 
-resolvers.autoselfdir = true -- false may be handy for debugging
+--~ resolvers.autoselfdir = true -- false may be handy for debugging
+
+--~ function resolvers.getownpath()
+--~     if not resolvers.ownpath then
+--~         if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
+--~             resolvers.ownpath = os.selfdir
+--~         else
+--~             local binary = resolvers.ownbin
+--~             if os.binsuffix ~= "" then
+--~                 binary = file.replacesuffix(binary,os.binsuffix)
+--~             end
+--~             for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+--~                 local b = file.join(p,binary)
+--~                 if lfs.isfile(b) then
+--~                     -- we assume that after changing to the path the currentdir function
+--~                     -- resolves to the real location and use this side effect here; this
+--~                     -- trick is needed because on the mac installations use symlinks in the
+--~                     -- path instead of real locations
+--~                     local olddir = lfs.currentdir()
+--~                     if lfs.chdir(p) then
+--~                         local pp = lfs.currentdir()
+--~                         if trace_locating and p ~= pp then
+--~                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
+--~                         end
+--~                         resolvers.ownpath = pp
+--~                         lfs.chdir(olddir)
+--~                     else
+--~                         if trace_locating then
+--~                             logs.report("fileio","unable to check path '%s'",p)
+--~                         end
+--~                         resolvers.ownpath =  p
+--~                     end
+--~                     break
+--~                 end
+--~             end
+--~         end
+--~         if not resolvers.ownpath then resolvers.ownpath = '.' end
+--~     end
+--~     return resolvers.ownpath
+--~ end
+
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = string.gsub(resolvers.ownbin,"\\","/")
 
 function resolvers.getownpath()
-    if not resolvers.ownpath then
-        if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
-            resolvers.ownpath = os.selfdir
-        else
-            local binary = resolvers.ownbin
+    local ownpath = resolvers.ownpath or os.selfdir
+    if not ownpath or ownpath == "" then
+        ownpath = args[-1] or arg[-1]
+        ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        if not ownpath or ownpath == "" then
+            ownpath = args[-0] or arg[-0]
+            ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        end
+        local binary = resolvers.ownbin
+        if not ownpath or ownpath == "" then
+            ownpath = ownpath and file.dirname(binary)
+        end
+        if not ownpath or ownpath == "" then
             if os.binsuffix ~= "" then
                 binary = file.replacesuffix(binary,os.binsuffix)
             end
@@ -8371,21 +8423,30 @@ function resolvers.getownpath()
                         if trace_locating and p ~= pp then
                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
                         end
-                        resolvers.ownpath = pp
+                        ownpath = pp
                         lfs.chdir(olddir)
                     else
                         if trace_locating then
                             logs.report("fileio","unable to check path '%s'",p)
                         end
-                        resolvers.ownpath =  p
+                        ownpath =  p
                     end
                     break
                 end
             end
         end
-        if not resolvers.ownpath then resolvers.ownpath = '.' end
+        if not ownpath or ownpath == "" then
+            ownpath = "."
+            logs.report("fileio","forcing fallback ownpath .")
+        elseif trace_locating then
+            logs.report("fileio","using ownpath '%s'",ownpath)
+        end
+    end
+    resolvers.ownpath = ownpath
+    function resolvers.getownpath()
+        return resolvers.ownpath
     end
-    return resolvers.ownpath
+    return ownpath
 end
 
 local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
diff --git a/scripts/context/stubs/unix/luatools b/scripts/context/stubs/unix/luatools
index 9a04cc0b2..36c6c6e38 100755
--- a/scripts/context/stubs/unix/luatools
+++ b/scripts/context/stubs/unix/luatools
@@ -5253,18 +5253,70 @@ end
 
 local args = environment and environment.original_arguments or arg -- this needs a cleanup
 
-resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
-resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
-resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
+--~ resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
+--~ resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
+--~ resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
 
-resolvers.autoselfdir = true -- false may be handy for debugging
+--~ resolvers.autoselfdir = true -- false may be handy for debugging
+
+--~ function resolvers.getownpath()
+--~     if not resolvers.ownpath then
+--~         if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
+--~             resolvers.ownpath = os.selfdir
+--~         else
+--~             local binary = resolvers.ownbin
+--~             if os.binsuffix ~= "" then
+--~                 binary = file.replacesuffix(binary,os.binsuffix)
+--~             end
+--~             for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+--~                 local b = file.join(p,binary)
+--~                 if lfs.isfile(b) then
+--~                     -- we assume that after changing to the path the currentdir function
+--~                     -- resolves to the real location and use this side effect here; this
+--~                     -- trick is needed because on the mac installations use symlinks in the
+--~                     -- path instead of real locations
+--~                     local olddir = lfs.currentdir()
+--~                     if lfs.chdir(p) then
+--~                         local pp = lfs.currentdir()
+--~                         if trace_locating and p ~= pp then
+--~                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
+--~                         end
+--~                         resolvers.ownpath = pp
+--~                         lfs.chdir(olddir)
+--~                     else
+--~                         if trace_locating then
+--~                             logs.report("fileio","unable to check path '%s'",p)
+--~                         end
+--~                         resolvers.ownpath =  p
+--~                     end
+--~                     break
+--~                 end
+--~             end
+--~         end
+--~         if not resolvers.ownpath then resolvers.ownpath = '.' end
+--~     end
+--~     return resolvers.ownpath
+--~ end
+
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = string.gsub(resolvers.ownbin,"\\","/")
 
 function resolvers.getownpath()
-    if not resolvers.ownpath then
-        if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
-            resolvers.ownpath = os.selfdir
-        else
-            local binary = resolvers.ownbin
+    local ownpath = resolvers.ownpath or os.selfdir
+    if not ownpath or ownpath == "" then
+        ownpath = args[-1] or arg[-1]
+        ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        if not ownpath or ownpath == "" then
+            ownpath = args[-0] or arg[-0]
+            ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        end
+        local binary = resolvers.ownbin
+        if not ownpath or ownpath == "" then
+            ownpath = ownpath and file.dirname(binary)
+        end
+        if not ownpath or ownpath == "" then
             if os.binsuffix ~= "" then
                 binary = file.replacesuffix(binary,os.binsuffix)
             end
@@ -5281,21 +5333,30 @@ function resolvers.getownpath()
                         if trace_locating and p ~= pp then
                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
                         end
-                        resolvers.ownpath = pp
+                        ownpath = pp
                         lfs.chdir(olddir)
                     else
                         if trace_locating then
                             logs.report("fileio","unable to check path '%s'",p)
                         end
-                        resolvers.ownpath =  p
+                        ownpath =  p
                     end
                     break
                 end
             end
         end
-        if not resolvers.ownpath then resolvers.ownpath = '.' end
+        if not ownpath or ownpath == "" then
+            ownpath = "."
+            logs.report("fileio","forcing fallback ownpath .")
+        else
+            logs.report("fileio","using ownpath '%s'",ownpath)
+        end
+    end
+    resolvers.ownpath = ownpath
+    function resolvers.getownpath()
+        return resolvers.ownpath
     end
-    return resolvers.ownpath
+    return ownpath
 end
 
 local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index b1327ae52..d940eae46 100755
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -8343,18 +8343,70 @@ end
 
 local args = environment and environment.original_arguments or arg -- this needs a cleanup
 
-resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
-resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
-resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
+--~ resolvers.ownbin  = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg [0] or "luatex"
+--~ resolvers.ownbin  = string.gsub(resolvers.ownbin,"\\","/")
+--~ resolvers.ownpath = resolvers.ownpath or file.dirname(resolvers.ownbin)
 
-resolvers.autoselfdir = true -- false may be handy for debugging
+--~ resolvers.autoselfdir = true -- false may be handy for debugging
+
+--~ function resolvers.getownpath()
+--~     if not resolvers.ownpath then
+--~         if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
+--~             resolvers.ownpath = os.selfdir
+--~         else
+--~             local binary = resolvers.ownbin
+--~             if os.binsuffix ~= "" then
+--~                 binary = file.replacesuffix(binary,os.binsuffix)
+--~             end
+--~             for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+--~                 local b = file.join(p,binary)
+--~                 if lfs.isfile(b) then
+--~                     -- we assume that after changing to the path the currentdir function
+--~                     -- resolves to the real location and use this side effect here; this
+--~                     -- trick is needed because on the mac installations use symlinks in the
+--~                     -- path instead of real locations
+--~                     local olddir = lfs.currentdir()
+--~                     if lfs.chdir(p) then
+--~                         local pp = lfs.currentdir()
+--~                         if trace_locating and p ~= pp then
+--~                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
+--~                         end
+--~                         resolvers.ownpath = pp
+--~                         lfs.chdir(olddir)
+--~                     else
+--~                         if trace_locating then
+--~                             logs.report("fileio","unable to check path '%s'",p)
+--~                         end
+--~                         resolvers.ownpath =  p
+--~                     end
+--~                     break
+--~                 end
+--~             end
+--~         end
+--~         if not resolvers.ownpath then resolvers.ownpath = '.' end
+--~     end
+--~     return resolvers.ownpath
+--~ end
+
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = string.gsub(resolvers.ownbin,"\\","/")
 
 function resolvers.getownpath()
-    if not resolvers.ownpath then
-        if resolvers.autoselfdir and os.selfdir and os.selfdir ~= "" then
-            resolvers.ownpath = os.selfdir
-        else
-            local binary = resolvers.ownbin
+    local ownpath = resolvers.ownpath or os.selfdir
+    if not ownpath or ownpath == "" then
+        ownpath = args[-1] or arg[-1]
+        ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        if not ownpath or ownpath == "" then
+            ownpath = args[-0] or arg[-0]
+            ownpath = ownpath and file.dirname(string.gsub(ownpath,"\\","/"))
+        end
+        local binary = resolvers.ownbin
+        if not ownpath or ownpath == "" then
+            ownpath = ownpath and file.dirname(binary)
+        end
+        if not ownpath or ownpath == "" then
             if os.binsuffix ~= "" then
                 binary = file.replacesuffix(binary,os.binsuffix)
             end
@@ -8371,21 +8423,30 @@ function resolvers.getownpath()
                         if trace_locating and p ~= pp then
                             logs.report("fileio","following symlink '%s' to '%s'",p,pp)
                         end
-                        resolvers.ownpath = pp
+                        ownpath = pp
                         lfs.chdir(olddir)
                     else
                         if trace_locating then
                             logs.report("fileio","unable to check path '%s'",p)
                         end
-                        resolvers.ownpath =  p
+                        ownpath =  p
                     end
                     break
                 end
             end
         end
-        if not resolvers.ownpath then resolvers.ownpath = '.' end
+        if not ownpath or ownpath == "" then
+            ownpath = "."
+            logs.report("fileio","forcing fallback ownpath .")
+        elseif trace_locating then
+            logs.report("fileio","using ownpath '%s'",ownpath)
+        end
+    end
+    resolvers.ownpath = ownpath
+    function resolvers.getownpath()
+        return resolvers.ownpath
     end
-    return resolvers.ownpath
+    return ownpath
 end
 
 local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
-- 
cgit v1.2.3