8 typedef struct Bufblock
10 struct Bufblock *next;
32 char *target; /* one target */
33 Word *tail; /* constituents of targets */
34 char *recipe; /* do it ! */
35 short attr; /* attributes */
36 short line; /* source line */
37 char *file; /* source file */
38 Word *alltargets; /* all the targets */
39 int rule; /* rule number */
40 Reprog *pat; /* reg exp goo */
41 char *prog; /* to use in out of date */
42 struct Rule *chain; /* hashed per target */
46 extern Rule *rules, *metarules, *patrule;
81 struct Node *next; /* list for a rule */
85 #define VIRTUAL 0x0001
88 #define CANPRETEND 0x0008
89 #define PRETENDING 0x0010
90 #define NOTMADE 0x0020
91 #define BEINGMADE 0x0040
93 #define MADESET(n,m) n->flags = (n->flags&~(NOTMADE|BEINGMADE|MADE))|(m)
94 #define PROBABLE 0x0100
95 #define VACUOUS 0x0200
96 #define NORECIPE 0x0400
98 #define NOMINUSE 0x1000
102 Rule *r; /* master rule for job */
103 Node *n; /* list of node targets */
106 Word *p; /* prerequistes */
107 Word *np; /* new prerequistes */
108 Word *t; /* targets */
109 Word *at; /* all targets */
110 int nproc; /* slot number */
115 typedef struct Symtab
127 S_VAR, /* variable -> value */
128 S_TARGET, /* target -> rule */
129 S_TIME, /* file -> time */
130 S_PID, /* pid -> products */
131 S_NODE, /* target name -> node */
132 S_AGG, /* aggregate -> time */
133 S_BITCH, /* bitched about aggregate not there */
134 S_NOEXPORT, /* var -> noexport */
135 S_OVERRIDE, /* can't override */
136 S_OUTOFDATE, /* n1\377n2 -> 2(outofdate) or 1(not outofdate) */
137 S_MAKEFILE, /* target -> node */
138 S_MAKEVAR, /* dumpable mk variable */
139 S_EXPORTED, /* var -> current exported value */
140 S_BULKED, /* we have bulked this dir */
141 S_WESET, /* variable; we set in the mkfile */
142 S_INTERNAL, /* an internal mk variable (e.g., stem, target) */
146 extern int nflag, tflag, iflag, kflag, aflag, mflag;
150 extern char *explain;
151 extern char *termchars;
153 extern char *shellname;
154 extern char *shflags;
157 #define SYNERR(l) (fprint(2, "mk: %s:%d: syntax error; ", infile, ((l)>=0)?(l):mkinline))
158 #define RERR(r) (fprint(2, "mk: %s:%d: rule error; ", (r)->file, (r)->line))
159 #define NAMEBLOCK 1000
160 #define BIGBLOCK 20000
162 #define SEP(c) (((c)==' ')||((c)=='\t')||((c)=='\n'))
163 #define WORDCHR(r) ((r) > ' ' && !utfrune("!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~", (r)))
165 #define DEBUG(x) (debug&(x))
170 #define LSEEK(f,o,p) seek(f,o,p)
172 #define PERCENT(ch) (((ch) == '%') || ((ch) == '&'))