1
0
mirror of https://github.com/natnat-mc/moonbuild synced 2026-07-02 23:27:14 +02:00

fixed depfns

This commit is contained in:
Codinget
2020-11-08 00:44:35 +01:00
parent d31e5a9615
commit b1f57c8929
3 changed files with 35 additions and 23 deletions
+2 -2
View File
@@ -14,8 +14,8 @@ _cdeps = (cc, cflags, path) ->
rawlist = gsub (match raw, ':(.+)'), '\\\n', ' '
[v for v in gmatch rawlist, '%S+']
cdeps = setmetatable {},
__index: (cc) => (cflags, path) -> _cdeps cc, cflags, path
__call: (cflags, path) => _cdeps 'cc', cflags, path
__index: (cc) => (path, cflags) -> _cdeps cc, cflags, path
__call: (path, cflags) => _cdeps 'cc', cflags, path
readfile = (filename) ->
fd, err = open filename, 'rb'
+17 -9
View File
@@ -1,4 +1,4 @@
import filter, foreach, flatten, patsubst from require 'moonbuild._common'
import first, filter, foreach, flatten, patsubst from require 'moonbuild._common'
import runwithcontext from require 'moonbuild.compat.ctx'
globalenv = require 'moonbuild.env.global'
import exists, parent, mkdirs, clearentry, disableentry, attributes from require 'moonbuild._fs'
@@ -64,7 +64,7 @@ class DepGraph
nodes = foreach candidates, (candidate) -> a: {pcall -> DepNode @, candidate, name}
resolved = foreach (filter nodes, (node) -> node.a[1]), (node) -> node.a[2]
sort resolved, nodepriority
resolved[1] or error "Cannot resolve target #{name}"
resolved[1] or error "Cannot resolve target #{name}: #{#candidates} candidates, #{#resolved} resolved"
buildablenodes: =>
[v for k, v in pairs @nodes when v\canbuild! and not v.built]
@@ -87,16 +87,24 @@ class DepNode
ctx = setmetatable {},
__index: (_, k) ->
switch k
when 'infile' then first deps
when 'infiles' then flatten deps
when 'outfile' then first @outs
when 'outfiles' then flatten @outs
when 'name' then @name
else error "No such field in TargetDepsContext: #{k}"
when 'infile'
f = first deps
f and f.name
when 'infiles'
foreach deps, => @name
when 'outfile'
f = first @outs
f and f.name
when 'outfiles'
foreach @outs, => @name
when 'name'
@name
else
error "No such field in TargetDepsContext: #{k}"
__newindex: (k) =>
error "Attempt to set field #{k} of TargetDepsContext"
for depfn in *target.depfunctions
deps = flatten deps, foreach depfn, (fn) -> resolve runwithcontext fn, @dag.env, ctx
deps = flatten deps, foreach (runwithcontext depfn, @dag.env, ctx), resolve
@ins = foreach deps, (dep) -> dep.name
@after = foreach after, (dep) -> dep.name
@deps = flatten { deps, after }