Skip to content

Instantly share code, notes, and snippets.

@dvv
Created April 26, 2012 18:33
Show Gist options
  • Save dvv/2501729 to your computer and use it in GitHub Desktop.
Save dvv/2501729 to your computer and use it in GitHub Desktop.
package.searchpath experiment
#!/usr/bin/env luajit2
local Util = require('utils')
local p = Util.prettyPrint
local resolve
do
local ffi = require('ffi')
local C = ffi.C
ffi.cdef[[
char *realpath(const char *path, char *resolved_path);
size_t strlen(const char *s);
void free(void *ptr);
]]
resolve = function(path)
local buf = ffi.new('uint8_t[1024]')
local s = C.realpath(path, buf)
if s ~= nil then
local r = ffi.string(s, C.strlen(s))
return r
end
end
end
local pwd = os.getenv('PWD')
local sys_path_lua = '/usr/local/share/lua/5.1'
local sys_path_bin = '/usr/local/lib/lua/5.1'
local new_path = '../modules/?/init.lua;./?.lua;./?/init.lua;' .. sys_path_lua .. '/?.lua;' .. sys_path_lua .. '/?/init.lua' ..
'../modules/?/init.so;./?.so;' .. sys_path_bin .. '/?.so;' .. sys_path_bin .. '/loadall.so'
local _require = require
require = function(modname)
local abs_modname = resolve(package.searchpath(modname, new_path))
--abs_modname = abs_modname:sub(1, -5)
print('REQ', modname, abs_modname)
local ret = dofile(abs_modname)
package.loaded[abs_modname] = ret
return ret
--[[
--if modname:sub(1, 2) == './' then
local _path = package.path
local _cpath = package.cpath
package.path = abs_modname
package.cpath = abs_modname
local r = _require(abs_modname)
package.path = _path
package.cpath = _cpath
return r
--end
--return _require(abs_modname)
]]
end
p(_G, package)
package.path = '?'
package.cpath = '?'
--local Codec = require('luabins')
--p(Codec)
local WebSocket = require('websocket')
p(WebSocket)
p(package)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment