Docs: results of more proofreading.
This commit is contained in:
parent
d9d70c4c44
commit
caa86ac4bd
1 changed files with 48 additions and 9 deletions
|
|
@ -14,7 +14,7 @@ source code](https://github.com/apenwarr/redo) and look in the
|
||||||
|
|
||||||
Let's create some input files we can use. The input to our
|
Let's create some input files we can use. The input to our
|
||||||
preprocessor will have file extension `.in`. The output can be in various
|
preprocessor will have file extension `.in`. The output can be in various
|
||||||
formats
|
formats.
|
||||||
<pre><code src='test.txt.in'></code></pre>
|
<pre><code src='test.txt.in'></code></pre>
|
||||||
<pre><code lang='c' src='include/version.h.in'></code></pre>
|
<pre><code lang='c' src='include/version.h.in'></code></pre>
|
||||||
<pre><code lang='python' src='version.py.in'></code></pre>
|
<pre><code lang='python' src='version.py.in'></code></pre>
|
||||||
|
|
@ -44,7 +44,7 @@ will try using `default.do` instead. Let's write a default.do for our text
|
||||||
preprocessor.
|
preprocessor.
|
||||||
<pre><code lang='sh' src='default.do'></code></pre>
|
<pre><code lang='sh' src='default.do'></code></pre>
|
||||||
|
|
||||||
If `default.do` is asked to build X, and there exists a file named `X.in`, we
|
If `default.do` is asked to build `X`, and there exists a file named `X.in`, we
|
||||||
use `sed` to do our variable substitutions. In that case, `default.do` uses
|
use `sed` to do our variable substitutions. In that case, `default.do` uses
|
||||||
redo-ifchange to depend on `X.in`, `version`, and `date`. If a file named
|
redo-ifchange to depend on `X.in`, `version`, and `date`. If a file named
|
||||||
`X.in` does *not* exist, then we don't know what to do, so we give an error.
|
`X.in` does *not* exist, then we don't know what to do, so we give an error.
|
||||||
|
|
@ -84,6 +84,7 @@ While we're here, let's make an `all.do` so that we don't have to tell redo
|
||||||
exactly which files to rebuild, every single time.
|
exactly which files to rebuild, every single time.
|
||||||
<pre><code lang='sh' src='all.do'></code></pre>
|
<pre><code lang='sh' src='all.do'></code></pre>
|
||||||
|
|
||||||
|
Results:
|
||||||
```shell
|
```shell
|
||||||
$ redo
|
$ redo
|
||||||
redo all
|
redo all
|
||||||
|
|
@ -150,7 +151,7 @@ unnecessary work on every build. To solve that, there's `redo-stamp`.
|
||||||
redo-stamp does the opposite of redo-always: while redo-always makes things
|
redo-stamp does the opposite of redo-always: while redo-always makes things
|
||||||
build *more* often, redo-stamp makes things build *less* often.
|
build *more* often, redo-stamp makes things build *less* often.
|
||||||
Specifically, it lets a .do file provide a "stamp value" for its output; if
|
Specifically, it lets a .do file provide a "stamp value" for its output; if
|
||||||
that stamp value is the same as before, then its target should be considered
|
that stamp value is the same as before, then the target should be considered
|
||||||
unchanged after all.
|
unchanged after all.
|
||||||
|
|
||||||
The most common stamp value is just the content itself. Since in redo, we
|
The most common stamp value is just the content itself. Since in redo, we
|
||||||
|
|
@ -158,7 +159,7 @@ write the content to $3, we can also read it back from $3:
|
||||||
<pre><code lang='sh' src='version.do'></code></pre>
|
<pre><code lang='sh' src='version.do'></code></pre>
|
||||||
<pre><code lang='sh' src='date.do'></code></pre>
|
<pre><code lang='sh' src='date.do'></code></pre>
|
||||||
|
|
||||||
And the final result is what we want: although `version` and `date` are
|
And the final result is what we want. Although `version` and `date` are
|
||||||
generated every time, the targets which depend on them are not:
|
generated every time, the targets which depend on them are not:
|
||||||
```shell
|
```shell
|
||||||
$ redo clean
|
$ redo clean
|
||||||
|
|
@ -186,6 +187,44 @@ redo version
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Temporary overrides
|
||||||
|
|
||||||
|
Sometimes you want to override a file even if it *is* a target (ie. it has
|
||||||
|
previously been built by redo and has a valid .do file associated with it).
|
||||||
|
In our example, maybe you want to hardcode the version number because you're
|
||||||
|
building a release. This is easy: redo notices whenever you overwrite a
|
||||||
|
file from outside redo, and will avoid replacing that file until you
|
||||||
|
subsequently delete it:
|
||||||
|
```shell
|
||||||
|
$ echo "1.0" >version
|
||||||
|
|
||||||
|
$ redo
|
||||||
|
redo all
|
||||||
|
redo (test.txt)
|
||||||
|
redo date
|
||||||
|
redo: version - you modified it; skipping
|
||||||
|
redo test.txt
|
||||||
|
redo version.py
|
||||||
|
redo include/version.h
|
||||||
|
|
||||||
|
$ redo
|
||||||
|
redo all
|
||||||
|
redo (test.txt)
|
||||||
|
redo date
|
||||||
|
redo: version - you modified it; skipping
|
||||||
|
|
||||||
|
$ rm version
|
||||||
|
|
||||||
|
$ redo
|
||||||
|
redo all
|
||||||
|
redo (test.txt)
|
||||||
|
redo date
|
||||||
|
redo version
|
||||||
|
redo test.txt
|
||||||
|
redo version.py
|
||||||
|
redo include/version.h
|
||||||
|
```
|
||||||
|
|
||||||
### default.do, subdirectories, and redo-whichdo
|
### default.do, subdirectories, and redo-whichdo
|
||||||
|
|
||||||
There's one more thing we should mention, which is the interaction of
|
There's one more thing we should mention, which is the interaction of
|
||||||
|
|
@ -225,8 +264,8 @@ a particular target. For a file named X, that formula is as follows:
|
||||||
- ...and so on...
|
- ...and so on...
|
||||||
|
|
||||||
(Note: for targets with an extension, like X.o, redo actually tries even
|
(Note: for targets with an extension, like X.o, redo actually tries even
|
||||||
more .do files, like default.o.do and ../default.o.do. For precise details,
|
more .do files, like `default.o.do` and `../default.o.do`. For precise
|
||||||
read the [redo man page](../../redo).)
|
details, read the [redo man page](../../redo).)
|
||||||
|
|
||||||
You can see which .do files redo considers for a given target by using the
|
You can see which .do files redo considers for a given target by using the
|
||||||
`redo-whichdo` command. If redo-whichdo returns successfully, the last name
|
`redo-whichdo` command. If redo-whichdo returns successfully, the last name
|
||||||
|
|
@ -241,7 +280,7 @@ default.do
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Redo always runs from the .do file's directory
|
### Redo always runs in the .do file's directory
|
||||||
|
|
||||||
To ensure consistency, redo always changes the current directory to
|
To ensure consistency, redo always changes the current directory to
|
||||||
the directory *containing the selected .do file* (**not** the directory
|
the directory *containing the selected .do file* (**not** the directory
|
||||||
|
|
@ -254,7 +293,7 @@ redo include/version.h
|
||||||
redo version
|
redo version
|
||||||
redo date
|
redo date
|
||||||
|
|
||||||
$ cd include && redo version.h
|
$ (cd include && redo version.h)
|
||||||
redo version.h
|
redo version.h
|
||||||
redo ../version
|
redo ../version
|
||||||
redo ../date
|
redo ../date
|
||||||
|
|
@ -266,7 +305,7 @@ files it's building relative to the $PWD at the time you started redo.)
|
||||||
This feature is critical to redo's recursive nature; it's the reason that
|
This feature is critical to redo's recursive nature; it's the reason that
|
||||||
essays like [Recursive Make Considered Harmful](http://aegis.sourceforge.net/auug97.pdf)
|
essays like [Recursive Make Considered Harmful](http://aegis.sourceforge.net/auug97.pdf)
|
||||||
don't apply to redo. Any redo target, anywhere in your source tree, can
|
don't apply to redo. Any redo target, anywhere in your source tree, can
|
||||||
use redo-ifchange to depend on one of your other targets, and the dependency
|
use redo-ifchange to depend on any of your other targets, and the dependency
|
||||||
will work right.
|
will work right.
|
||||||
|
|
||||||
Why does redo change to the directory containing the .do file, instead of
|
Why does redo change to the directory containing the .do file, instead of
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue