Commit | Line | Data |
---|---|---|
1c79356b A |
1 | #!/bin/csh -f |
2 | set path = ($path .) | |
3 | ###################################################################### | |
4 | # HISTORY | |
5 | # 1-Dec-87 Michael Young (mwyoung) at Carnegie-Mellon University | |
6 | # Added "-verbose" switch, so this script produces no output | |
7 | # in the normal case. | |
8 | # | |
9 | # 10-Oct-87 Mike Accetta (mja) at Carnegie-Mellon University | |
10 | # Flushed cmu_*.h and spin_locks.h | |
11 | # [ V5.1(XF18) ] | |
12 | # | |
13 | # 6-Apr-87 Avadis Tevanian (avie) at Carnegie-Mellon University | |
14 | # Use MASTER.local and MASTER.<machine>.local for generation of | |
15 | # configuration files in addition to MASTER and MASTER.<machine>. | |
16 | # | |
17 | # 25-Mar-87 Mike Accetta (mja) at Carnegie-Mellon University | |
18 | # Removed use of obsolete wb_*.h files when building the feature | |
19 | # list; modified to save the previous configuration file and | |
20 | # display the differences between it and the new file. | |
21 | # [ V5.1(F8) ] | |
22 | # | |
23 | # 25-Mar-87 Avadis Tevanian (avie) at Carnegie-Mellon University | |
24 | # If there is no /etc/machine just print out a message telling | |
25 | # user to use the -cpu option. I thought this script was supposed | |
26 | # to work even without a /etc/machine, but it doesn't... and this | |
27 | # is the easiest way out. | |
28 | # | |
29 | # 13-Mar-87 Mike Accetta (mja) at Carnegie-Mellon University | |
30 | # Added "romp_fpa.h" file to extra features for the RT. | |
31 | # [ V5.1(F7) ] | |
32 | # | |
33 | # 11-Mar-87 Mike Accetta (mja) at Carnegie-Mellon University | |
34 | # Updated to maintain the appropriate configuration features file | |
35 | # in the "machine" directory whenever the corresponding | |
36 | # configuration is generated. This replaces the old mechanism of | |
37 | # storing this directly in the <sys/features.h> file since it was | |
38 | # machine dependent and also precluded building programs for more | |
39 | # than one configuration from the same set of sources. | |
40 | # [ V5.1(F6) ] | |
41 | # | |
42 | # 21-Feb-87 Mike Accetta (mja) at Carnegie-Mellon University | |
43 | # Fixed to require wired-in cpu type names for only those | |
44 | # machines where the kernel name differs from that provided by | |
45 | # /etc/machine (i.e. IBMRT => ca and SUN => sun3); updated to | |
46 | # permit configuration descriptions in both machine indepedent | |
47 | # and dependent master configuration files so that attributes can | |
48 | # be grouped accordingly. | |
49 | # [ V5.1(F3) ] | |
50 | # | |
51 | # 17-Jan-87 Mike Accetta (mja) at Carnegie-Mellon University | |
52 | # Updated to work from any directory at the same level as | |
53 | # "conf"; generate configuration from both MASTER and | |
54 | # MASTER.<machine-type> files; added -cpu switch. | |
55 | # [ V5.1(F1) ] | |
56 | # | |
57 | # 18-Aug-86 Mike Accetta (mja) at Carnegie-Mellon University | |
58 | # Added -make switch and changed meaning of -config; upgraded to | |
59 | # allow multiple attributes per configuration and to define | |
60 | # configurations in terms of these attributes within MASTER. | |
61 | # | |
62 | # 14-Apr-83 Mike Accetta (mja) at Carnegie-Mellon University | |
63 | # Added -config switch to only run /etc/config without | |
64 | # "make depend" and "make". | |
65 | # | |
66 | ###################################################################### | |
67 | ||
68 | set prog=$0 | |
69 | set prog=$prog:t | |
70 | set nonomatch | |
71 | set OBJDIR=../BUILD | |
72 | if ("`/usr/bin/uname`" == "Rhapsody" ) then | |
73 | set CONFIG_DIR=/usr/local/bin | |
74 | else | |
75 | set CONFIG_DIR=/usr/bin | |
76 | endif | |
77 | ||
78 | unset domake | |
79 | unset doconfig | |
80 | unset beverbose | |
81 | unset MACHINE | |
82 | unset profile | |
83 | ||
84 | while ($#argv >= 1) | |
85 | if ("$argv[1]" =~ -*) then | |
86 | switch ("$argv[1]") | |
87 | case "-c": | |
88 | case "-config": | |
89 | set doconfig | |
90 | breaksw | |
91 | case "-m": | |
92 | case "-make": | |
93 | set domake | |
94 | breaksw | |
95 | case "-cpu": | |
96 | if ($#argv < 2) then | |
97 | echo "${prog}: missing argument to ${argv[1]}" | |
98 | exit 1 | |
99 | endif | |
100 | set MACHINE="$argv[2]" | |
101 | shift | |
102 | breaksw | |
103 | case "-d": | |
104 | if ($#argv < 2) then | |
105 | echo "${prog}: missing argument to ${argv[1]}" | |
106 | exit 1 | |
107 | endif | |
108 | set OBJDIR="$argv[2]" | |
109 | shift | |
110 | breaksw | |
111 | case "-verbose": | |
112 | set beverbose | |
113 | breaksw | |
114 | case "-p": | |
115 | case "-profile": | |
116 | set profile | |
117 | breaksw | |
118 | default: | |
119 | echo "${prog}: ${argv[1]}: unknown switch" | |
120 | exit 1 | |
121 | breaksw | |
122 | endsw | |
123 | shift | |
124 | else | |
125 | break | |
126 | endif | |
127 | end | |
128 | ||
129 | if ($#argv == 0) set argv=(GENERIC) | |
130 | ||
131 | if (! $?MACHINE) then | |
132 | if (-d /NextApps) then | |
133 | set MACHINE=`hostinfo | awk '/MC680x0/ { printf("m68k") } /MC880x0/ { printf("m88k") }'` | |
134 | endif | |
135 | endif | |
136 | ||
137 | if (! $?MACHINE) then | |
138 | if (-f /etc/machine) then | |
139 | set MACHINE="`/etc/machine`" | |
140 | else | |
141 | echo "${prog}: no /etc/machine, specify machine type with -cpu" | |
142 | echo "${prog}: e.g. ${prog} -cpu VAX CONFIGURATION" | |
143 | exit 1 | |
144 | endif | |
145 | endif | |
146 | ||
147 | set FEATURES_EXTRA= | |
148 | ||
149 | switch ("$MACHINE") | |
150 | case IBMRT: | |
151 | set cpu=ca | |
152 | set ID=RT | |
153 | set FEATURES_EXTRA="romp_dualcall.h romp_fpa.h" | |
154 | breaksw | |
155 | case SUN: | |
156 | set cpu=sun3 | |
157 | set ID=SUN3 | |
158 | breaksw | |
159 | default: | |
160 | set cpu=`echo $MACHINE | tr A-Z a-z` | |
161 | set ID=`echo $MACHINE | tr a-z A-Z` | |
162 | breaksw | |
163 | endsw | |
164 | set FEATURES=../h/features.h | |
165 | set FEATURES_H=(cs_*.h mach_*.h net_*.h\ | |
166 | cputypes.h cpus.h vice.h\ | |
167 | $FEATURES_EXTRA) | |
168 | set MASTER_DIR=../conf | |
169 | set MASTER = ${MASTER_DIR}/MASTER | |
170 | set MASTER_CPU=${MASTER}.${cpu} | |
171 | ||
172 | set MASTER_LOCAL = ${MASTER}.local | |
173 | set MASTER_CPU_LOCAL = ${MASTER_CPU}.local | |
174 | if (! -f $MASTER_LOCAL) set MASTER_LOCAL = "" | |
175 | if (! -f $MASTER_CPU_LOCAL) set MASTER_CPU_LOCAL = "" | |
176 | ||
177 | if (! -d $OBJDIR) then | |
178 | echo "[ creating $OBJDIR ]" | |
179 | mkdir -p $OBJDIR | |
180 | endif | |
181 | ||
182 | foreach SYS ($argv) | |
183 | set SYSID=${SYS}_${ID} | |
184 | set SYSCONF=$OBJDIR/config.$SYSID | |
185 | set BLDDIR=$OBJDIR | |
186 | if ($?beverbose) then | |
187 | echo "[ generating $SYSID from $MASTER_DIR/MASTER{,.$cpu}{,.local} ]" | |
188 | endif | |
189 | echo +$SYS \ | |
190 | | \ | |
191 | cat $MASTER $MASTER_LOCAL $MASTER_CPU $MASTER_CPU_LOCAL - \ | |
192 | $MASTER $MASTER_LOCAL $MASTER_CPU $MASTER_CPU_LOCAL \ | |
193 | | \ | |
194 | sed -n \ | |
195 | -e "/^+/{" \ | |
196 | -e "s;[-+];#&;gp" \ | |
197 | -e 't loop' \ | |
198 | -e ': loop' \ | |
199 | -e 'n' \ | |
200 | -e '/^#/b loop' \ | |
201 | -e '/^$/b loop' \ | |
202 | -e 's;^\([^#]*\).*#[ ]*<\(.*\)>[ ]*$;\2#\1;' \ | |
203 | -e 't not' \ | |
204 | -e 's;\([^#]*\).*;#\1;' \ | |
205 | -e 't not' \ | |
206 | -e ': not' \ | |
207 | -e 's;[ ]*$;;' \ | |
208 | -e 's;^\!\(.*\);\1#\!;' \ | |
209 | -e 'p' \ | |
210 | -e 't loop' \ | |
211 | -e 'b loop' \ | |
212 | -e '}' \ | |
213 | -e "/^[^#]/d" \ | |
214 | -e 's; ; ;g' \ | |
215 | -e "s;^# *\([^ ]*\)[ ]*=[ ]*\[\(.*\)\].*;\1#\2;p" \ | |
216 | | \ | |
217 | awk '-F#' '\ | |
218 | part == 0 && $1 != "" {\ | |
219 | m[$1]=m[$1] " " $2;\ | |
220 | next;\ | |
221 | }\ | |
222 | part == 0 && $1 == "" {\ | |
223 | for (i=NF;i>1;i--){\ | |
224 | s=substr($i,2);\ | |
225 | c[++na]=substr($i,1,1);\ | |
226 | a[na]=s;\ | |
227 | }\ | |
228 | while (na > 0){\ | |
229 | s=a[na];\ | |
230 | d=c[na--];\ | |
231 | if (m[s] == "") {\ | |
232 | f[s]=d;\ | |
233 | } else {\ | |
234 | nx=split(m[s],x," ");\ | |
235 | for (j=nx;j>0;j--) {\ | |
236 | z=x[j];\ | |
237 | a[++na]=z;\ | |
238 | c[na]=d;\ | |
239 | }\ | |
240 | }\ | |
241 | }\ | |
242 | part=1;\ | |
243 | next;\ | |
244 | }\ | |
245 | part != 0 {\ | |
246 | if ($1 != "") {\ | |
247 | n=split($1,x,",");\ | |
248 | ok=0;\ | |
249 | for (i=1;i<=n;i++) {\ | |
250 | if (f[x[i]] == "+") {\ | |
251 | ok=1;\ | |
252 | }\ | |
253 | }\ | |
254 | if (NF > 2 && ok == 0 || NF <= 2 && ok != 0) {\ | |
255 | print $2; \ | |
256 | }\ | |
257 | } else { \ | |
258 | print $2; \ | |
259 | }\ | |
260 | }\ | |
261 | ' >$SYSCONF.new | |
262 | if (-z $SYSCONF.new) then | |
263 | echo "${prog}: ${$SYSID}: no such configuration in $MASTER_DIR/MASTER{,.$cpu}" | |
264 | rm -f $SYSCONF.new | |
265 | endif | |
266 | if (! -d $BLDDIR) then | |
267 | echo "[ creating $BLDDIR ]" | |
268 | mkdir -p $BLDDIR | |
269 | endif | |
270 | # | |
271 | # These paths are used by config. | |
272 | # | |
273 | # "builddir" is the name of the directory where kernel binaries | |
274 | # are put. It is a single path element, never absolute, and is | |
275 | # always relative to "objectdir". "builddir" is used by config | |
276 | # solely to determine where to put files created by "config" (e.g. | |
277 | # the created Makefile and *.h's.) | |
278 | # | |
279 | # "objectdir" is the name of the directory which will hold "builddir". | |
280 | # It is a path; if relative, it is relative to the current directory | |
281 | # where config is run. It's sole use is to be prepended to "builddir" | |
282 | # to indicate where config-created files are to be placed (see above). | |
283 | # | |
284 | # "sourcedir" is the location of the sources used to build the kernel. | |
285 | # It is a path; if relative, it is relative to the directory specified | |
286 | # by the concatenation of "objectdir" and "builddir" (i.e. where the | |
287 | # kernel binaries are put). | |
288 | # | |
289 | echo 'builddir "."' >> $SYSCONF.new | |
9bccf70c | 290 | set OBJRELDIR=`$RELPATH $OBJROOT $OBJDIR` |
1c79356b A |
291 | echo 'objectdir "'$OBJROOT'/'$OBJRELDIR'"' >> $SYSCONF.new |
292 | set SRCDIR=`dirname $SOURCE` | |
293 | echo 'sourcedir "'$SRCROOT'"' >> $SYSCONF.new | |
294 | if (-f $SYSCONF) then | |
295 | diff $SYSCONF $SYSCONF.new | |
296 | rm -f $SYSCONF.old | |
297 | mv $SYSCONF $SYSCONF.old | |
298 | endif | |
299 | rm -f $SYSCONF | |
300 | mv $SYSCONF.new $SYSCONF | |
301 | if ($?doconfig) then | |
302 | echo "[ configuring $SYSID ]" | |
303 | if ($?profile) then | |
304 | $CONFIG_DIR/config -c $MASTER_DIR -p $SYSCONF | |
305 | else | |
306 | $CONFIG_DIR/config -c $MASTER_DIR $SYSCONF | |
307 | endif | |
308 | endif | |
309 | if ($?domake) then | |
310 | echo "[ making $SYSID ]" | |
311 | (cd $BLDDIR; make) | |
312 | endif | |
313 | end |