Eli User Interface Reference Manual
Eli consults file `Odinfile'
in the current directory for information about the task at hand.
`Odinfile' is used to define one or more targets.
Most targets define some product that can be requested,
using the notation target == odin-expression.
Here are examples of the three common kinds of target:
mkhdr == sets.specs :exe
mkhdr is a file target.
This line specifies that mkhdr should always be equal to the derived
file object sets.specs :exe .
If the command eli mkhdr
is given in a directory with a file `Odinfile' containing this line,
it will result in a non-interactive Eli session guaranteeing that
file mkhdr in this directory is up to date.
(The same effect can be obtained in an interactive session by
responding to the -> prompt with
mkhdr .)
%results == input +cmd=(mkhdr) :stdout
%results is a virtual target.
A virtual target is simply a name for an odin-expression, and can be used
wherever and odin-expression is required.
If the command eli '%results>'
is given in a directory with a file `Odinfile' containing this line,
it will result in a non-interactive Eli session guaranteeing that
the derived object input +cmd=(mkhdr) :stdout is up to date,
and writing the content to the standard output.
(The same effect can be obtained in an interactive session by
responding to the -> prompt with %results> .)
%test ! == . +cmd=diff (%results) (result) :run
%test is an executable target.
An executable target is a target that is executable.
If the command eli %test
is given in a directory with a file `Odinfile' containing this line,
it will result in a non-interactive Eli session guaranteeing that
the derived object input +cmd=(mkhdr) :stdout (named
%results ) is up to date,
and executing the diff command with this object and the file
`result' from the current directory as arguments.
Execution will take place in the current directory.
(The same effect can be obtained in an interactive session by
responding to the -> prompt with %test .)
The value of a target can also be specified directly as lines of text
(a here document), instead of as an odin-expression.
In that case, the value declaration consists of
two left-angle-brackets optionally followed by an arbitrary tag identifier.
For example, the following `Odinfile' entry
declares prog.c.sm to be a virtual text target:
%prog.specs == << END
main.c
routines.c
END
The value of prog.specs is then a file containing the text:
main.c
routines.c
If the tag identifier is omitted, the text value ends at the first line
containing only whitespace characters.
Thus the previous definition could also be written as:
%prog.specs == <<
main.c
routines.c
|