+ fields = append(fields, inode.RecfileFields()...)
+ return recfileWrite(fdDep, fields...)
+}
+
+func depsWrite(fdDep *os.File, tgts []string) error {
+ if fdDep == nil {
+ tracef(CDebug, "no opened fdDep: %s", tgts)
+ return nil
+ }
+ for _, tgt := range tgts {
+ tgtAbs, err := filepath.Abs(tgt)
+ if err != nil {
+ panic(err)
+ }
+ cwd := Cwd
+ if DepCwd != "" && Cwd != DepCwd {
+ cwd = DepCwd
+ }
+ tgtDir := path.Join(cwd, DirPrefix)
+ tgtRel, err := filepath.Rel(tgtDir, tgtAbs)
+ if err != nil {
+ panic(err)
+ }
+ if _, errStat := os.Stat(tgt); errStat == nil {
+ err = depWrite(fdDep, tgtDir, tgtRel)
+ } else {
+ tracef(CDebug, "ifchange: %s <- %s (non-existing)", fdDep.Name(), tgtRel)
+ fields := []recfile.Field{
+ {Name: "Type", Value: DepTypeIfchange},
+ {Name: "Target", Value: tgtRel},
+ }
+ inodeDummy := Inode{}
+ fields = append(fields, inodeDummy.RecfileFields()...)
+ err = recfileWrite(fdDep, fields...)
+ }