home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Source / GNU / gcc / fixinc.svr4 < prev    next >
Text File  |  1996-03-11  |  41KB  |  1,625 lines

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