diff options
Diffstat (limited to 'man/man1/redo-ifchange.1')
-rw-r--r-- | man/man1/redo-ifchange.1 | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/man/man1/redo-ifchange.1 b/man/man1/redo-ifchange.1 new file mode 100644 index 0000000..c787f32 --- /dev/null +++ b/man/man1/redo-ifchange.1 @@ -0,0 +1,159 @@ +.de URL +\\$2 \(laURL: \\$1 \(ra\\$3 +.. +.if \n[.g] .mso www.tmac +.TH REDO-IFCHANGE 1 +.SH NAME +redo-ifchange \- rebuild target files when source files have changed +.SH SYNOPSIS +.B redo-ifchange +.I target +.RI [ target ]... +.SH DESCRIPTION +.IR redo(1) +is a tool for building files and for rebuilding them if any of their dependencies have changed. +.IR redo-ifchange , +when invoked from a dofile, adds dependencies of the current +.IR redo(1) +target on all files given as arguments, (re)builds those files if necessary and rebuilds the current target if the files given as arguments have changed since the last build. +.PP +Internally +.I redo-ifchange +uses +.IR stat(1) +and +.IR md5sum(1) +or +.IR openssl(1) +or +.IR md5(1) +to determine if a file is out of date. If the ctime of a file did not change since the last build, +.I redo-ifchange +considers the file up to date. If the checksum of a file did not change, +.I redo-ifchange +updates the stored ctime and considers the file up to date. Otherwise, +.I redo-ifchange +considers the file out of date. +.PP +When +.I redo(1) +is invoked with the +.B -j +or +.B --jobs +option and an integer argument greater than 1, +.I redo-ifchange(1) +can build multiple targets in parallel. The integer argument specifies the maximum number of targets that +.I redo-ifchange(1) +is allowed to build in parallel. +.PP +.I redo-ifchange(1) +processes started as a result of the same +.I redo(1) +invocation share knowledge of a temporary “canary” path. +If any +.I redo-ifchange(1) +process exits with a status code indicating error or receives a +.B SIGINT +signal (interrupt from keyboard), it creates a file at the “canary” path. When +.I redo-ifchange(1) +notices such a “canary” file, it exits as soon as possible with a status code indicating error. +.SH EXAMPLES +.PP +Consider the following four files +.IR all.do , +.IR b.do , +.IR c +and +.IR d : +.TP +.I all.do +.br +#!/bin/sh +.br +redo-ifchange b +.TP +.I b.do +.br +#!/bin/sh +.br +redo-ifchange c d +.br +date +%s +.TP +.I c +.br +foo +.TP +.I d +.br +bar +.PP +Invoking +.IR redo(1) +in a directory with these files will build a file named +.I b +containing a timestamp. The next time +.IR redo(1) +is invoked, it will only rebuild +.I b +if the contents of +.IR b , +.IR c +or +.IR d +have changed since the last build. This can be verified by invoking +.IR redo(1) , +repeatedly and examining the timestamp in +.IR b , +after each invocation, then changing the contents of +.IR b , +.IR c +or +.IR d +and invoking +.IR redo(1) +again. +.SH HISTORY +.I redo-ifchange +was designed by D. J. Bernstein and implemented by Nils Dagsson Moskopp. +.TP +.URL https://cr.yp.to/redo/atomic.html "Rebuilding target files atomically" " by D. J. Bernstein" +.SH AUTHOR +.I redo-ifchange +and this man page were written by Nils Dagsson Moskopp. +.SH COPYRIGHT +Copyright © 2014-2016 Nils Dagsson Moskopp. +License AGPLv3+: GNU Affero GPL version 3 or later <http://www.gnu.org/licenses/agpl-3.0.html>. +This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. +.SH SEE ALSO +.IR redo(1) , +.IR redo-always(1) , +.IR redo-dot(1) , +.IR redo-ifcreate(1) , +.IR redo-ood(1) , +.IR redo-sources(1) , +.IR redo-stamp(1) , +.IR redo-targets(1) , +.IR signal(7) +.SH BUGS +.I redo-ifchange +erroneously considers target files always out of date if their name contains a tab or a newline character. +.PP +On a computer with a +.IR stat(1) +implementation that does not accept the +.B -c%Y +option, +.I redo-ifchange +considers target files to be always out of date. +.PP +When building in parallel and sending a +.B SIGINT +signal (interrupt from keyboard) to a +.I redo-ifchange(1) +process, other +.I redo-ifchange(1) +processes started from the same +.I redo(1) +invocation might not immediately notice the existence of the “canary“ file and linger for a short time. |