3 #define MKFILE "mkfile"
5 static char *version = "@(#)mk general release 4 (plan 9)";
7 Rule *rules, *metarules;
26 main(int argc, char **argv)
30 char *files[256], **f = files, **ff;
39 * start with a copy of the current environment variables
40 * instead of sharing them
43 Binit(&bout, 1, OWRITE);
47 for(argv++; *argv && (**argv == '-'); argv++)
49 bufcpy(buf, argv[0], strlen(argv[0]));
57 if(*(s = &argv[0][2]))
58 while(*s) switch(*s++)
60 case 'p': debug |= D_PARSE; break;
61 case 'g': debug |= D_GRAPH; break;
62 case 'e': debug |= D_EXEC; break;
68 explain = &argv[0][2];
74 bufcpy(buf, argv[0], strlen(argv[0]));
101 bufcpy(whatif, &argv[0][2], strlen(&argv[0][2]));
105 bufcpy(whatif, &argv[0][0], strlen(&argv[0][0]));
115 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]));
139 if((tfd = create(temp, ORDWR, 0600)) < 0){
143 Binit(&tb, tfd, OWRITE);
145 Bprint(&tb, "%s\n", argv[i]);
151 parse("command line args", tfd, 1);
155 if (buf->current != buf->start) {
159 symlook("MKFLAGS", S_VAR, (void *) stow(buf->start));
160 buf->current = buf->start;
161 for(i = 0; argv[i]; i++){
162 if(*argv[i] == 0) continue;
165 bufcpy(buf, argv[i], strlen(argv[i]));
168 symlook("MKARGS", S_VAR, (void *) stow(buf->start));
172 if(access(MKFILE, 4) == 0)
173 parse(MKFILE, open(MKFILE, 0), 0);
175 for(ff = files; ff < f; ff++)
176 parse(*ff, open(*ff, 0), 0);
178 dumpw("default targets", target1);
179 dumpr("rules", rules);
180 dumpr("metarules", metarules);
185 timeinit(whatif->start);
189 /* skip assignment args */
190 while(*argv && (**argv == 0))
196 for(w = target1; w; w = w->next)
199 fprint(2, "mk: nothing to mk\n");
208 Word *head, *tail, *t;
210 /* fake a new rule with all the args as prereqs */
216 tail = t = newword(*argv);
218 t->next = newword(*argv);
225 head = newword("command line arguments");
226 addrules(head, tail, strdup(""), VIR, mkinline, 0);
240 fprint(2, "Usage: mk [-f file] [-n] [-a] [-e] [-t] [-k] [-i] [-d[egp]] [targets ...]\n");
251 fprint(2, "mk: cannot alloc %d bytes\n", n);
258 Realloc(void *s, int n)
265 fprint(2, "mk: cannot alloc %d bytes\n", n);
275 fprint(2, "mk: %s:%d: regular expression error; %s\n",
276 patrule->file, patrule->line, s);
278 fprint(2, "mk: %s:%d: regular expression error; %s\n",
279 infile, mkinline, s);