1
1
#! /bin/sh
2
- # Wrapper for compilers which do not understand ` -c -o'.
2
+ # Wrapper for compilers which do not understand ' -c -o'.
3
3
4
- scriptversion=2009-04-28.21 ; # UTC
4
+ scriptversion=2012-10-14.11 ; # UTC
5
5
6
- # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software
7
- # Foundation, Inc.
6
+ # Copyright (C) 1999-2014 Free Software Foundation, Inc.
8
7
# Written by Tom Tromey <[email protected] >.
9
8
#
10
9
# This program is free software; you can redistribute it and/or modify
@@ -29,21 +28,224 @@ scriptversion=2009-04-28.21; # UTC
29
28
# bugs to <[email protected] > or send patches to
30
29
31
30
31
+ nl='
32
+ '
33
+
34
+ # We need space, tab and new line, in precisely that order. Quoting is
35
+ # there to prevent tools from complaining about whitespace usage.
36
+ IFS=" " " $nl "
37
+
38
+ file_conv=
39
+
40
+ # func_file_conv build_file lazy
41
+ # Convert a $build file to $host form and store it in $file
42
+ # Currently only supports Windows hosts. If the determined conversion
43
+ # type is listed in (the comma separated) LAZY, no conversion will
44
+ # take place.
45
+ func_file_conv ()
46
+ {
47
+ file=$1
48
+ case $file in
49
+ / | /[!/]* ) # absolute file, and not a UNC file
50
+ if test -z " $file_conv " ; then
51
+ # lazily determine how to convert abs files
52
+ case ` uname -s` in
53
+ MINGW* )
54
+ file_conv=mingw
55
+ ;;
56
+ CYGWIN* )
57
+ file_conv=cygwin
58
+ ;;
59
+ * )
60
+ file_conv=wine
61
+ ;;
62
+ esac
63
+ fi
64
+ case $file_conv /,$2 , in
65
+ * ,$file_conv ,* )
66
+ ;;
67
+ mingw/* )
68
+ file=` cmd //C echo " $file " | sed -e ' s/"\(.*\) " *$/\1/' `
69
+ ;;
70
+ cygwin/* )
71
+ file=` cygpath -m " $file " || echo " $file " `
72
+ ;;
73
+ wine/* )
74
+ file=` winepath -w " $file " || echo " $file " `
75
+ ;;
76
+ esac
77
+ ;;
78
+ esac
79
+ }
80
+
81
+ # func_cl_dashL linkdir
82
+ # Make cl look for libraries in LINKDIR
83
+ func_cl_dashL ()
84
+ {
85
+ func_file_conv " $1 "
86
+ if test -z " $lib_path " ; then
87
+ lib_path=$file
88
+ else
89
+ lib_path=" $lib_path ;$file "
90
+ fi
91
+ linker_opts=" $linker_opts -LIBPATH:$file "
92
+ }
93
+
94
+ # func_cl_dashl library
95
+ # Do a library search-path lookup for cl
96
+ func_cl_dashl ()
97
+ {
98
+ lib=$1
99
+ found=no
100
+ save_IFS=$IFS
101
+ IFS=' ;'
102
+ for dir in $lib_path $LIB
103
+ do
104
+ IFS=$save_IFS
105
+ if $shared && test -f " $dir /$lib .dll.lib" ; then
106
+ found=yes
107
+ lib=$dir /$lib .dll.lib
108
+ break
109
+ fi
110
+ if test -f " $dir /$lib .lib" ; then
111
+ found=yes
112
+ lib=$dir /$lib .lib
113
+ break
114
+ fi
115
+ if test -f " $dir /lib$lib .a" ; then
116
+ found=yes
117
+ lib=$dir /lib$lib .a
118
+ break
119
+ fi
120
+ done
121
+ IFS=$save_IFS
122
+
123
+ if test " $found " ! = yes; then
124
+ lib=$lib .lib
125
+ fi
126
+ }
127
+
128
+ # func_cl_wrapper cl arg...
129
+ # Adjust compile command to suit cl
130
+ func_cl_wrapper ()
131
+ {
132
+ # Assume a capable shell
133
+ lib_path=
134
+ shared=:
135
+ linker_opts=
136
+ for arg
137
+ do
138
+ if test -n " $eat " ; then
139
+ eat=
140
+ else
141
+ case $1 in
142
+ -o)
143
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
144
+ eat=1
145
+ case $2 in
146
+ * .o | * .[oO][bB][jJ])
147
+ func_file_conv " $2 "
148
+ set x " $@ " -Fo" $file "
149
+ shift
150
+ ;;
151
+ * )
152
+ func_file_conv " $2 "
153
+ set x " $@ " -Fe" $file "
154
+ shift
155
+ ;;
156
+ esac
157
+ ;;
158
+ -I)
159
+ eat=1
160
+ func_file_conv " $2 " mingw
161
+ set x " $@ " -I" $file "
162
+ shift
163
+ ;;
164
+ -I* )
165
+ func_file_conv " ${1# -I} " mingw
166
+ set x " $@ " -I" $file "
167
+ shift
168
+ ;;
169
+ -l)
170
+ eat=1
171
+ func_cl_dashl " $2 "
172
+ set x " $@ " " $lib "
173
+ shift
174
+ ;;
175
+ -l* )
176
+ func_cl_dashl " ${1# -l} "
177
+ set x " $@ " " $lib "
178
+ shift
179
+ ;;
180
+ -L)
181
+ eat=1
182
+ func_cl_dashL " $2 "
183
+ ;;
184
+ -L* )
185
+ func_cl_dashL " ${1# -L} "
186
+ ;;
187
+ -static)
188
+ shared=false
189
+ ;;
190
+ -Wl,* )
191
+ arg=${1# -Wl,}
192
+ save_ifs=" $IFS " ; IFS=' ,'
193
+ for flag in $arg ; do
194
+ IFS=" $save_ifs "
195
+ linker_opts=" $linker_opts $flag "
196
+ done
197
+ IFS=" $save_ifs "
198
+ ;;
199
+ -Xlinker)
200
+ eat=1
201
+ linker_opts=" $linker_opts $2 "
202
+ ;;
203
+ -* )
204
+ set x " $@ " " $1 "
205
+ shift
206
+ ;;
207
+ * .cc | * .CC | * .cxx | * .CXX | * .[cC]++)
208
+ func_file_conv " $1 "
209
+ set x " $@ " -Tp" $file "
210
+ shift
211
+ ;;
212
+ * .c | * .cpp | * .CPP | * .lib | * .LIB | * .Lib | * .OBJ | * .obj | * .[oO])
213
+ func_file_conv " $1 " mingw
214
+ set x " $@ " " $file "
215
+ shift
216
+ ;;
217
+ * )
218
+ set x " $@ " " $1 "
219
+ shift
220
+ ;;
221
+ esac
222
+ fi
223
+ shift
224
+ done
225
+ if test -n " $linker_opts " ; then
226
+ linker_opts=" -link$linker_opts "
227
+ fi
228
+ exec " $@ " $linker_opts
229
+ exit 1
230
+ }
231
+
232
+ eat=
233
+
32
234
case $1 in
33
235
' ' )
34
- echo " $0 : No command. Try \` $0 --help' for more information." 1>&2
236
+ echo " $0 : No command. Try ' $0 --help' for more information." 1>&2
35
237
exit 1;
36
238
;;
37
239
-h | --h* )
38
240
cat << \EOF
39
241
Usage: compile [--help] [--version] PROGRAM [ARGS]
40
242
41
- Wrapper for compilers which do not understand ` -c -o' .
42
- Remove ` -o dest.o' from ARGS, run PROGRAM with the remaining
243
+ Wrapper for compilers which do not understand ' -c -o'.
244
+ Remove ' -o dest.o' from ARGS, run PROGRAM with the remaining
43
245
arguments, and rename the output as expected.
44
246
45
247
If you are trying to build a whole package this is not the
46
- right script to run: please start by reading the file ` INSTALL'.
248
+ right script to run: please start by reading the file ' INSTALL'.
47
249
48
250
Report bugs to <[email protected] >.
49
251
EOF
53
255
echo " compile $scriptversion "
54
256
exit $?
55
257
;;
258
+ cl | * [/\\ ]cl | cl.exe | * [/\\ ]cl.exe )
259
+ func_cl_wrapper " $@ " # Doesn't return...
260
+ ;;
56
261
esac
57
262
58
263
ofile=
59
264
cfile=
60
- eat=
61
265
62
266
for arg
63
267
do
66
270
else
67
271
case $1 in
68
272
-o)
69
- # configure might choose to run compile as ` compile cc -o foo foo.c'.
70
- # So we strip ` -o arg' only if arg is an object.
273
+ # configure might choose to run compile as ' compile cc -o foo foo.c'.
274
+ # So we strip ' -o arg' only if arg is an object.
71
275
eat=1
72
276
case $2 in
73
277
* .o | * .obj)
94
298
done
95
299
96
300
if test -z " $ofile " || test -z " $cfile " ; then
97
- # If no ` -o' option was seen then we might have been invoked from a
301
+ # If no ' -o' option was seen then we might have been invoked from a
98
302
# pattern rule where we don't need one. That is ok -- this is a
99
303
# normal compilation that the losing compiler can handle. If no
100
- # ` .c' file was seen then we are probably linking. That is also
304
+ # ' .c' file was seen then we are probably linking. That is also
101
305
# ok.
102
306
exec " $@ "
103
307
fi
106
310
cofile=` echo " $cfile " | sed ' s|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/' `
107
311
108
312
# Create the lock directory.
109
- # Note: use ` [/\\:.-]' here to ensure that we don't use the same name
313
+ # Note: use ' [/\\:.-]' here to ensure that we don't use the same name
110
314
# that we are using for the .o file. Also, base the name on the expected
111
315
# object file name, since that is what matters with a parallel build.
112
316
lockdir=` echo " $cofile " | sed -e ' s|[/\\:.-]|_|g' ` .d
@@ -124,9 +328,9 @@ trap "rmdir '$lockdir'; exit 1" 1 2 15
124
328
ret=$?
125
329
126
330
if test -f " $cofile " ; then
127
- mv " $cofile " " $ofile "
331
+ test " $cofile " = " $ofile " || mv " $cofile " " $ofile "
128
332
elif test -f " ${cofile} bj" ; then
129
- mv " ${cofile} bj" " $ofile "
333
+ test " ${cofile} bj " = " $ofile " || mv " ${cofile} bj" " $ofile "
130
334
fi
131
335
132
336
rmdir " $lockdir "
0 commit comments