|
|
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.