diff options
Diffstat (limited to 'luarocks/src/luarocks/build.lua')
-rw-r--r-- | luarocks/src/luarocks/build.lua | 55 |
1 files changed, 36 insertions, 19 deletions
diff --git a/luarocks/src/luarocks/build.lua b/luarocks/src/luarocks/build.lua index 01bfa9d..68f2026 100644 --- a/luarocks/src/luarocks/build.lua +++ b/luarocks/src/luarocks/build.lua @@ -37,6 +37,8 @@ or the name of a rock to be fetched from a repository. rockspec. Allows to specify a different branch to fetch. Particularly for SCM rocks. +--only-deps Installs only the dependencies of the rock. + ]]..util.deps_mode_help() --- Install files to a given location. @@ -130,17 +132,17 @@ function build.apply_patches(rockspec) end local function install_default_docs(name, version) - local patterns = { "readme", "license", "copying" } + local patterns = { "readme", "license", "copying", ".*%.md" } local dest = dir.path(path.install_dir(name, version), "doc") local has_dir = false - for name in fs.dir() do + for file in fs.dir() do for _, pattern in ipairs(patterns) do - if name:lower():match("^"..pattern) then + if file:lower():match("^"..pattern) then if not has_dir then fs.make_dir(dest) has_dir = true end - fs.copy(name, dest) + fs.copy(file, dest) break end end @@ -157,9 +159,10 @@ end -- @param deps_mode string: Dependency mode: "one" for the current default tree, -- "all" for all trees, "order" for all trees with priority >= the current default, -- "none" for no trees. +-- @param build_only_deps boolean: true to build the listed dependencies only. -- @return (string, string) or (nil, string, [string]): Name and version of -- installed rock if succeeded or nil and an error message followed by an error code. -function build.build_rockspec(rockspec_file, need_to_fetch, minimal_mode, deps_mode) +function build.build_rockspec(rockspec_file, need_to_fetch, minimal_mode, deps_mode, build_only_deps) assert(type(rockspec_file) == "string") assert(type(need_to_fetch) == "boolean") @@ -181,12 +184,19 @@ function build.build_rockspec(rockspec_file, need_to_fetch, minimal_mode, deps_m end end - local ok, err, errcode = deps.check_external_deps(rockspec, "build") + local name, version = rockspec.name, rockspec.version + if build_only_deps then + util.printout("Stopping after installing dependencies for " ..name.." "..version) + util.printout() + return name, version + end + + local ok + ok, err, errcode = deps.check_external_deps(rockspec, "build") if err then return nil, err, errcode end - local name, version = rockspec.name, rockspec.version if repos.is_installed(name, version) then repos.delete_version(name, version) end @@ -340,37 +350,41 @@ end -- @param deps_mode: string: Which trees to check dependencies for: -- "one" for the current default tree, "all" for all trees, -- "order" for all trees with priority >= the current default, "none" for no trees. +-- @param build_only_deps boolean: true to build the listed dependencies only. -- @return boolean or (nil, string, [string]): True if build was successful, -- or false and an error message and an optional error code. -function build.build_rock(rock_file, need_to_fetch, deps_mode) +function build.build_rock(rock_file, need_to_fetch, deps_mode, build_only_deps) assert(type(rock_file) == "string") assert(type(need_to_fetch) == "boolean") - - local unpack_dir, err, errcode = fetch.fetch_and_unpack_rock(rock_file) + + local ok, err, errcode + local unpack_dir + unpack_dir, err, errcode = fetch.fetch_and_unpack_rock(rock_file) if not unpack_dir then return nil, err, errcode end local rockspec_file = path.rockspec_name_from_rock(rock_file) - local ok, err = fs.change_dir(unpack_dir) + ok, err = fs.change_dir(unpack_dir) if not ok then return nil, err end - local ok, err, errcode = build.build_rockspec(rockspec_file, need_to_fetch, false, deps_mode) + ok, err, errcode = build.build_rockspec(rockspec_file, need_to_fetch, false, deps_mode, build_only_deps) fs.pop_dir() return ok, err, errcode end -local function do_build(name, version, deps_mode) +local function do_build(name, version, deps_mode, build_only_deps) if name:match("%.rockspec$") then - return build.build_rockspec(name, true, false, deps_mode) + return build.build_rockspec(name, true, false, deps_mode, build_only_deps) elseif name:match("%.src%.rock$") then - return build.build_rock(name, false, deps_mode) + return build.build_rock(name, false, deps_mode, build_only_deps) elseif name:match("%.all%.rock$") then local install = require("luarocks.install") - return install.install_binary_rock(name, deps_mode) + local install_fun = build_only_deps and install.install_binary_rock_deps or install.install_binary_rock + return install_fun(name, deps_mode) elseif name:match("%.rock$") then - return build.build_rock(name, true, deps_mode) + return build.build_rock(name, true, deps_mode, build_only_deps) elseif not name:match(dir.separator) then local search = require("luarocks.search") - return search.act_on_src_or_rockspec(build.run, name:lower(), version, deps.deps_mode_to_flag(deps_mode)) + return search.act_on_src_or_rockspec(build.run, name:lower(), version, deps.deps_mode_to_flag(deps_mode), build_only_deps and "--only-deps") end return nil, "Don't know what to do with "..name end @@ -395,9 +409,12 @@ function build.run(...) else local ok, err = fs.check_command_permissions(flags) if not ok then return nil, err, cfg.errorcodes.PERMISSIONDENIED end - ok, err = do_build(name, version, deps.get_deps_mode(flags)) + ok, err = do_build(name, version, deps.get_deps_mode(flags), flags["only-deps"]) if not ok then return nil, err end local name, version = ok, err + if flags["only-deps"] then + return name, version + end if (not flags["keep"]) and not cfg.keep_other_versions then local ok, err = remove.remove_other_versions(name, version, flags["force"]) if not ok then util.printerr(err) end |