Mercurial > repos > ktnyt > gembassy
comparison GEMBASSY-1.0.3/compile @ 2:8947fca5f715 draft default tip
Uploaded
author | ktnyt |
---|---|
date | Fri, 26 Jun 2015 05:21:44 -0400 |
parents | 84a17b3fad1f |
children |
comparison
equal
deleted
inserted
replaced
1:84a17b3fad1f | 2:8947fca5f715 |
---|---|
1 #! /bin/sh | |
2 # Wrapper for compilers which do not understand '-c -o'. | |
3 | |
4 scriptversion=2012-10-14.11; # UTC | |
5 | |
6 # Copyright (C) 1999-2014 Free Software Foundation, Inc. | |
7 # Written by Tom Tromey <tromey@cygnus.com>. | |
8 # | |
9 # This program is free software; you can redistribute it and/or modify | |
10 # it under the terms of the GNU General Public License as published by | |
11 # the Free Software Foundation; either version 2, or (at your option) | |
12 # any later version. | |
13 # | |
14 # This program is distributed in the hope that it will be useful, | |
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 # GNU General Public License for more details. | |
18 # | |
19 # You should have received a copy of the GNU General Public License | |
20 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
21 | |
22 # As a special exception to the GNU General Public License, if you | |
23 # distribute this file as part of a program that contains a | |
24 # configuration script generated by Autoconf, you may include it under | |
25 # the same distribution terms that you use for the rest of that program. | |
26 | |
27 # This file is maintained in Automake, please report | |
28 # bugs to <bug-automake@gnu.org> or send patches to | |
29 # <automake-patches@gnu.org>. | |
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 | |
234 case $1 in | |
235 '') | |
236 echo "$0: No command. Try '$0 --help' for more information." 1>&2 | |
237 exit 1; | |
238 ;; | |
239 -h | --h*) | |
240 cat <<\EOF | |
241 Usage: compile [--help] [--version] PROGRAM [ARGS] | |
242 | |
243 Wrapper for compilers which do not understand '-c -o'. | |
244 Remove '-o dest.o' from ARGS, run PROGRAM with the remaining | |
245 arguments, and rename the output as expected. | |
246 | |
247 If you are trying to build a whole package this is not the | |
248 right script to run: please start by reading the file 'INSTALL'. | |
249 | |
250 Report bugs to <bug-automake@gnu.org>. | |
251 EOF | |
252 exit $? | |
253 ;; | |
254 -v | --v*) | |
255 echo "compile $scriptversion" | |
256 exit $? | |
257 ;; | |
258 cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) | |
259 func_cl_wrapper "$@" # Doesn't return... | |
260 ;; | |
261 esac | |
262 | |
263 ofile= | |
264 cfile= | |
265 | |
266 for arg | |
267 do | |
268 if test -n "$eat"; then | |
269 eat= | |
270 else | |
271 case $1 in | |
272 -o) | |
273 # configure might choose to run compile as 'compile cc -o foo foo.c'. | |
274 # So we strip '-o arg' only if arg is an object. | |
275 eat=1 | |
276 case $2 in | |
277 *.o | *.obj) | |
278 ofile=$2 | |
279 ;; | |
280 *) | |
281 set x "$@" -o "$2" | |
282 shift | |
283 ;; | |
284 esac | |
285 ;; | |
286 *.c) | |
287 cfile=$1 | |
288 set x "$@" "$1" | |
289 shift | |
290 ;; | |
291 *) | |
292 set x "$@" "$1" | |
293 shift | |
294 ;; | |
295 esac | |
296 fi | |
297 shift | |
298 done | |
299 | |
300 if test -z "$ofile" || test -z "$cfile"; then | |
301 # If no '-o' option was seen then we might have been invoked from a | |
302 # pattern rule where we don't need one. That is ok -- this is a | |
303 # normal compilation that the losing compiler can handle. If no | |
304 # '.c' file was seen then we are probably linking. That is also | |
305 # ok. | |
306 exec "$@" | |
307 fi | |
308 | |
309 # Name of file we expect compiler to create. | |
310 cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` | |
311 | |
312 # Create the lock directory. | |
313 # Note: use '[/\\:.-]' here to ensure that we don't use the same name | |
314 # that we are using for the .o file. Also, base the name on the expected | |
315 # object file name, since that is what matters with a parallel build. | |
316 lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d | |
317 while true; do | |
318 if mkdir "$lockdir" >/dev/null 2>&1; then | |
319 break | |
320 fi | |
321 sleep 1 | |
322 done | |
323 # FIXME: race condition here if user kills between mkdir and trap. | |
324 trap "rmdir '$lockdir'; exit 1" 1 2 15 | |
325 | |
326 # Run the compile. | |
327 "$@" | |
328 ret=$? | |
329 | |
330 if test -f "$cofile"; then | |
331 test "$cofile" = "$ofile" || mv "$cofile" "$ofile" | |
332 elif test -f "${cofile}bj"; then | |
333 test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" | |
334 fi | |
335 | |
336 rmdir "$lockdir" | |
337 exit $ret | |
338 | |
339 # Local Variables: | |
340 # mode: shell-script | |
341 # sh-indentation: 2 | |
342 # eval: (add-hook 'write-file-hooks 'time-stamp) | |
343 # time-stamp-start: "scriptversion=" | |
344 # time-stamp-format: "%:y-%02m-%02d.%02H" | |
345 # time-stamp-time-zone: "UTC" | |
346 # time-stamp-end: "; # UTC" | |
347 # End: |