|
|
1.1 root 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
290: set OBJRELDIR=`relpath $OBJROOT $OBJDIR`
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.