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