| #! /bin/sh | 
 | # Wrapper for Microsoft lib.exe | 
 |  | 
 | me=ar-lib | 
 | scriptversion=2019-07-04.01; # UTC | 
 |  | 
 | # Copyright (C) 2010-2021 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 message | 
 | func_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* | MSYS*) | 
 | 	    file_conv=cygwin | 
 | 	    ;; | 
 | 	  *) | 
 | 	    file_conv=wine | 
 | 	    ;; | 
 | 	esac | 
 |       fi | 
 |       case $file_conv in | 
 | 	mingw) | 
 | 	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` | 
 | 	  ;; | 
 | 	cygwin | msys) | 
 | 	  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 <<EOF | 
 | Usage: $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 $? | 
 |     ;; | 
 | esac | 
 |  | 
 | if test $# -lt 3; then | 
 |   func_error "you must specify a program, an action and an archive" | 
 | fi | 
 |  | 
 | AR=$1 | 
 | shift | 
 | while : | 
 | 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 | 
 |       ;; | 
 |   esac | 
 | done | 
 | orig_archive=$1 | 
 | shift | 
 | func_file_conv "$orig_archive" | 
 | archive=$file | 
 |  | 
 | # strip leading dash in $action | 
 | action=${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#?} | 
 | done | 
 |  | 
 | case $delete$extract$list$quick$replace,$index in | 
 |   yes,* | ,yes) | 
 |     ;; | 
 |   yesyes*) | 
 |     func_error "more than one action specified" | 
 |     ;; | 
 |   *) | 
 |     func_error "no action specified" | 
 |     ;; | 
 | esac | 
 |  | 
 | if 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 | 
 |   done | 
 |  | 
 | elif 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" | tr -d '\r' | sed -e 's/\\/\\\\/g' \ | 
 |       | while read member | 
 |         do | 
 |           $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $? | 
 |         done | 
 |   fi | 
 |  | 
 | elif 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 $? | 
 |   fi | 
 |  | 
 | elif test -n "$list"; then | 
 |   if test ! -f "$orig_archive"; then | 
 |     func_error "archive not found" | 
 |   fi | 
 |   $AR -NOLOGO -LIST "$archive" || exit $? | 
 | fi |