My port of redo-c by Christian Neukirchen (from https://github.com/leahneukirchen/redo-c) to D programming language (betterC variant)
d56b2e32 — Oleg Bakharev 8 months ago
Added macros from waitstatus.h
f5df33ee — Oleg Bakharev 8 months ago
Added constants for X86_64
c7e94cea — aquaratixc 8 months ago
Added CC0 license


browse  log 



You can also use your local clone with git send-email.


redo-bc is an implementation of the redo build system (designed by Daniel J. Bernstein) in betterC (variant without GC of D Programming Language). This work based on work redo-c by by Christian Neukirchen (from https://github.com/leahneukirchen/redo-c) and uses the original documentation from this project, almost unchanged.


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

#Notes about the redo-bc 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.

  • default.do 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.

  • Currently, is very experimental software and needed to be revised by you.


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

I, aquaratixc, continuing the work of this kind person, also waive copyright and related rights.