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