|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that the above copyright notice and this paragraph are ! 7: * duplicated in all such forms and that any documentation, ! 8: * advertising materials, and other materials related to such ! 9: * distribution and use acknowledge that the software was developed ! 10: * by the University of California, Berkeley. The name of the ! 11: * University may not be used to endorse or promote products derived ! 12: * from this software without specific prior written permission. ! 13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 16: */ ! 17: ! 18: #ifndef lint ! 19: char copyright[] = ! 20: "@(#) Copyright (c) 1980 Regents of the University of California.\n\ ! 21: All rights reserved.\n"; ! 22: #endif /* not lint */ ! 23: ! 24: #ifndef lint ! 25: static char sccsid[] = "@(#)main.c 5.9 (Berkeley) 6/18/88"; ! 26: #endif /* not lint */ ! 27: ! 28: #include <sys/types.h> ! 29: #include <sys/stat.h> ! 30: #include <sys/file.h> ! 31: #include <stdio.h> ! 32: #include <ctype.h> ! 33: #include "y.tab.h" ! 34: #include "config.h" ! 35: ! 36: static char *PREFIX; ! 37: ! 38: /* ! 39: * Config builds a set of files for building a UNIX ! 40: * system given a description of the desired system. ! 41: */ ! 42: main(argc, argv) ! 43: int argc; ! 44: char **argv; ! 45: { ! 46: ! 47: extern char *optarg; ! 48: extern int optind; ! 49: struct stat buf; ! 50: int ch; ! 51: char *p; ! 52: ! 53: while ((ch = getopt(argc, argv, "p")) != EOF) ! 54: switch((char)ch) { ! 55: case 'p': ! 56: profiling++; ! 57: break; ! 58: case '?': ! 59: default: ! 60: goto usage; ! 61: } ! 62: argc -= optind; ! 63: argv += optind; ! 64: ! 65: if (argc != 1) { ! 66: usage: fputs("usage: config [-p] sysname\n", stderr); ! 67: exit(1); ! 68: } ! 69: ! 70: if (freopen(PREFIX = *argv, "r", stdin) == NULL) { ! 71: perror(PREFIX); ! 72: exit(2); ! 73: } ! 74: if (stat(p = path((char *)NULL), &buf)) { ! 75: if (mkdir(p, 0755)) { ! 76: perror(p); ! 77: exit(2); ! 78: } ! 79: } ! 80: else if ((buf.st_mode & S_IFMT) != S_IFDIR) { ! 81: fprintf(stderr, "config: %s isn't a directory.\n", p); ! 82: exit(2); ! 83: } ! 84: ! 85: dtab = NULL; ! 86: confp = &conf_list; ! 87: if (yyparse()) ! 88: exit(3); ! 89: switch (machine) { ! 90: ! 91: case MACHINE_VAX: ! 92: vax_ioconf(); /* Print ioconf.c */ ! 93: ubglue(); /* Create ubglue.s */ ! 94: break; ! 95: ! 96: case MACHINE_TAHOE: ! 97: tahoe_ioconf(); ! 98: vbglue(); ! 99: break; ! 100: ! 101: default: ! 102: printf("Specify machine type, e.g. ``machine vax''\n"); ! 103: exit(1); ! 104: } ! 105: /* ! 106: * make symbolic links in compilation directory ! 107: * for "sys" (to make genassym.c work along with #include <sys/xxx>) ! 108: * and similarly for "machine". ! 109: */ ! 110: { ! 111: char xxx[80]; ! 112: ! 113: (void) symlink("../h", path("sys")); ! 114: (void) sprintf(xxx, "../%s", machinename); ! 115: (void) symlink(xxx, path("machine")); ! 116: } ! 117: makefile(); /* build Makefile */ ! 118: headers(); /* make a lot of .h files */ ! 119: swapconf(); /* swap config files */ ! 120: printf("Don't forget to run \"make depend\"\n"); ! 121: exit(0); ! 122: } ! 123: ! 124: /* ! 125: * get_word ! 126: * returns EOF on end of file ! 127: * NULL on end of line ! 128: * pointer to the word otherwise ! 129: */ ! 130: char * ! 131: get_word(fp) ! 132: register FILE *fp; ! 133: { ! 134: static char line[80]; ! 135: register int ch; ! 136: register char *cp; ! 137: ! 138: while ((ch = getc(fp)) != EOF) ! 139: if (ch != ' ' && ch != '\t') ! 140: break; ! 141: if (ch == EOF) ! 142: return ((char *)EOF); ! 143: if (ch == '\n') ! 144: return (NULL); ! 145: cp = line; ! 146: *cp++ = ch; ! 147: while ((ch = getc(fp)) != EOF) { ! 148: if (isspace(ch)) ! 149: break; ! 150: *cp++ = ch; ! 151: } ! 152: *cp = 0; ! 153: if (ch == EOF) ! 154: return ((char *)EOF); ! 155: (void) ungetc(ch, fp); ! 156: return (line); ! 157: } ! 158: ! 159: /* ! 160: * prepend the path to a filename ! 161: */ ! 162: char * ! 163: path(file) ! 164: char *file; ! 165: { ! 166: register char *cp; ! 167: ! 168: cp = malloc((unsigned)(strlen(PREFIX)+strlen(file)+5)); ! 169: (void) strcpy(cp, "../"); ! 170: (void) strcat(cp, PREFIX); ! 171: if (file) { ! 172: (void) strcat(cp, "/"); ! 173: (void) strcat(cp, file); ! 174: } ! 175: return (cp); ! 176: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.