Merge pull request #779 from noresources/findheader

add os.findheader()
This commit is contained in:
Tom van Dijck 2017-05-25 08:46:15 -07:00 committed by GitHub
commit 838c256686
2 changed files with 68 additions and 13 deletions

View File

@ -61,26 +61,17 @@
end
return dirs
end
function os.findlib(libname, libdirs)
-- libname: library name with or without prefix and suffix
-- libdirs: (array or string): A set of additional search paths
local path, formats
-- assemble a search path, depending on the platform
local function get_library_search_path()
local path
if os.istarget("windows") then
formats = { "%s.dll", "%s" }
path = os.getenv("PATH") or ""
elseif os.istarget("haiku") then
formats = { "lib%s.so", "%s.so" }
path = os.getenv("LIBRARY_PATH") or ""
else
if os.istarget("macosx") then
formats = { "lib%s.dylib", "%s.dylib" }
path = os.getenv("DYLD_LIBRARY_PATH") or ""
else
formats = { "lib%s.so", "%s.so" }
path = os.getenv("LD_LIBRARY_PATH") or ""
for _, prefix in ipairs({"", "/opt"}) do
@ -97,7 +88,6 @@
end
end
table.insert(formats, "%s")
path = path or ""
local archpath = "/lib:/usr/lib:/usr/local/lib"
if os.is64bit() and not os.istarget("macosx") then
@ -110,6 +100,31 @@
end
end
return path
end
function os.findlib(libname, libdirs)
-- libname: library name with or without prefix and suffix
-- libdirs: (array or string): A set of additional search paths
local path = get_library_search_path()
local formats
-- assemble a search path, depending on the platform
if os.istarget("windows") then
formats = { "%s.dll", "%s" }
elseif os.istarget("haiku") then
formats = { "lib%s.so", "%s.so" }
else
if os.istarget("macosx") then
formats = { "lib%s.dylib", "%s.dylib" }
else
formats = { "lib%s.so", "%s.so" }
end
table.insert(formats, "%s")
end
local userpath = ""
if type(libdirs) == "string" then
@ -133,6 +148,36 @@
end
end
function os.findheader(headerpath, headerdirs)
-- headerpath: a partial header file path
-- headerdirs: additional header search paths
local path = get_library_search_path()
-- replace all /lib by /include
path = path .. ':'
path = path:gsub ('/lib[0-9]*([:/])', '/include%1')
path = path:sub (1, #path - 1)
local userpath = ""
if type(headerdirs) == "string" then
userpath = headerdirs
elseif type(headerdirs) == "table" then
userpath = table.implode(headerdirs, "", "", ":")
end
if (#userpath > 0) then
if (#path > 0) then
path = userpath .. ":" .. path
else
path = userpath
end
end
local result = os.pathsearch (headerpath, path)
return result
end
--
-- Retrieve the current target operating system ID string.

View File

@ -35,6 +35,16 @@
function suite.findlib_FailsOnBadLibName()
test.isfalse(os.findlib("NoSuchLibraryAsThisOneHere"))
end
function suite.findheader_stdheaders()
if not (os.istarget("windows")) then
test.istrue(os.findheader("stdlib.h"))
end
end
function suite.findheader_failure()
test.isfalse(os.findheader("Knights/who/say/Ni.hpp"))
end
--