aboutsummaryrefslogtreecommitdiff
path: root/gcc-1.40/fixincludes.old
blob: 5727ac96f726e6ce453c251ee07d911e503368ad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#! /bin/sh
# Install modified versions of certain ANSI-incompatible system header files
# which are fixed to work correctly with ANSI C
# and placed in a directory that GNU C will search.
# This works properly on a Sun in system version 3.4;
# for other versions, you had better check.

# Directory in which to store the results.
LIB=${LIB-/usr/local/lib/gcc-include}

# Make sure it exists.
if [ ! -d $LIB ]; then
  mkdir $LIB || exit 1
fi

# Determine whether this system has symbolic links.
if ln -s X $LIB/ShouldNotExist 2>/dev/null; then
  rm -f $LIB/ShouldNotExist
  LINKS=true
else
  LINKS=false
fi

echo 'Making directories:'
cd /usr/include
if $LINKS; then
  files=`ls -LR | sed -n s/:$//p`
else
  files=`find . -type d -print`
fi
for file in $files; do
  rm -rf $LIB/$file
  if [ ! -d $LIB/$file ]
  then mkdir $LIB/$file
  fi
done

# treetops gets an alternating list
# of old directories to copy
# and the new directories to copy to.
treetops="/usr/include ${LIB}"

if $LINKS; then
  echo 'Making internal symbolic directory links'
  for file in $files; do
    dest=`ls -ld $file | sed -n 's/.*-> //p'`
    if [ "$dest" ]; then    
      cwd=`pwd`
      cd $dest
      if [ $? = 0 ]; then
	dest=`pwd`
	cd $cwd
      fi
      if expr $dest : '[^/.].*' > /dev/null; then
	rmdir ${LIB}/$file > /dev/null 2>&1
	rm -f ${LIB}/$file > /dev/null 2>&1
	ln -s $dest ${LIB}/$file > /dev/null 2>&1
      else				# dont make links outside /usr/include
	treetops="$treetops $dest ${LIB}/$file"
      fi
    fi
  done
fi

set - $treetops
while [ $# != 0 ]; do
  # $1 is an old directory to copy, and $2 is the new directory to copy to.
  echo "Finding header files in $1:"
  cd /usr/include
  cd $1
  files=`find . -type f -print`
  echo 'Checking header files:'
  for file in $files; do
    if egrep '[ 	]_IO[A-Z]*\(|#define._IO|CTRL' $file > /dev/null; then
      echo Fixing $file
      if [ -r $file ]; then
	cp $file $2/$file >/dev/null 2>&1	\
	|| echo "Can't copy $file"
	chmod +w $2/$file
	sed -e '
				   :loop
	  /\\$/			N
	  /\\$/			b loop
	  /[ 	]_IO[A-Z]*(/	s/(\(.\),/('\''\1'\'',/
	  /#define._IO/		s/'\''x'\''/x/g
	  /[^A-Z]CTRL[ 	]*(/	s/\(.\))/'\''\1'\'')/
	  /#define.CTRL/		s/'\''c'\''/c/g
	' $2/$file > $2/$file.sed
	mv $2/$file.sed $2/$file
	if cmp $file $2/$file >/dev/null 2>&1; then
	   echo Deleting $2/$file\; no fixes were needed.
	   rm $2/$file
	fi
      fi
    fi
  done
  shift; shift
done

cd /usr/include

# Fix one other error in this file: a mismatched quote not inside a C comment.
file=sundev/vuid_event.h
if [ -r $file ]; then
  if [ ! -r ${LIB}/$file ]; then
    cp $file ${LIB}/$file >/dev/null 2>&1	\
    || echo "Can't copy $file"
    chmod +w ${LIB}/$file
  fi
fi

if [ -r ${LIB}/sundev/vuid_event.h ]; then
  echo Fixing sundev/vuid_event.h comment
  ex ${LIB}/sundev/vuid_event.h <<EOF
  g/doesn't/s/doesn't/does not/
  wq
EOF
fi

# Deal with yet another challenge, this in X11/Xmu.h
file=X11/Xmu.h
if [ -r $file ]; then
  if [ ! -r ${LIB}/$file ]; then
    mkdir ${LIB}/X11 2>&-
    cp $file ${LIB}/$file >/dev/null 2>&1	\
    || echo "Can't copy $file"
    chmod +w ${LIB}/$file
  fi
fi

if [ -r ${LIB}/$file ]; then
  echo Fixing $file sprintf declaration
  ex ${LIB}/$file <<EOF
  /^extern char \*	sprintf();$/c
#ifndef __STDC__
extern char *	sprintf();
#endif /* !defined __STDC__ */
.
  wq
EOF
fi

echo 'Removing unneeded directories:'
cd $LIB
files=`find . -type d -print | sort -r`
for file in $files; do
  rmdir $LIB/$file > /dev/null 2>&1
done

if $LINKS; then
  echo 'Making internal symbolic non-directory links'
  cd /usr/include
  files=`find . -type l -print`
  for file in $files; do
    dest=`ls -ld $file | sed -n 's/.*-> //p'`
    if expr "$dest" : '[^/].*' > /dev/null; then    
      target=${LIB}/`echo file | sed "s|[^/]*\$|$dest|"`
      if [ -f $target ]; then
        ln -s $dest ${LIB}/$file >/dev/null 2>&1
      fi
    fi
  done
fi

exit 0