'\"p
.\" aegis - project change supervisor
.\" Copyright (C) 1998, 2002, 2005-2008, 2010, 2012 Peter Miller
.\"
.\" This program is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation; either version 3 of the License, or
.\" (at your option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
.\" General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public License
.\" along with this program. If not, see .
.\"
.nr PS 72
.nr VS 75000
.LP
.ad c
DAG
.br
.ad l
.sp 0.3i
.nr PS 36
.nr VS 37
.XP
\(bu
These pair\[hy]wise ordered dependencies form a \fIdirected acyclic graph:\fP
.br
.ps 16
.vs 17
.sp 0.5
.PS
.ft CW
ellipseht = 0.4
ellipsewid = ellipseht * 2.5
down
A1: ellipse "prog"
move 3*ellipseht
C2: ellipse "a.h"
C1: ellipse "a.c" with .e at C2.w-(ellipseht,0)
C3: ellipse "b.c" with .w at C2.e+(ellipseht,0)
B1: ellipse "a.o" with .c at 0.5
B2: ellipse "b.o" with .c at 0.5
D1: ellipse "a.y" with .n at 0.5-(0,ellipseht)
arrow from B1.n to A1.sw
arrow from B2.n to A1.se
arrow from C1.n to B1.sw
arrow from C2.n to B1.se
arrow from C2.n to B2.sw
arrow from C3.n to B2.se
arrow from D1.n to C1.se
arrow from D1.n to C2.sw
.ft P
.PE
.XP
\(bu
Make then performs a \fIpost\[hy]order\fP traversal of this graph.
.bp
.nr PS 24
.nr VS 25
.XP
\(bu
The pair\[hy]wise ordered dependencies for a \fIdirected acyclic graph\fP.
The arrows means that loops aren't loops.
.XP
\(bu
If there is a loop, according to the arrows, then you have an error.
.XP
\(bu
Make then performs a \fIpost\[hy]order\fP traversal of this graph.
.br
\(dg This is a weak condition, it only means \[lq]after dependencies
ready\[rq] and
nothing more. The more files, the deeper the graph, the more variety.
.XP
\(bu
Simple examples like this are easy to understand;
we all start using \fImake\fP with small programs like this.
.br
\(dg mind set
.XP
\(bu
We extrapolate that large multi\[hy]directory programs
\.br
\(dg will be just as un\[hy]interseting
\.br
\(dg will have itty\[hy]bitty makefiles in each directory
.\" vim: set ts=8 sw=4 et :