if opts.recursive then
dep, re = e2tool.dlist_recursive(resultname)
else
- dep, re = e2tool.dlist(resultname)
+ dep, re = result.results[resultname]:depends_list():totable_sorted()
end
if not dep then
error(re)
console.infof("digraph \"%s\" {\n", project.name())
for _, r in pairs(results) do
local res = result.results[r]
- local deps, re = e2tool.dlist(r)
+ local deps, re = res:depends_list():totable_sorted()
if not deps then
error(re)
end
local e, rc, re
local dependslist, info, dep, destdir
- dependslist, re = res:dlist()
- if not dependslist then
- e = err.new("installing build time dependencies")
- return false, e:cat(re)
- end
+ dependslist = res:depends_list()
info = e2tool.info()
- for _,dependsname in ipairs(dependslist) do
+ for dependsname in dependslist:iter_sorted() do
dep = result.results[dependsname]
destdir = e2lib.join(res:buildconfig().T, "dep", dep:get_name())
local projenv = require("projenv")
local result = require("result")
local scm = require("scm")
+local sl = require("sl")
local source = require("source")
local strict = require("strict")
local tools = require("tools")
return strict.lock(info)
end
---- Returns a sorted vector with all dependencies for the given result
--- in the project. The result itself is excluded.
--- @param resultname Result name.
--- @return Sorted vector of result dependencies, or false on error.
--- @return Error object on failure.
-function e2tool.dlist(resultname)
- assertIsStringN(resultname)
- return result.results[resultname]:dlist()
-end
-
--- Returns a sorted vector with all depdencies of result, and all
-- the indirect dependencies. If result is a vector, calculates dependencies
-- for all results and includes those from result. If result is a result name,
-- @return Vector of dependencies of the result, may or may not include result.
-- False on failure.
-- @return Error object on failure
--- @see e2tool.dlist
function e2tool.dlist_recursive(resultv)
assert(type(resultv) == "string" or type(resultv) == "table")
local path = {}
local col = {}
local t = {}
+ local depends
if type(resultv) == "string" then
- resultv, re = result.results[resultv]:dlist()
- if not resultv then
- return false, re
- end
+ assertIsTable(result.results[resultv])
+ depends = result.results[resultv]:depends_list()
+ else
+ depends = sl.sl:new(true)
+ depends:insert_table(resultv)
end
local function visit(resultname)
seen[resultname] = #path
col[resultname] = true
- deps, re = result.results[resultname]:dlist()
- if not deps then
- return false, re
- end
+ deps = result.results[resultname]:depends_list()
- for _, d in ipairs(deps) do
+ for d in deps:iter_sorted() do
rc, re = visit(d)
if not rc then
return false, re
return true
end
- for _,resultname in ipairs(resultv) do
+ for resultname in depends:iter_sorted() do
rc, re = visit(resultname)
if not rc then
return false, re
self._type, self._name))
end
---- Return list (table) of depdencencies
-function result.basic_result:dlist()
- error(err.new("called dlist() of result base class, type %s name %s",
- self._type, self._name))
-end
-
---- Return a string list of dependent results.
+--- Return a string list of depdenant results.
+-- @return String list of dependency names.
function result.basic_result:depends_list()
error(err.new("called depends_list() of result base class, type %s name %s",
self._type, self._name))
return true
end
-function result.result_class:dlist()
- return self:depends_list():totable_sorted()
-end
-
function result.result_class:depends_list()
- return self._depends_list
+ return self._depends_list:copy()
end
function result.result_class:my_sources_list()
return self._default_result
end
-function collect_project_class:dlist()
- local l
+function collect_project_class:depends_list()
+ local deps = self._stdresult:depends_list()
+ deps:insert(self:default_result())
- l = sl.sl:new(true) -- merge
- l:insert_table(self._stdresult:dlist())
- l:insert(self:default_result())
-
- return l:totable_sorted()
+ return deps
end
function collect_project_class:buildid()