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=2005-05-14.22
4+ scriptversion=2018-03-07.03 ; # UTC
55
6- # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
6+ # Copyright (C) 1999-2021 Free Software Foundation, Inc.
77# Written by Tom Tromey <tromey@cygnus.com>.
88#
99# This program is free software; you can redistribute it and/or modify
@@ -17,8 +17,7 @@ scriptversion=2005-05-14.22
1717# GNU General Public License for more details.
1818#
1919# 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/>.
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,21 +28,224 @@ scriptversion=2005-05-14.22
2928# bugs to <bug-automake@gnu.org> or send patches to
3029# <automake-patches@gnu.org>.
3130
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+
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 <bug-automake@gnu.org>.
49251EOF
53255 echo " compile $scriptversion "
54256 exit $?
55257 ;;
258+ cl | * [/\\ ]cl | cl.exe | * [/\\ ]cl.exe | \
259+ icl | * [/\\ ]icl | icl.exe | * [/\\ ]icl.exe )
260+ func_cl_wrapper " $@ " # Doesn't return...
261+ ;;
56262esac
57263
58264ofile=
59265cfile=
60- eat=
61266
62267for arg
63268do
66271 else
67272 case $1 in
68273 -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.
71276 eat=1
72277 case $2 in
73278 * .o | * .obj)
94299done
95300
96301if 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
98303 # pattern rule where we don't need one. That is ok -- this is a
99304 # 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
101306 # ok.
102307 exec " $@ "
103308fi
104309
105310# 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/' `
107312
108313# 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
110315# that we are using for the .o file. Also, base the name on the expected
111316# 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
113318while true ; do
114319 if mkdir " $lockdir " > /dev/null 2>&1 ; then
115320 break
@@ -124,9 +329,9 @@ trap "rmdir '$lockdir'; exit 1" 1 2 15
124329ret=$?
125330
126331if test -f " $cofile " ; then
127- mv " $cofile " " $ofile "
332+ test " $cofile " = " $ofile " || mv " $cofile " " $ofile "
128333elif test -f " ${cofile} bj" ; then
129- mv " ${cofile} bj" " $ofile "
334+ test " ${cofile} bj " = " $ofile " || mv " ${cofile} bj" " $ofile "
130335fi
131336
132337rmdir " $lockdir "
@@ -135,8 +340,9 @@ exit $ret
135340# Local Variables:
136341# mode: shell-script
137342# sh-indentation: 2
138- # eval: (add-hook 'write-file-hooks 'time-stamp)
343+ # eval: (add-hook 'before-save-hook 'time-stamp)
139344# time-stamp-start: "scriptversion="
140345# time-stamp-format: "%:y-%02m-%02d.%02H"
141- # time-stamp-end: "$"
346+ # time-stamp-time-zone: "UTC0"
347+ # time-stamp-end: "; # UTC"
142348# End:
0 commit comments