xref: /aosp_15_r20/external/libffi/.travis/compile (revision 1fd5a2e1d639cd1ddf29dd0c484c123bbd850c21)
1*1fd5a2e1SPrashanth Swaminathan#! /bin/sh
2*1fd5a2e1SPrashanth Swaminathan# Wrapper for compilers which do not understand '-c -o'.
3*1fd5a2e1SPrashanth Swaminathan
4*1fd5a2e1SPrashanth Swaminathanscriptversion=2018-03-27.18; # UTC
5*1fd5a2e1SPrashanth Swaminathan
6*1fd5a2e1SPrashanth Swaminathan# Copyright (C) 1999-2018 Free Software Foundation, Inc.
7*1fd5a2e1SPrashanth Swaminathan# Written by Tom Tromey <[email protected]>.
8*1fd5a2e1SPrashanth Swaminathan#
9*1fd5a2e1SPrashanth Swaminathan# This program is free software; you can redistribute it and/or modify
10*1fd5a2e1SPrashanth Swaminathan# it under the terms of the GNU General Public License as published by
11*1fd5a2e1SPrashanth Swaminathan# the Free Software Foundation; either version 2, or (at your option)
12*1fd5a2e1SPrashanth Swaminathan# any later version.
13*1fd5a2e1SPrashanth Swaminathan#
14*1fd5a2e1SPrashanth Swaminathan# This program is distributed in the hope that it will be useful,
15*1fd5a2e1SPrashanth Swaminathan# but WITHOUT ANY WARRANTY; without even the implied warranty of
16*1fd5a2e1SPrashanth Swaminathan# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17*1fd5a2e1SPrashanth Swaminathan# GNU General Public License for more details.
18*1fd5a2e1SPrashanth Swaminathan#
19*1fd5a2e1SPrashanth Swaminathan# You should have received a copy of the GNU General Public License
20*1fd5a2e1SPrashanth Swaminathan# along with this program.  If not, see <https://www.gnu.org/licenses/>.
21*1fd5a2e1SPrashanth Swaminathan
22*1fd5a2e1SPrashanth Swaminathan# As a special exception to the GNU General Public License, if you
23*1fd5a2e1SPrashanth Swaminathan# distribute this file as part of a program that contains a
24*1fd5a2e1SPrashanth Swaminathan# configuration script generated by Autoconf, you may include it under
25*1fd5a2e1SPrashanth Swaminathan# the same distribution terms that you use for the rest of that program.
26*1fd5a2e1SPrashanth Swaminathan
27*1fd5a2e1SPrashanth Swaminathan# This file is maintained in Automake, please report
28*1fd5a2e1SPrashanth Swaminathan# bugs to <[email protected]> or send patches to
29*1fd5a2e1SPrashanth Swaminathan# <[email protected]>.
30*1fd5a2e1SPrashanth Swaminathan
31*1fd5a2e1SPrashanth Swaminathannl='
32*1fd5a2e1SPrashanth Swaminathan'
33*1fd5a2e1SPrashanth Swaminathan
34*1fd5a2e1SPrashanth Swaminathan# We need space, tab and new line, in precisely that order.  Quoting is
35*1fd5a2e1SPrashanth Swaminathan# there to prevent tools from complaining about whitespace usage.
36*1fd5a2e1SPrashanth SwaminathanIFS=" ""	$nl"
37*1fd5a2e1SPrashanth Swaminathan
38*1fd5a2e1SPrashanth Swaminathanfile_conv=
39*1fd5a2e1SPrashanth Swaminathan
40*1fd5a2e1SPrashanth Swaminathan# func_file_conv build_file lazy
41*1fd5a2e1SPrashanth Swaminathan# Convert a $build file to $host form and store it in $file
42*1fd5a2e1SPrashanth Swaminathan# Currently only supports Windows hosts. If the determined conversion
43*1fd5a2e1SPrashanth Swaminathan# type is listed in (the comma separated) LAZY, no conversion will
44*1fd5a2e1SPrashanth Swaminathan# take place.
45*1fd5a2e1SPrashanth Swaminathanfunc_file_conv ()
46*1fd5a2e1SPrashanth Swaminathan{
47*1fd5a2e1SPrashanth Swaminathan  file=$1
48*1fd5a2e1SPrashanth Swaminathan  case $file in
49*1fd5a2e1SPrashanth Swaminathan    / | /[!/]*) # absolute file, and not a UNC file
50*1fd5a2e1SPrashanth Swaminathan      if test -z "$file_conv"; then
51*1fd5a2e1SPrashanth Swaminathan	# lazily determine how to convert abs files
52*1fd5a2e1SPrashanth Swaminathan	case `uname -s` in
53*1fd5a2e1SPrashanth Swaminathan	  MINGW*)
54*1fd5a2e1SPrashanth Swaminathan	    file_conv=mingw
55*1fd5a2e1SPrashanth Swaminathan	    ;;
56*1fd5a2e1SPrashanth Swaminathan	  CYGWIN*)
57*1fd5a2e1SPrashanth Swaminathan	    file_conv=cygwin
58*1fd5a2e1SPrashanth Swaminathan	    ;;
59*1fd5a2e1SPrashanth Swaminathan	  *)
60*1fd5a2e1SPrashanth Swaminathan	    file_conv=wine
61*1fd5a2e1SPrashanth Swaminathan	    ;;
62*1fd5a2e1SPrashanth Swaminathan	esac
63*1fd5a2e1SPrashanth Swaminathan      fi
64*1fd5a2e1SPrashanth Swaminathan      case $file_conv/,$2, in
65*1fd5a2e1SPrashanth Swaminathan	*,$file_conv,*)
66*1fd5a2e1SPrashanth Swaminathan	  ;;
67*1fd5a2e1SPrashanth Swaminathan	mingw/*)
68*1fd5a2e1SPrashanth Swaminathan	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
69*1fd5a2e1SPrashanth Swaminathan	  ;;
70*1fd5a2e1SPrashanth Swaminathan	cygwin/*)
71*1fd5a2e1SPrashanth Swaminathan	  file=`cygpath -m "$file" || echo "$file"`
72*1fd5a2e1SPrashanth Swaminathan	  ;;
73*1fd5a2e1SPrashanth Swaminathan	wine/*)
74*1fd5a2e1SPrashanth Swaminathan	  file=`winepath -w "$file" || echo "$file"`
75*1fd5a2e1SPrashanth Swaminathan	  ;;
76*1fd5a2e1SPrashanth Swaminathan      esac
77*1fd5a2e1SPrashanth Swaminathan      ;;
78*1fd5a2e1SPrashanth Swaminathan  esac
79*1fd5a2e1SPrashanth Swaminathan}
80*1fd5a2e1SPrashanth Swaminathan
81*1fd5a2e1SPrashanth Swaminathan# func_cl_dashL linkdir
82*1fd5a2e1SPrashanth Swaminathan# Make cl look for libraries in LINKDIR
83*1fd5a2e1SPrashanth Swaminathanfunc_cl_dashL ()
84*1fd5a2e1SPrashanth Swaminathan{
85*1fd5a2e1SPrashanth Swaminathan  func_file_conv "$1"
86*1fd5a2e1SPrashanth Swaminathan  if test -z "$lib_path"; then
87*1fd5a2e1SPrashanth Swaminathan    lib_path=$file
88*1fd5a2e1SPrashanth Swaminathan  else
89*1fd5a2e1SPrashanth Swaminathan    lib_path="$lib_path;$file"
90*1fd5a2e1SPrashanth Swaminathan  fi
91*1fd5a2e1SPrashanth Swaminathan  linker_opts="$linker_opts -LIBPATH:$file"
92*1fd5a2e1SPrashanth Swaminathan}
93*1fd5a2e1SPrashanth Swaminathan
94*1fd5a2e1SPrashanth Swaminathan# func_cl_dashl library
95*1fd5a2e1SPrashanth Swaminathan# Do a library search-path lookup for cl
96*1fd5a2e1SPrashanth Swaminathanfunc_cl_dashl ()
97*1fd5a2e1SPrashanth Swaminathan{
98*1fd5a2e1SPrashanth Swaminathan  lib=$1
99*1fd5a2e1SPrashanth Swaminathan  found=no
100*1fd5a2e1SPrashanth Swaminathan  save_IFS=$IFS
101*1fd5a2e1SPrashanth Swaminathan  IFS=';'
102*1fd5a2e1SPrashanth Swaminathan  for dir in $lib_path $LIB
103*1fd5a2e1SPrashanth Swaminathan  do
104*1fd5a2e1SPrashanth Swaminathan    IFS=$save_IFS
105*1fd5a2e1SPrashanth Swaminathan    if $shared && test -f "$dir/$lib.dll.lib"; then
106*1fd5a2e1SPrashanth Swaminathan      found=yes
107*1fd5a2e1SPrashanth Swaminathan      lib=$dir/$lib.dll.lib
108*1fd5a2e1SPrashanth Swaminathan      break
109*1fd5a2e1SPrashanth Swaminathan    fi
110*1fd5a2e1SPrashanth Swaminathan    if test -f "$dir/$lib.lib"; then
111*1fd5a2e1SPrashanth Swaminathan      found=yes
112*1fd5a2e1SPrashanth Swaminathan      lib=$dir/$lib.lib
113*1fd5a2e1SPrashanth Swaminathan      break
114*1fd5a2e1SPrashanth Swaminathan    fi
115*1fd5a2e1SPrashanth Swaminathan    if test -f "$dir/lib$lib.a"; then
116*1fd5a2e1SPrashanth Swaminathan      found=yes
117*1fd5a2e1SPrashanth Swaminathan      lib=$dir/lib$lib.a
118*1fd5a2e1SPrashanth Swaminathan      break
119*1fd5a2e1SPrashanth Swaminathan    fi
120*1fd5a2e1SPrashanth Swaminathan  done
121*1fd5a2e1SPrashanth Swaminathan  IFS=$save_IFS
122*1fd5a2e1SPrashanth Swaminathan
123*1fd5a2e1SPrashanth Swaminathan  if test "$found" != yes; then
124*1fd5a2e1SPrashanth Swaminathan    lib=$lib.lib
125*1fd5a2e1SPrashanth Swaminathan  fi
126*1fd5a2e1SPrashanth Swaminathan}
127*1fd5a2e1SPrashanth Swaminathan
128*1fd5a2e1SPrashanth Swaminathan# func_cl_wrapper cl arg...
129*1fd5a2e1SPrashanth Swaminathan# Adjust compile command to suit cl
130*1fd5a2e1SPrashanth Swaminathanfunc_cl_wrapper ()
131*1fd5a2e1SPrashanth Swaminathan{
132*1fd5a2e1SPrashanth Swaminathan  # Assume a capable shell
133*1fd5a2e1SPrashanth Swaminathan  lib_path=
134*1fd5a2e1SPrashanth Swaminathan  shared=:
135*1fd5a2e1SPrashanth Swaminathan  linker_opts=
136*1fd5a2e1SPrashanth Swaminathan  for arg
137*1fd5a2e1SPrashanth Swaminathan  do
138*1fd5a2e1SPrashanth Swaminathan    if test -n "$eat"; then
139*1fd5a2e1SPrashanth Swaminathan      eat=
140*1fd5a2e1SPrashanth Swaminathan    else
141*1fd5a2e1SPrashanth Swaminathan      case $1 in
142*1fd5a2e1SPrashanth Swaminathan	-o)
143*1fd5a2e1SPrashanth Swaminathan	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
144*1fd5a2e1SPrashanth Swaminathan	  eat=1
145*1fd5a2e1SPrashanth Swaminathan	  case $2 in
146*1fd5a2e1SPrashanth Swaminathan	    *.o | *.[oO][bB][jJ])
147*1fd5a2e1SPrashanth Swaminathan	      func_file_conv "$2"
148*1fd5a2e1SPrashanth Swaminathan	      set x "$@" -Fo"$file"
149*1fd5a2e1SPrashanth Swaminathan	      shift
150*1fd5a2e1SPrashanth Swaminathan	      ;;
151*1fd5a2e1SPrashanth Swaminathan	    *)
152*1fd5a2e1SPrashanth Swaminathan	      func_file_conv "$2"
153*1fd5a2e1SPrashanth Swaminathan	      set x "$@" -Fe"$file"
154*1fd5a2e1SPrashanth Swaminathan	      shift
155*1fd5a2e1SPrashanth Swaminathan	      ;;
156*1fd5a2e1SPrashanth Swaminathan	  esac
157*1fd5a2e1SPrashanth Swaminathan	  ;;
158*1fd5a2e1SPrashanth Swaminathan	-I)
159*1fd5a2e1SPrashanth Swaminathan	  eat=1
160*1fd5a2e1SPrashanth Swaminathan	  func_file_conv "$2" mingw
161*1fd5a2e1SPrashanth Swaminathan	  set x "$@" -I"$file"
162*1fd5a2e1SPrashanth Swaminathan	  shift
163*1fd5a2e1SPrashanth Swaminathan	  ;;
164*1fd5a2e1SPrashanth Swaminathan	-I*)
165*1fd5a2e1SPrashanth Swaminathan	  func_file_conv "${1#-I}" mingw
166*1fd5a2e1SPrashanth Swaminathan	  set x "$@" -I"$file"
167*1fd5a2e1SPrashanth Swaminathan	  shift
168*1fd5a2e1SPrashanth Swaminathan	  ;;
169*1fd5a2e1SPrashanth Swaminathan	-l)
170*1fd5a2e1SPrashanth Swaminathan	  eat=1
171*1fd5a2e1SPrashanth Swaminathan	  func_cl_dashl "$2"
172*1fd5a2e1SPrashanth Swaminathan	  set x "$@" "$lib"
173*1fd5a2e1SPrashanth Swaminathan	  shift
174*1fd5a2e1SPrashanth Swaminathan	  ;;
175*1fd5a2e1SPrashanth Swaminathan	-l*)
176*1fd5a2e1SPrashanth Swaminathan	  func_cl_dashl "${1#-l}"
177*1fd5a2e1SPrashanth Swaminathan	  set x "$@" "$lib"
178*1fd5a2e1SPrashanth Swaminathan	  shift
179*1fd5a2e1SPrashanth Swaminathan	  ;;
180*1fd5a2e1SPrashanth Swaminathan	-L)
181*1fd5a2e1SPrashanth Swaminathan	  eat=1
182*1fd5a2e1SPrashanth Swaminathan	  func_cl_dashL "$2"
183*1fd5a2e1SPrashanth Swaminathan	  ;;
184*1fd5a2e1SPrashanth Swaminathan	-L*)
185*1fd5a2e1SPrashanth Swaminathan	  func_cl_dashL "${1#-L}"
186*1fd5a2e1SPrashanth Swaminathan	  ;;
187*1fd5a2e1SPrashanth Swaminathan	-static)
188*1fd5a2e1SPrashanth Swaminathan	  shared=false
189*1fd5a2e1SPrashanth Swaminathan	  ;;
190*1fd5a2e1SPrashanth Swaminathan	-warn)
191*1fd5a2e1SPrashanth Swaminathan	  eat=1
192*1fd5a2e1SPrashanth Swaminathan	  ;;
193*1fd5a2e1SPrashanth Swaminathan	-Wl,*)
194*1fd5a2e1SPrashanth Swaminathan	  arg=${1#-Wl,}
195*1fd5a2e1SPrashanth Swaminathan	  save_ifs="$IFS"; IFS=','
196*1fd5a2e1SPrashanth Swaminathan	  for flag in $arg; do
197*1fd5a2e1SPrashanth Swaminathan	    IFS="$save_ifs"
198*1fd5a2e1SPrashanth Swaminathan	    linker_opts="$linker_opts $flag"
199*1fd5a2e1SPrashanth Swaminathan	  done
200*1fd5a2e1SPrashanth Swaminathan	  IFS="$save_ifs"
201*1fd5a2e1SPrashanth Swaminathan	  ;;
202*1fd5a2e1SPrashanth Swaminathan	-Xlinker)
203*1fd5a2e1SPrashanth Swaminathan	  eat=1
204*1fd5a2e1SPrashanth Swaminathan	  linker_opts="$linker_opts $2"
205*1fd5a2e1SPrashanth Swaminathan	  ;;
206*1fd5a2e1SPrashanth Swaminathan	-*)
207*1fd5a2e1SPrashanth Swaminathan	  set x "$@" "$1"
208*1fd5a2e1SPrashanth Swaminathan	  shift
209*1fd5a2e1SPrashanth Swaminathan	  ;;
210*1fd5a2e1SPrashanth Swaminathan	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
211*1fd5a2e1SPrashanth Swaminathan	  func_file_conv "$1"
212*1fd5a2e1SPrashanth Swaminathan	  set x "$@" -Tp"$file"
213*1fd5a2e1SPrashanth Swaminathan	  shift
214*1fd5a2e1SPrashanth Swaminathan	  ;;
215*1fd5a2e1SPrashanth Swaminathan	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
216*1fd5a2e1SPrashanth Swaminathan	  func_file_conv "$1" mingw
217*1fd5a2e1SPrashanth Swaminathan	  set x "$@" "$file"
218*1fd5a2e1SPrashanth Swaminathan	  shift
219*1fd5a2e1SPrashanth Swaminathan	  ;;
220*1fd5a2e1SPrashanth Swaminathan	*)
221*1fd5a2e1SPrashanth Swaminathan	  set x "$@" "$1"
222*1fd5a2e1SPrashanth Swaminathan	  shift
223*1fd5a2e1SPrashanth Swaminathan	  ;;
224*1fd5a2e1SPrashanth Swaminathan      esac
225*1fd5a2e1SPrashanth Swaminathan    fi
226*1fd5a2e1SPrashanth Swaminathan    shift
227*1fd5a2e1SPrashanth Swaminathan  done
228*1fd5a2e1SPrashanth Swaminathan  if test -n "$linker_opts"; then
229*1fd5a2e1SPrashanth Swaminathan    linker_opts="-link$linker_opts"
230*1fd5a2e1SPrashanth Swaminathan  fi
231*1fd5a2e1SPrashanth Swaminathan  exec "$@" $linker_opts
232*1fd5a2e1SPrashanth Swaminathan  exit 1
233*1fd5a2e1SPrashanth Swaminathan}
234*1fd5a2e1SPrashanth Swaminathan
235*1fd5a2e1SPrashanth Swaminathaneat=
236*1fd5a2e1SPrashanth Swaminathan
237*1fd5a2e1SPrashanth Swaminathancase $1 in
238*1fd5a2e1SPrashanth Swaminathan  '')
239*1fd5a2e1SPrashanth Swaminathan     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
240*1fd5a2e1SPrashanth Swaminathan     exit 1;
241*1fd5a2e1SPrashanth Swaminathan     ;;
242*1fd5a2e1SPrashanth Swaminathan  -h | --h*)
243*1fd5a2e1SPrashanth Swaminathan    cat <<\EOF
244*1fd5a2e1SPrashanth SwaminathanUsage: compile [--help] [--version] PROGRAM [ARGS]
245*1fd5a2e1SPrashanth Swaminathan
246*1fd5a2e1SPrashanth SwaminathanWrapper for compilers which do not understand '-c -o'.
247*1fd5a2e1SPrashanth SwaminathanRemove '-o dest.o' from ARGS, run PROGRAM with the remaining
248*1fd5a2e1SPrashanth Swaminathanarguments, and rename the output as expected.
249*1fd5a2e1SPrashanth Swaminathan
250*1fd5a2e1SPrashanth SwaminathanIf you are trying to build a whole package this is not the
251*1fd5a2e1SPrashanth Swaminathanright script to run: please start by reading the file 'INSTALL'.
252*1fd5a2e1SPrashanth Swaminathan
253*1fd5a2e1SPrashanth SwaminathanReport bugs to <bug-automake@gnu.org>.
254*1fd5a2e1SPrashanth SwaminathanEOF
255*1fd5a2e1SPrashanth Swaminathan    exit $?
256*1fd5a2e1SPrashanth Swaminathan    ;;
257*1fd5a2e1SPrashanth Swaminathan  -v | --v*)
258*1fd5a2e1SPrashanth Swaminathan    echo "compile $scriptversion"
259*1fd5a2e1SPrashanth Swaminathan    exit $?
260*1fd5a2e1SPrashanth Swaminathan    ;;
261*1fd5a2e1SPrashanth Swaminathan  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
262*1fd5a2e1SPrashanth Swaminathan  icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
263*1fd5a2e1SPrashanth Swaminathan    func_cl_wrapper "$@"      # Doesn't return...
264*1fd5a2e1SPrashanth Swaminathan    ;;
265*1fd5a2e1SPrashanth Swaminathanesac
266*1fd5a2e1SPrashanth Swaminathan
267*1fd5a2e1SPrashanth Swaminathanofile=
268*1fd5a2e1SPrashanth Swaminathancfile=
269*1fd5a2e1SPrashanth Swaminathan
270*1fd5a2e1SPrashanth Swaminathanfor arg
271*1fd5a2e1SPrashanth Swaminathando
272*1fd5a2e1SPrashanth Swaminathan  if test -n "$eat"; then
273*1fd5a2e1SPrashanth Swaminathan    eat=
274*1fd5a2e1SPrashanth Swaminathan  else
275*1fd5a2e1SPrashanth Swaminathan    case $1 in
276*1fd5a2e1SPrashanth Swaminathan      -o)
277*1fd5a2e1SPrashanth Swaminathan	# configure might choose to run compile as 'compile cc -o foo foo.c'.
278*1fd5a2e1SPrashanth Swaminathan	# So we strip '-o arg' only if arg is an object.
279*1fd5a2e1SPrashanth Swaminathan	eat=1
280*1fd5a2e1SPrashanth Swaminathan	case $2 in
281*1fd5a2e1SPrashanth Swaminathan	  *.o | *.obj)
282*1fd5a2e1SPrashanth Swaminathan	    ofile=$2
283*1fd5a2e1SPrashanth Swaminathan	    ;;
284*1fd5a2e1SPrashanth Swaminathan	  *)
285*1fd5a2e1SPrashanth Swaminathan	    set x "$@" -o "$2"
286*1fd5a2e1SPrashanth Swaminathan	    shift
287*1fd5a2e1SPrashanth Swaminathan	    ;;
288*1fd5a2e1SPrashanth Swaminathan	esac
289*1fd5a2e1SPrashanth Swaminathan	;;
290*1fd5a2e1SPrashanth Swaminathan      *.c)
291*1fd5a2e1SPrashanth Swaminathan	cfile=$1
292*1fd5a2e1SPrashanth Swaminathan	set x "$@" "$1"
293*1fd5a2e1SPrashanth Swaminathan	shift
294*1fd5a2e1SPrashanth Swaminathan	;;
295*1fd5a2e1SPrashanth Swaminathan      *)
296*1fd5a2e1SPrashanth Swaminathan	set x "$@" "$1"
297*1fd5a2e1SPrashanth Swaminathan	shift
298*1fd5a2e1SPrashanth Swaminathan	;;
299*1fd5a2e1SPrashanth Swaminathan    esac
300*1fd5a2e1SPrashanth Swaminathan  fi
301*1fd5a2e1SPrashanth Swaminathan  shift
302*1fd5a2e1SPrashanth Swaminathandone
303*1fd5a2e1SPrashanth Swaminathan
304*1fd5a2e1SPrashanth Swaminathanif test -z "$ofile" || test -z "$cfile"; then
305*1fd5a2e1SPrashanth Swaminathan  # If no '-o' option was seen then we might have been invoked from a
306*1fd5a2e1SPrashanth Swaminathan  # pattern rule where we don't need one.  That is ok -- this is a
307*1fd5a2e1SPrashanth Swaminathan  # normal compilation that the losing compiler can handle.  If no
308*1fd5a2e1SPrashanth Swaminathan  # '.c' file was seen then we are probably linking.  That is also
309*1fd5a2e1SPrashanth Swaminathan  # ok.
310*1fd5a2e1SPrashanth Swaminathan  exec "$@"
311*1fd5a2e1SPrashanth Swaminathanfi
312*1fd5a2e1SPrashanth Swaminathan
313*1fd5a2e1SPrashanth Swaminathan# Name of file we expect compiler to create.
314*1fd5a2e1SPrashanth Swaminathancofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
315*1fd5a2e1SPrashanth Swaminathan
316*1fd5a2e1SPrashanth Swaminathan# Create the lock directory.
317*1fd5a2e1SPrashanth Swaminathan# Note: use '[/\\:.-]' here to ensure that we don't use the same name
318*1fd5a2e1SPrashanth Swaminathan# that we are using for the .o file.  Also, base the name on the expected
319*1fd5a2e1SPrashanth Swaminathan# object file name, since that is what matters with a parallel build.
320*1fd5a2e1SPrashanth Swaminathanlockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
321*1fd5a2e1SPrashanth Swaminathanwhile true; do
322*1fd5a2e1SPrashanth Swaminathan  if mkdir "$lockdir" >/dev/null 2>&1; then
323*1fd5a2e1SPrashanth Swaminathan    break
324*1fd5a2e1SPrashanth Swaminathan  fi
325*1fd5a2e1SPrashanth Swaminathan  sleep 1
326*1fd5a2e1SPrashanth Swaminathandone
327*1fd5a2e1SPrashanth Swaminathan# FIXME: race condition here if user kills between mkdir and trap.
328*1fd5a2e1SPrashanth Swaminathantrap "rmdir '$lockdir'; exit 1" 1 2 15
329*1fd5a2e1SPrashanth Swaminathan
330*1fd5a2e1SPrashanth Swaminathan# Run the compile.
331*1fd5a2e1SPrashanth Swaminathan"$@"
332*1fd5a2e1SPrashanth Swaminathanret=$?
333*1fd5a2e1SPrashanth Swaminathan
334*1fd5a2e1SPrashanth Swaminathanif test -f "$cofile"; then
335*1fd5a2e1SPrashanth Swaminathan  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
336*1fd5a2e1SPrashanth Swaminathanelif test -f "${cofile}bj"; then
337*1fd5a2e1SPrashanth Swaminathan  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
338*1fd5a2e1SPrashanth Swaminathanfi
339*1fd5a2e1SPrashanth Swaminathan
340*1fd5a2e1SPrashanth Swaminathanrmdir "$lockdir"
341*1fd5a2e1SPrashanth Swaminathanexit $ret
342*1fd5a2e1SPrashanth Swaminathan
343*1fd5a2e1SPrashanth Swaminathan# Local Variables:
344*1fd5a2e1SPrashanth Swaminathan# mode: shell-script
345*1fd5a2e1SPrashanth Swaminathan# sh-indentation: 2
346*1fd5a2e1SPrashanth Swaminathan# eval: (add-hook 'before-save-hook 'time-stamp)
347*1fd5a2e1SPrashanth Swaminathan# time-stamp-start: "scriptversion="
348*1fd5a2e1SPrashanth Swaminathan# time-stamp-format: "%:y-%02m-%02d.%02H"
349*1fd5a2e1SPrashanth Swaminathan# time-stamp-time-zone: "UTC0"
350*1fd5a2e1SPrashanth Swaminathan# time-stamp-end: "; # UTC"
351*1fd5a2e1SPrashanth Swaminathan# End:
352