Blame


1 76193d7c 2003-09-30 devnull #include <utf.h>
2 76193d7c 2003-09-30 devnull #include <fmt.h>
3 76193d7c 2003-09-30 devnull #include <setjmp.h>
4 76193d7c 2003-09-30 devnull #include <string.h>
5 76193d7c 2003-09-30 devnull #include <stdlib.h>
6 76193d7c 2003-09-30 devnull #include <unistd.h>
7 76193d7c 2003-09-30 devnull #include <bio.h>
8 76193d7c 2003-09-30 devnull #include <regexp9.h>
9 76193d7c 2003-09-30 devnull #include <time.h>
10 76193d7c 2003-09-30 devnull
11 76193d7c 2003-09-30 devnull #define uchar _mkuchar
12 76193d7c 2003-09-30 devnull #define ushort _mkushort
13 76193d7c 2003-09-30 devnull #define uint _mkuint
14 76193d7c 2003-09-30 devnull #define ulong _mkulong
15 76193d7c 2003-09-30 devnull #define vlong _mkvlong
16 76193d7c 2003-09-30 devnull #define uvlong _mkuvlong
17 76193d7c 2003-09-30 devnull
18 76193d7c 2003-09-30 devnull #define nil ((void*)0)
19 76193d7c 2003-09-30 devnull
20 76193d7c 2003-09-30 devnull typedef unsigned char uchar;
21 76193d7c 2003-09-30 devnull typedef unsigned short ushort;
22 76193d7c 2003-09-30 devnull typedef unsigned int uint;
23 76193d7c 2003-09-30 devnull typedef unsigned long ulong;
24 76193d7c 2003-09-30 devnull
25 76193d7c 2003-09-30 devnull #define nelem(x) (sizeof(x)/sizeof((x)[0]))
26 76193d7c 2003-09-30 devnull
27 76193d7c 2003-09-30 devnull #define OREAD O_RDONLY
28 76193d7c 2003-09-30 devnull #define OWRITE O_WRONLY
29 76193d7c 2003-09-30 devnull #define ORDWR O_RDWR
30 76193d7c 2003-09-30 devnull #define USED(x) if(x);else
31 76193d7c 2003-09-30 devnull #define remove unlink
32 76193d7c 2003-09-30 devnull #define seek lseek
33 76193d7c 2003-09-30 devnull #define exits(s) exit((s) && ((char*)s)[0] ? 1 : 0)
34 76193d7c 2003-09-30 devnull #define create(name, mode, perm) creat(name, perm)
35 76193d7c 2003-09-30 devnull #define ERRMAX 256
36 76193d7c 2003-09-30 devnull
37 76193d7c 2003-09-30 devnull #undef assert
38 76193d7c 2003-09-30 devnull #define assert mkassert
39 76193d7c 2003-09-30 devnull extern Biobuf bout;
40 76193d7c 2003-09-30 devnull
41 76193d7c 2003-09-30 devnull typedef struct Bufblock
42 76193d7c 2003-09-30 devnull {
43 76193d7c 2003-09-30 devnull struct Bufblock *next;
44 76193d7c 2003-09-30 devnull char *start;
45 76193d7c 2003-09-30 devnull char *end;
46 76193d7c 2003-09-30 devnull char *current;
47 76193d7c 2003-09-30 devnull } Bufblock;
48 76193d7c 2003-09-30 devnull
49 76193d7c 2003-09-30 devnull typedef struct Word
50 76193d7c 2003-09-30 devnull {
51 76193d7c 2003-09-30 devnull char *s;
52 76193d7c 2003-09-30 devnull struct Word *next;
53 76193d7c 2003-09-30 devnull } Word;
54 76193d7c 2003-09-30 devnull
55 76193d7c 2003-09-30 devnull typedef struct Envy
56 76193d7c 2003-09-30 devnull {
57 76193d7c 2003-09-30 devnull char *name;
58 76193d7c 2003-09-30 devnull Word *values;
59 76193d7c 2003-09-30 devnull } Envy;
60 76193d7c 2003-09-30 devnull
61 76193d7c 2003-09-30 devnull extern Envy *envy;
62 76193d7c 2003-09-30 devnull
63 76193d7c 2003-09-30 devnull typedef struct Rule
64 76193d7c 2003-09-30 devnull {
65 76193d7c 2003-09-30 devnull char *target; /* one target */
66 76193d7c 2003-09-30 devnull Word *tail; /* constituents of targets */
67 76193d7c 2003-09-30 devnull char *recipe; /* do it ! */
68 76193d7c 2003-09-30 devnull short attr; /* attributes */
69 76193d7c 2003-09-30 devnull short line; /* source line */
70 76193d7c 2003-09-30 devnull char *file; /* source file */
71 76193d7c 2003-09-30 devnull Word *alltargets; /* all the targets */
72 76193d7c 2003-09-30 devnull int rule; /* rule number */
73 76193d7c 2003-09-30 devnull Reprog *pat; /* reg exp goo */
74 76193d7c 2003-09-30 devnull char *prog; /* to use in out of date */
75 76193d7c 2003-09-30 devnull struct Rule *chain; /* hashed per target */
76 76193d7c 2003-09-30 devnull struct Rule *next;
77 76193d7c 2003-09-30 devnull } Rule;
78 76193d7c 2003-09-30 devnull
79 76193d7c 2003-09-30 devnull extern Rule *rules, *metarules, *patrule;
80 76193d7c 2003-09-30 devnull
81 76193d7c 2003-09-30 devnull /* Rule.attr */
82 76193d7c 2003-09-30 devnull #define META 0x0001
83 76193d7c 2003-09-30 devnull #define UNUSED 0x0002
84 76193d7c 2003-09-30 devnull #define UPD 0x0004
85 76193d7c 2003-09-30 devnull #define QUIET 0x0008
86 76193d7c 2003-09-30 devnull #define VIR 0x0010
87 76193d7c 2003-09-30 devnull #define REGEXP 0x0020
88 76193d7c 2003-09-30 devnull #define NOREC 0x0040
89 76193d7c 2003-09-30 devnull #define DEL 0x0080
90 76193d7c 2003-09-30 devnull #define NOVIRT 0x0100
91 76193d7c 2003-09-30 devnull
92 76193d7c 2003-09-30 devnull #define NREGEXP 10
93 76193d7c 2003-09-30 devnull
94 76193d7c 2003-09-30 devnull typedef struct Arc
95 76193d7c 2003-09-30 devnull {
96 76193d7c 2003-09-30 devnull short flag;
97 76193d7c 2003-09-30 devnull struct Node *n;
98 76193d7c 2003-09-30 devnull Rule *r;
99 76193d7c 2003-09-30 devnull char *stem;
100 76193d7c 2003-09-30 devnull char *prog;
101 76193d7c 2003-09-30 devnull char *match[NREGEXP];
102 76193d7c 2003-09-30 devnull struct Arc *next;
103 76193d7c 2003-09-30 devnull } Arc;
104 76193d7c 2003-09-30 devnull
105 76193d7c 2003-09-30 devnull /* Arc.flag */
106 76193d7c 2003-09-30 devnull #define TOGO 1
107 76193d7c 2003-09-30 devnull
108 76193d7c 2003-09-30 devnull typedef struct Node
109 76193d7c 2003-09-30 devnull {
110 76193d7c 2003-09-30 devnull char *name;
111 76193d7c 2003-09-30 devnull long time;
112 76193d7c 2003-09-30 devnull unsigned short flags;
113 76193d7c 2003-09-30 devnull Arc *prereqs;
114 76193d7c 2003-09-30 devnull struct Node *next; /* list for a rule */
115 76193d7c 2003-09-30 devnull } Node;
116 76193d7c 2003-09-30 devnull
117 76193d7c 2003-09-30 devnull /* Node.flags */
118 76193d7c 2003-09-30 devnull #define VIRTUAL 0x0001
119 76193d7c 2003-09-30 devnull #define CYCLE 0x0002
120 76193d7c 2003-09-30 devnull #define READY 0x0004
121 76193d7c 2003-09-30 devnull #define CANPRETEND 0x0008
122 76193d7c 2003-09-30 devnull #define PRETENDING 0x0010
123 76193d7c 2003-09-30 devnull #define NOTMADE 0x0020
124 76193d7c 2003-09-30 devnull #define BEINGMADE 0x0040
125 76193d7c 2003-09-30 devnull #define MADE 0x0080
126 76193d7c 2003-09-30 devnull #define MADESET(n,m) n->flags = (n->flags&~(NOTMADE|BEINGMADE|MADE))|(m)
127 76193d7c 2003-09-30 devnull #define PROBABLE 0x0100
128 76193d7c 2003-09-30 devnull #define VACUOUS 0x0200
129 76193d7c 2003-09-30 devnull #define NORECIPE 0x0400
130 76193d7c 2003-09-30 devnull #define DELETE 0x0800
131 76193d7c 2003-09-30 devnull #define NOMINUSE 0x1000
132 76193d7c 2003-09-30 devnull
133 76193d7c 2003-09-30 devnull typedef struct Job
134 76193d7c 2003-09-30 devnull {
135 76193d7c 2003-09-30 devnull Rule *r; /* master rule for job */
136 76193d7c 2003-09-30 devnull Node *n; /* list of node targets */
137 76193d7c 2003-09-30 devnull char *stem;
138 76193d7c 2003-09-30 devnull char **match;
139 76193d7c 2003-09-30 devnull Word *p; /* prerequistes */
140 76193d7c 2003-09-30 devnull Word *np; /* new prerequistes */
141 76193d7c 2003-09-30 devnull Word *t; /* targets */
142 76193d7c 2003-09-30 devnull Word *at; /* all targets */
143 76193d7c 2003-09-30 devnull int nproc; /* slot number */
144 76193d7c 2003-09-30 devnull struct Job *next;
145 76193d7c 2003-09-30 devnull } Job;
146 76193d7c 2003-09-30 devnull extern Job *jobs;
147 76193d7c 2003-09-30 devnull
148 76193d7c 2003-09-30 devnull typedef struct Symtab
149 76193d7c 2003-09-30 devnull {
150 76193d7c 2003-09-30 devnull short space;
151 76193d7c 2003-09-30 devnull char *name;
152 76193d7c 2003-09-30 devnull void *value;
153 76193d7c 2003-09-30 devnull struct Symtab *next;
154 76193d7c 2003-09-30 devnull } Symtab;
155 76193d7c 2003-09-30 devnull
156 76193d7c 2003-09-30 devnull enum {
157 76193d7c 2003-09-30 devnull S_VAR, /* variable -> value */
158 76193d7c 2003-09-30 devnull S_TARGET, /* target -> rule */
159 76193d7c 2003-09-30 devnull S_TIME, /* file -> time */
160 76193d7c 2003-09-30 devnull S_PID, /* pid -> products */
161 76193d7c 2003-09-30 devnull S_NODE, /* target name -> node */
162 76193d7c 2003-09-30 devnull S_AGG, /* aggregate -> time */
163 76193d7c 2003-09-30 devnull S_BITCH, /* bitched about aggregate not there */
164 76193d7c 2003-09-30 devnull S_NOEXPORT, /* var -> noexport */
165 76193d7c 2003-09-30 devnull S_OVERRIDE, /* can't override */
166 76193d7c 2003-09-30 devnull S_OUTOFDATE, /* n1\377n2 -> 2(outofdate) or 1(not outofdate) */
167 76193d7c 2003-09-30 devnull S_MAKEFILE, /* target -> node */
168 76193d7c 2003-09-30 devnull S_MAKEVAR, /* dumpable mk variable */
169 76193d7c 2003-09-30 devnull S_EXPORTED, /* var -> current exported value */
170 76193d7c 2003-09-30 devnull S_WESET, /* variable; we set in the mkfile */
171 76193d7c 2003-09-30 devnull S_INTERNAL /* an internal mk variable (e.g., stem, target) */
172 76193d7c 2003-09-30 devnull };
173 76193d7c 2003-09-30 devnull
174 76193d7c 2003-09-30 devnull extern int debug;
175 76193d7c 2003-09-30 devnull extern int nflag, tflag, iflag, kflag, aflag, mflag;
176 76193d7c 2003-09-30 devnull extern int mkinline;
177 76193d7c 2003-09-30 devnull extern char *infile;
178 76193d7c 2003-09-30 devnull extern int nreps;
179 76193d7c 2003-09-30 devnull extern char *explain;
180 76193d7c 2003-09-30 devnull extern char *termchars;
181 76193d7c 2003-09-30 devnull extern int IWS;
182 76193d7c 2003-09-30 devnull extern char *shell;
183 76193d7c 2003-09-30 devnull extern char *shellname;
184 76193d7c 2003-09-30 devnull extern char *shflags;
185 76193d7c 2003-09-30 devnull
186 76193d7c 2003-09-30 devnull #define SYNERR(l) (fprint(2, "mk: %s:%d: syntax error; ", infile, ((l)>=0)?(l):mkinline))
187 76193d7c 2003-09-30 devnull #define RERR(r) (fprint(2, "mk: %s:%d: rule error; ", (r)->file, (r)->line))
188 76193d7c 2003-09-30 devnull #define NAMEBLOCK 1000
189 76193d7c 2003-09-30 devnull #define BIGBLOCK 20000
190 76193d7c 2003-09-30 devnull
191 76193d7c 2003-09-30 devnull #define SEP(c) (((c)==' ')||((c)=='\t')||((c)=='\n'))
192 76193d7c 2003-09-30 devnull #define WORDCHR(r) ((r) > ' ' && !utfrune("!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~", (r)))
193 76193d7c 2003-09-30 devnull
194 76193d7c 2003-09-30 devnull #define DEBUG(x) (debug&(x))
195 76193d7c 2003-09-30 devnull #define D_PARSE 0x01
196 76193d7c 2003-09-30 devnull #define D_GRAPH 0x02
197 76193d7c 2003-09-30 devnull #define D_EXEC 0x04
198 76193d7c 2003-09-30 devnull
199 76193d7c 2003-09-30 devnull #define LSEEK(f,o,p) seek(f,o,p)
200 76193d7c 2003-09-30 devnull
201 76193d7c 2003-09-30 devnull #define PERCENT(ch) (((ch) == '%') || ((ch) == '&'))
202 76193d7c 2003-09-30 devnull
203 76193d7c 2003-09-30 devnull #include "fns.h"