| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 | #! /bin/sh# Wrapper for Microsoft lib.exeme=ar-libscriptversion=2012-03-01.08; # UTC# Copyright (C) 2010-2018 Free Software Foundation, Inc.# Written by Peter Rosin <peda@lysator.liu.se>.## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2, or (at your option)# any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program.  If not, see <https://www.gnu.org/licenses/>.# As a special exception to the GNU General Public License, if you# distribute this file as part of a program that contains a# configuration script generated by Autoconf, you may include it under# the same distribution terms that you use for the rest of that program.# This file is maintained in Automake, please report# bugs to <bug-automake@gnu.org> or send patches to# <automake-patches@gnu.org>.# func_error messagefunc_error (){  echo "$me: $1" 1>&2  exit 1}file_conv=# func_file_conv build_file# Convert a $build file to $host form and store it in $file# Currently only supports Windows hosts.func_file_conv (){  file=$1  case $file in    / | /[!/]*) # absolute file, and not a UNC file      if test -z "$file_conv"; then	# lazily determine how to convert abs files	case `uname -s` in	  MINGW*)	    file_conv=mingw	    ;;	  CYGWIN*)	    file_conv=cygwin	    ;;	  *)	    file_conv=wine	    ;;	esac      fi      case $file_conv in	mingw)	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`	  ;;	cygwin)	  file=`cygpath -m "$file" || echo "$file"`	  ;;	wine)	  file=`winepath -w "$file" || echo "$file"`	  ;;      esac      ;;  esac}# func_at_file at_file operation archive# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE# for each of them.# When interpreting the content of the @FILE, do NOT use func_file_conv,# since the user would need to supply preconverted file names to# binutils ar, at least for MinGW.func_at_file (){  operation=$2  archive=$3  at_file_contents=`cat "$1"`  eval set x "$at_file_contents"  shift  for member  do    $AR -NOLOGO $operation:"$member" "$archive" || exit $?  done}case $1 in  '')     func_error "no command.  Try '$0 --help' for more information."     ;;  -h | --h*)    cat <<EOFUsage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...]Members may be specified in a file named with @FILE.EOF    exit $?    ;;  -v | --v*)    echo "$me, version $scriptversion"    exit $?    ;;esacif test $# -lt 3; then  func_error "you must specify a program, an action and an archive"fiAR=$1shiftwhile :do  if test $# -lt 2; then    func_error "you must specify a program, an action and an archive"  fi  case $1 in    -lib | -LIB \    | -ltcg | -LTCG \    | -machine* | -MACHINE* \    | -subsystem* | -SUBSYSTEM* \    | -verbose | -VERBOSE \    | -wx* | -WX* )      AR="$AR $1"      shift      ;;    *)      action=$1      shift      break      ;;  esacdoneorig_archive=$1shiftfunc_file_conv "$orig_archive"archive=$file# strip leading dash in $actionaction=${action#-}delete=extract=list=quick=replace=index=create=while test -n "$action"do  case $action in    d*) delete=yes  ;;    x*) extract=yes ;;    t*) list=yes    ;;    q*) quick=yes   ;;    r*) replace=yes ;;    s*) index=yes   ;;    S*)             ;; # the index is always updated implicitly    c*) create=yes  ;;    u*)             ;; # TODO: don't ignore the update modifier    v*)             ;; # TODO: don't ignore the verbose modifier    *)      func_error "unknown action specified"      ;;  esac  action=${action#?}donecase $delete$extract$list$quick$replace,$index in  yes,* | ,yes)    ;;  yesyes*)    func_error "more than one action specified"    ;;  *)    func_error "no action specified"    ;;esacif test -n "$delete"; then  if test ! -f "$orig_archive"; then    func_error "archive not found"  fi  for member  do    case $1 in      @*)        func_at_file "${1#@}" -REMOVE "$archive"        ;;      *)        func_file_conv "$1"        $AR -NOLOGO -REMOVE:"$file" "$archive" || exit $?        ;;    esac  doneelif test -n "$extract"; then  if test ! -f "$orig_archive"; then    func_error "archive not found"  fi  if test $# -gt 0; then    for member    do      case $1 in        @*)          func_at_file "${1#@}" -EXTRACT "$archive"          ;;        *)          func_file_conv "$1"          $AR -NOLOGO -EXTRACT:"$file" "$archive" || exit $?          ;;      esac    done  else    $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member    do      $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $?    done  fielif test -n "$quick$replace"; then  if test ! -f "$orig_archive"; then    if test -z "$create"; then      echo "$me: creating $orig_archive"    fi    orig_archive=  else    orig_archive=$archive  fi  for member  do    case $1 in    @*)      func_file_conv "${1#@}"      set x "$@" "@$file"      ;;    *)      func_file_conv "$1"      set x "$@" "$file"      ;;    esac    shift    shift  done  if test -n "$orig_archive"; then    $AR -NOLOGO -OUT:"$archive" "$orig_archive" "$@" || exit $?  else    $AR -NOLOGO -OUT:"$archive" "$@" || exit $?  fielif test -n "$list"; then  if test ! -f "$orig_archive"; then    func_error "archive not found"  fi  $AR -NOLOGO -LIST "$archive" || exit $?fi
 |