Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

This is why I like redo; it handles all of the dependency stuff for you, but your build scripts are written in pure sh


I have been meaning to spend some time with redo!

https://cr.yp.to/redo.html


always been curious about redo. which variant do you use, and what do you use it for?


I use apenwar's because I installed it a long time ago and haven't needed anything more; it does look like it may be abandoned though.

I use it for anything where I need job scheduling around creating output files; even my DVD ripping is managed with redo calling into ffmpeg.


What's your solution for mutliple-output processes like yacc/bison (which creates both an .h and a .c file?)


I don't run into those too often.

When I do, there are two cases:

1) All dependencies are on only one output file (e.g. link stages that generate .map files, compile phases that generate separate .o and debug files). I just treat these as normal

2) I may need to depend on each of the files (I don't use yacc/bison, but it sounds like this would qualify). I select one file to be the main output and have the .do file for that ensure that the secondary outputs go to a mangled name; I then have the .do files for the secondary outputs rename the mangled file.

quick example for generating foo.c/foo.h

foo.c.do:

    generate-file --cout "$3" --hout "$2-mangled.h"
foo.h.do:

    redo-ifchange "$2.c"
    mv "$2-mangled.h" "$3"


If the h output changes but the c doesn’t, this rule will miss it.

I once solved it by making a tar file or all the outputs and extracting it to both .c and .h but that’s incredibly kludgy, still looking for a better solution


As long as the timestamp changes on the C file, that's fine, right? At least with the version of redo I use timestamps are used by default, not file contents.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: