File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / build-aux / ar-lib
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 13:38:46 2021 UTC (3 years, 9 months ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_16p0, HEAD
libiconv 1.16

    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>