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=2005-05-14.22
4
+ scriptversion=2018-03-07.03 ; # UTC
5
5
6
- # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
6
+ # Copyright (C) 1999-2021 Free Software Foundation, Inc.
7
7
# Written by Tom Tromey <tromey@cygnus.com>.
8
8
#
9
9
# This program is free software; you can redistribute it and/or modify
@@ -17,8 +17,7 @@ scriptversion=2005-05-14.22
17
17
# GNU General Public License for more details.
18
18
#
19
19
# You should have received a copy of the GNU General Public License
20
- # along with this program; if not, write to the Free Software
21
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
22
21
23
22
# As a special exception to the GNU General Public License, if you
24
23
# distribute this file as part of a program that contains a
@@ -29,21 +28,224 @@ scriptversion=2005-05-14.22
29
28
# bugs to <bug-automake@gnu.org> or send patches to
30
29
# <automake-patches@gnu.org>.
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* | MSYS* )
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/* | msys/* )
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 <bug-automake@gnu.org>.
49
251
EOF
53
255
echo " compile $scriptversion "
54
256
exit $?
55
257
;;
258
+ cl | * [/\\ ]cl | cl.exe | * [/\\ ]cl.exe | \
259
+ icl | * [/\\ ]icl | icl.exe | * [/\\ ]icl.exe )
260
+ func_cl_wrapper " $@ " # Doesn't return...
261
+ ;;
56
262
esac
57
263
58
264
ofile=
59
265
cfile=
60
- eat=
61
266
62
267
for arg
63
268
do
66
271
else
67
272
case $1 in
68
273
-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.
274
+ # configure might choose to run compile as ' compile cc -o foo foo.c'.
275
+ # So we strip ' -o arg' only if arg is an object.
71
276
eat=1
72
277
case $2 in
73
278
* .o | * .obj)
94
299
done
95
300
96
301
if test -z " $ofile " || test -z " $cfile " ; then
97
- # If no ` -o' option was seen then we might have been invoked from a
302
+ # If no ' -o' option was seen then we might have been invoked from a
98
303
# pattern rule where we don't need one. That is ok -- this is a
99
304
# normal compilation that the losing compiler can handle. If no
100
- # ` .c' file was seen then we are probably linking. That is also
305
+ # ' .c' file was seen then we are probably linking. That is also
101
306
# ok.
102
307
exec " $@ "
103
308
fi
104
309
105
310
# Name of file we expect compiler to create.
106
- cofile=` echo " $cfile " | sed -e ' s|^.*/|| ' -e ' s/\.c$/.o/' `
311
+ cofile=` echo " $cfile " | sed ' s|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/' `
107
312
108
313
# Create the lock directory.
109
- # Note: use `[/ .-]' here to ensure that we don't use the same name
314
+ # Note: use '[/\\: .-]' here to ensure that we don't use the same name
110
315
# that we are using for the .o file. Also, base the name on the expected
111
316
# object file name, since that is what matters with a parallel build.
112
- lockdir=` echo " $cofile " | sed -e ' s|[/.-]|_|g' ` .d
317
+ lockdir=` echo " $cofile " | sed -e ' s|[/\\: .-]|_|g' ` .d
113
318
while true ; do
114
319
if mkdir " $lockdir " > /dev/null 2>&1 ; then
115
320
break
@@ -124,9 +329,9 @@ trap "rmdir '$lockdir'; exit 1" 1 2 15
124
329
ret=$?
125
330
126
331
if test -f " $cofile " ; then
127
- mv " $cofile " " $ofile "
332
+ test " $cofile " = " $ofile " || mv " $cofile " " $ofile "
128
333
elif test -f " ${cofile} bj" ; then
129
- mv " ${cofile} bj" " $ofile "
334
+ test " ${cofile} bj " = " $ofile " || mv " ${cofile} bj" " $ofile "
130
335
fi
131
336
132
337
rmdir " $lockdir "
@@ -135,8 +340,9 @@ exit $ret
135
340
# Local Variables:
136
341
# mode: shell-script
137
342
# sh-indentation: 2
138
- # eval: (add-hook 'write-file-hooks 'time-stamp)
343
+ # eval: (add-hook 'before-save-hook 'time-stamp)
139
344
# time-stamp-start: "scriptversion="
140
345
# time-stamp-format: "%:y-%02m-%02d.%02H"
141
- # time-stamp-end: "$"
346
+ # time-stamp-time-zone: "UTC0"
347
+ # time-stamp-end: "; # UTC"
142
348
# End:
0 commit comments