xref: /original-bsd/usr.sbin/config/main.c (revision a9c19d04)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  */
6 
7 #ifndef lint
8 char copyright[] =
9 "@(#) Copyright (c) 1980 Regents of the University of California.\n\
10  All rights reserved.\n";
11 #endif not lint
12 
13 #ifndef lint
14 static char sccsid[] = "@(#)main.c	5.4 (Berkeley) 01/13/87";
15 #endif not lint
16 
17 #include <stdio.h>
18 #include <ctype.h>
19 #include "y.tab.h"
20 #include "config.h"
21 
22 /*
23  * Config builds a set of files for building a UNIX
24  * system given a description of the desired system.
25  */
26 main(argc, argv)
27 	int argc;
28 	char **argv;
29 {
30 
31 	if (argc > 1 && eq("-p", argv[1])) {
32 		profiling++;
33 		argc--, argv++;
34 	}
35 	if (argc != 2) {
36 		fprintf(stderr, "usage: config [ -p ] sysname\n");
37 		exit(1);
38 	}
39 	PREFIX = argv[1];
40 	if (freopen(argv[1], "r", stdin) == NULL) {
41 		perror(argv[1]);
42 		exit(2);
43 	}
44 	dtab = NULL;
45 	confp = &conf_list;
46 	if (yyparse())
47 		exit(3);
48 	switch (machine) {
49 
50 	case MACHINE_VAX:
51 		vax_ioconf();		/* Print ioconf.c */
52 		ubglue();		/* Create ubglue.s */
53 		break;
54 
55 	case MACHINE_TAHOE:
56 		tahoe_ioconf();
57 		vbglue();
58 		break;
59 
60 	default:
61 		printf("Specify machine type, e.g. ``machine vax''\n");
62 		exit(1);
63 	}
64 	/*
65 	 * make symbolic links in compilation directory
66 	 * for "sys" (to make genassym.c work along with #include <sys/xxx>)
67 	 * and similarly for "machine".
68 	 */
69 	{
70 	char xxx[80];
71 
72 	(void) symlink("../h", path("sys"));
73 	sprintf(xxx, "../%s", machinename);
74 	(void) symlink(xxx, path("machine"));
75 	}
76 	makefile();			/* build Makefile */
77 	headers();			/* make a lot of .h files */
78 	swapconf();			/* swap config files */
79 	printf("Don't forget to run \"make depend\"\n");
80 }
81 
82 /*
83  * get_word
84  *	returns EOF on end of file
85  *	NULL on end of line
86  *	pointer to the word otherwise
87  */
88 char *
89 get_word(fp)
90 	register FILE *fp;
91 {
92 	static char line[80];
93 	register int ch;
94 	register char *cp;
95 
96 	while ((ch = getc(fp)) != EOF)
97 		if (ch != ' ' && ch != '\t')
98 			break;
99 	if (ch == EOF)
100 		return ((char *)EOF);
101 	if (ch == '\n')
102 		return (NULL);
103 	cp = line;
104 	*cp++ = ch;
105 	while ((ch = getc(fp)) != EOF) {
106 		if (isspace(ch))
107 			break;
108 		*cp++ = ch;
109 	}
110 	*cp = 0;
111 	if (ch == EOF)
112 		return ((char *)EOF);
113 	(void) ungetc(ch, fp);
114 	return (line);
115 }
116 
117 /*
118  * prepend the path to a filename
119  */
120 char *
121 path(file)
122 	char *file;
123 {
124 	register char *cp;
125 
126 	cp = malloc((unsigned)(strlen(PREFIX)+strlen(file)+5));
127 	(void) strcpy(cp, "../");
128 	(void) strcat(cp, PREFIX);
129 	(void) strcat(cp, "/");
130 	(void) strcat(cp, file);
131 	return (cp);
132 }
133