|
|
1.1 root 1: #! /bin/sh
2: # Install modified versions of certain ANSI-incompatible system header files
3: # which are fixed to work correctly with ANSI C
4: # and placed in a directory that GNU C will search.
5: # This works properly on a Sun in system version 3.4;
6: # for other versions, you had better check.
7:
8: # See README-fixinc for more information.
9:
10: # Directory containing the original header files.
11: # (This was named INCLUDES, but that conflicts with a name in Makefile.in.)
12: INPUT=${2-${INPUT-/usr/include}}
13:
14: # This prevents /bin/ex from failing if the current terminal type is
15: # unrecognizable.
16: TERM=unknown
17: export TERM
18:
19: # Directory in which to store the results.
20: LIB=${1-${LIB-/usr/local/lib/gcc-include}}
21:
22: # Make sure it exists.
23: if [ ! -d $LIB ]; then
24: mkdir $LIB || exit 1
25: fi
26:
27: # Make LIB absolute.
28: cd $LIB; LIB=`pwd`
29:
30: # Fail if no arg to specify a directory for the output.
31: if [ x$1 = x ]
32: then echo fixincludes: no output directory specified
33: exit 1
34: fi
35:
36: echo 'Building fixincludes in ' ${LIB}
37:
38: # Determine whether this system has symbolic links.
39: if ln -s X $LIB/ShouldNotExist 2>/dev/null; then
40: rm -f $LIB/ShouldNotExist
41: LINKS=true
42: else
43: LINKS=false
44: fi
45:
46: echo 'Making directories:'
47: cd ${INPUT}
48: if $LINKS; then
49: files=`ls -LR | sed -n s/:$//p`
50: else
51: files=`find . -type d -print | sed '/^.$/d'`
52: fi
53: for file in $files; do
54: rm -rf $LIB/$file
55: if [ ! -d $LIB/$file ]
56: then mkdir $LIB/$file
57: fi
58: done
59:
60: # treetops gets an alternating list
61: # of old directories to copy
62: # and the new directories to copy to.
63: treetops="${INPUT} ${LIB}"
64:
65: if $LINKS; then
66: echo 'Making internal symbolic directory links'
67: for file in $files; do
68: dest=`ls -ld $file | sed -n 's/.*-> //p'`
69: if [ "$dest" ]; then
70: cwd=`pwd`
71: # In case $dest is relative, get to $file's dir first.
72: cd ${INPUT}
73: cd `echo ./$file | sed -n 's&[^/]*$&&p'`
74: # Check that the target directory exists.
75: # Redirections changed to avoid bug in sh on Ultrix.
76: (cd $dest) > /dev/null 2>&1
77: if [ $? = 0 ]; then
78: cd $dest
79: # X gets the dir that the link actually leads to.
80: x=`pwd`
81: # If link leads back into ${INPUT},
82: # make a similar link here.
83: if expr $x : "${INPUT}/.*" > /dev/null; then
84: # Y gets the actual target dir name, relative to ${INPUT}.
85: y=`echo $x | sed -n "s&${INPUT}/&&p"`
86: echo $file '->' $y ': Making link'
87: rm -fr ${LIB}/$file > /dev/null 2>&1
88: ln -s ${LIB}/$y ${LIB}/$file > /dev/null 2>&1
89: else
90: # If the link is to outside ${INPUT},
91: # treat this directory as if it actually contained the files.
92: # This line used to have $dest instead of $x.
93: # $dest seemed to be wrong for links found in subdirectories
94: # of ${INPUT}. Does this change break anything?
95: treetops="$treetops $x ${LIB}/$file"
96: fi
97: fi
98: cd $cwd
99: fi
100: done
101: fi
102:
103: set - $treetops
104: while [ $# != 0 ]; do
105: # $1 is an old directory to copy, and $2 is the new directory to copy to.
106: echo "Finding header files in $1:"
107: cd ${INPUT}
108: cd $1
109: files=`find . -name '*.h' -type f -print`
110: echo 'Checking header files:'
111: # Note that BSD43_* are used on recent MIPS systems.
112: for file in $files; do
113: # This call to egrep is essential, since checking a file with egrep
114: # is much faster than actually trying to fix it.
115: # But the argument to egrep must be kept small, or many versions of egrep
116: # won't be able to handle it.
117: if egrep '[ _]_IO|CTRL|#define.NULL|#[el]*if.*([0-9]|sparc|vax|sun|pyr)' $file > /dev/null; then
118: echo Fixing $file
119: if [ -r $file ]; then
120: cp $file $2/$file >/dev/null 2>&1 \
121: || echo "Can't copy $file"
122: chmod +w $2/$file
123: sed -e '
124: :loop
125: /\\$/ N
126: /\\$/ b loop
127: /[ ]_IO[A-Z]*[ ]*(/ s/(\(.\),/('\''\1'\'',/
128: /[ ]BSD43__IO[A-Z]*[ ]*(/ s/(\(.\),/('\''\1'\'',/
129: /#define._IO/ s/'\''x'\''/x/g
130: /#define.BSD43__IO/ s/'\''x'\''/x/g
131: /[^A-Z]CTRL[ ]*(/ s/\([^'\'']\))/'\''\1'\'')/
132: /#define.CTRL/ s/'\''c'\''/c/g
133: /#define._CTRL/ s/'\''c'\''/c/g
134: /#define.BSD43_CTRL/ s/'\''c'\''/c/g
135: /#[a-z]*if.*[ (]m68k/ s/m68k/__m68k__/g
136: /#[a-z]*if.*[ (]__i386/ s/__i386/__i386__/g
137: /#[a-z]*if.*[ (]i386/ s/i386/__i386__/g
138: /#[a-z]*if.*[ (]sparc/ s/sparc/__sparc__/g
139: /#[a-z]*if.*[ (]mc68000/ s/mc68000/__mc68000__/g
140: /#[a-z]*if.*[ (]vax/ s/vax/__vax__/g
141: /#[a-z]*if.*[ (]sun3x/ s/sun3x/__sun3x__/g
142: /#[a-z]*if.*[ (]sun3/ s/sun3/__sun3__/g
143: /#[a-z]*if.*[ (]sun2/ s/sun2/__sun2__/g
144: /#[a-z]*if.*[ (]sun4c/ s/sun4c/__sun4c__/g
145: /#[a-z]*if.*[ (]sun4/ s/sun4/__sun4__/g
146: /#[a-z]*if.*[ (]sun/ s/sun/__sun__/g
147: /#[a-z]*if.*[ (]ns32000/ s/ns32000/__ns32000__/g
148: /#[a-z]*if.*[ (]pyr/ s/pyr/__pyr__/g
149: /#[a-z]*if.*[ (]is68k/ s/is68k/__is68k__/g
150: /#[a-z]*if.*[ (]sun386/ s/sun386/__sun386__/g
151: /#define.NULL[ ]/ i\
152: #undef NULL
153: ' $2/$file > $2/$file.sed
154: mv $2/$file.sed $2/$file
155: if cmp $file $2/$file >/dev/null 2>&1; then
156: echo Deleting $2/$file\; no fixes were needed.
157: rm $2/$file
158: fi
159: fi
160: fi
161: done
162: shift; shift
163: done
164:
165: cd ${INPUT}
166:
167: # Fix one other error in this file: a mismatched quote not inside a C comment.
168: file=sundev/vuid_event.h
169: if [ -r $file ]; then
170: if [ ! -r ${LIB}/$file ]; then
171: cp $file ${LIB}/$file >/dev/null 2>&1 \
172: || echo "Can't copy $file"
173: chmod +w ${LIB}/$file
174: fi
175: fi
176:
177: if [ -r ${LIB}/$file ]; then
178: echo Fixing $file comment
179: ex ${LIB}/$file <<EOF
180: g/doesn't/s/doesn't/does not/
181: wq
182: EOF
183: if cmp $file ${LIB}/$file >/dev/null 2>&1; then
184: echo Deleting ${LIB}/$file\; no fixes were needed.
185: rm ${LIB}/$file
186: fi
187: fi
188:
189: # Fix this Sun file to avoid intefering with stddef.h.
190:
191: file=sys/stdtypes.h
192: if [ -r $file ]; then
193: if [ ! -r ${LIB}/$file ]; then
194: cp $file ${LIB}/$file >/dev/null 2>&1 \
195: || echo "Can't copy $file"
196: chmod +w ${LIB}/$file
197: fi
198: fi
199:
200: if [ -r ${LIB}/$file ]; then
201: echo Fixing $file comment
202: ex ${LIB}/$file <<EOF
203: /size_t.*;/
204: i
205: #ifndef _SIZE_T
206: #define _SIZE_T
207: .
208: /size_t/+1
209: i
210: #endif
211: .
212: /ptrdiff_t.*;/
213: i
214: #ifndef _PTRDIFF_T
215: #define _PTRDIFF_T
216: .
217: /ptrdiff_t/+1
218: i
219: #endif
220: .
221: /wchar_t.*;/
222: i
223: #ifndef _WCHAR_T
224: #define _WCHAR_T
225: .
226: /wchar_t/+1
227: i
228: #endif
229: .
230: wq
231: EOF
232: if cmp $file ${LIB}/$file >/dev/null 2>&1; then
233: echo Deleting ${LIB}/$file\; no fixes were needed.
234: rm ${LIB}/$file
235: fi
236: fi
237:
238: # Fix this file to avoid intefering with stddef.h.
239:
240: file=sys/types.h
241: if [ -r $file ]; then
242: if [ ! -r ${LIB}/$file ]; then
243: cp $file ${LIB}/$file >/dev/null 2>&1 \
244: || echo "Can't copy $file"
245: chmod +w ${LIB}/$file
246: fi
247: fi
248:
249: if [ -r ${LIB}/$file ]; then
250: echo Fixing $file comment
251: ex ${LIB}/$file <<EOF
252: /size_t.*;/
253: i
254: #ifndef _SIZE_T
255: #define _SIZE_T
256: .
257: /size_t/+1
258: i
259: #endif
260: .
261: wq
262: EOF
263: if cmp $file ${LIB}/$file >/dev/null 2>&1; then
264: echo Deleting ${LIB}/$file\; no fixes were needed.
265: rm ${LIB}/$file
266: fi
267: fi
268:
269: # Fix an error in this file: a missing semi-colon at the end of the statsswtch
270: # structure definition.
271: file=rpcsvc/rstat.h
272: if [ -r $file ]; then
273: if [ ! -r ${LIB}/$file ]; then
274: cp $file ${LIB}/$file >/dev/null 2>&1 \
275: || echo "Can't copy $file"
276: chmod +w ${LIB}/$file
277: fi
278: fi
279:
280: if [ -r ${LIB}/$file ]; then
281: echo Fixing $file, definition of statsswtch
282: ex ${LIB}/$file <<EOF
283: g/boottime$/s//&;/
284: wq
285: EOF
286: if cmp $file ${LIB}/$file >/dev/null 2>&1; then
287: echo Deleting ${LIB}/$file\; no fixes were needed.
288: rm ${LIB}/$file
289: fi
290: fi
291:
292: # Fix an error in this file: a missing semi-colon at the end of the nodeent
293: # structure definition.
294: file=netdnet/dnetdb.h
295: if [ -r $file ]; then
296: if [ ! -r ${LIB}/$file ]; then
297: cp $file ${LIB}/$file >/dev/null 2>&1 \
298: || echo "Can't copy $file"
299: chmod +w ${LIB}/$file
300: fi
301: fi
302:
303: if [ -r ${LIB}/$file ]; then
304: echo Fixing $file, definition of nodeent
305: ex ${LIB}/$file <<EOF
306: g/na_addr/s//&;/
307: wq
308: EOF
309: if cmp $file ${LIB}/$file >/dev/null 2>&1; then
310: echo Deleting ${LIB}/$file\; no fixes were needed.
311: rm ${LIB}/$file
312: fi
313: fi
314:
315: # Check for bad #ifdef line (in Ultrix 4.1)
316:
317: file=sys/file.h
318: if [ -r $file ]; then
319: if [ ! -r ${LIB}/$file ]; then
320: mkdir ${LIB}/rpcsvc 2>&-
321: cp $file ${LIB}/$file >/dev/null 2>&1 \
322: || echo "Can't copy $file"
323: chmod +w ${LIB}/$file
324: fi
325: fi
326:
327: if [ -r ${LIB}/$file ]; then
328: echo Fixing $file, bad \#ifdef line
329: ex ${LIB}/$file <<EOF
330: g/^#ifdef KERNEL && !defined/
331: s/#ifdef KERNEL && !defined/#if defined(KERNEL) \&\& !defined/
332: wq
333: EOF
334: if cmp $file ${LIB}/$file >/dev/null 2>&1; then
335: echo Deleting ${LIB}/$file\; no fixes were needed.
336: rm ${LIB}/$file
337: fi
338: fi
339:
340: # Check for superfluous `static' (in Ultrix 4.2)
341:
342: file=machine/cpu.h
343: if [ -r $file ]; then
344: if [ ! -r ${LIB}/$file ]; then
345: mkdir ${LIB}/machine 2>&-
346: cp $file ${LIB}/$file >/dev/null 2>&1 \
347: || echo "Can't copy $file"
348: chmod +w ${LIB}/$file
349: fi
350: fi
351:
352: if [ -r ${LIB}/$file ]; then
353: echo Fixing $file, superfluous static
354: ex ${LIB}/$file <<EOF
355: g/^static struct tlb_pid_state/
356: s/static//
357: wq
358: EOF
359: if cmp $file ${LIB}/$file >/dev/null 2>&1; then
360: echo Deleting ${LIB}/$file\; no fixes were needed.
361: rm ${LIB}/$file
362: else
363: # This file has an alternative name, mips/cpu.h. Fix that name, too.
364: if cmp machine/cpu.h mips/cpu.h > /dev/null 2>& 1; then
365: mkdir ${LIB}/mips 2>&-
366: ln ${LIB}/$file ${LIB}/mips/cpu.h
367: fi
368: fi
369: fi
370:
371: # Deal with yet another challenge, this in X11/Xmu.h
372: file=X11/Xmu.h
373: if [ -r $file ]; then
374: if [ ! -r ${LIB}/$file ]; then
375: mkdir ${LIB}/X11 2>&-
376: cp $file ${LIB}/$file >/dev/null 2>&1 \
377: || echo "Can't copy $file"
378: chmod +w ${LIB}/$file
379: fi
380: fi
381:
382: if [ -r ${LIB}/$file ]; then
383: echo Fixing $file sprintf declaration
384: ex ${LIB}/$file <<EOF
385: /^extern char \* sprintf();$/c
386: #ifndef __STDC__
387: extern char * sprintf();
388: #endif /* !defined __STDC__ */
389: .
390: wq
391: EOF
392: if cmp $file ${LIB}/$file >/dev/null 2>&1; then
393: echo Deleting ${LIB}/$file\; no fixes were needed.
394: rm ${LIB}/$file
395: fi
396: fi
397:
398: # Check for missing ';' in struct
399:
400: file=netinet/ip.h
401: if [ -r $file ]; then
402: if [ ! -r ${LIB}/$file ]; then
403: mkdir ${LIB}/netinet 2>&-
404: sed -e '/^struct/,/^};/s/}$/};/' $file > ${LIB}/$file
405: cmp $file ${LIB}/$file >/dev/null 2>&1 && rm -f ${LIB}/$file
406: fi
407: fi
408:
409: # Fix the CAT macro in memvar.h.
410:
411: file=pixrect/memvar.h
412: if [ -r $file ]; then
413: if [ ! -r ${LIB}/$file ]; then
414: mkdir ${LIB}/pixrect 2>&-
415: sed -e '/^#define.CAT(a,b)/ i\
416: #ifdef __STDC__ \
417: #define CAT(a,b) a##b\
418: #else
419: /^#define.CAT(a,b)/ a\
420: #endif
421: ' $file > ${LIB}/$file
422: cmp $file ${LIB}/$file >/dev/null 2>&1 && rm -f ${LIB}/$file
423: fi
424: fi
425:
426: # Check for yet more missing ';' in struct (in SunOS 4.0.x)
427:
428: file=rpcsvc/rusers.h
429: if [ -r $file ]; then
430: if [ ! -r ${LIB}/$file ]; then
431: mkdir ${LIB}/rpcsvc 2>&-
432: sed -e '/^struct/,/^};/s/_cnt$/_cnt;/' $file > ${LIB}/$file
433: cmp $file ${LIB}/$file >/dev/null 2>&1 && rm -f ${LIB}/$file
434: fi
435: fi
436:
437: # Fix return type of exit and abort in <stdlib.h> on SunOS 4.1.
438:
439: file=stdlib.h
440: base=`basename $file`
441: if [ -r ${LIB}/$file ]; then
442: file_to_fix=${LIB}/$file
443: else
444: if [ -r ${INPUT}/$file ]; then
445: file_to_fix=${INPUT}/$file
446: else
447: file_to_fix=""
448: fi
449: fi
450: if [ \! -z "$file_to_fix" ]; then
451: echo Checking $file_to_fix
452: sed 's/int abort/void abort/g' $file_to_fix \
453: | sed 's/int exit/void exit/g' > /tmp/$base
454: if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
455: echo No change needed in $file_to_fix
456: else
457: echo Fixed $file_to_fix
458: rm -f ${LIB}/$file
459: cp /tmp/$base ${LIB}/$file
460: fi
461: rm -f /tmp/$base
462: fi
463:
464: # Fix bogus comment in <locale.h> on SunOS 4.1.
465:
466: file=locale.h
467: base=`basename $file`
468: if [ -r ${LIB}/$file ]; then
469: file_to_fix=${LIB}/$file
470: else
471: if [ -r ${INPUT}/$file ]; then
472: file_to_fix=${INPUT}/$file
473: else
474: file_to_fix=""
475: fi
476: fi
477: if [ \! -z "$file_to_fix" ]; then
478: echo Checking $file_to_fix
479: sed 's%#endif / \*%#endif /\* %g' $file_to_fix > /tmp/$base
480: if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
481: echo No change needed in $file_to_fix
482: else
483: echo Fixed $file_to_fix
484: rm -f ${LIB}/$file
485: cp /tmp/$base ${LIB}/$file
486: fi
487: rm -f /tmp/$base
488: fi
489:
490: # Fix bogus #ifdef in <hsfs/hsfs_spec.h> on SunOS 4.1.
491:
492: file=hsfs/hsfs_spec.h
493: base=`basename $file`
494: if [ -r ${LIB}/$file ]; then
495: file_to_fix=${LIB}/$file
496: echo Checking $file_to_fix
497: sed 's/\#ifdef __i386__ || __vax__/\#if __i386__ || __vax__/g' $file_to_fix > /tmp/$base
498: if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
499: echo No change needed in $file_to_fix
500: else
501: echo Fixed $file_to_fix
502: rm -f ${LIB}/$file
503: cp /tmp/$base ${LIB}/$file
504: fi
505: rm -f /tmp/$base
506: fi
507:
508: # Fix bogus #ifdef in <hsfs/hsnode.h> on SunOS 4.1.
509:
510: file=hsfs/hsnode.h
511: base=`basename $file`
512: if [ -r ${LIB}/$file ]; then
513: file_to_fix=${LIB}/$file
514: echo Checking $file_to_fix
515: sed 's/\#ifdef __i386__ || __sun4c__/\#if __i386__ || __sun4c__/g' $file_to_fix > /tmp/$base
516: if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
517: echo No change needed in $file_to_fix
518: else
519: echo Fixed $file_to_fix
520: rm -f ${LIB}/$file
521: cp /tmp/$base ${LIB}/$file
522: fi
523: rm -f /tmp/$base
524: fi
525:
526: # Fix bogus #ifdef in <hsfs/iso_spec.h> on SunOS 4.1.
527:
528: file=hsfs/iso_spec.h
529: base=`basename $file`
530: if [ -r ${LIB}/$file ]; then
531: file_to_fix=${LIB}/$file
532: echo Checking $file_to_fix
533: sed 's/\#ifdef __i386__ || __vax__/\#if __i386__ || __vax__/g' $file_to_fix > /tmp/$base
534: if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
535: echo No change needed in $file_to_fix
536: else
537: echo Fixed $file_to_fix
538: rm -f ${LIB}/$file
539: cp /tmp/$base ${LIB}/$file
540: fi
541: rm -f /tmp/$base
542: fi
543:
544: echo 'Removing unneeded directories:'
545: cd $LIB
546: files=`find . -type d -print | sort -r`
547: for file in $files; do
548: rmdir $LIB/$file > /dev/null 2>&1
549: done
550:
551: if $LINKS; then
552: echo 'Making internal symbolic non-directory links'
553: cd ${INPUT}
554: files=`find . -type l -print`
555: for file in $files; do
556: dest=`ls -ld $file | sed -n 's/.*-> //p'`
557: if expr "$dest" : '[^/].*' > /dev/null; then
558: target=${LIB}/`echo file | sed "s|[^/]*\$|$dest|"`
559: if [ -f $target ]; then
560: ln -s $dest ${LIB}/$file >/dev/null 2>&1
561: fi
562: fi
563: done
564: fi
565:
566: exit 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.