| |
fa.caml |
At best, you can cheat with system() function Make systems are all conceptually wrong. First observe that building a system Example: you cannot build interscript Example: the rules for building a package Next observe that the linear dependency But it is much worse. A target can This leads to the first novel idea. Fixpoints. With fixpoints, you dont CARE about dependencies. Now we backstep. We try to *predict* whether This is dependency checking with a new twist: Well, I will jump ahead now. A build system A build systems has processes and files. Oh. That's a category. We allow of course, The control system allows you to 'click' on For example .c -cc--> .o -link--> exe, we can BTW: I have *built* this system, including I needed this much power. Make is a total joke. In a *real* build system, you do NOT want Anyhow .. a lot of new ideas for a build -------------------
> On Fri, Nov 21, 2003 at 02:48:17PM +0900, Nicolas Cannasse wrote:
> On the other hand the aim will be to have a self contained tools ( ie
> when you write a makefile you use rm, cp, touch
> .. here the aims will be
> to have it in ocaml ). So you could build on every platform which
> support ocaml.
source is literate programmed. You surely aren't
going to rewrite Interscript in Ocaml are you?
but then all the dependency checking is lost.
There a huge number of projects to replace
Make (and autoconf et al) and not a single
one I've seen recognizes that the fundamental
design is flawed .. instead they all try to
copy the make idea.
is a process where it is not always
possible to determine the full sequence
of commands in advance. Sometimes,
you have to perform some action before
you can decide what to do next.
packaged sources or a tarball directly,
you have to extract the contents first.
may have to be generated or extracted
from the package.
checking is naive. First, what some
target depends on can be conditional:
obviously true for C :-)
depend on itself. Interscript assumes that.
An example is a Latex build, which depends
on auxilliary files generated by the build
[Ocamldoc output can take 4 passes to fixate
for example].
Interscript is based on that idea.
What you do is repeatedly execute some process
until the defined outputs are stable. The inputs
do not need to be known.
the outputs will be the same this run as last.
If we can -- and we have to be *sure* -- we
can terminate one cycle earlier.
its optional. :-)
does NOT have targets. That's a bad idea too.
Lets call the processes ARROWS and the files OBJECTS.
products of files (multiple outputs and inputs)
and sums of files (choose one of several).
[And of course we'd better make it cartesian
closed and allow processes to be files ..
called scripts .. :]
an arrow to execute the process. This is manual
running. It also allows to to click on a object
to run all the processes required to produce
the object. By using a caching concept, some
process can be elided as an optimisation.
use the cached .o instead of running cc on the
.c provided the .c is older.
a graphic interface which allowed construction
of the build category.
What I was doing was writing a book, literate
programmed of course, and needed to generate
a LOT of different documents -- I had to build
code, test it, capture the output, typeset
the book, build indices, contents ...
to make everything from scratch everytime.
Sometime you're happy using old data,
at least for a while.
system are here. Just copying the make concept
is not going to solve any problems .. its going
to make things much WORSE by having yet another
inadequate tool -- which of course the poor client
will have to build, making the tool chain even longer.
[Trying to replace Make destroyed Boost IMHO]
To unsubscribe, mail caml-list-requ...@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners