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