aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2011-08-26 19:59:21 -0300
committerHisham Muhammad <hisham@gobolinux.org>2011-08-26 19:59:21 -0300
commit081a224ea61bf406ba79716cef3f07e44aa15ee4 (patch)
tree030070ee72331f07cd63794fa99d462a3a818f23 /src
parentc0dc905564c23bf25c8514b127f7eecc2793af10 (diff)
downloadluarocks-081a224ea61bf406ba79716cef3f07e44aa15ee4.tar.gz
luarocks-081a224ea61bf406ba79716cef3f07e44aa15ee4.tar.bz2
luarocks-081a224ea61bf406ba79716cef3f07e44aa15ee4.zip
Implemented a flag --pack-binary-rock to "luarocks build", that compiles into a sandbox and packs the .rock file, without installing it into any of the configured rocks trees. Closes #15.
Diffstat (limited to 'src')
-rw-r--r--src/luarocks/build.lua62
-rw-r--r--src/luarocks/command_line.lua14
-rw-r--r--src/luarocks/pack.lua2
-rw-r--r--src/luarocks/path.lua8
4 files changed, 58 insertions, 28 deletions
diff --git a/src/luarocks/build.lua b/src/luarocks/build.lua
index 5ed2406a..1341a9ae 100644
--- a/src/luarocks/build.lua
+++ b/src/luarocks/build.lua
@@ -14,11 +14,14 @@ local manif = require("luarocks.manif")
14local cfg = require("luarocks.cfg") 14local cfg = require("luarocks.cfg")
15 15
16help_summary = "Build/compile a rock." 16help_summary = "Build/compile a rock."
17help_arguments = "{<rockspec>|<rock>|<name> [<version>]}" 17help_arguments = "[--pack-binary-rock] {<rockspec>|<rock>|<name> [<version>]}"
18help = [[ 18help = [[
19Build a rock, compiling its C parts if any. 19Build and install a rock, compiling its C parts if any.
20Argument may be a rockspec file, a source rock file 20Argument may be a rockspec file, a source rock file
21or the name of a rock to be fetched from a repository. 21or the name of a rock to be fetched from a repository.
22
23If --pack-binary-rock is passed, the rock is not installed;
24instead, a .rock file with the contents of compilation is produced.
22]] 25]]
23 26
24--- Install files to a given location. 27--- Install files to a given location.
@@ -269,6 +272,42 @@ function build_rock(rock_file, need_to_fetch)
269 return ok, err, errcode 272 return ok, err, errcode
270end 273end
271 274
275local function do_build(name, version)
276 if name:match("%.rockspec$") then
277 return build_rockspec(name, true)
278 elseif name:match("%.src%.rock$") then
279 return build_rock(name, false)
280 elseif name:match("%.all%.rock$") then
281 local install = require("luarocks.install")
282 return install.install_binary_rock(name)
283 elseif name:match("%.rock$") then
284 return build_rock(name, true)
285 elseif not name:match(dir.separator) then
286 local search = require("luarocks.search")
287 return search.act_on_src_or_rockspec(run, name:lower(), version)
288 end
289 return nil, "Don't know what to do with "..name
290end
291
292local function pack_binary_rock(name, version)
293 local temp_dir = fs.make_temp_dir("luarocks-build-pack-"..dir.base_name(name))
294 if not temp_dir then
295 return nil, "Failed creating temporary directory."
296 end
297 util.schedule_function(fs.delete, temp_dir)
298
299 path.use_tree(temp_dir)
300 local ok, err = do_build(name, version)
301 if not ok then
302 return nil, err
303 end
304 local rname, rversion = path.parse_name(name)
305 if not rname then
306 rname, rversion = name, version
307 end
308 return pack.pack_binary_rock(rname, rversion)
309end
310
272--- Driver function for "build" command. 311--- Driver function for "build" command.
273-- @param name string: A local or remote rockspec or rock file. 312-- @param name string: A local or remote rockspec or rock file.
274-- If a package name is given, forwards the request to "search" and, 313-- If a package name is given, forwards the request to "search" and,
@@ -286,19 +325,10 @@ function run(...)
286 325
287 local ok, err = fs.check_command_permissions(flags) 326 local ok, err = fs.check_command_permissions(flags)
288 if not ok then return nil, err end 327 if not ok then return nil, err end
289 328
290 if name:match("%.rockspec$") then 329 if flags["pack-binary-rock"] then
291 return build_rockspec(name, true) 330 return pack_binary_rock(name, version)
292 elseif name:match("%.src%.rock$") then 331 else
293 return build_rock(name, false) 332 return do_build(name, version)
294 elseif name:match("%.all%.rock$") then
295 local install = require("luarocks.install")
296 return install.install_binary_rock(name)
297 elseif name:match("%.rock$") then
298 return build_rock(name, true)
299 elseif not name:match(dir.separator) then
300 local search = require("luarocks.search")
301 return search.act_on_src_or_rockspec(run, name:lower(), version)
302 end 333 end
303 return nil, "Don't know what to do with "..name
304end 334end
diff --git a/src/luarocks/command_line.lua b/src/luarocks/command_line.lua
index ff8699ff..02793c5a 100644
--- a/src/luarocks/command_line.lua
+++ b/src/luarocks/command_line.lua
@@ -33,14 +33,6 @@ local function is_writable(tree)
33 end 33 end
34end 34end
35 35
36local function use_tree(tree)
37 cfg.root_dir = tree
38 cfg.rocks_dir = path.rocks_dir(tree)
39 cfg.deploy_bin_dir = path.deploy_bin_dir(tree)
40 cfg.deploy_lua_dir = path.deploy_lua_dir(tree)
41 cfg.deploy_lib_dir = path.deploy_lib_dir(tree)
42end
43
44--- Main command-line processor. 36--- Main command-line processor.
45-- Parses input arguments and calls the appropriate driver function 37-- Parses input arguments and calls the appropriate driver function
46-- to execute the action requested on the command-line, forwarding 38-- to execute the action requested on the command-line, forwarding
@@ -97,12 +89,12 @@ function run_command(...)
97 die("Argument error: use --to=<path>") 89 die("Argument error: use --to=<path>")
98 end 90 end
99 local root_dir = fs.absolute_name(flags["to"]) 91 local root_dir = fs.absolute_name(flags["to"])
100 use_tree(root_dir) 92 path.use_tree(root_dir)
101 elseif flags["local"] then 93 elseif flags["local"] then
102 use_tree(cfg.home_tree) 94 path.use_tree(cfg.home_tree)
103 else 95 else
104 local trees = cfg.rocks_trees 96 local trees = cfg.rocks_trees
105 use_tree(trees[#trees]) 97 path.use_tree(trees[#trees])
106 end 98 end
107 99
108 if type(cfg.root_dir) == "string" then 100 if type(cfg.root_dir) == "string" then
diff --git a/src/luarocks/pack.lua b/src/luarocks/pack.lua
index e22bdc38..b85b7460 100644
--- a/src/luarocks/pack.lua
+++ b/src/luarocks/pack.lua
@@ -80,7 +80,7 @@ end
80-- @param version string or nil: A version number may also be passed. 80-- @param version string or nil: A version number may also be passed.
81-- @return string or (nil, string): The filename of the resulting 81-- @return string or (nil, string): The filename of the resulting
82-- .src.rock file; or nil and an error message. 82-- .src.rock file; or nil and an error message.
83local function pack_binary_rock(name, version) 83function pack_binary_rock(name, version)
84 assert(type(name) == "string") 84 assert(type(name) == "string")
85 assert(type(version) == "string" or not version) 85 assert(type(version) == "string" or not version)
86 86
diff --git a/src/luarocks/path.lua b/src/luarocks/path.lua
index 219164ea..8c795e8b 100644
--- a/src/luarocks/path.lua
+++ b/src/luarocks/path.lua
@@ -297,6 +297,14 @@ function versioned_name(file, prefix, name, version)
297 return dir.path(prefix, name_version.."-"..rest) 297 return dir.path(prefix, name_version.."-"..rest)
298end 298end
299 299
300function use_tree(tree)
301 cfg.root_dir = tree
302 cfg.rocks_dir = rocks_dir(tree)
303 cfg.deploy_bin_dir = deploy_bin_dir(tree)
304 cfg.deploy_lua_dir = deploy_lua_dir(tree)
305 cfg.deploy_lib_dir = deploy_lib_dir(tree)
306end
307
300--- Driver function for "path" command. 308--- Driver function for "path" command.
301-- @return boolean This function always succeeds. 309-- @return boolean This function always succeeds.
302function run(...) 310function run(...)