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