An implementation of redo in C
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AndreyDobrovolskyOdessa d2f9517377 URL correction 1 year ago URL correction 1 year ago Add 7 years ago fix from clean build 1 year ago redo-hash, just for debugging 7 years ago
redo-sources Specify starting point for 'find' 1 year ago
redo-targets Specify starting point for 'find' 1 year ago
redo.c Avoid duplicate flags initialization in main() 1 year ago Build redo with redo... 7 years ago


redo-c is an implementation of the redo build system (designed by Daniel J. Bernstein) in portable C with zero external dependencies.


Please refer to the documentation for redo in Python, or the tutorial by Jonathan de Boyne Pollard for usage instructions.

Notes about the redo-c implementation of redo

  • Without arguments, redo behaves like redo all.

  • .do files always are executed in their directory, arguments are relative paths.

  • Standard output of .do files is only captured as build product if redo -s is used, or the environment variable REDO_STDOUT is set to 1. Else, standard output is simply displayed.

  • Non-executable .do files are run with /bin/sh -e. redo -x can be utilized to use /bin/sh -e -x instead, for debugging .do files or verbose builds.

  • Executable .do files are simply executed, and should have a shebang line.

  • When a target makes no output, no target file is created. The target is considered always out of date.

  • files are checked in all parent directories up to /.

  • Parallel builds can be started with redo -j N (or JOBS=N redo), this uses a job broker similar to but not compatible with GNU make.

  • To detect whether a file has changed, we first compare ctime and in case it differs, a SHA2 hash of the contents.

  • Dependencies are tracked in .dep.BASENAME files all over the tree. This is an implementation detail.

  • Builds can be started from every directory and should yield same results.

  • redo -f will consider all targets outdated and force a rebuild.

  • redo -k will keep going if a target failed to build.


To the extent possible under law, Leah Neukirchen has waived all copyright and related or neighboring rights to this work.