Annotation of embedaddon/libnet/ar-lib, revision 1.1.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>