aboutsummaryrefslogtreecommitdiffstats
path: root/docs/redo.1.ronn
blob: 11385076bb5c9f6930b05b354bdcb5748e46de00 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
redo(1) -- an elegant and minimal build tool
============================================

## SYNOPSIS

`redo` [<options>...] [<targets>...]

## DESCRIPTION

`redo` is a powerful yet minimalistic tool for rebuilding files and their
dependencies from source, based on rules specified in .do scripts.  These
scripts have the unique property of being language independent - they only
require a valid shebang-like line.

`redo` is inherently recursive, it works by executing .do scripts which call
redo-ifchange(1) or other redo subcommands which in turn again execute .do
scripts.  This enables `redo` to be clean, modular and extremely fast.

`redo` is also atomic, at no point in the build process exists a state in which
a truncated file is left in place.  Any changes to .do files immediately result
in depending targets getting flagged out-of-date.  This means the user doesn't
have to care about the state his build is in anymore, it's all handled by `redo`

## FILES

The `redo` command expects to find a suitable .do script for the specified
<targets>.  If none is given, 'all' is assumed instead.

Suitable .do script pathnames are determined using the following pattern in
descending order:

  * target filename + '.do'
  * default.ext.do
  * repeat for ../, except if we are already in REDO_ROOT

Where '.ext' is everything following the last dot (.) that could be found in the
target filename.  `redo` will return an nonzero exit code should no suitable .do
script exist.

## ARGUMENTS

If a suitable .do script was found then it will be executed with the following
arguments:

  * $1 - The filename of the target file.
  * $2 - The target filename minus extension
  * $3 - A temporary file that will be renamed to the target filename if the .do
    script returns an nonzero exit code.

For `redo` to function correctly the target that is being built by the .do
script must be saved as $3.

## SHEBANG

(not documented yet)

## OPTIONS

  * `-j`[<maxjobs>], `--jobs`[=<maxjobs>]:
    Execute no more than <maxjobs> .do scripts at any point in parallel.  If
    this option was given without an argument, then `redo` will not limit the
    number of jobs.  By default this equals the number of threads of the target
    machine or 1 if this couldn't be determined.

## EXAMPLES

(none yet)

## ENVIRONMENT

  * `REDO_PARENT_TARGET`:
    The target that shall be build by the .do script.

  * `REDO_ROOT`:
    The canonicalized absolute pathname corresponding to the 'root' directory
    of `redo`, which contains the _.redo/_ directory.

## SEE ALSO

redo-ifchange(1), redo-ifcreate(1), redo-always(1)

## REDO

Part of the redo(1) suite.