checkpoint

This commit is contained in:
Bill Ferguson
2020-06-08 12:45:49 -04:00
parent 55ced3ecc7
commit 4c536b41bc

View File

@@ -57,35 +57,78 @@ dtutils_file.libdoc.functions["check_if_bin_exists"] = {
Copyright = [[]], Copyright = [[]],
} }
function dtutils_file.check_if_bin_exists(bin) local function _check_if_bin_exists_windows(bin)
local result = false local result = false
local path = nil local path = nil
if string.match(bin, "/") or string.match(bin, "\\") then if string.match(bin, "\\") then
path = bin path = bin
else else
path = dtutils_file.get_executable_path_preference(bin) path = dtutils_file.get_executable_path_preference(bin)
end end
if string.len(path) > 0 then if (string.match(path, ".exe$") or string.match(path, ".EXE$")) or
(string.match(path, ".com$") or string.match(path, ".COM$")) or
(string.match(path, ".bat$") or string.match(path, ".BAT$")) or
(string.match(path, ".cmd$") or string.match(path, ".CMD$")) then
if dtutils_file.check_if_file_exists(path) then if dtutils_file.check_if_file_exists(path) then
if (string.match(path, ".exe$") or string.match(path, ".EXE$")) and dt.configuration.running_os ~= "windows" then result = dtutils_file.sanitize_filename(path)
result = dtutils_file.sanitize_filename("wine " .. path) end
else end
return result
end
-- check_if_bin_exists for unix like systems (linux, macos)
local function _check_if_bin_exists_nix(bin)
local result = false
local path = nil
if string.match(bin, "/") then
path = bin
else
path = dtutils_file.get_executable_path_preference(bin)
end
if path then dt.print_log("path is " .. path) end
if string.len(path) > 0 then
-- check for windows executable to run under wine
if string.match(path, ".exe$") or string.match(path, ".EXE$") then
if dtutils_file.check_if_file_exists(path) then
result = dtutils_file.sanitize_filename(path) result = dtutils_file.sanitize_filename(path)
end end
else
if dtutils_file.check_if_file_exists(path) then
local spath = dtutils_file.sanitize_filename(path)
-- check that it's an executable file
if os.execute("test -f " .. spath .. " && test -x " .. spath) then
result = spath
end
end
end end
elseif dt.configuration.running_os == "linux" then end
if not result then
local p = io.popen("which " .. bin) local p = io.popen("which " .. bin)
local output = p:read("*a") local output = p:read("*a")
p:close() p:close()
if string.len(output) > 0 then if string.len(output) > 0 then
result = dtutils_file.sanitize_filename(output:sub(1,-2)) local spath = dtutils_file.sanitize_filename(output:sub(1,-2))
if os.execute("test -f " .. spath .. " && test -x " .. spath) then
result = spath
end
end end
end end
return result return result
end end
function dtutils_file.check_if_bin_exists(bin)
if dt.configuration.running_os == "windows" then
return _check_if_bin_exists_windows(bin)
else
return _check_if_bin_exists_nix(bin)
end
end
dtutils_file.libdoc.functions["split_filepath"] = { dtutils_file.libdoc.functions["split_filepath"] = {
Name = [[split_filepath]], Name = [[split_filepath]],
Synopsis = [[split a filepath into parts]], Synopsis = [[split a filepath into parts]],
@@ -542,7 +585,7 @@ function dtutils_file.executable_path_widget(executables)
is_directory = false, is_directory = false,
changed_callback = function(self) changed_callback = function(self)
if dtutils_file.check_if_bin_exists(self.value) then if dtutils_file.check_if_bin_exists(self.value) then
dtutils_file.set_executable_path_preference(executable, self.value) dtutils_file.set_executable_path_preference(executable, dtutils_file.check_if_bin_exists(self.value))
end end
end} end}
) )