Annotation of embedaddon/libnet/ar-lib, revision 1.1
1.1 ! misho 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-2018 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 <https://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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>