From f8179800d0eccaef960442a7e65b1e305f3a96d5 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Mon, 19 Oct 2015 18:46:21 -0200 Subject: Support "luajit" as a provided dependency in rockspec format 3.0 --- src/luarocks/cfg.lua | 6 ++++-- src/luarocks/deps.lua | 22 +++++++++++++--------- src/luarocks/fetch.lua | 5 +++++ 3 files changed, 22 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/luarocks/cfg.lua b/src/luarocks/cfg.lua index 3b7f9c37..a4f60f55 100644 --- a/src/luarocks/cfg.lua +++ b/src/luarocks/cfg.lua @@ -371,7 +371,8 @@ local defaults = { include = "include" }, - rocks_provided = {} + rocks_provided = {}, + rocks_provided_3_0 = {}, } if cfg.platforms.windows then @@ -575,8 +576,8 @@ end if package.loaded.jit then -- LuaJIT local lj_version = package.loaded.jit.version:match("LuaJIT (.*)"):gsub("%-","") - --defaults.rocks_provided["luajit"] = lj_version.."-1" defaults.rocks_provided["luabitop"] = lj_version.."-1" + defaults.rocks_provided_3_0["luajit"] = lj_version.."-1" end -- Use defaults: @@ -593,6 +594,7 @@ for _, entry in ipairs({"variables", "rocks_provided"}) do end end end +setmetatable(defaults.rocks_provided_3_0, { __index = cfg.rocks_provided }) -- For values not set in the config file, use values from the 'defaults' table. local cfg_mt = { diff --git a/src/luarocks/deps.lua b/src/luarocks/deps.lua index f6c86d1c..3f7eb4d2 100644 --- a/src/luarocks/deps.lua +++ b/src/luarocks/deps.lua @@ -327,16 +327,20 @@ end -- @param dep table: A dependency parsed in table format. -- @param blacklist table: Versions that can't be accepted. Table where keys -- are program versions and values are 'true'. +-- @param provided table: A table of auto-dependencies provided +-- by this Lua implementation for the given dependency. -- @return table or nil: A table containing fields 'name' and 'version' -- representing an installed rock which matches the given dependency, -- or nil if it could not be matched. -local function match_dep(dep, blacklist, deps_mode) +local function match_dep(dep, blacklist, deps_mode, rocks_provided) assert(type(dep) == "table") - - local versions = cfg.rocks_provided[dep.name] - if cfg.rocks_provided[dep.name] then + assert(type(rocks_provided) == "table") + + local versions + local provided = rocks_provided[dep.name] + if provided then -- provided rocks have higher priority than manifest's rocks - versions = { cfg.rocks_provided[dep.name] } + versions = { provided } else versions = manif_core.get_versions(dep.name, deps_mode) end @@ -388,9 +392,9 @@ function deps.match_deps(rockspec, blacklist, deps_mode) local matched, missing, no_upgrade = {}, {}, {} for _, dep in ipairs(rockspec.dependencies) do - local found = match_dep(dep, blacklist and blacklist[dep.name] or nil, deps_mode) + local found = match_dep(dep, blacklist and blacklist[dep.name] or nil, deps_mode, rockspec.rocks_provided) if found then - if not cfg.rocks_provided[dep.name] then + if not rockspec.rocks_provided[dep.name] then matched[dep] = found end else @@ -488,7 +492,7 @@ function deps.fulfill_dependencies(rockspec, deps_mode) for _, dep in pairs(missing) do -- Double-check in case dependency was filled during recursion. - if not match_dep(dep, nil, deps_mode) then + if not match_dep(dep, nil, deps_mode, rockspec.rocks_provided) then local rock = search.find_suitable_rock(dep) if not rock then return nil, "Could not satisfy dependency: "..deps.show_dep(dep) @@ -708,7 +712,7 @@ function deps.scan_deps(results, missing, manifest, name, version, deps_mode) end dependencies_name[version] = rockspec.dependencies else - rockspec = { dependencies = deplist } + rockspec = { dependencies = deplist, rocks_provided = {} } end local matched, failures = deps.match_deps(rockspec, nil, deps_mode) results[name] = results diff --git a/src/luarocks/fetch.lua b/src/luarocks/fetch.lua index 5ae05826..e1cad11b 100644 --- a/src/luarocks/fetch.lua +++ b/src/luarocks/fetch.lua @@ -252,6 +252,11 @@ function fetch.load_local_rockspec(filename, quick) and (fetch.is_basic_protocol(protocol) and "." or base) or ".") ) or base + + rockspec.rocks_provided = (deps.format_is_at_least(rockspec, "3.0") + and cfg.rocks_provided_3_0 + or cfg.rocks_provided) + if rockspec.dependencies then for i = 1, #rockspec.dependencies do local parsed, err = deps.parse_dep(rockspec.dependencies[i]) -- cgit v1.2.3-55-g6feb