From 8ff6a5b55b199fbb056b0e11cff86d8192cef61e Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Tue, 2 Jul 2013 23:21:15 -0300 Subject: Make sure a wrapper script finds modules from its own version. --- src/luarocks/fs/unix.lua | 6 ++++-- src/luarocks/fs/win32.lua | 6 ++++-- src/luarocks/repos.lua | 15 ++++++++------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/luarocks/fs/unix.lua b/src/luarocks/fs/unix.lua index cfd20c70..cccbbd33 100644 --- a/src/luarocks/fs/unix.lua +++ b/src/luarocks/fs/unix.lua @@ -43,9 +43,11 @@ end --- Create a wrapper to make a script executable from the command-line. -- @param file string: Pathname of script to be made executable. -- @param dest string: Directory where to put the wrapper. +-- @param name string: rock name to be used in loader context. +-- @param version string: rock version to be used in loader context. -- @return boolean or (nil, string): True if succeeded, or nil and -- an error message. -function wrap_script(file, dest) +function wrap_script(file, dest, name, version) assert(type(file) == "string") assert(type(dest) == "string") @@ -59,7 +61,7 @@ function wrap_script(file, dest) wrapper:write('LUA_PATH="'..package.path..';$LUA_PATH"\n') wrapper:write('LUA_CPATH="'..package.cpath..';$LUA_CPATH"\n') wrapper:write('export LUA_PATH LUA_CPATH\n') - wrapper:write('exec "'..dir.path(cfg.variables["LUA_BINDIR"], cfg.lua_interpreter)..'" -lluarocks.loader "'..file..'" "$@"\n') + wrapper:write('exec "'..dir.path(cfg.variables["LUA_BINDIR"], cfg.lua_interpreter)..'" -lluarocks.loader -e\'luarocks.loader.add_context([['..name..']],[['..version..']])\' "'..file..'" "$@"\n') wrapper:close() if fs.chmod(wrapname, "0755") then return true diff --git a/src/luarocks/fs/win32.lua b/src/luarocks/fs/win32.lua index 2c78d9b6..2b5bb955 100644 --- a/src/luarocks/fs/win32.lua +++ b/src/luarocks/fs/win32.lua @@ -52,9 +52,11 @@ end --- Create a wrapper to make a script executable from the command-line. -- @param file string: Pathname of script to be made executable. -- @param dest string: Directory where to put the wrapper. +-- @param name string: rock name to be used in loader context. +-- @param version string: rock version to be used in loader context. -- @return boolean or (nil, string): True if succeeded, or nil and -- an error message. -function wrap_script(file, dest) +function wrap_script(file, dest, name, version) assert(type(file) == "string") assert(type(dest) == "string") @@ -69,7 +71,7 @@ function wrap_script(file, dest) wrapper:write("setlocal\n") wrapper:write('set LUA_PATH='..package.path..";%LUA_PATH%\n") wrapper:write('set LUA_CPATH='..package.cpath..";%LUA_CPATH%\n") - wrapper:write('"'..dir.path(cfg.variables["LUA_BINDIR"], cfg.lua_interpreter)..'" -lluarocks.loader "'..file..'" %*\n') + wrapper:write('"'..dir.path(cfg.variables["LUA_BINDIR"], cfg.lua_interpreter)..'" -lluarocks.loader -e\'luarocks.loader.add_context([['..name..']],[['..version..']])\' "'..file..'" %*\n') wrapper:write("endlocal\n") wrapper:close() return true diff --git a/src/luarocks/repos.lua b/src/luarocks/repos.lua index 5e87afe3..b7e64d42 100644 --- a/src/luarocks/repos.lua +++ b/src/luarocks/repos.lua @@ -150,7 +150,7 @@ function run_hook(rockspec, hook_name) return true end -local function install_binary(source, target) +local function install_binary(source, target, name, version) assert(type(source) == "string") assert(type(target) == "string") @@ -160,7 +160,7 @@ local function install_binary(source, target) file = io.open(source) end if match or (file and file:read():match("^#!.*lua.*")) then - ok, err = fs.wrap_script(source, target) + ok, err = fs.wrap_script(source, target, name, version) else ok, err = fs.copy_binary(source, target) end @@ -200,7 +200,8 @@ function deploy_files(name, version, wrap_bin_scripts) assert(type(version) == "string") assert(type(wrap_bin_scripts) == "boolean") - local function deploy_file_tree(file_tree, source_dir, deploy_dir, move_fn) + local function deploy_file_tree(file_tree, path_fn, deploy_dir, move_fn) + local source_dir = path_fn(name, version) if not move_fn then move_fn = fs.move end @@ -220,7 +221,7 @@ function deploy_files(name, version, wrap_bin_scripts) end end fs.make_dir(dir.dir_name(target)) - ok, err = move_fn(source, target) + ok, err = move_fn(source, target, name, version) fs.remove_dir_tree_if_empty(dir.dir_name(source)) if not ok then return nil, err end return true @@ -233,13 +234,13 @@ function deploy_files(name, version, wrap_bin_scripts) local ok, err = true if rock_manifest.bin then local move_bin_fn = wrap_bin_scripts and install_binary or fs.copy_binary - ok, err = deploy_file_tree(rock_manifest.bin, path.bin_dir(name, version), cfg.deploy_bin_dir, move_bin_fn) + ok, err = deploy_file_tree(rock_manifest.bin, path.bin_dir, cfg.deploy_bin_dir, move_bin_fn) end if ok and rock_manifest.lua then - ok, err = deploy_file_tree(rock_manifest.lua, path.lua_dir(name, version), cfg.deploy_lua_dir) + ok, err = deploy_file_tree(rock_manifest.lua, path.lua_dir, cfg.deploy_lua_dir) end if ok and rock_manifest.lib then - ok, err = deploy_file_tree(rock_manifest.lib, path.lib_dir(name, version), cfg.deploy_lib_dir) + ok, err = deploy_file_tree(rock_manifest.lib, path.lib_dir, cfg.deploy_lib_dir) end return ok, err end -- cgit v1.2.3-55-g6feb