Mercurial > hg > CbC > CbC_gcc
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 |