|
|
1.1 root 1: #! /bin/sh
2: #
3: # Somewhat horrible shell script to convert GCC style options into Watcom
4: # style.
5: #
6: # I put this into the public domain - if you think you can use it for
7: # anything, use it.
8: #
9: # Written 1998 Bernd Schmidt
10:
11: realdirname () {
12: tmp_save_dir=`pwd`
13: cd $@
14: result=`pwd -P`
15: cd $tmp_save_dir
16: result=`echo $result |sed 's,/,\\\\,g'`
17: }
18:
19: realfilename () {
20: case $@ in
21: */*)
22: tmp_save_dir=`pwd`
23: cd `echo $@ | sed 's,/[^/]*$,,'`
24: result=`pwd -P`/`basename $@`
25: cd $tmp_save_dir
26: ;;
27: *)
28: result=$@
29: ;;
30: esac
31: result=`echo $result |sed 's,/,\\\\,g'`
32: }
33:
34: gcc_wsysinc1=`echo $INCLUDE | sed 's,;, ,g' | sed 's,.:,;\\0,g' |sed -e 's,;,//,g' -e 's,:,/,g' -e 's,\\\\,/,g'`
35: for foo in $gcc_wsysinc1; do
36: gcc_wsysinc2="$gcc_wsysinc2 -I$foo"
37: done
38: gcc_spcdefs="-undef -U__GNUC__ -U__GNUC_MINOR__ -D_WIN32 -D__WATCOMC__ -D_STDCALL_SUPPORTED=1 -D__X86__ -D__386__=1 -DM_I386=1 -D_M_I386 -D_M_IX86=500 -D__NT__=1"
39:
40: mode=link
41: options=
42: srcfiles=
43: asmfiles=
44: objfiles=
45: resfiles=
46: outputfile=
47: libraries=
48: gnudefines=
49: wccdefines=
50: includes=
51: gnuincludes=
52:
53: next_is_output=no
54: next_is_include=no
55:
56: for arg in $@; do
57:
58: if test $next_is_output = yes; then
59: outputfile=$arg
60: next_is_output=no
61: else if test $next_is_include = yes; then
62: includes="$includes $arg"
63: gnuincludes="$gnuincludes -I$arg"
64: next_is_include=no
65: else
66: case $arg in
67: # Passing /xxx options directly may be too risky - they could be confused for
68: # file names - so use this escape.
69: --/--*)
70: options="$options `echo $arg |sed s,^--/--,/,`"
71: ;;
72:
73: -I) next_is_include=yes
74: ;;
75:
76: -I*)
77: includes="$includes `echo $arg | sed 's,^-I,,'`"
78: gnuincludes="$gnuincludes $arg"
79: ;;
80:
81: -D*=*)
82: gnudefines="$gnudefines $arg"
83: wccdefines="$wccdefines `echo $arg |sed 's,^-D,/d,'`"
84: ;;
85:
86: -D*)
87: gnudefines="$gnudefines $arg"
88: wccdefines="$wccdefines `echo $arg |sed 's,^-D,/d,'`="
89: ;;
90:
91: -c) if [ "$mode" != "link" ]; then
92: echo "Bad argument"
93: exit 10
94: fi
95: mode=compile
96: ;;
97:
98: -S) if [ "$mode" != "link" ]; then
99: echo "Bad argument"
100: exit 10
101: fi
102: mode=assemble
103: ;;
104:
105: -E) if [ "$mode" != "link" ]; then
106: echo "Bad argument"
107: exit 10
108: fi
109: mode=preprocess
110: ;;
111:
112: -g) options="$options /d2"
113: ;;
114:
115: -o) next_is_output=yes
116: if [ "x$outputfile" != "x" ]; then
117: echo "Multiple output files!"
118: exit 10
119: fi
120: ;;
121:
122: -l*) libraries="$libraries `echo $arg | sed 's,^-l,,'`"
123: ;;
124:
125: *.c)
126: srcfiles="$srcfiles $arg"
127: ;;
128:
129: *.S)
130: asmfiles="$asmfiles $arg"
131: ;;
132:
133: *.res)
134: realfilename $arg
135: resfiles="$resfiles $result"
136: ;;
137:
138: *.o)
139: realfilename $arg
140: objfiles="$objfiles $result"
141: ;;
142:
143: *) echo "Bad argument: $arg"
144: ;;
145: esac
146: fi
147: fi
148: done
149:
150: #echo "Source files: $srcfiles"
151: #echo "Object files: $objfiles"
152: #echo "Output files: $outputfile"
153: #echo "Libraries: $libraries"
154: echo "Mode: $mode"
155: #echo "Options: $options"
156:
157: if [ "$mode" != "link" -a "x$libraries" != "x" ]; then
158: echo "Libraries specified in non-link mode!"
159: exit 10
160: fi
161:
162: prefiles=
163: srccount=0
164: for foo in $srcfiles; do
165: bar=wccsh-tmppre$srccount.i
166: prefiles="$prefiles $bar"
167: echo "gcc -E -nostdinc $gnuincludes $gcc_wsysinc2 $gcc_spcdefs $gnudefines $foo -o $bar"
168: if gcc -E -nostdinc $gnuincludes $gcc_wsysinc2 $gcc_spcdefs $gnudefines $foo -o $bar; then
169:
170: else
171: exit 10
172: fi
173: if [ ! -f $bar ]; then
174: exit 10
175: fi
176: srccount=`expr $srccount + 1`
177: done
178:
179: tmpobjs=
180: if test $mode = compile -o $mode = link; then
181: tmpcnt=0
182: for foo in $asmfiles; do
183: bar=wccsh-tmpobj$tmpcnt.o
184: tmpcnt=`expr $tmpcnt + 1`
185: tmpobjs="$tmpobjs $bar"
186: echo "gcc -c $foo -o $bar"
187: gcc -c $foo -o $bar
188: srccount=`expr $srccount + 1`
189: done
190: for foo in $prefiles; do
191: bar=wccsh-tmpobj$tmpcnt.o
192: tmpcnt=`expr $tmpcnt + 1`
193: tmpobjs="$tmpobjs $bar"
194: sed -e '/^# [0123456789]*/s,^# ,#line ,' -e '/^#line/s,"[^"]*$,",' <$foo> wccsh_tmpsrc.c
195: echo "wcc386 $foo $options /fo=$bar"
196: wcc386 wccsh_tmpsrc.c $options /fo=wcc_tmp.o >&2
197: mv -f wcc_tmp.o $bar
198: if [ ! -f $bar ]; then
199: rm -f $prefiles $tmpobjs
200: exit 10
201: fi
202: done
203: fi
204:
205: case $mode in
206: preprocess)
207: for foo in $prefiles; do
208: if [ "x$outputfile" = "x" ]; then
209: cat $foo
210: else
211: mv -f $foo $outputfile
212: fi
213: done
214: ;;
215:
216: compile)
217: if [ "$srccount" != "1" -a "x$outputfile" != "x" ]; then
218: echo "cannot specify -o and -c with multiple compilations" >&2
219: exit 10
220: fi
221: if [ "x$outputfile" != "x" ]; then
222: echo Moving "'" $tmpobjs "'" to "'" $outputfile "'"
223: if mv $tmpobjs $outputfile 2>/dev/null; then
224: fi
225: fi
226: ;;
227:
228: assemble)
229: ;;
230:
231: link)
232: if [ "x$outputfile" = "x" ]; then
233: outputfile=a.out
234: fi
235: FILES=
236: for foo in $objfiles $tmpobjs; do
237: if [ "x$FILES" = "x" ]; then
238: FILES=$foo
239: else
240: FILES="$FILES,$foo"
241: fi
242: done
243: for foo in $resfiles; do
244: FILES="$FILES op resource=$foo"
245: done
246: for foo in $libraries; do
247: FILES="$FILES LIB $foo"
248: done
249: # echo Files: $FILES
250: # echo "wlink SYSTEM nt FIL $FILES NAME $outputfile"
251: wlink SYSTEM nt FIL $FILES NAME $outputfile >wccsh-linkerror.log
252: if grep "cannot open.*No such file or" wccsh-linkerror.log; then
253: # rm wccsh-linkerror.log
254: rm $outputfile
255: exit 10
256: fi
257: # rm wccsh-linkerror.log
258: if [ ! -f $outputfile ]; then
259: rm -f $prefiles $tmpobjs
260: exit 10
261: fi
262: ;;
263: esac
264:
265: rm -f $prefiles $tmpobjs
266: exit 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.