[*] Push current project info during dep resolve

[*] Better debugging auFatals
This commit is contained in:
Reece Wilson 2022-01-19 11:48:44 +00:00
parent 330b52364f
commit 7206d2f4a3
5 changed files with 104 additions and 59 deletions

View File

@ -104,7 +104,7 @@ local function auBlockProjectKeyDefines(processor, value)
__pushFilter(value, "value", defines)
end
local function auBlockProjectKeyIncludes(processor, value, tasks, inc)
local function auBlockProjectKeyIncludes(processor, value, map, tasks, inc)
_includeDirectoryEx(processor:getMeta().path .. "/" .. value, not inc)
end
@ -136,14 +136,14 @@ local function auBlockProjectKeySourcePaths(processor, value)
}
end
local function auBlockProjectKeyEval(processor, value, tasksMask)
local function auBlockProjectKeyEval(processor, value, map, tasksMask)
if (type(object) == "string") then
auEval(object)
return
end
__pushFilter(value, nil, function(value)
__pRunTasks(processor, value, auProjectBlockHandlers, kGenericTasks, true)
__pRunTasks(processor, value, map, tasksMask, true)
end)
end
@ -257,10 +257,10 @@ local function handleActionCommon(action, cb, ...)
--_G["info"] = nil
end
local function auBlockProjectKeyBuildAction(processor, value, mask)
local function auBlockProjectKeyBuildAction(processor, value, map, tasks)
__pushFilter(value, nil, function(value)
handleActionCommon(value, function(thenblock)
auBlockProjectKeyEval(processor, thenblock, auProjectBlockHandlers)
auBlockProjectKeyEval(processor, thenblock, map, tasks)
end)
end, processor)
end
@ -270,23 +270,39 @@ local function handleDepends(processor, dep, soft)
dep = processor:translateDep(dep)
local macro = ("_auhas_" .. dep):upper():gsub("%-", "_");
if (auIsProjectIntialized(dep)) then
if (auGetProjectProcessor(dep)) then
defines(macro .. "=1")
auLinkAndRefProject(dep, soft)
else
defines(macro .. "=0")
--defines(macro .. "=0")
if (not soft) then
fatal("missing project: ", dep)
auFatal("missing project: ", dep)
end
end
end
local function auBlockProjectKeyDepends(processor, value)
__pushFilter(value, "value", function(obj)
auForEach(obj, function(re)
handleDepends(processor, re, false)
end)
end, processor)
handleDepends(processor, obj, false)
end, processor, true)
end
local function auBlockProjectKeySoftDepends(processor, value)
__pushFilter(value, "value", function(obj)
handleDepends(processor, obj, true)
end, processor, true)
end
local function auBlockProjectRefKeyDepends(processor, value, taskMap, taskArray, inc, resolve)
__pushFilter(value, "value", function(obj)
resolve(processor:translateDep(obj), false)
end, processor, true)
end
local function auBlockProjectRefKeySoftDepends(processor, value, taskMap, taskArray, inc, resolve)
__pushFilter(value, "value", function(obj)
resolve(processor:translateDep(obj), true)
end, processor, true)
end
local function auBlockProjectKeyLua(processor, script)
@ -338,30 +354,40 @@ auProjectBlockHandlers =
features = auBlockKeyFeature
}
auProjectBlockHandlers["soft-depends"] = auBlockProjectKeySoftDepends
local auProjectRefHandlers =
{
linkDepends = auHeaderProjectKeyLinkDepends,
eval = auBlockProjectKeyEval
}
auProjectRefHandlers["soft-depends"] = auBlockProjectRefKeySoftDepends
auProjectRefHandlers["depends"] = auBlockProjectRefKeyDepends
kGenericTasks = {"sourcePaths", "includes","include", "sources",
"impDefines", "implDefines", "implementationDefines",
"impInclude", "implInclude", "impIncludes", "implIncludes", "clangIgnore",
"msvcIgnore", "excludes", "depends", "require",
"eval", "lua", "events", "actions", "staticImpDefines", "features",
"links"
"links", "soft-depends"
}
local kReferenceTasks = {"eval", "includes", "include"} --, "features"}
__pRunTasks = function(processor, object, map, tasks, inc)
__pRunTasks = function(processor, object, map, tasks, inc, resolve)
auForEachKV(tasks, function(na, key)
local value = object[key]
if (not value) then
return
end
map[key](processor, value, tasks, inc)
map[key](processor, value, map, tasks, inc, resolve)
end)
end
local function __pRunLinkTasks(processor, object)
__pRunTasks(processor, object, auProjectBlockHandlers, { "links", "depends"})
local function __pRunLinkTasks(processor, object, resolve)
__pRunTasks(processor, object, auProjectRefHandlers, { "links", "depends", "soft-depends", "eval"}, false, resolve)
end
local function __pRunIncludeTasks(processor, object, isIncludeLocalProject)

View File

