3
#define MKFILE "mkfile"
6
Rule *rules, *metarules;
25
main(int argc, char **argv)
29
char *files[256], **f = files, **ff;
38
* start with a copy of the current environment variables
39
* instead of sharing them
42
Binit(&bout, 1, OWRITE);
46
for(argv++; *argv && (**argv == '-'); argv++)
48
bufcpy(buf, argv[0], strlen(argv[0]));
56
if(*(s = &argv[0][2]))
57
while(*s) switch(*s++)
59
case 'p': debug |= D_PARSE; break;
60
case 'g': debug |= D_GRAPH; break;
61
case 'e': debug |= D_EXEC; break;
67
explain = &argv[0][2];
73
bufcpy(buf, argv[0], strlen(argv[0]));
100
bufcpy(whatif, &argv[0][2], strlen(&argv[0][2]));
104
bufcpy(whatif, &argv[0][0], strlen(&argv[0][0]));
114
monitor(main, etext, buf, sizeof buf, 300);
127
assignment args become null strings
130
for(i = 0; argv[i]; i++) if(utfrune(argv[i], '=')){
131
bufcpy(buf, argv[i], strlen(argv[i]));
134
temp = maketmp(&tfd);
136
fprint(2, "temp file: %r\n");
139
Binit(&tb, tfd, OWRITE);
141
Bprint(&tb, "%s\n", argv[i]);
147
parse("command line args", tfd, 1);
151
if (buf->current != buf->start) {
155
symlook("MKFLAGS", S_VAR, (void *) stow(buf->start));
156
buf->current = buf->start;
157
for(i = 0; argv[i]; i++){
158
if(*argv[i] == 0) continue;
161
bufcpy(buf, argv[i], strlen(argv[i]));
164
symlook("MKARGS", S_VAR, (void *) stow(buf->start));
168
if(access(MKFILE, 4) == 0)
169
parse(MKFILE, open(MKFILE, 0), 0);
171
for(ff = files; ff < f; ff++)
172
parse(*ff, open(*ff, 0), 0);
174
dumpw("default targets", target1);
175
dumpr("rules", rules);
176
dumpr("metarules", metarules);
181
timeinit(whatif->start);
185
/* skip assignment args */
186
while(*argv && (**argv == 0))
192
for(w = target1; w; w = w->next)
195
fprint(2, "mk: nothing to mk\n");
204
Word *head, *tail, *t;
206
/* fake a new rule with all the args as prereqs */
212
tail = t = newword(*argv);
214
t->next = newword(*argv);
221
head = newword("command line arguments");
222
addrules(head, tail, strdup(""), VIR, mkinline, 0);
237
fprint(2, "Usage: mk [-f file] [-n] [-a] [-e] [-t] [-k] [-i] [-d[egp]] [targets ...]\n");
248
fprint(2, "mk: cannot alloc %d bytes\n", n);
255
Realloc(void *s, int n)
262
fprint(2, "mk: cannot alloc %d bytes\n", n);
269
assert(char *s, int n)
272
fprint(2, "mk: Assertion ``%s'' failed.\n", s);
281
fprint(2, "mk: %s:%d: regular expression error; %s\n",
282
patrule->file, patrule->line, s);
284
fprint(2, "mk: %s:%d: regular expression error; %s\n",
285
infile, mkinline, s);