Skip to content

leahneukirchen/redo-c

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

redo-c

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

Documentation

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.

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

Copying

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

http://creativecommons.org/publicdomain/zero/1.0/