11#! /bin/sh
2- # Wrapper for compilers which do not understand ` -c -o'.
2+ # Wrapper for compilers which do not understand ' -c -o'.
33
4- scriptversion=2009-10-06.20 ; # UTC
4+ scriptversion=2024-06-19.01 ; # UTC
55
6- # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software
7- # Foundation, Inc.
6+ # Copyright (C) 1999-2024 Free Software Foundation, Inc.
87# Written by Tom Tromey <[email protected] >.98#
109# This program is free software; you can redistribute it and/or modify
@@ -18,7 +17,7 @@ scriptversion=2009-10-06.20; # UTC
1817# GNU General Public License for more details.
1918#
2019# You should have received a copy of the GNU General Public License
21- # along with this program. If not, see <http ://www.gnu.org/licenses/>.
20+ # along with this program. If not, see <https ://www.gnu.org/licenses/>.
2221
2322# As a special exception to the GNU General Public License, if you
2423# distribute this file as part of a program that contains a
@@ -29,35 +28,244 @@ scriptversion=2009-10-06.20; # UTC
2928# bugs to <[email protected] > or send patches to30293130
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 | * .lo | * .[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+
32234case $1 in
33235 ' ' )
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
35237 exit 1;
36238 ;;
37239 -h | --h* )
38240 cat << \EOF
39241Usage: compile [--help] [--version] PROGRAM [ARGS]
40242
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
43245arguments, and rename the output as expected.
44246
45247If 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'.
47249
48250Report bugs to <[email protected] >. 251+ GNU Automake home page: <https://www.gnu.org/software/automake/>.
252+ General help using GNU software: <https://www.gnu.org/gethelp/>.
49253EOF
50254 exit $?
51255 ;;
52256 -v | --v* )
53- echo " compile $scriptversion "
257+ echo " compile (GNU Automake) $scriptversion "
54258 exit $?
55259 ;;
260+ cl | * [/\\ ]cl | cl.exe | * [/\\ ]cl.exe | \
261+ clang-cl | * [/\\ ]clang-cl | clang-cl.exe | * [/\\ ]clang-cl.exe | \
262+ icl | * [/\\ ]icl | icl.exe | * [/\\ ]icl.exe )
263+ func_cl_wrapper " $@ " # Doesn't return...
264+ ;;
56265esac
57266
58267ofile=
59268cfile=
60- eat=
61269
62270for arg
63271do
66274 else
67275 case $1 in
68276 -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.
277+ # configure might choose to run compile as ' compile cc -o foo foo.c'.
278+ # So we strip ' -o arg' only if arg is an object.
71279 eat=1
72280 case $2 in
73281 * .o | * .obj)
94302done
95303
96304if test -z " $ofile " || test -z " $cfile " ; then
97- # If no ` -o' option was seen then we might have been invoked from a
305+ # If no ' -o' option was seen then we might have been invoked from a
98306 # pattern rule where we don't need one. That is ok -- this is a
99307 # normal compilation that the losing compiler can handle. If no
100- # ` .c' file was seen then we are probably linking. That is also
308+ # ' .c' file was seen then we are probably linking. That is also
101309 # ok.
102310 exec " $@ "
103311fi
106314cofile=` echo " $cfile " | sed ' s|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/' `
107315
108316# Create the lock directory.
109- # Note: use ` [/\\:.-]' here to ensure that we don't use the same name
317+ # Note: use ' [/\\:.-]' here to ensure that we don't use the same name
110318# that we are using for the .o file. Also, base the name on the expected
111319# object file name, since that is what matters with a parallel build.
112320lockdir=` echo " $cofile " | sed -e ' s|[/\\:.-]|_|g' ` .d
@@ -135,9 +343,9 @@ exit $ret
135343# Local Variables:
136344# mode: shell-script
137345# sh-indentation: 2
138- # eval: (add-hook 'write-file-hooks 'time-stamp)
346+ # eval: (add-hook 'before-save-hook 'time-stamp)
139347# time-stamp-start: "scriptversion="
140348# time-stamp-format: "%:y-%02m-%02d.%02H"
141- # time-stamp-time-zone: "UTC "
349+ # time-stamp-time-zone: "UTC0 "
142350# time-stamp-end: "; # UTC"
143351# End:
0 commit comments