@ -113,7 +113,7 @@ function JsonProcessor(info)
local processJsonBlockForLinks = function(object, this)
auForEach(object.links, links)
auForEach(object.depends, handleDependsShort, this, false)
auForEach(object["soft-depends"], handleDependsShort, this, true)
--auForEach(object["soft-depends"], handleDependsShort, this, true)
end
function handleEvalForLinks(object, this)
@ -239,18 +239,9 @@ function JsonProcessor(info)
defines(("_auhas_" .. this.result.name):upper():gsub("%-", "_") .. "=1")
end
local handleDependsPreemptive = function(dep, this, soft, resolve)
dep = translateDep(this, dep)
if (not auIsProjectIntialized(dep)) then
resolve(dep, soft)
end
end
local pokeDeps = function(this, resolve)
local result = this.result
auForEach(result.depends, handleDependsPreemptive, this, false, resolve)
auForEach(result["soft-depends"], handleDependsPreemptive, this, true, resolve)
auRequire("Core/JSON/JSON").projectHandlers.runProjectLink(this, result, resolve)
end
local handleParse = function(this)
@ -383,7 +374,7 @@ function JsonProcessor(info)
local processJsonBlock = function(object)
auRequire("Core/JSON/JSON").projectHandlers.runProjectBlock(a, object)
auForEach(object["soft-depends"], handleDepends, a, true)
--auForEach(object["soft-depends"], handleDepends, a, true)
auForEach(object.unpack, runCopies, info.path, info.name)
addM4Defines(object.m4Defines)
end

View File

@ -149,6 +149,23 @@ local function addScript(ina)
_auProjects[info.name] = project
end
local function pushProjectState(name, path, callback)
local cwd = os.getcwd()
local old = _auCurrentProject
_auCurrentProject = name
os.chdir(path)
callback()
os.chdir(cwd)
_auCurrentProject = old
end
local function pushProject(project, callback)
pushProjectState(project.info.name, project.info.path, callback)
end
-- private
local function processInit(project)
if (project.isInitialized) then
@ -157,7 +174,9 @@ local function processInit(project)
project.isInitialized = true
if (project.processor.init) then
project.processor:init()
pushProject(project, function()
project.processor:init()
end)
end
end
@ -169,24 +188,30 @@ local function initializeDependencyTree(proj, resolveProject)
if (not proj.resolvedDeps) then
if (proj.processor.resolveDependencies) then
proj.processor:resolveDependencies(function(name, soft)
pushProject(proj, function()
_auFatalMsg = {}
_auFatalMsg["starting resolve dependencies"] = proj.info.name
table.insert(proj.deps, name)
proj.processor:resolveDependencies(function(name, soft)
if (_auResolvedDep[name]) then
return
end
table.insert(proj.deps, name)
local depProj = _auProjects[name]
if (not depProj) then
if (not soft) then
auFatal("missing dependency: ", name)
else
return false
if (_auResolvedDep[name]) then
return
end
end
initializeDependencyTree(depProj, true)
local depProj = _auProjects[name]
if (not depProj) then
if (not soft) then
auFatal("missing dependency: ", name)
else
return false
end
end
initializeDependencyTree(depProj, true)
end)
end)
end
proj.resolvedDeps = true
@ -216,10 +241,17 @@ local function processNS(namespace)
return a:upper() < b:upper()
end)
_auFatalMsg = {}
_auFatalMsg["starting dependency tree"] = namespace
auForEach(projsIdxs, function(idx)
initializeDependencyTree(projs[idx], true)
end)
_auFatalMsg = {}
_auFatalMsg["starting projects"] = namespace
auForEach(projsIdxs, function(idx)
processProject(projs[idx].info.name)
end)
@ -253,6 +285,7 @@ local function attemptNS(ns)
end
processProject = function(name, required, noNs)
local a = _auProjects[name]
if (not a) then
if (required) then
@ -275,18 +308,11 @@ processProject = function(name, required, noNs)
local ns = a.info.namespace
local loadOthers = attemptNS(ns)
-- {
local cwd = os.getcwd()
local old = _auCurrentProject
_auCurrentProject = name
os.chdir(a.info.path)
pushProject(a, function()
_auFatalMsg = {}
_auFatalMsg["processing project"] = a.info.name
a.processor:process()
os.chdir(cwd)
_auCurrentProject = old
-- }
end)
-- cont
if (loadOthers) then

View File

@ -91,7 +91,7 @@ function auFilter(filter)
else
table.insert(tbl, filter)
end
local filterArray = {}
auForEach(tbl, function(val)
filterArray = auMergeArray(filterArray, val)

View File

@ -1,8 +1,10 @@
function auFatal(...)
print("[!!!] Fatal Crash")
print("Error Message:")
print(...)
print("Origin:")
if (_auFatalMsg) then
print("Previous step: ", json.encode(_auFatalMsg))
end
print("Error Message: ", ...)
--print("Origin:")
print(debug.traceback())
os.exit(1)
end