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);
126 assignment args become null strings
129 for(i = 0; argv[i]; i++) if(utfrune(argv[i], '=')){
130 bufcpy(buf, argv[i], strlen(argv[i]));
138 if((tfd = create(temp, ORDWR, 0600)) < 0){
142 Binit(&tb, tfd, OWRITE);
144 Bprint(&tb, "%s\n", argv[i]);
150 parse("command line args", tfd, 1);
154 if (buf->current != buf->start) {
158 symlook("MKFLAGS", S_VAR, (void *) stow(buf->start));
159 buf->current = buf->start;
160 for(i = 0; argv[i]; i++){
161 if(*argv[i] == 0) continue;
164 bufcpy(buf, argv[i], strlen(argv[i]));
167 symlook("MKARGS", S_VAR, (void *) stow(buf->start));
171 if(access(MKFILE, 4) == 0)
172 parse(MKFILE, open(MKFILE, 0), 0);
174 for(ff = files; ff < f; ff++)
175 parse(*ff, open(*ff, 0), 0);
177 dumpw("default targets", target1);
178 dumpr("rules", rules);
179 dumpr("metarules", metarules);
184 timeinit(whatif->start);
188 /* skip assignment args */
189 while(*argv && (**argv == 0))
195 for(w = target1; w; w = w->next)
198 fprint(2, "mk: nothing to mk\n");
207 Word *head, *tail, *t;
209 /* fake a new rule with all the args as prereqs */
215 tail = t = newword(*argv);
217 t->next = newword(*argv);
224 head = newword("command line arguments");
225 addrules(head, tail, strdup(""), VIR, mkinline, 0);
239 fprint(2, "Usage: mk [-f file] [-n] [-a] [-e] [-t] [-k] [-i] [-d[egp]] [targets ...]\n");
250 fprint(2, "mk: cannot alloc %d bytes\n", n);
257 Realloc(void *s, int n)
264 fprint(2, "mk: cannot alloc %d bytes\n", n);
274 fprint(2, "mk: %s:%d: regular expression error; %s\n",
275 patrule->file, patrule->line, s);
277 fprint(2, "mk: %s:%d: regular expression error; %s\n",
278 infile, mkinline, s);