source: trunk/third/gcc/fixinc.svr4 @ 8834

Revision 8834, 41.2 KB checked in by ghudson, 28 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r8833, which included commits to RCS files with non-trunk default branches.
  • Property svn:executable set to *
Line 
1#! /bin/sh
2#
3#   fixinc.svr4  --  Install modified versions of certain ANSI-incompatible
4#   native System V Release 4 system include files.
5#
6#   Written by Ron Guilmette (rfg@ncd.com).
7#
8# This file is part of GNU CC.
9#
10# GNU CC is free software; you can redistribute it and/or modify
11# it under the terms of the GNU General Public License as published by
12# the Free Software Foundation; either version 2, or (at your option)
13# any later version.
14#
15# GNU CC is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18# GNU General Public License for more details.
19#
20# You should have received a copy of the GNU General Public License
21# along with GNU CC; see the file COPYING.  If not, write to
22# the Free Software Foundation, 59 Temple Place - Suite 330,
23# Boston, MA 02111-1307, USA.
24#
25#       This script munges the native include files provided with System V
26#       Release 4 systems so as to remove things which are violations of the
27#       ANSI C standard.  Once munged, the resulting new system include files
28#       are placed in a directory that GNU C will search *before* searching
29#       the /usr/include directory. This script should work properly for most
30#       System V Release 4 systems.  For other types of systems, you should
31#       use the `fixincludes' script instead.
32#
33#       See README-fixinc for more information.
34
35# Directory containing the original header files.
36INPUT=${2-${INPUT-/usr/include}}
37
38# Fail if no arg to specify a directory for the output.
39if [ x$1 = x ]
40then echo fixincludes: no output directory specified
41exit 1
42fi
43
44# Directory in which to store the results.
45LIB=${1?"fixincludes: output directory not specified"}
46
47# Make sure it exists.
48if [ ! -d $LIB ]; then
49  mkdir $LIB || exit 1
50fi
51
52ORIG_DIR=`pwd`
53
54# Make LIB absolute if it is relative.
55# Don't do this if not necessary, since may screw up automounters.
56case $LIB in
57/*)
58        ;;
59*)
60        LIB=$ORIG_DIR/$LIB
61        ;;
62esac
63
64echo 'Building fixincludes in ' ${LIB}
65
66# Determine whether this filesystem has symbolic links.
67if ln -s X $LIB/ShouldNotExist 2>/dev/null; then
68  rm -f $LIB/ShouldNotExist
69  LINKS=true
70else
71  LINKS=false
72fi
73
74echo 'Making directories:'
75cd ${INPUT}
76if $LINKS; then
77  files=`ls -LR | sed -n s/:$//p`
78else
79  files=`find . -type d -print | sed '/^.$/d'`
80fi
81for file in $files; do
82  rm -rf $LIB/$file
83  if [ ! -d $LIB/$file ]
84  then mkdir $LIB/$file
85  fi
86done
87
88# treetops gets an alternating list
89# of old directories to copy
90# and the new directories to copy to.
91treetops="${INPUT} ${LIB}"
92
93if $LINKS; then
94  echo 'Making internal symbolic directory links'
95  for file in $files; do
96    dest=`ls -ld $file | sed -n 's/.*-> //p'`
97    if [ "$dest" ]; then   
98      cwd=`pwd`
99      # In case $dest is relative, get to $file's dir first.
100      cd ${INPUT}
101      cd `echo ./$file | sed -n 's&[^/]*$&&p'`
102      # Check that the target directory exists.
103      # Redirections changed to avoid bug in sh on Ultrix.
104      (cd $dest) > /dev/null 2>&1
105      if [ $? = 0 ]; then
106        cd $dest
107        # X gets the dir that the link actually leads to.
108        x=`pwd`
109        # If link leads back into ${INPUT},
110        # make a similar link here.
111        if expr $x : "${INPUT}/.*" > /dev/null; then
112          # Y gets the actual target dir name, relative to ${INPUT}.
113          y=`echo $x | sed -n "s&${INPUT}/&&p"`
114          # DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}.
115          dots=`echo "$file" |
116            sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'`
117          echo $file '->' $dots$y ': Making link'
118          rm -fr ${LIB}/$file > /dev/null 2>&1
119          ln -s $dots$y ${LIB}/$file > /dev/null 2>&1
120        else
121          # If the link is to outside ${INPUT},
122          # treat this directory as if it actually contained the files.
123# This line used to have $dest instead of $x.
124# $dest seemed to be wrong for links found in subdirectories
125# of ${INPUT}.  Does this change break anything?
126          treetops="$treetops $x ${LIB}/$file"
127        fi
128      fi
129      cd $cwd
130    fi
131  done
132fi
133
134set - $treetops
135while [ $# != 0 ]; do
136  # $1 is an old directory to copy, and $2 is the new directory to copy to.
137  echo "Finding header files in $1:"
138  cd ${INPUT}
139  cd $1
140  files=`find . -name '*.h' -type f -print`
141  echo 'Checking header files:'
142  for file in $files; do
143      if [ -r $file ]; then
144        cp $file $2/$file >/dev/null 2>&1 || echo "Can't copy $file"
145        chmod +w $2/$file
146        chmod a+r $2/$file
147
148# The following have been removed from the sed command below
149# because it is more useful to leave these things in.
150# The only reason to remove them was for -pedantic,
151# which isn't much of a reason. -- rms.
152#         /^[   ]*#[    ]*ident/d
153
154# This code makes Solaris SCSI fail, because it changes the
155# alignment within some critical structures.  See <sys/scsi/impl/commands.h>.
156#         s/u_char\([   ][      ]*[a-zA-Z0-9_][a-zA-Z0-9_]*[    ]*:[    ]*[0-9][0-9]*\)/u_int\1/
157# Disable these also, since they probably aren't safe either.
158#         s/u_short\([  ][      ]*[a-zA-Z0-9_][a-zA-Z0-9_]*[    ]*:[    ]*[0-9][0-9]*\)/u_int\1/
159#         s/ushort\([   ][      ]*[a-zA-Z0-9_][a-zA-Z0-9_]*[    ]*:[    ]*[0-9][0-9]*\)/u_int\1/
160#         s/evcm_t\([   ][      ]*[a-zA-Z0-9_][a-zA-Z0-9_]*[    ]*:[    ]*[0-9][0-9]*\)/u_int\1/
161#         s/Pbyte\([    ][      ]*[a-zA-Z0-9_][a-zA-Z0-9_]*[    ]*:[    ]*SEQSIZ\)/unsigned int\1/
162
163# The change of u_char, etc, to u_int
164# applies to bit fields.
165        sed -e '
166          s%^\([        ]*#[    ]*else\)[       ]*/[^*].*%\1%
167          s%^\([        ]*#[    ]*else\)[       ]*[^/   ].*%\1%
168          s%^\([        ]*#[    ]*endif\)[      ]*/[^*].*%\1%
169          s%^\([        ]*#[    ]*endif\)[      ]*[^/   ].*%\1%
170          s/#lint(on)/defined(lint)/g
171          s/#lint(off)/!defined(lint)/g
172          s/#machine(\([^)]*\))/defined(__\1__)/g
173          s/#system(\([^)]*\))/defined(__\1__)/g
174          s/#cpu(\([^)]*\))/defined(__\1__)/g
175          /#[a-z]*if.*[  (]m68k/                s/\([^_]\)m68k/\1__m68k__/g
176          /#[a-z]*if.*[  (]__i386\([^_]\)/      s/__i386/__i386__/g
177          /#[a-z]*if.*[  (]i386/                s/\([^_]\)i386/\1__i386__/g
178          /#[a-z]*if.*[  (!]__i860\([^_]\)/     s/__i860/__i860__/g
179          /#[a-z]*if.*[  (!]i860/               s/\([^_]\)i860/\1__i860__/g
180          /#[a-z]*if.*[  (]sparc/       s/\([^_]\)sparc/\1__sparc__/g
181          /#[a-z]*if.*[  (]mc68000/     s/\([^_]\)mc68000/\1__mc68000__/g
182          /#[a-z]*if.*[  (]vax/         s/\([^_]\)vax/\1__vax__/g
183          /#[a-z]*if.*[  (]sun/         s/\([^_]\)\(sun[a-z0-9]*\)\([^a-z0-9_]\)/\1__\2__\3/g
184          /#[a-z]*if.*[  (]sun/         s/\([^_]\)\(sun[a-z0-9]*\)$/\1__\2__/g
185          /#[a-z]*if.*[  (]ns32000/     s/\([^_]\)ns32000/\1__ns32000__/g
186          /#[a-z]*if.*[  (]pyr/         s/\([^_]\)pyr/\1__pyr__/g
187          /#[a-z]*if.*[  (]is68k/       s/\([^_]\)is68k/\1__is68k__/g
188          s/__STDC__[   ][      ]*==[   ][      ]*0/!defined (__STRICT_ANSI__)/g
189          s/__STDC__[   ][      ]*==[   ][      ]*1/defined (__STRICT_ANSI__)/g
190          s/__STDC__[   ][      ]*!=[   ][      ]*0/defined (__STRICT_ANSI__)/g
191          s/__STDC__ - 0 == 0/!defined (__STRICT_ANSI__)/g
192          /^typedef[    ][      ]*[unsigned     ]*long[         ][      ]*[u_]*longlong_t;/s/long/long long/
193        ' $2/$file > $2/$file.sed
194        mv $2/$file.sed $2/$file
195        if cmp $file $2/$file >/dev/null 2>&1; then
196           rm $2/$file
197        else
198           echo Fixed $file
199        fi
200      fi
201  done
202  shift; shift
203done
204
205# Install the proper definition of the three standard types in header files
206# that they come from.
207for file in sys/types.h stdlib.h sys/stdtypes.h stddef.h memory.h unistd.h; do
208  if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
209    cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
210    chmod +w ${LIB}/$file 2>/dev/null
211    chmod a+r ${LIB}/$file 2>/dev/null
212  fi
213
214  if [ -r ${LIB}/$file ]; then
215    echo Fixing size_t, ptrdiff_t and wchar_t in $file
216    sed \
217      -e '/typedef[     ][      ]*[a-z_][       a-z_]*[         ]size_t/i\
218#ifndef __SIZE_TYPE__\
219#define __SIZE_TYPE__ long unsigned int\
220#endif
221' \
222      -e 's/typedef[    ][      ]*[a-z_][       a-z_]*[         ]size_t/typedef __SIZE_TYPE__ size_t/' \
223      -e '/typedef[     ][      ]*[a-z_][       a-z_]*[         ]ptrdiff_t/i\
224#ifndef __PTRDIFF_TYPE__\
225#define __PTRDIFF_TYPE__ long int\
226#endif
227' \
228      -e 's/typedef[    ][      ]*[a-z_][       a-z_]*[         ]ptrdiff_t/typedef __PTRDIFF_TYPE__ ptrdiff_t/' \
229      -e '/typedef[     ][      ]*[a-z_][       a-z_]*[         ]wchar_t/i\
230#ifndef __WCHAR_TYPE__\
231#define __WCHAR_TYPE__ int\
232#endif
233' \
234      -e 's/typedef[    ][      ]*[a-z_][       a-z_]*[         ]wchar_t/typedef __WCHAR_TYPE__ wchar_t/' \
235      ${LIB}/$file > ${LIB}/${file}.sed
236    rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
237    if cmp $file ${LIB}/$file >/dev/null 2>&1; then
238      rm ${LIB}/$file
239    fi
240  fi
241done
242
243# Fix first broken decl of getcwd present on some svr4 systems.
244
245file=stdlib.h
246base=`basename $file`
247if [ -r ${LIB}/$file ]; then
248  file_to_fix=${LIB}/$file
249else
250  if [ -r ${INPUT}/$file ]; then
251    file_to_fix=${INPUT}/$file
252  else
253    file_to_fix=""
254  fi
255fi
256if [ \! -z "$file_to_fix" ]; then
257  echo Checking $file_to_fix
258  sed -e 's/getcwd(char \*, int)/getcwd(char *, size_t)/' $file_to_fix > /tmp/$base
259  if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
260    true
261  else
262    echo Fixed $file_to_fix
263    rm -f ${LIB}/$file
264    cp /tmp/$base ${LIB}/$file
265    chmod a+r ${LIB}/$file
266  fi
267  rm -f /tmp/$base
268fi
269
270# Fix second broken decl of getcwd present on some svr4 systems.  Also
271# fix the incorrect decl of profil present on some svr4 systems.
272
273file=unistd.h
274base=`basename $file`
275if [ -r ${LIB}/$file ]; then
276  file_to_fix=${LIB}/$file
277else
278  if [ -r ${INPUT}/$file ]; then
279    file_to_fix=${INPUT}/$file
280  else
281    file_to_fix=""
282  fi
283fi
284if [ \! -z "$file_to_fix" ]; then
285  echo Checking $file_to_fix
286  sed -e 's/getcwd(char \*, int)/getcwd(char *, size_t)/' $file_to_fix \
287    | sed -e 's/profil(unsigned short \*, unsigned int, unsigned int, unsigned int)/profil(unsigned short *, size_t, int, unsigned)/' > /tmp/$base
288  if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
289    true
290  else
291    echo Fixed $file_to_fix
292    rm -f ${LIB}/$file
293    cp /tmp/$base ${LIB}/$file
294    chmod a+r ${LIB}/$file
295  fi
296  rm -f /tmp/$base
297fi
298
299# Fix the definition of NULL in <sys/param.h> so that it is conditional
300# and so that it is correct for both C and C++.
301
302file=sys/param.h
303base=`basename $file`
304if [ -r ${LIB}/$file ]; then
305  file_to_fix=${LIB}/$file
306else
307  if [ -r ${INPUT}/$file ]; then
308    file_to_fix=${INPUT}/$file
309  else
310    file_to_fix=""
311  fi
312fi
313if [ \! -z "$file_to_fix" ]; then
314  echo Checking $file_to_fix
315  cp $file_to_fix /tmp/$base
316  chmod +w /tmp/$base
317  chmod a+r /tmp/$base
318  sed -e '/^#define[    ]*NULL[         ]*0$/c\
319#ifndef NULL\
320#ifdef __cplusplus\
321#define __NULL_TYPE\
322#else /* !defined(__cplusplus) */\
323#define __NULL_TYPE (void *)\
324#endif /* !defined(__cplusplus) */\
325#define NULL (__NULL_TYPE 0)\
326#endif /* !defined(NULL) */' /tmp/$base > /tmp/$base.sed
327  if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
328    true
329  else
330    echo Fixed $file_to_fix
331    rm -f ${LIB}/$file
332    cp /tmp/$base.sed ${LIB}/$file
333    chmod a+r ${LIB}/$file
334  fi
335  rm -f /tmp/$base /tmp/$base.sed
336fi
337
338# Likewise fix the definition of NULL in <stdio.h> so that it is conditional
339# and so that it is correct for both C and C++.
340
341file=stdio.h
342base=`basename $file`
343if [ -r ${LIB}/$file ]; then
344  file_to_fix=${LIB}/$file
345else
346  if [ -r ${INPUT}/$file ]; then
347    file_to_fix=${INPUT}/$file
348  else
349    file_to_fix=""
350  fi
351fi
352if [ \! -z "$file_to_fix" ]; then
353  echo Checking $file_to_fix
354  cp $file_to_fix /tmp/$base
355  chmod +w /tmp/$base
356  sed -e '/^#define[    ]*NULL[         ]*0$/c\
357#ifdef __cplusplus\
358#define __NULL_TYPE\
359#else /* !defined(__cplusplus) */\
360#define __NULL_TYPE (void *)\
361#endif /* !defined(__cplusplus) */\
362#define NULL (__NULL_TYPE 0)' /tmp/$base > /tmp/$base.sed
363  if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
364    true
365  else
366    echo Fixed $file_to_fix
367    rm -f ${LIB}/$file
368    cp /tmp/$base.sed ${LIB}/$file
369    chmod a+r ${LIB}/$file
370  fi
371  rm -f /tmp/$base /tmp/$base.sed
372fi
373
374# Likewise fix the definition of NULL in <dbm.h> so that it is conditional
375# and so that it is correct for both C and C++.
376
377file=dbm.h
378base=`basename $file`
379if [ -r ${LIB}/$file ]; then
380  file_to_fix=${LIB}/$file
381else
382  if [ -r ${INPUT}/$file ]; then
383    file_to_fix=${INPUT}/$file
384  else
385    file_to_fix=""
386  fi
387fi
388if [ \! -z "$file_to_fix" ]; then
389  echo Checking $file_to_fix
390  cp $file_to_fix /tmp/$base
391  chmod +w /tmp/$base
392  sed -e '/^#define[    ]*NULL[         ]*((char \*) 0)$/c\
393#ifndef NULL\
394#ifdef __cplusplus\
395#define __NULL_TYPE\
396#else /* !defined(__cplusplus) */\
397#define __NULL_TYPE (void *)\
398#endif /* !defined(__cplusplus) */\
399#define NULL (__NULL_TYPE 0)\
400#endif /* !defined(NULL) */' /tmp/$base > /tmp/$base.sed
401  if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
402    true
403  else
404    echo Fixed $file_to_fix
405    rm -f ${LIB}/$file
406    cp /tmp/$base.sed ${LIB}/$file
407    chmod a+r ${LIB}/$file
408  fi
409  rm -f /tmp/$base /tmp/$base.sed
410fi
411
412# Add a prototyped declaration of mmap to <sys/mman.h>.
413
414file=sys/mman.h
415base=`basename $file`
416if [ -r ${LIB}/$file ]; then
417  file_to_fix=${LIB}/$file
418else
419  if [ -r ${INPUT}/$file ]; then
420    file_to_fix=${INPUT}/$file
421  else
422    file_to_fix=""
423  fi
424fi
425if [ \! -z "$file_to_fix" ]; then
426  echo Checking $file_to_fix
427  cp $file_to_fix /tmp/$base
428  chmod +w /tmp/$base
429  sed -e '/^extern caddr_t mmap();$/c\
430#ifdef __STDC__\
431extern caddr_t mmap (caddr_t, size_t, int, int, int, off_t);\
432#else /* !defined(__STDC__) */\
433extern caddr_t mmap ();\
434#endif /* !defined(__STDC__) */' /tmp/$base > /tmp/$base.sed
435  if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
436    true
437  else
438    echo Fixed $file_to_fix
439    rm -f ${LIB}/$file
440    cp /tmp/$base.sed ${LIB}/$file
441    chmod a+r ${LIB}/$file
442  fi
443  rm -f /tmp/$base /tmp/$base.sed
444fi
445
446# Fix declarations of `ftw' and `nftw' in <ftw.h>.  On some/most SVR4 systems
447# the file <ftw.h> contains extern declarations of these functions followed
448# by explicitly `static' definitions of these functions... and that's not
449# allowed according to ANSI C.  (Note however that on Solaris, this header
450# file glitch has been pre-fixed by Sun.  In the Solaris version of <ftw.h>
451# there are no static definitions of any function so we don't need to do
452# any of this stuff when on Solaris.
453
454file=ftw.h
455base=`basename $file`
456if [ -r ${LIB}/$file ]; then
457  file_to_fix=${LIB}/$file
458else
459  if [ -r ${INPUT}/$file ]; then
460    file_to_fix=${INPUT}/$file
461  else
462    file_to_fix=""
463  fi
464fi
465if test -z "$file_to_fix" || grep 'define       ftw' $file_to_fix > /dev/null; then
466# Either we have no <ftw.h> file at all, or else we have the pre-fixed Solaris
467# one.  Either way, we don't have to do anything.
468  true
469else
470  echo Checking $file_to_fix
471  cp $file_to_fix /tmp/$base
472  chmod +w /tmp/$base
473  sed -e '/^extern int ftw(const/i\
474#if !defined(_STYPES)\
475static\
476#else\
477extern\
478#endif'\
479  -e 's/extern \(int ftw(const.*\)$/\1/' \
480  -e '/^extern int nftw/i\
481#if defined(_STYPES)\
482static\
483#else\
484extern\
485#endif'\
486  -e 's/extern \(int nftw.*\)$/\1/' \
487  -e '/^extern int ftw(),/c\
488#if !defined(_STYPES)\
489static\
490#else\
491extern\
492#endif\
493  int ftw();\
494#if defined(_STYPES)\
495static\
496#else\
497extern\
498#endif\
499  int nftw();' /tmp/$base > /tmp/$base.sed
500  if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
501    true
502  else
503    echo Fixed $file_to_fix
504    rm -f ${LIB}/$file
505    cp /tmp/$base.sed ${LIB}/$file
506    chmod a+r ${LIB}/$file
507  fi
508  rm -f /tmp/$base /tmp/$base.sed
509fi
510
511# Avoid the definition of the bool type in the Solaris 2.x curses.h when using
512# g++, since it's now an official type in the C++ language.
513file=curses.h
514base=`basename $file`
515if [ -r ${LIB}/$file ]; then
516  file_to_fix=${LIB}/$file
517else
518  if [ -r ${INPUT}/$file ]; then
519    file_to_fix=${INPUT}/$file
520  else
521    file_to_fix=""
522  fi
523fi
524
525if [ \! -z "$file_to_fix" ]; then
526  echo Checking $file_to_fix
527  cp $file_to_fix /tmp/$base
528  chmod +w /tmp/$base
529  sed -e 's,^typedef[   ]char[  ]bool;$,#ifndef __cplusplus\
530typedef char bool;\
531#endif /* !defined __cplusplus */,' /tmp/$base > /tmp/$base.sed
532  if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
533    true
534  else
535    echo Fixed $file_to_fix
536    rm -f ${LIB}/$file
537    cp /tmp/$base.sed ${LIB}/$file
538    chmod a+r ${LIB}/$file
539  fi
540  rm -f /tmp/$base /tmp/$base.sed
541fi
542
543# Add a `static' declaration of `getrnge' into <regexp.h>.
544
545# Don't do this if there is already a `static void getrnge' declaration
546# present, since this would cause a redeclaration error.  Solaris 2.x has
547# such a declaration.
548
549file=regexp.h
550base=`basename $file`
551if [ -r ${LIB}/$file ]; then
552  file_to_fix=${LIB}/$file
553else
554  if [ -r ${INPUT}/$file ]; then
555    file_to_fix=${INPUT}/$file
556  else
557    file_to_fix=""
558  fi
559fi
560if [ \! -z "$file_to_fix" ]; then
561  echo Checking $file_to_fix
562  if grep "static void getrnge" $file_to_fix > /dev/null; then
563    true
564  else
565    cp $file_to_fix /tmp/$base
566    chmod +w /tmp/$base
567    sed -e '/^static int[       ]*size;/c\
568static int      size ;\
569\
570static int getrnge ();' /tmp/$base > /tmp/$base.sed
571    if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
572      true
573    else
574      echo Fixed $file_to_fix
575      rm -f ${LIB}/$file
576      cp /tmp/$base.sed ${LIB}/$file
577      chmod a+r ${LIB}/$file
578    fi
579  fi
580  rm -f /tmp/$base /tmp/$base.sed
581fi
582
583# Disable apparent native compiler optimization cruft in SVR4.2 <string.h>
584# that is visible to any ANSI compiler using this include.  Simply
585# delete the lines that #define some string functions to internal forms.
586
587file=string.h
588base=`basename $file`
589if [ -r ${LIB}/$file ]; then
590  file_to_fix=${LIB}/$file
591else
592  if [ -r ${INPUT}/$file ]; then
593    file_to_fix=${INPUT}/$file
594  else
595    file_to_fix=""
596  fi
597fi
598if [ \! -z "$file_to_fix" ]; then
599  echo Checking $file_to_fix
600  cp $file_to_fix /tmp/$base
601  chmod +w /tmp/$base
602  sed -e '/#define.*__std_hdr_/d' /tmp/$base > /tmp/$base.sed
603  if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
604    true
605  else
606    echo Fixed $file_to_fix
607    rm -f ${LIB}/$file
608    cp /tmp/$base.sed ${LIB}/$file
609    chmod a+r ${LIB}/$file
610  fi
611  rm -f /tmp/$base /tmp/$base.sed
612fi
613
614# Delete any #defines of `__i386' which may be present in <ieeefp.h>.  They
615# tend to conflict with the compiler's own definition of this symbol.  (We
616# will use the compiler's definition.)
617# Likewise __sparc, for Solaris, and __i860, and a few others
618# (guessing it is necessary for all of them).
619
620file=ieeefp.h
621base=`basename $file`
622if [ -r ${LIB}/$file ]; then
623  file_to_fix=${LIB}/$file
624else
625  if [ -r ${INPUT}/$file ]; then
626    file_to_fix=${INPUT}/$file
627  else
628    file_to_fix=""
629  fi
630fi
631if [ \! -z "$file_to_fix" ]; then
632  echo Checking $file_to_fix
633  cp $file_to_fix /tmp/$base
634  chmod +w /tmp/$base
635  sed -e '/#define[     ]*__i386 /d' -e '/#define[      ]*__sparc /d' \
636      -e '/#define[     ]*__i860 /d' -e '/#define[      ]*__m88k /d' \
637      -e '/#define[     ]*__mips /d' -e '/#define[      ]*__m68k /d' \
638     /tmp/$base > /tmp/$base.sed
639  if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
640    true
641  else
642    echo Fixed $file_to_fix
643    rm -f ${LIB}/$file
644    cp /tmp/$base.sed ${LIB}/$file
645    chmod a+r ${LIB}/$file
646  fi
647  rm -f /tmp/$base /tmp/$base.sed
648fi
649
650# Add a #define of _SIGACTION_ into <sys/signal.h>.
651# Also fix types of SIG_DFL, SIG_ERR, SIG_IGN, and SIG_HOLD.
652
653file=sys/signal.h
654base=`basename $file`
655if [ -r ${LIB}/$file ]; then
656  file_to_fix=${LIB}/$file
657else
658  if [ -r ${INPUT}/$file ]; then
659    file_to_fix=${INPUT}/$file
660  else
661    file_to_fix=""
662  fi
663fi
664if [ \! -z "$file_to_fix" ]; then
665  echo Checking $file_to_fix
666  cp $file_to_fix /tmp/$base
667  chmod +w /tmp/$base
668  sed -e '/^struct sigaction {/c\
669#define _SIGACTION_\
670struct  sigaction  {' \
671  -e '1,$s/(void *(\*)())/(void (*)(int))/' /tmp/$base > /tmp/$base.sed
672  if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
673    true
674  else
675    echo Fixed $file_to_fix
676    rm -f ${LIB}/$file
677    cp /tmp/$base.sed ${LIB}/$file
678    chmod a+r ${LIB}/$file
679  fi
680  rm -f /tmp/$base /tmp/$base.sed
681fi
682
683# Fix declarations of `makedev', `major', and `minor' in <sys/mkdev.h>.
684
685file=sys/mkdev.h
686base=`basename $file`
687if [ -r ${LIB}/$file ]; then
688  file_to_fix=${LIB}/$file
689else
690  if [ -r ${INPUT}/$file ]; then
691    file_to_fix=${INPUT}/$file
692  else
693    file_to_fix=""
694  fi
695fi
696if [ \! -z "$file_to_fix" ]; then
697  echo Checking $file_to_fix
698  cp $file_to_fix /tmp/$base
699  chmod +w /tmp/$base
700  sed -e '/^dev_t makedev(const/c\
701static dev_t makedev(const major_t, const minor_t);' \
702  -e '/^dev_t makedev()/c\
703static dev_t makedev();' \
704  -e '/^major_t major(const/c\
705static major_t major(const dev_t);' \
706  -e '/^major_t major()/c\
707static major_t major();' \
708  -e '/^minor_t minor(const/c\
709static minor_t minor(const dev_t);' \
710  -e '/^minor_t minor()/c\
711static minor_t minor();' /tmp/$base > /tmp/$base.sed
712  if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
713    true
714  else
715    echo Fixed $file_to_fix
716    rm -f ${LIB}/$file
717    cp /tmp/$base.sed ${LIB}/$file
718    chmod a+r ${LIB}/$file
719  fi
720  rm -f /tmp/$base /tmp/$base.sed
721fi
722
723# Fix reference to NMSZ in <sys/adv.h>.
724
725file=sys/adv.h
726base=`basename $file`
727if [ -r ${LIB}/$file ]; then
728  file_to_fix=${LIB}/$file
729else
730  if [ -r ${INPUT}/$file ]; then
731    file_to_fix=${INPUT}/$file
732  else
733    file_to_fix=""
734  fi
735fi
736if [ \! -z "$file_to_fix" ]; then
737  echo Checking $file_to_fix
738  sed 's/\[NMSZ\]/\[RFS_NMSZ\]/g' $file_to_fix > /tmp/$base
739  if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
740    true
741  else
742    echo Fixed $file_to_fix
743    rm -f ${LIB}/$file
744    cp /tmp/$base ${LIB}/$file
745    chmod a+r ${LIB}/$file
746  fi
747  rm -f /tmp/$base
748fi
749
750# Fix reference to NC_NPI_RAW in <sys/netcspace.h>.  Also fix types of
751# array initializers.
752
753file=sys/netcspace.h
754base=`basename $file`
755if [ -r ${LIB}/$file ]; then
756  file_to_fix=${LIB}/$file
757else
758  if [ -r ${INPUT}/$file ]; then
759    file_to_fix=${INPUT}/$file
760  else
761    file_to_fix=""
762  fi
763fi
764if [ \! -z "$file_to_fix" ]; then
765  echo Checking $file_to_fix
766  sed 's/NC_NPI_RAW/NC_TPI_RAW/g' $file_to_fix \
767    | sed 's/NC_/(unsigned long) NC_/' > /tmp/$base
768  if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
769    true
770  else
771    echo Fixed $file_to_fix
772    rm -f ${LIB}/$file
773    cp /tmp/$base ${LIB}/$file
774    chmod a+r ${LIB}/$file
775  fi
776  rm -f /tmp/$base
777fi
778
779# Conditionalize all of <fs/rfs/rf_cache.h> on _KERNEL being defined.
780
781file=fs/rfs/rf_cache.h
782base=`basename $file`
783if [ -r ${LIB}/$file ]; then
784  file_to_fix=${LIB}/$file
785else
786  if [ -r ${INPUT}/$file ]; then
787    file_to_fix=${INPUT}/$file
788  else
789    file_to_fix=""
790  fi
791fi
792if [ \! -z "$file_to_fix" ]; then
793  echo Checking $file_to_fix
794  if grep _KERNEL $file_to_fix > /dev/null; then
795    true
796  else
797    echo '#ifdef _KERNEL' > /tmp/$base
798    cat $file_to_fix >> /tmp/$base
799    echo '#endif /* defined(_KERNEL) */' >> /tmp/$base
800    echo Fixed $file_to_fix
801    rm -f ${LIB}/$file
802    cp /tmp/$base ${LIB}/$file
803    chmod a+r ${LIB}/$file
804    rm -f /tmp/$base
805  fi
806fi
807
808# Conditionalize all of <sys/erec.h> on _KERNEL being defined.
809
810file=sys/erec.h
811base=`basename $file`
812if [ -r ${LIB}/$file ]; then
813  file_to_fix=${LIB}/$file
814else
815  if [ -r ${INPUT}/$file ]; then
816    file_to_fix=${INPUT}/$file
817  else
818    file_to_fix=""
819  fi
820fi
821if [ \! -z "$file_to_fix" ]; then
822  echo Checking $file_to_fix
823  if grep _KERNEL $file_to_fix > /dev/null; then
824    true
825  else
826    echo '#ifdef _KERNEL' > /tmp/$base
827    cat $file_to_fix >> /tmp/$base
828    echo '#endif /* defined(_KERNEL) */' >> /tmp/$base
829    echo Fixed $file_to_fix
830    rm -f ${LIB}/$file
831    cp /tmp/$base ${LIB}/$file
832    chmod a+r ${LIB}/$file
833    rm -f /tmp/$base
834  fi
835fi
836
837# Conditionalize all of <sys/err.h> on _KERNEL being defined.
838
839file=sys/err.h
840base=`basename $file`
841if [ -r ${LIB}/$file ]; then
842  file_to_fix=${LIB}/$file
843else
844  if [ -r ${INPUT}/$file ]; then
845    file_to_fix=${INPUT}/$file
846  else
847    file_to_fix=""
848  fi
849fi
850if [ \! -z "$file_to_fix" ]; then
851  echo Checking $file_to_fix
852  if grep _KERNEL $file_to_fix > /dev/null; then
853    true
854  else
855    echo '#ifdef _KERNEL' > /tmp/$base
856    cat $file_to_fix >> /tmp/$base
857    echo '#endif /* defined(_KERNEL) */' >> /tmp/$base
858    echo Fixed $file_to_fix
859    rm -f ${LIB}/$file
860    cp /tmp/$base ${LIB}/$file
861    chmod a+r ${LIB}/$file
862    rm -f /tmp/$base
863  fi
864fi
865
866# Conditionalize all of <sys/char.h> on _KERNEL being defined.
867
868file=sys/char.h
869base=`basename $file`
870if [ -r ${LIB}/$file ]; then
871  file_to_fix=${LIB}/$file
872else
873  if [ -r ${INPUT}/$file ]; then
874    file_to_fix=${INPUT}/$file
875  else
876    file_to_fix=""
877  fi
878fi
879if [ \! -z "$file_to_fix" ]; then
880  echo Checking $file_to_fix
881  if grep _KERNEL $file_to_fix > /dev/null; then
882    true
883  else
884    echo '#ifdef _KERNEL' > /tmp/$base
885    cat $file_to_fix >> /tmp/$base
886    echo '#endif /* defined(_KERNEL) */' >> /tmp/$base
887    echo Fixed $file_to_fix
888    rm -f ${LIB}/$file
889    cp /tmp/$base ${LIB}/$file
890    chmod a+r ${LIB}/$file
891    rm -f /tmp/$base
892  fi
893fi
894
895# Conditionalize all of <sys/getpages.h> on _KERNEL being defined.
896
897file=sys/getpages.h
898base=`basename $file`
899if [ -r ${LIB}/$file ]; then
900  file_to_fix=${LIB}/$file
901else
902  if [ -r ${INPUT}/$file ]; then
903    file_to_fix=${INPUT}/$file
904  else
905    file_to_fix=""
906  fi
907fi
908if [ \! -z "$file_to_fix" ]; then
909  echo Checking $file_to_fix
910  if grep _KERNEL $file_to_fix > /dev/null; then
911    true
912  else
913    echo '#ifdef _KERNEL' > /tmp/$base
914    cat $file_to_fix >> /tmp/$base
915    echo '#endif /* defined(_KERNEL) */' >> /tmp/$base
916    echo Fixed $file_to_fix
917    rm -f ${LIB}/$file
918    cp /tmp/$base ${LIB}/$file
919    chmod a+r ${LIB}/$file
920    rm -f /tmp/$base
921  fi
922fi
923
924# Conditionalize all of <sys/map.h> on _KERNEL being defined.
925
926file=sys/map.h
927base=`basename $file`
928if [ -r ${LIB}/$file ]; then
929  file_to_fix=${LIB}/$file
930else
931  if [ -r ${INPUT}/$file ]; then
932    file_to_fix=${INPUT}/$file
933  else
934    file_to_fix=""
935  fi
936fi
937if [ \! -z "$file_to_fix" ]; then
938  echo Checking $file_to_fix
939  if grep _KERNEL $file_to_fix > /dev/null; then
940    true
941  else
942    echo '#ifdef _KERNEL' > /tmp/$base
943    cat $file_to_fix >> /tmp/$base
944    echo '#endif /* defined(_KERNEL) */' >> /tmp/$base
945    echo Fixed $file_to_fix
946    rm -f ${LIB}/$file
947    cp /tmp/$base ${LIB}/$file
948    chmod a+r ${LIB}/$file
949    rm -f /tmp/$base
950  fi
951fi
952
953# Conditionalize all of <sys/cmn_err.h> on _KERNEL being defined.
954
955file=sys/cmn_err.h
956base=`basename $file`
957if [ -r ${LIB}/$file ]; then
958  file_to_fix=${LIB}/$file
959else
960  if [ -r ${INPUT}/$file ]; then
961    file_to_fix=${INPUT}/$file
962  else
963    file_to_fix=""
964  fi
965fi
966if [ \! -z "$file_to_fix" ]; then
967  echo Checking $file_to_fix
968  if grep _KERNEL $file_to_fix > /dev/null; then
969    true
970  else
971    echo '#ifdef _KERNEL' > /tmp/$base
972    cat $file_to_fix >> /tmp/$base
973    echo '#endif /* defined(_KERNEL) */' >> /tmp/$base
974    echo Fixed $file_to_fix
975    rm -f ${LIB}/$file
976    cp /tmp/$base ${LIB}/$file
977    chmod a+r ${LIB}/$file
978    rm -f /tmp/$base
979  fi
980fi
981
982# Conditionalize all of <sys/kdebugger.h> on _KERNEL being defined.
983
984file=sys/kdebugger.h
985base=`basename $file`
986if [ -r ${LIB}/$file ]; then
987  file_to_fix=${LIB}/$file
988else
989  if [ -r ${INPUT}/$file ]; then
990    file_to_fix=${INPUT}/$file
991  else
992    file_to_fix=""
993  fi
994fi
995if [ \! -z "$file_to_fix" ]; then
996  echo Checking $file_to_fix
997  if grep _KERNEL $file_to_fix > /dev/null; then
998    true
999  else
1000    echo '#ifdef _KERNEL' > /tmp/$base
1001    cat $file_to_fix >> /tmp/$base
1002    echo '#endif /* defined(_KERNEL) */' >> /tmp/$base
1003    echo Fixed $file_to_fix
1004    rm -f ${LIB}/$file
1005    cp /tmp/$base ${LIB}/$file
1006    chmod a+r ${LIB}/$file
1007    rm -f /tmp/$base
1008  fi
1009fi
1010
1011# Conditionalize some of <netinet/in.h> on _KERNEL being defined.
1012# This has been taken out because it breaks on some versions of
1013# DYNIX/ptx, and it does not seem to do much good on any system.
1014# file=netinet/in.h
1015# base=`basename $file`
1016# if [ -r ${LIB}/$file ]; then
1017#   file_to_fix=${LIB}/$file
1018# else
1019#   if [ -r ${INPUT}/$file ]; then
1020#     file_to_fix=${INPUT}/$file
1021#   else
1022#     file_to_fix=""
1023#   fi
1024# fi
1025# if [ \! -z "$file_to_fix" ]; then
1026#   echo Checking $file_to_fix
1027#   if grep _KERNEL $file_to_fix > /dev/null; then
1028#     true
1029#   else
1030#     sed -e '/#ifdef INKERNEL/i\
1031# #ifdef _KERNEL' \
1032#     -e '/#endif[      ]*\/\* INKERNEL \*\//a\
1033# #endif /* _KERNEL */' \
1034#     $file_to_fix > ${LIB}/${file}.sed
1035#     rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
1036#     echo Fixed $file_to_fix
1037#   fi
1038# fi
1039
1040# Conditionalize some of <sys/endian.h> on __GNUC__ and __GNUG__.
1041
1042file=sys/endian.h
1043base=`basename $file`
1044if [ -r ${LIB}/$file ]; then
1045  file_to_fix=${LIB}/$file
1046else
1047  if [ -r ${INPUT}/$file ]; then
1048    file_to_fix=${INPUT}/$file
1049  else
1050    file_to_fix=""
1051  fi
1052fi
1053if [ \! -z "$file_to_fix" ]; then
1054  echo Checking $file_to_fix
1055  if grep __GNUC__ $file_to_fix > /dev/null; then
1056    true
1057  else
1058    sed -e '/#  ifdef   __STDC__/i\
1059#   if !defined (__GNUC__) && !defined (__GNUG__)' \
1060    -e '/#              include <sys\/byteorder.h>/s/           /   /'\
1061    -e '/#   include    <sys\/byteorder.h>/i\
1062#   endif /* !defined (__GNUC__) && !defined (__GNUG__) */'\
1063    $file_to_fix > ${LIB}/${file}.sed
1064    rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
1065    echo Fixed $file_to_fix
1066  fi
1067fi
1068
1069# Commented out because tmcconne@sedona.intel.com says we don't clearly need it
1070# and the text in types.h is not erroneous.
1071## In sys/types.h, don't name the enum for booleans.
1072#
1073#file=sys/types.h
1074#base=`basename $file`
1075#if [ -r ${LIB}/$file ]; then
1076#  file_to_fix=${LIB}/$file
1077#else
1078#  if [ -r ${INPUT}/$file ]; then
1079#    file_to_fix=${INPUT}/$file
1080#  else
1081#    file_to_fix=""
1082#  fi
1083#fi
1084#if [ \! -z "$file_to_fix" ]; then
1085#  echo Checking $file_to_fix
1086#  if grep "enum boolean" $file_to_fix > /dev/null; then
1087#    sed -e 's/enum boolean/enum/' ${LIB}/$file > ${LIB}/${file}.sed
1088#    rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
1089#    echo Fixed $file_to_fix
1090#  else
1091#    true
1092#  fi
1093#fi
1094
1095# Remove useless extern keyword from struct forward declarations in
1096# <sys/stream.h> and <sys/strsubr.h>
1097
1098file=sys/stream.h
1099base=`basename $file`
1100if [ -r ${LIB}/$file ]; then
1101  file_to_fix=${LIB}/$file
1102else
1103  if [ -r ${INPUT}/$file ]; then
1104    file_to_fix=${INPUT}/$file
1105  else
1106    file_to_fix=""
1107  fi
1108fi
1109if [ \! -z "$file_to_fix" ]; then
1110  echo Checking $file_to_fix
1111  sed -e '
1112    s/extern struct stdata;/struct stdata;/g
1113    s/extern struct strevent;/struct strevent;/g
1114  ' $file_to_fix > /tmp/$base
1115  if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
1116    true
1117  else
1118    echo Fixed $file_to_fix
1119    rm -f ${LIB}/$file
1120    cp /tmp/$base ${LIB}/$file
1121    chmod a+r ${LIB}/$file
1122  fi
1123  rm -f /tmp/$base
1124fi
1125
1126file=sys/strsubr.h
1127base=`basename $file`
1128if [ -r ${LIB}/$file ]; then
1129  file_to_fix=${LIB}/$file
1130else
1131  if [ -r ${INPUT}/$file ]; then
1132    file_to_fix=${INPUT}/$file
1133  else
1134    file_to_fix=""
1135  fi
1136fi
1137if [ \! -z "$file_to_fix" ]; then
1138  echo Checking $file_to_fix
1139  sed -e '
1140    s/extern struct strbuf;/struct strbuf;/g
1141    s/extern struct uio;/struct uio;/g
1142    s/extern struct thread;/struct thread;/g
1143    s/extern struct proc;/struct proc;/g
1144  ' $file_to_fix > /tmp/$base
1145  if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
1146    true
1147  else
1148    echo Fixed $file_to_fix
1149    rm -f ${LIB}/$file
1150    cp /tmp/$base ${LIB}/$file
1151    chmod a+r ${LIB}/$file
1152  fi
1153  rm -f /tmp/$base
1154fi
1155
1156# Put storage class at start of decl, to avoid warning.
1157file=rpc/types.h
1158base=`basename $file`
1159if [ -r ${LIB}/$file ]; then
1160  file_to_fix=${LIB}/$file
1161else
1162  if [ -r ${INPUT}/$file ]; then
1163    file_to_fix=${INPUT}/$file
1164  else
1165    file_to_fix=""
1166  fi
1167fi
1168if [ \! -z "$file_to_fix" ]; then
1169  echo Checking $file_to_fix
1170  sed -e '
1171    s/const extern/extern const/g
1172  ' $file_to_fix > /tmp/$base
1173  if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
1174    true
1175  else
1176    echo Fixed $file_to_fix
1177    rm -f ${LIB}/$file
1178    cp /tmp/$base ${LIB}/$file
1179    chmod a+r ${LIB}/$file
1180  fi
1181  rm -f /tmp/$base
1182fi
1183
1184# Convert functions to prototype form, and fix arg names in <sys/stat.h>.
1185
1186file=sys/stat.h
1187base=`basename $file`
1188if [ -r ${LIB}/$file ]; then
1189  file_to_fix=${LIB}/$file
1190else
1191  if [ -r ${INPUT}/$file ]; then
1192    file_to_fix=${INPUT}/$file
1193  else
1194    file_to_fix=""
1195  fi
1196fi
1197if [ \! -z "$file_to_fix" ]; then
1198  echo Checking $file_to_fix
1199  cp $file_to_fix /tmp/$base
1200  chmod +w /tmp/$base
1201  sed -e '/^stat([      ]*[^c]/{
1202N
1203N
1204s/(.*)\n/( /
1205s/;\n/, /
1206s/;$/)/
1207}' \
1208  -e '/^lstat([         ]*[^c]/{
1209N
1210N
1211s/(.*)\n/( /
1212s/;\n/, /
1213s/;$/)/
1214}' \
1215  -e '/^fstat([         ]*[^i]/{
1216N
1217N
1218s/(.*)\n/( /
1219s/;\n/, /
1220s/;$/)/
1221}' \
1222  -e '/^mknod([         ]*[^c]/{
1223N
1224N
1225N
1226s/(.*)\n/( /
1227s/;\n/, /g
1228s/;$/)/
1229}' \
1230  -e '1,$s/\([^A-Za-z]\)path\([^A-Za-z]\)/\1__path\2/g' \
1231  -e '1,$s/\([^A-Za-z]\)buf\([^A-Za-z]\)/\1__buf\2/g' \
1232  -e '1,$s/\([^A-Za-z]\)fd\([^A-Za-z]\)/\1__fd\2/g' \
1233  -e '1,$s/ret\([^u]\)/__ret\1/g' \
1234  -e '1,$s/\([^_]\)mode\([^_]\)/\1__mode\2/g' \
1235  -e '1,$s/\([^_r]\)dev\([^_]\)/\1__dev\2/g' /tmp/$base > /tmp/$base.sed
1236  if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \
1237    true
1238  else
1239    echo Fixed $file_to_fix
1240    rm -f ${LIB}/$file
1241    cp /tmp/$base.sed ${LIB}/$file
1242    chmod a+r ${LIB}/$file
1243  fi
1244  rm -f /tmp/$base /tmp/$base.sed
1245fi
1246
1247# Sony NEWSOS 5.0 does not support the complete ANSI C standard.
1248
1249if [ -x /bin/sony ]; then
1250  if /bin/sony; then
1251
1252    # Change <stdio.h> to not define __filbuf, __flsbuf, and __iob
1253
1254    file=stdio.h
1255    base=`basename $file`
1256    if [ -r ${LIB}/$file ]; then
1257      file_to_fix=${LIB}/$file
1258    else
1259      if [ -r ${INPUT}/$file ]; then
1260        file_to_fix=${INPUT}/$file
1261      else
1262        file_to_fix=""
1263      fi
1264    fi
1265    if [ \! -z "$file_to_fix" ]; then
1266      echo Checking $file_to_fix
1267      cp $file_to_fix /tmp/$base
1268      chmod +w /tmp/$base
1269      sed -e '
1270        s/__filbuf/_filbuf/g
1271        s/__flsbuf/_flsbuf/g
1272        s/__iob/_iob/g
1273      ' /tmp/$base > /tmp/$base.sed
1274      mv /tmp/$base.sed /tmp/$base
1275      if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then
1276        true
1277      else
1278        echo Fixed $file_to_fix
1279        rm -f ${LIB}/$file
1280        cp /tmp/$base ${LIB}/$file
1281        chmod a+r ${LIB}/$file
1282      fi
1283      rm -f /tmp/$base
1284    fi
1285
1286    # Change <ctype.h> to not define __ctype
1287
1288    file=ctype.h
1289    base=`basename $file`
1290    if [ -r ${LIB}/$file ]; then
1291      file_to_fix=${LIB}/$file
1292    else
1293      if [ -r ${INPUT}/$file ]; then
1294        file_to_fix=${INPUT}/$file
1295      else
1296        file_to_fix=""
1297      fi
1298    fi
1299    if [ \! -z "$file_to_fix" ]; then
1300      echo Checking $file_to_fix
1301      cp $file_to_fix /tmp/$base
1302      chmod +w /tmp/$base
1303      sed -e '
1304        s/__ctype/_ctype/g
1305      ' /tmp/$base > /tmp/$base.sed
1306      mv /tmp/$base.sed /tmp/$base
1307      if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then
1308        true
1309      else
1310        echo Fixed $file_to_fix
1311        rm -f ${LIB}/$file
1312        cp /tmp/$base ${LIB}/$file
1313        chmod a+r ${LIB}/$file
1314      fi
1315      rm -f /tmp/$base
1316    fi
1317  fi
1318fi
1319
1320# In limits.h, put #ifndefs around things that are supposed to be defined
1321# in float.h to avoid redefinition errors if float.h is included first.
1322# Solaris 2.1 has this problem.
1323
1324file=limits.h
1325base=`basename $file`
1326if [ -r ${LIB}/$file ]; then
1327  file_to_fix=${LIB}/$file
1328else
1329  if [ -r ${INPUT}/$file ]; then
1330    file_to_fix=${INPUT}/$file
1331  else
1332    file_to_fix=""
1333  fi
1334fi
1335if [ \! -z "$file_to_fix" ]; then
1336  echo Checking $file_to_fix
1337  sed -e '/[    ]FLT_MIN[       ]/i\
1338#ifndef FLT_MIN'\
1339      -e '/[    ]FLT_MIN[       ]/a\
1340#endif'\
1341      -e '/[    ]FLT_MAX[       ]/i\
1342#ifndef FLT_MAX'\
1343      -e '/[    ]FLT_MAX[       ]/a\
1344#endif'\
1345      -e '/[    ]FLT_DIG[       ]/i\
1346#ifndef FLT_DIG'\
1347      -e '/[    ]FLT_DIG[       ]/a\
1348#endif'\
1349      -e '/[    ]DBL_MIN[       ]/i\
1350#ifndef DBL_MIN'\
1351      -e '/[    ]DBL_MIN[       ]/a\
1352#endif'\
1353      -e '/[    ]DBL_MAX[       ]/i\
1354#ifndef DBL_MAX'\
1355      -e '/[    ]DBL_MAX[       ]/a\
1356#endif'\
1357      -e '/[    ]DBL_DIG[       ]/i\
1358#ifndef DBL_DIG'\
1359      -e '/[    ]DBL_DIG[       ]/a\
1360#endif' $file_to_fix > /tmp/$base
1361  if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
1362    true
1363  else
1364    echo Fixed $file_to_fix
1365    rm -f ${LIB}/$file
1366    cp /tmp/$base ${LIB}/$file
1367    chmod a+r ${LIB}/$file
1368  fi
1369  rm -f /tmp/$base
1370fi
1371
1372# Completely replace <sys/varargs.h> with a file that includes gcc's
1373# stdarg.h or varargs.h files as appropriate.
1374
1375file=sys/varargs.h
1376if [ -r ${INPUT}/$file ]; then
1377  echo Replacing $file
1378  cat > ${LIB}/$file << EOF
1379/* This file was generated by fixincludes.  */
1380#ifndef _SYS_VARARGS_H
1381#define _SYS_VARARGS_H
1382
1383#ifdef __STDC__
1384#include <stdarg.h>
1385#else
1386#include <varargs.h>
1387#endif
1388
1389#endif  /* _SYS_VARARGS_H */
1390EOF
1391  chmod a+r ${LIB}/$file
1392fi
1393
1394# In math.h, put #ifndefs around things that might be defined in a gcc
1395# specific math-*.h file.
1396
1397file=math.h
1398base=`basename $file`
1399if [ -r ${LIB}/$file ]; then
1400  file_to_fix=${LIB}/$file
1401else
1402  if [ -r ${INPUT}/$file ]; then
1403    file_to_fix=${INPUT}/$file
1404  else
1405    file_to_fix=""
1406  fi
1407fi
1408if [ \! -z "$file_to_fix" ]; then
1409  echo Checking $file_to_fix
1410  sed -e '/define[      ]HUGE_VAL[      ]/i\
1411#ifndef HUGE_VAL'\
1412      -e '/define[      ]HUGE_VAL[      ]/a\
1413#endif' $file_to_fix > /tmp/$base
1414  if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
1415    true
1416  else
1417    echo Fixed $file_to_fix
1418    rm -f ${LIB}/$file
1419    cp /tmp/$base ${LIB}/$file
1420    chmod a+r ${LIB}/$file
1421  fi
1422  rm -f /tmp/$base
1423fi
1424
1425# Solaris math.h and floatingpoint.h define __P without protection,
1426# which conflicts with the fixproto definition.  The fixproto
1427# definition and the Solaris definition are used the same way.
1428for file in math.h floatingpoint.h; do
1429  base=`basename $file`
1430  if [ -r ${LIB}/$file ]; then
1431    file_to_fix=${LIB}/$file
1432  else
1433    if [ -r ${INPUT}/$file ]; then
1434      file_to_fix=${INPUT}/$file
1435    else
1436      file_to_fix=""
1437    fi
1438  fi
1439  if [ \! -z "$file_to_fix" ]; then
1440    echo Checking $file_to_fix
1441    sed -e '/^#define[  ]*__P/i\
1442#ifndef __P'\
1443        -e '/^#define[  ]*__P/a\
1444#endif' $file_to_fix > /tmp/$base
1445    if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
1446      true
1447    else
1448      echo Fixed $file_to_fix
1449      rm -f ${LIB}/$file
1450      cp /tmp/$base ${LIB}/$file
1451      chmod a+r ${LIB}/$file
1452    fi
1453   rm -f /tmp/$base
1454  fi
1455done
1456
1457echo 'Removing unneeded directories:'
1458cd $LIB
1459files=`find . -type d -print | sort -r`
1460for file in $files; do
1461  rmdir $LIB/$file > /dev/null 2>&1
1462done
1463
1464if $LINKS; then
1465  echo 'Making internal symbolic non-directory links'
1466  cd ${INPUT}
1467  files=`find . -type l -print`
1468  for file in $files; do
1469    dest=`ls -ld $file | sed -n 's/.*-> //p'`
1470    if expr "$dest" : '[^/].*' > /dev/null; then   
1471      target=${LIB}/`echo file | sed "s|[^/]*\$|$dest|"`
1472      if [ -f $target ]; then
1473        ln -s $dest ${LIB}/$file >/dev/null 2>&1
1474      fi
1475    fi
1476  done
1477fi
1478
1479cd ${ORIG_DIR}
1480
1481echo 'Replacing <sys/byteorder.h>'
1482if [ \! -d $LIB/sys ]; then
1483  mkdir $LIB/sys
1484fi
1485rm -f ${LIB}/sys/byteorder.h
1486cat <<'__EOF__' >${LIB}/sys/byteorder.h
1487#ifndef _SYS_BYTEORDER_H
1488#define _SYS_BYTEORDER_H
1489
1490/* Functions to convert `short' and `long' quantities from host byte order
1491   to (internet) network byte order (i.e. big-endian).
1492
1493   Written by Ron Guilmette (rfg@ncd.com).
1494
1495   This isn't actually used by GCC.  It is installed by fixinc.svr4.
1496
1497   For big-endian machines these functions are essentially no-ops.
1498
1499   For little-endian machines, we define the functions using specialized
1500   asm sequences in cases where doing so yields better code (e.g. i386).  */
1501
1502#if !defined (__GNUC__) && !defined (__GNUG__)
1503#error You lose!  This file is only useful with GNU compilers.
1504#endif
1505
1506#ifndef __BYTE_ORDER__
1507/* Byte order defines.  These are as defined on UnixWare 1.1, but with
1508   double underscores added at the front and back.  */
1509#define __LITTLE_ENDIAN__   1234
1510#define __BIG_ENDIAN__      4321
1511#define __PDP_ENDIAN__      3412
1512#endif
1513
1514#ifdef __STDC__
1515static __inline__ unsigned long htonl (unsigned long);
1516static __inline__ unsigned short htons (unsigned int);
1517static __inline__ unsigned long ntohl (unsigned long);
1518static __inline__ unsigned short ntohs (unsigned int);
1519#endif /* defined (__STDC__) */
1520
1521#if defined (__i386__)
1522
1523#ifndef __BYTE_ORDER__
1524#define __BYTE_ORDER__ __LITTLE_ENDIAN__
1525#endif
1526
1527/* Convert a host long to a network long.  */
1528
1529/* We must use a new-style function definition, so that this will also
1530   be valid for C++.  */
1531static __inline__ unsigned long
1532htonl (unsigned long __arg)
1533{
1534  register unsigned long __result;
1535
1536  __asm__ ("xchg%B0 %b0,%h0\n\
1537        ror%L0 $16,%0\n\
1538        xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg));
1539  return __result;
1540}
1541
1542/* Convert a host short to a network short.  */
1543
1544static __inline__ unsigned short
1545htons (unsigned int __arg)
1546{
1547  register unsigned short __result;
1548
1549  __asm__ ("xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg));
1550  return __result;
1551}
1552
1553#elif ((defined (__i860__) && !defined (__i860_big_endian__))   \
1554       || defined (__ns32k__) || defined (__vax__)              \
1555       || defined (__spur__) || defined (__arm__))
1556
1557#ifndef __BYTE_ORDER__
1558#define __BYTE_ORDER__ __LITTLE_ENDIAN__
1559#endif
1560
1561/* For other little-endian machines, using C code is just as efficient as
1562   using assembly code.  */
1563
1564/* Convert a host long to a network long.  */
1565
1566static __inline__ unsigned long
1567htonl (unsigned long __arg)
1568{
1569  register unsigned long __result;
1570
1571  __result = (__arg >> 24) & 0x000000ff;
1572  __result |= (__arg >> 8) & 0x0000ff00;
1573  __result |= (__arg << 8) & 0x00ff0000;
1574  __result |= (__arg << 24) & 0xff000000;
1575  return __result;
1576}
1577
1578/* Convert a host short to a network short.  */
1579
1580static __inline__ unsigned short
1581htons (unsigned int __arg)
1582{
1583  register unsigned short __result;
1584
1585  __result = (__arg << 8) & 0xff00;
1586  __result |= (__arg >> 8) & 0x00ff;
1587  return __result;
1588}
1589
1590#else /* must be a big-endian machine */
1591
1592#ifndef __BYTE_ORDER__
1593#define __BYTE_ORDER__ __BIG_ENDIAN__
1594#endif
1595
1596/* Convert a host long to a network long.  */
1597
1598static __inline__ unsigned long
1599htonl (unsigned long __arg)
1600{
1601  return __arg;
1602}
1603
1604/* Convert a host short to a network short.  */
1605
1606static __inline__ unsigned short
1607htons (unsigned int __arg)
1608{
1609  return __arg;
1610}
1611
1612#endif /* big-endian */
1613
1614/* Convert a network long to a host long.  */
1615
1616static __inline__ unsigned long
1617ntohl (unsigned long __arg)
1618{
1619  return htonl (__arg);
1620}
1621
1622/* Convert a network short to a host short.  */
1623
1624static __inline__ unsigned short
1625ntohs (unsigned int __arg)
1626{
1627  return htons (__arg);
1628}
1629
1630__EOF__
1631
1632if [ -r ${INPUT}/sys/byteorder.h ]; then
1633  if grep BYTE_ORDER ${INPUT}/sys/byteorder.h >/dev/null 2>/dev/null; then
1634    cat <<'__EOF__' >>${LIB}/sys/byteorder.h
1635#ifndef BYTE_ORDER
1636#define LITTLE_ENDIAN __LITTLE_ENDIAN__
1637#define BIG_ENDIAN __BIG_ENDIAN__
1638#define PDP_ENDIAN __PDP_ENDIAN__
1639#define BYTE_ORDER __BYTE_ORDER__
1640#endif
1641
1642__EOF__
1643  fi
1644fi
1645
1646cat <<'__EOF__' >>${LIB}/sys/byteorder.h
1647#endif /* !defined (_SYS_BYTEORDER_H) */
1648__EOF__
1649
1650chmod a+r ${LIB}/sys/byteorder.h
1651
1652exit 0
1653
Note: See TracBrowser for help on using the repository browser.