]> Cypherpunks.ru repositories - goredo.git/blobdiff - dep.go
Output-less target as a dependency
[goredo.git] / dep.go
diff --git a/dep.go b/dep.go
index 0c5b6348740393340435a7c81a3d9c85b5274324..d7c874a95ea4d845592611a8e85377e0722b6af3 100644 (file)
--- a/dep.go
+++ b/dep.go
@@ -123,30 +123,34 @@ func writeDep(fdDep *os.File, cwd, tgt string) error {
        )
 }
 
-func writeDeps(fdDep *os.File, tgts []string) error {
+func writeDeps(fdDep *os.File, tgts []string) (err error) {
        if fdDep == nil {
                trace(CDebug, "no opened fdDep: %s", tgts)
                return nil
        }
        for _, tgt := range tgts {
-               if _, err := os.Stat(tgt); err == nil {
-                       tgtAbs, err := filepath.Abs(tgt)
-                       if err != nil {
-                               panic(err)
-                       }
-                       tgtDir := path.Join(Cwd, DirPrefix)
-                       tgtRel, err := filepath.Rel(tgtDir, tgtAbs)
-                       if err != nil {
-                               panic(err)
-                       }
-                       if err = writeDep(fdDep, tgtDir, tgtRel); err != nil {
-                               return err
-                       }
+               tgtAbs, err := filepath.Abs(tgt)
+               if err != nil {
+                       panic(err)
+               }
+               tgtDir := path.Join(Cwd, DirPrefix)
+               tgtRel, err := filepath.Rel(tgtDir, tgtAbs)
+               if err != nil {
+                       panic(err)
+               }
+               if _, errStat := os.Stat(tgt); errStat == nil {
+                       err = writeDep(fdDep, tgtDir, tgtRel)
                } else {
-                       trace(CDebug, "skipping dep record, can not stat: %s", tgt)
+                       trace(CDebug, "ifchange: %s <- %s (unexisting)", fdDep.Name(), tgtRel)
+                       err = recfileWrite(
+                               fdDep,
+                               recfile.Field{Name: "Type", Value: DepTypeIfchange},
+                               recfile.Field{Name: "Target", Value: tgtRel},
+                               recfile.Field{Name: "Ctime", Value: "0.0"},
+                       )
                }
        }
-       return nil
+       return
 }
 
 type DepInfo struct {