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