* Target is the single file.
Target's result probably won't create file at all.
* Build rules for the target "target" are placed in target.do file.
* By default .do file is run as "/bin/sh -e" script.
If [cmd/redo] is run with an -x argument,
then "/bin/sh -ex" is used instead.
* Executable .do file is run as is, by direct execution.
* Targets can be placed in other directories, probably with relatives paths.
* Following .do files are searched for "dir/base.a.b" target:
dir/base.a.b.do
dir/default.a.b.do
dir/default.b.do
dir/default.do
default.a.b.do
default.b.do
default.do
and for "../a/b/xtarget.y" target:
./../a/b/xtarget.y.do
./../a/b/default.y.do
./../a/b/default.do
./../a/default.y.do
./../a/default.do
./../default.y.do
./../default.do
* .do file search goes up to / by default, but can be limited with
either $REDO_TOP_DIR environment variable, or by having .redo/top file
in it.
* .do runs in the same directory where it is placed.
* .do runs with the three arguments:
* $1 -- name of the target.
* $2 -- base name of the target.
Equals to $1 if it is not default.* file.
Otherwise it lacks the extension.
a.b.c.do -> $2=a.b.c
default.do -> $2=a.b.c
default.c.do -> $2=a.b
default.b.c.do -> $2=a
* $3 -- path to the temporary file, that will be renamed to the
target itself. It is relative to the file in the target directory.
* .do's stdout is captured and written to the $3 file. You have to
produce either stdout output, or use $3 directly, but not both.
* If neither stdout output nor $3 file were explicitly created, then no
output file is created at all. Target does not produce anything, it is
"non-existent".
* stderr is not captured at all and can be seen by default.
* Non-existent targets are considered always out-of-date.
* Dependency information is recorded by [cmd/redo-ifchange] command
invocation. It takes list of dependencies (targets), on whose the
currently build target is dependant. Current .do file is implicitly
added as a dependency.
* If no redo-ifchange's dependency target exists, then it is build
(according to build rules in corresponding .do). If dependency has not
been changed, then it is not rebuilt.
* Non-existent files dependencies are created with [cmd/redo-ifcreate]
command. If specified dependency target file appears, then current
target will be rebuilt. Intermediate higher priority .do files
dependency is implicitly recorded. For example, if your "foo" target
currently uses default.do script, then foo.do is automatically
recorded as a non-existent dependency, forcing "foo" to be rebuilt if
foo.do appears.