xref: /aosp_15_r20/external/libffi/.travis/ar-lib (revision 1fd5a2e1d639cd1ddf29dd0c484c123bbd850c21)
1*1fd5a2e1SPrashanth Swaminathan#! /bin/sh
2*1fd5a2e1SPrashanth Swaminathan# Wrapper for Microsoft lib.exe
3*1fd5a2e1SPrashanth Swaminathan
4*1fd5a2e1SPrashanth Swaminathanme=ar-lib
5*1fd5a2e1SPrashanth Swaminathanscriptversion=2012-03-01.08; # UTC
6*1fd5a2e1SPrashanth Swaminathan
7*1fd5a2e1SPrashanth Swaminathan# Copyright (C) 2010-2018 Free Software Foundation, Inc.
8*1fd5a2e1SPrashanth Swaminathan# Written by Peter Rosin <[email protected]>.
9*1fd5a2e1SPrashanth Swaminathan#
10*1fd5a2e1SPrashanth Swaminathan# This program is free software; you can redistribute it and/or modify
11*1fd5a2e1SPrashanth Swaminathan# it under the terms of the GNU General Public License as published by
12*1fd5a2e1SPrashanth Swaminathan# the Free Software Foundation; either version 2, or (at your option)
13*1fd5a2e1SPrashanth Swaminathan# any later version.
14*1fd5a2e1SPrashanth Swaminathan#
15*1fd5a2e1SPrashanth Swaminathan# This program is distributed in the hope that it will be useful,
16*1fd5a2e1SPrashanth Swaminathan# but WITHOUT ANY WARRANTY; without even the implied warranty of
17*1fd5a2e1SPrashanth Swaminathan# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*1fd5a2e1SPrashanth Swaminathan# GNU General Public License for more details.
19*1fd5a2e1SPrashanth Swaminathan#
20*1fd5a2e1SPrashanth Swaminathan# You should have received a copy of the GNU General Public License
21*1fd5a2e1SPrashanth Swaminathan# along with this program.  If not, see <https://www.gnu.org/licenses/>.
22*1fd5a2e1SPrashanth Swaminathan
23*1fd5a2e1SPrashanth Swaminathan# As a special exception to the GNU General Public License, if you
24*1fd5a2e1SPrashanth Swaminathan# distribute this file as part of a program that contains a
25*1fd5a2e1SPrashanth Swaminathan# configuration script generated by Autoconf, you may include it under
26*1fd5a2e1SPrashanth Swaminathan# the same distribution terms that you use for the rest of that program.
27*1fd5a2e1SPrashanth Swaminathan
28*1fd5a2e1SPrashanth Swaminathan# This file is maintained in Automake, please report
29*1fd5a2e1SPrashanth Swaminathan# bugs to <[email protected]> or send patches to
30*1fd5a2e1SPrashanth Swaminathan# <[email protected]>.
31*1fd5a2e1SPrashanth Swaminathan
32*1fd5a2e1SPrashanth Swaminathan
33*1fd5a2e1SPrashanth Swaminathan# func_error message
34*1fd5a2e1SPrashanth Swaminathanfunc_error ()
35*1fd5a2e1SPrashanth Swaminathan{
36*1fd5a2e1SPrashanth Swaminathan  echo "$me: $1" 1>&2
37*1fd5a2e1SPrashanth Swaminathan  exit 1
38*1fd5a2e1SPrashanth Swaminathan}
39*1fd5a2e1SPrashanth Swaminathan
40*1fd5a2e1SPrashanth Swaminathanfile_conv=
41*1fd5a2e1SPrashanth Swaminathan
42*1fd5a2e1SPrashanth Swaminathan# func_file_conv build_file
43*1fd5a2e1SPrashanth Swaminathan# Convert a $build file to $host form and store it in $file
44*1fd5a2e1SPrashanth Swaminathan# Currently only supports Windows hosts.
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 in
65*1fd5a2e1SPrashanth Swaminathan	mingw)
66*1fd5a2e1SPrashanth Swaminathan	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
67*1fd5a2e1SPrashanth Swaminathan	  ;;
68*1fd5a2e1SPrashanth Swaminathan	cygwin)
69*1fd5a2e1SPrashanth Swaminathan	  file=`cygpath -m "$file" || echo "$file"`
70*1fd5a2e1SPrashanth Swaminathan	  ;;
71*1fd5a2e1SPrashanth Swaminathan	wine)
72*1fd5a2e1SPrashanth Swaminathan	  file=`winepath -w "$file" || echo "$file"`
73*1fd5a2e1SPrashanth Swaminathan	  ;;
74*1fd5a2e1SPrashanth Swaminathan      esac
75*1fd5a2e1SPrashanth Swaminathan      ;;
76*1fd5a2e1SPrashanth Swaminathan  esac
77*1fd5a2e1SPrashanth Swaminathan}
78*1fd5a2e1SPrashanth Swaminathan
79*1fd5a2e1SPrashanth Swaminathan# func_at_file at_file operation archive
80*1fd5a2e1SPrashanth Swaminathan# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE
81*1fd5a2e1SPrashanth Swaminathan# for each of them.
82*1fd5a2e1SPrashanth Swaminathan# When interpreting the content of the @FILE, do NOT use func_file_conv,
83*1fd5a2e1SPrashanth Swaminathan# since the user would need to supply preconverted file names to
84*1fd5a2e1SPrashanth Swaminathan# binutils ar, at least for MinGW.
85*1fd5a2e1SPrashanth Swaminathanfunc_at_file ()
86*1fd5a2e1SPrashanth Swaminathan{
87*1fd5a2e1SPrashanth Swaminathan  operation=$2
88*1fd5a2e1SPrashanth Swaminathan  archive=$3
89*1fd5a2e1SPrashanth Swaminathan  at_file_contents=`cat "$1"`
90*1fd5a2e1SPrashanth Swaminathan  eval set x "$at_file_contents"
91*1fd5a2e1SPrashanth Swaminathan  shift
92*1fd5a2e1SPrashanth Swaminathan
93*1fd5a2e1SPrashanth Swaminathan  for member
94*1fd5a2e1SPrashanth Swaminathan  do
95*1fd5a2e1SPrashanth Swaminathan    $AR -NOLOGO $operation:"$member" "$archive" || exit $?
96*1fd5a2e1SPrashanth Swaminathan  done
97*1fd5a2e1SPrashanth Swaminathan}
98*1fd5a2e1SPrashanth Swaminathan
99*1fd5a2e1SPrashanth Swaminathancase $1 in
100*1fd5a2e1SPrashanth Swaminathan  '')
101*1fd5a2e1SPrashanth Swaminathan     func_error "no command.  Try '$0 --help' for more information."
102*1fd5a2e1SPrashanth Swaminathan     ;;
103*1fd5a2e1SPrashanth Swaminathan  -h | --h*)
104*1fd5a2e1SPrashanth Swaminathan    cat <<EOF
105*1fd5a2e1SPrashanth SwaminathanUsage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...]
106*1fd5a2e1SPrashanth Swaminathan
107*1fd5a2e1SPrashanth SwaminathanMembers may be specified in a file named with @FILE.
108*1fd5a2e1SPrashanth SwaminathanEOF
109*1fd5a2e1SPrashanth Swaminathan    exit $?
110*1fd5a2e1SPrashanth Swaminathan    ;;
111*1fd5a2e1SPrashanth Swaminathan  -v | --v*)
112*1fd5a2e1SPrashanth Swaminathan    echo "$me, version $scriptversion"
113*1fd5a2e1SPrashanth Swaminathan    exit $?
114*1fd5a2e1SPrashanth Swaminathan    ;;
115*1fd5a2e1SPrashanth Swaminathanesac
116*1fd5a2e1SPrashanth Swaminathan
117*1fd5a2e1SPrashanth Swaminathanif test $# -lt 3; then
118*1fd5a2e1SPrashanth Swaminathan  func_error "you must specify a program, an action and an archive"
119*1fd5a2e1SPrashanth Swaminathanfi
120*1fd5a2e1SPrashanth Swaminathan
121*1fd5a2e1SPrashanth SwaminathanAR=$1
122*1fd5a2e1SPrashanth Swaminathanshift
123*1fd5a2e1SPrashanth Swaminathanwhile :
124*1fd5a2e1SPrashanth Swaminathando
125*1fd5a2e1SPrashanth Swaminathan  if test $# -lt 2; then
126*1fd5a2e1SPrashanth Swaminathan    func_error "you must specify a program, an action and an archive"
127*1fd5a2e1SPrashanth Swaminathan  fi
128*1fd5a2e1SPrashanth Swaminathan  case $1 in
129*1fd5a2e1SPrashanth Swaminathan    -lib | -LIB \
130*1fd5a2e1SPrashanth Swaminathan    | -ltcg | -LTCG \
131*1fd5a2e1SPrashanth Swaminathan    | -machine* | -MACHINE* \
132*1fd5a2e1SPrashanth Swaminathan    | -subsystem* | -SUBSYSTEM* \
133*1fd5a2e1SPrashanth Swaminathan    | -verbose | -VERBOSE \
134*1fd5a2e1SPrashanth Swaminathan    | -wx* | -WX* )
135*1fd5a2e1SPrashanth Swaminathan      AR="$AR $1"
136*1fd5a2e1SPrashanth Swaminathan      shift
137*1fd5a2e1SPrashanth Swaminathan      ;;
138*1fd5a2e1SPrashanth Swaminathan    *)
139*1fd5a2e1SPrashanth Swaminathan      action=$1
140*1fd5a2e1SPrashanth Swaminathan      shift
141*1fd5a2e1SPrashanth Swaminathan      break
142*1fd5a2e1SPrashanth Swaminathan      ;;
143*1fd5a2e1SPrashanth Swaminathan  esac
144*1fd5a2e1SPrashanth Swaminathandone
145*1fd5a2e1SPrashanth Swaminathanorig_archive=$1
146*1fd5a2e1SPrashanth Swaminathanshift
147*1fd5a2e1SPrashanth Swaminathanfunc_file_conv "$orig_archive"
148*1fd5a2e1SPrashanth Swaminathanarchive=$file
149*1fd5a2e1SPrashanth Swaminathan
150*1fd5a2e1SPrashanth Swaminathan# strip leading dash in $action
151*1fd5a2e1SPrashanth Swaminathanaction=${action#-}
152*1fd5a2e1SPrashanth Swaminathan
153*1fd5a2e1SPrashanth Swaminathandelete=
154*1fd5a2e1SPrashanth Swaminathanextract=
155*1fd5a2e1SPrashanth Swaminathanlist=
156*1fd5a2e1SPrashanth Swaminathanquick=
157*1fd5a2e1SPrashanth Swaminathanreplace=
158*1fd5a2e1SPrashanth Swaminathanindex=
159*1fd5a2e1SPrashanth Swaminathancreate=
160*1fd5a2e1SPrashanth Swaminathan
161*1fd5a2e1SPrashanth Swaminathanwhile test -n "$action"
162*1fd5a2e1SPrashanth Swaminathando
163*1fd5a2e1SPrashanth Swaminathan  case $action in
164*1fd5a2e1SPrashanth Swaminathan    d*) delete=yes  ;;
165*1fd5a2e1SPrashanth Swaminathan    x*) extract=yes ;;
166*1fd5a2e1SPrashanth Swaminathan    t*) list=yes    ;;
167*1fd5a2e1SPrashanth Swaminathan    q*) quick=yes   ;;
168*1fd5a2e1SPrashanth Swaminathan    r*) replace=yes ;;
169*1fd5a2e1SPrashanth Swaminathan    s*) index=yes   ;;
170*1fd5a2e1SPrashanth Swaminathan    S*)             ;; # the index is always updated implicitly
171*1fd5a2e1SPrashanth Swaminathan    c*) create=yes  ;;
172*1fd5a2e1SPrashanth Swaminathan    u*)             ;; # TODO: don't ignore the update modifier
173*1fd5a2e1SPrashanth Swaminathan    v*)             ;; # TODO: don't ignore the verbose modifier
174*1fd5a2e1SPrashanth Swaminathan    *)
175*1fd5a2e1SPrashanth Swaminathan      func_error "unknown action specified"
176*1fd5a2e1SPrashanth Swaminathan      ;;
177*1fd5a2e1SPrashanth Swaminathan  esac
178*1fd5a2e1SPrashanth Swaminathan  action=${action#?}
179*1fd5a2e1SPrashanth Swaminathandone
180*1fd5a2e1SPrashanth Swaminathan
181*1fd5a2e1SPrashanth Swaminathancase $delete$extract$list$quick$replace,$index in
182*1fd5a2e1SPrashanth Swaminathan  yes,* | ,yes)
183*1fd5a2e1SPrashanth Swaminathan    ;;
184*1fd5a2e1SPrashanth Swaminathan  yesyes*)
185*1fd5a2e1SPrashanth Swaminathan    func_error "more than one action specified"
186*1fd5a2e1SPrashanth Swaminathan    ;;
187*1fd5a2e1SPrashanth Swaminathan  *)
188*1fd5a2e1SPrashanth Swaminathan    func_error "no action specified"
189*1fd5a2e1SPrashanth Swaminathan    ;;
190*1fd5a2e1SPrashanth Swaminathanesac
191*1fd5a2e1SPrashanth Swaminathan
192*1fd5a2e1SPrashanth Swaminathanif test -n "$delete"; then
193*1fd5a2e1SPrashanth Swaminathan  if test ! -f "$orig_archive"; then
194*1fd5a2e1SPrashanth Swaminathan    func_error "archive not found"
195*1fd5a2e1SPrashanth Swaminathan  fi
196*1fd5a2e1SPrashanth Swaminathan  for member
197*1fd5a2e1SPrashanth Swaminathan  do
198*1fd5a2e1SPrashanth Swaminathan    case $1 in
199*1fd5a2e1SPrashanth Swaminathan      @*)
200*1fd5a2e1SPrashanth Swaminathan        func_at_file "${1#@}" -REMOVE "$archive"
201*1fd5a2e1SPrashanth Swaminathan        ;;
202*1fd5a2e1SPrashanth Swaminathan      *)
203*1fd5a2e1SPrashanth Swaminathan        func_file_conv "$1"
204*1fd5a2e1SPrashanth Swaminathan        $AR -NOLOGO -REMOVE:"$file" "$archive" || exit $?
205*1fd5a2e1SPrashanth Swaminathan        ;;
206*1fd5a2e1SPrashanth Swaminathan    esac
207*1fd5a2e1SPrashanth Swaminathan  done
208*1fd5a2e1SPrashanth Swaminathan
209*1fd5a2e1SPrashanth Swaminathanelif test -n "$extract"; then
210*1fd5a2e1SPrashanth Swaminathan  if test ! -f "$orig_archive"; then
211*1fd5a2e1SPrashanth Swaminathan    func_error "archive not found"
212*1fd5a2e1SPrashanth Swaminathan  fi
213*1fd5a2e1SPrashanth Swaminathan  if test $# -gt 0; then
214*1fd5a2e1SPrashanth Swaminathan    for member
215*1fd5a2e1SPrashanth Swaminathan    do
216*1fd5a2e1SPrashanth Swaminathan      case $1 in
217*1fd5a2e1SPrashanth Swaminathan        @*)
218*1fd5a2e1SPrashanth Swaminathan          func_at_file "${1#@}" -EXTRACT "$archive"
219*1fd5a2e1SPrashanth Swaminathan          ;;
220*1fd5a2e1SPrashanth Swaminathan        *)
221*1fd5a2e1SPrashanth Swaminathan          func_file_conv "$1"
222*1fd5a2e1SPrashanth Swaminathan          $AR -NOLOGO -EXTRACT:"$file" "$archive" || exit $?
223*1fd5a2e1SPrashanth Swaminathan          ;;
224*1fd5a2e1SPrashanth Swaminathan      esac
225*1fd5a2e1SPrashanth Swaminathan    done
226*1fd5a2e1SPrashanth Swaminathan  else
227*1fd5a2e1SPrashanth Swaminathan    $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member
228*1fd5a2e1SPrashanth Swaminathan    do
229*1fd5a2e1SPrashanth Swaminathan      $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $?
230*1fd5a2e1SPrashanth Swaminathan    done
231*1fd5a2e1SPrashanth Swaminathan  fi
232*1fd5a2e1SPrashanth Swaminathan
233*1fd5a2e1SPrashanth Swaminathanelif test -n "$quick$replace"; then
234*1fd5a2e1SPrashanth Swaminathan  if test ! -f "$orig_archive"; then
235*1fd5a2e1SPrashanth Swaminathan    if test -z "$create"; then
236*1fd5a2e1SPrashanth Swaminathan      echo "$me: creating $orig_archive"
237*1fd5a2e1SPrashanth Swaminathan    fi
238*1fd5a2e1SPrashanth Swaminathan    orig_archive=
239*1fd5a2e1SPrashanth Swaminathan  else
240*1fd5a2e1SPrashanth Swaminathan    orig_archive=$archive
241*1fd5a2e1SPrashanth Swaminathan  fi
242*1fd5a2e1SPrashanth Swaminathan
243*1fd5a2e1SPrashanth Swaminathan  for member
244*1fd5a2e1SPrashanth Swaminathan  do
245*1fd5a2e1SPrashanth Swaminathan    case $1 in
246*1fd5a2e1SPrashanth Swaminathan    @*)
247*1fd5a2e1SPrashanth Swaminathan      func_file_conv "${1#@}"
248*1fd5a2e1SPrashanth Swaminathan      set x "$@" "@$file"
249*1fd5a2e1SPrashanth Swaminathan      ;;
250*1fd5a2e1SPrashanth Swaminathan    *)
251*1fd5a2e1SPrashanth Swaminathan      func_file_conv "$1"
252*1fd5a2e1SPrashanth Swaminathan      set x "$@" "$file"
253*1fd5a2e1SPrashanth Swaminathan      ;;
254*1fd5a2e1SPrashanth Swaminathan    esac
255*1fd5a2e1SPrashanth Swaminathan    shift
256*1fd5a2e1SPrashanth Swaminathan    shift
257*1fd5a2e1SPrashanth Swaminathan  done
258*1fd5a2e1SPrashanth Swaminathan
259*1fd5a2e1SPrashanth Swaminathan  if test -n "$orig_archive"; then
260*1fd5a2e1SPrashanth Swaminathan    $AR -NOLOGO -OUT:"$archive" "$orig_archive" "$@" || exit $?
261*1fd5a2e1SPrashanth Swaminathan  else
262*1fd5a2e1SPrashanth Swaminathan    $AR -NOLOGO -OUT:"$archive" "$@" || exit $?
263*1fd5a2e1SPrashanth Swaminathan  fi
264*1fd5a2e1SPrashanth Swaminathan
265*1fd5a2e1SPrashanth Swaminathanelif test -n "$list"; then
266*1fd5a2e1SPrashanth Swaminathan  if test ! -f "$orig_archive"; then
267*1fd5a2e1SPrashanth Swaminathan    func_error "archive not found"
268*1fd5a2e1SPrashanth Swaminathan  fi
269*1fd5a2e1SPrashanth Swaminathan  $AR -NOLOGO -LIST "$archive" || exit $?
270*1fd5a2e1SPrashanth Swaminathanfi
271