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