comparison compile @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents 77e2b8dfacca
children
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 #! /bin/sh 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 6 # Copyright (C) 1999-2014 Free Software Foundation, Inc.
7 # Foundation, Inc.
8 # Written by Tom Tromey <tromey@cygnus.com>. 7 # Written by Tom Tromey <tromey@cygnus.com>.
9 # 8 #
10 # This program is free software; you can redistribute it and/or modify 9 # This program is free software; you can redistribute it and/or modify
11 # it under the terms of the GNU General Public License as published by 10 # it under the terms of the GNU General Public License as published by
12 # the Free Software Foundation; either version 2, or (at your option) 11 # the Free Software Foundation; either version 2, or (at your option)
27 26
28 # This file is maintained in Automake, please report 27 # This file is maintained in Automake, please report
29 # bugs to <bug-automake@gnu.org> or send patches to 28 # bugs to <bug-automake@gnu.org> or send patches to
30 # <automake-patches@gnu.org>. 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*)
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 case $1 in 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 exit 1; 237 exit 1;
36 ;; 238 ;;
37 -h | --h*) 239 -h | --h*)
38 cat <<\EOF 240 cat <<\EOF
39 Usage: compile [--help] [--version] PROGRAM [ARGS] 241 Usage: compile [--help] [--version] PROGRAM [ARGS]
40 242
41 Wrapper for compilers which do not understand `-c -o'. 243 Wrapper for compilers which do not understand '-c -o'.
42 Remove `-o dest.o' from ARGS, run PROGRAM with the remaining 244 Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
43 arguments, and rename the output as expected. 245 arguments, and rename the output as expected.
44 246
45 If you are trying to build a whole package this is not the 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 Report bugs to <bug-automake@gnu.org>. 250 Report bugs to <bug-automake@gnu.org>.
49 EOF 251 EOF
50 exit $? 252 exit $?
51 ;; 253 ;;
52 -v | --v*) 254 -v | --v*)
53 echo "compile $scriptversion" 255 echo "compile $scriptversion"
54 exit $? 256 exit $?
55 ;; 257 ;;
258 cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
259 func_cl_wrapper "$@" # Doesn't return...
260 ;;
56 esac 261 esac
57 262
58 ofile= 263 ofile=
59 cfile= 264 cfile=
60 eat=
61 265
62 for arg 266 for arg
63 do 267 do
64 if test -n "$eat"; then 268 if test -n "$eat"; then
65 eat= 269 eat=
66 else 270 else
67 case $1 in 271 case $1 in
68 -o) 272 -o)
69 # configure might choose to run compile as `compile cc -o foo foo.c'. 273 # 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 # So we strip '-o arg' only if arg is an object.
71 eat=1 275 eat=1
72 case $2 in 276 case $2 in
73 *.o | *.obj) 277 *.o | *.obj)
74 ofile=$2 278 ofile=$2
75 ;; 279 ;;
92 fi 296 fi
93 shift 297 shift
94 done 298 done
95 299
96 if test -z "$ofile" || test -z "$cfile"; then 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 # pattern rule where we don't need one. That is ok -- this is a 302 # pattern rule where we don't need one. That is ok -- this is a
99 # normal compilation that the losing compiler can handle. If no 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 # ok. 305 # ok.
102 exec "$@" 306 exec "$@"
103 fi 307 fi
104 308
105 # Name of file we expect compiler to create. 309 # Name of file we expect compiler to create.
106 cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` 310 cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
107 311
108 # Create the lock directory. 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 # that we are using for the .o file. Also, base the name on the expected 314 # that we are using for the .o file. Also, base the name on the expected
111 # object file name, since that is what matters with a parallel build. 315 # object file name, since that is what matters with a parallel build.
112 lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d 316 lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
113 while true; do 317 while true; do
114 if mkdir "$lockdir" >/dev/null 2>&1; then 318 if mkdir "$lockdir" >/dev/null 2>&1; then
122 # Run the compile. 326 # Run the compile.
123 "$@" 327 "$@"
124 ret=$? 328 ret=$?
125 329
126 if test -f "$cofile"; then 330 if test -f "$cofile"; then
127 mv "$cofile" "$ofile" 331 test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
128 elif test -f "${cofile}bj"; then 332 elif test -f "${cofile}bj"; then
129 mv "${cofile}bj" "$ofile" 333 test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
130 fi 334 fi
131 335
132 rmdir "$lockdir" 336 rmdir "$lockdir"
133 exit $ret 337 exit $ret
134 338