176404edcSAsim Jamshed#! /bin/sh 276404edcSAsim Jamshed# Wrapper for Microsoft lib.exe 376404edcSAsim Jamshed 476404edcSAsim Jamshedme=ar-lib 576404edcSAsim Jamshedscriptversion=2012-03-01.08; # UTC 676404edcSAsim Jamshed 7d270d183SAsim Jamshed# Copyright (C) 2010-2014 Free Software Foundation, Inc. 876404edcSAsim Jamshed# Written by Peter Rosin <[email protected]>. 976404edcSAsim Jamshed# 1076404edcSAsim Jamshed# This program is free software; you can redistribute it and/or modify 1176404edcSAsim Jamshed# it under the terms of the GNU General Public License as published by 1276404edcSAsim Jamshed# the Free Software Foundation; either version 2, or (at your option) 1376404edcSAsim Jamshed# any later version. 1476404edcSAsim Jamshed# 1576404edcSAsim Jamshed# This program is distributed in the hope that it will be useful, 1676404edcSAsim Jamshed# but WITHOUT ANY WARRANTY; without even the implied warranty of 1776404edcSAsim Jamshed# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1876404edcSAsim Jamshed# GNU General Public License for more details. 1976404edcSAsim Jamshed# 2076404edcSAsim Jamshed# You should have received a copy of the GNU General Public License 2176404edcSAsim Jamshed# along with this program. If not, see <http://www.gnu.org/licenses/>. 2276404edcSAsim Jamshed 2376404edcSAsim Jamshed# As a special exception to the GNU General Public License, if you 2476404edcSAsim Jamshed# distribute this file as part of a program that contains a 2576404edcSAsim Jamshed# configuration script generated by Autoconf, you may include it under 2676404edcSAsim Jamshed# the same distribution terms that you use for the rest of that program. 2776404edcSAsim Jamshed 2876404edcSAsim Jamshed# This file is maintained in Automake, please report 2976404edcSAsim Jamshed# bugs to <[email protected]> or send patches to 3076404edcSAsim Jamshed# <[email protected]>. 3176404edcSAsim Jamshed 3276404edcSAsim Jamshed 3376404edcSAsim Jamshed# func_error message 3476404edcSAsim Jamshedfunc_error () 3576404edcSAsim Jamshed{ 3676404edcSAsim Jamshed echo "$me: $1" 1>&2 3776404edcSAsim Jamshed exit 1 3876404edcSAsim Jamshed} 3976404edcSAsim Jamshed 4076404edcSAsim Jamshedfile_conv= 4176404edcSAsim Jamshed 4276404edcSAsim Jamshed# func_file_conv build_file 4376404edcSAsim Jamshed# Convert a $build file to $host form and store it in $file 4476404edcSAsim Jamshed# Currently only supports Windows hosts. 4576404edcSAsim Jamshedfunc_file_conv () 4676404edcSAsim Jamshed{ 4776404edcSAsim Jamshed file=$1 4876404edcSAsim Jamshed case $file in 4976404edcSAsim Jamshed / | /[!/]*) # absolute file, and not a UNC file 5076404edcSAsim Jamshed if test -z "$file_conv"; then 5176404edcSAsim Jamshed # lazily determine how to convert abs files 5276404edcSAsim Jamshed case `uname -s` in 5376404edcSAsim Jamshed MINGW*) 5476404edcSAsim Jamshed file_conv=mingw 5576404edcSAsim Jamshed ;; 5676404edcSAsim Jamshed CYGWIN*) 5776404edcSAsim Jamshed file_conv=cygwin 5876404edcSAsim Jamshed ;; 5976404edcSAsim Jamshed *) 6076404edcSAsim Jamshed file_conv=wine 6176404edcSAsim Jamshed ;; 6276404edcSAsim Jamshed esac 6376404edcSAsim Jamshed fi 6476404edcSAsim Jamshed case $file_conv in 6576404edcSAsim Jamshed mingw) 6676404edcSAsim Jamshed file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` 6776404edcSAsim Jamshed ;; 6876404edcSAsim Jamshed cygwin) 6976404edcSAsim Jamshed file=`cygpath -m "$file" || echo "$file"` 7076404edcSAsim Jamshed ;; 7176404edcSAsim Jamshed wine) 7276404edcSAsim Jamshed file=`winepath -w "$file" || echo "$file"` 7376404edcSAsim Jamshed ;; 7476404edcSAsim Jamshed esac 7576404edcSAsim Jamshed ;; 7676404edcSAsim Jamshed esac 7776404edcSAsim Jamshed} 7876404edcSAsim Jamshed 7976404edcSAsim Jamshed# func_at_file at_file operation archive 8076404edcSAsim Jamshed# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE 8176404edcSAsim Jamshed# for each of them. 8276404edcSAsim Jamshed# When interpreting the content of the @FILE, do NOT use func_file_conv, 8376404edcSAsim Jamshed# since the user would need to supply preconverted file names to 8476404edcSAsim Jamshed# binutils ar, at least for MinGW. 8576404edcSAsim Jamshedfunc_at_file () 8676404edcSAsim Jamshed{ 8776404edcSAsim Jamshed operation=$2 8876404edcSAsim Jamshed archive=$3 8976404edcSAsim Jamshed at_file_contents=`cat "$1"` 9076404edcSAsim Jamshed eval set x "$at_file_contents" 9176404edcSAsim Jamshed shift 9276404edcSAsim Jamshed 9376404edcSAsim Jamshed for member 9476404edcSAsim Jamshed do 9576404edcSAsim Jamshed $AR -NOLOGO $operation:"$member" "$archive" || exit $? 9676404edcSAsim Jamshed done 9776404edcSAsim Jamshed} 9876404edcSAsim Jamshed 9976404edcSAsim Jamshedcase $1 in 10076404edcSAsim Jamshed '') 10176404edcSAsim Jamshed func_error "no command. Try '$0 --help' for more information." 10276404edcSAsim Jamshed ;; 10376404edcSAsim Jamshed -h | --h*) 10476404edcSAsim Jamshed cat <<EOF 10576404edcSAsim JamshedUsage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...] 10676404edcSAsim Jamshed 10776404edcSAsim JamshedMembers may be specified in a file named with @FILE. 10876404edcSAsim JamshedEOF 10976404edcSAsim Jamshed exit $? 11076404edcSAsim Jamshed ;; 11176404edcSAsim Jamshed -v | --v*) 11276404edcSAsim Jamshed echo "$me, version $scriptversion" 11376404edcSAsim Jamshed exit $? 11476404edcSAsim Jamshed ;; 11576404edcSAsim Jamshedesac 11676404edcSAsim Jamshed 11776404edcSAsim Jamshedif test $# -lt 3; then 11876404edcSAsim Jamshed func_error "you must specify a program, an action and an archive" 11976404edcSAsim Jamshedfi 12076404edcSAsim Jamshed 12176404edcSAsim JamshedAR=$1 12276404edcSAsim Jamshedshift 12376404edcSAsim Jamshedwhile : 12476404edcSAsim Jamsheddo 12576404edcSAsim Jamshed if test $# -lt 2; then 12676404edcSAsim Jamshed func_error "you must specify a program, an action and an archive" 12776404edcSAsim Jamshed fi 12876404edcSAsim Jamshed case $1 in 12976404edcSAsim Jamshed -lib | -LIB \ 13076404edcSAsim Jamshed | -ltcg | -LTCG \ 13176404edcSAsim Jamshed | -machine* | -MACHINE* \ 13276404edcSAsim Jamshed | -subsystem* | -SUBSYSTEM* \ 13376404edcSAsim Jamshed | -verbose | -VERBOSE \ 13476404edcSAsim Jamshed | -wx* | -WX* ) 13576404edcSAsim Jamshed AR="$AR $1" 13676404edcSAsim Jamshed shift 13776404edcSAsim Jamshed ;; 13876404edcSAsim Jamshed *) 13976404edcSAsim Jamshed action=$1 14076404edcSAsim Jamshed shift 14176404edcSAsim Jamshed break 14276404edcSAsim Jamshed ;; 14376404edcSAsim Jamshed esac 14476404edcSAsim Jamsheddone 14576404edcSAsim Jamshedorig_archive=$1 14676404edcSAsim Jamshedshift 14776404edcSAsim Jamshedfunc_file_conv "$orig_archive" 14876404edcSAsim Jamshedarchive=$file 14976404edcSAsim Jamshed 15076404edcSAsim Jamshed# strip leading dash in $action 15176404edcSAsim Jamshedaction=${action#-} 15276404edcSAsim Jamshed 15376404edcSAsim Jamsheddelete= 15476404edcSAsim Jamshedextract= 15576404edcSAsim Jamshedlist= 15676404edcSAsim Jamshedquick= 15776404edcSAsim Jamshedreplace= 15876404edcSAsim Jamshedindex= 15976404edcSAsim Jamshedcreate= 16076404edcSAsim Jamshed 16176404edcSAsim Jamshedwhile test -n "$action" 16276404edcSAsim Jamsheddo 16376404edcSAsim Jamshed case $action in 16476404edcSAsim Jamshed d*) delete=yes ;; 16576404edcSAsim Jamshed x*) extract=yes ;; 16676404edcSAsim Jamshed t*) list=yes ;; 16776404edcSAsim Jamshed q*) quick=yes ;; 16876404edcSAsim Jamshed r*) replace=yes ;; 16976404edcSAsim Jamshed s*) index=yes ;; 17076404edcSAsim Jamshed S*) ;; # the index is always updated implicitly 17176404edcSAsim Jamshed c*) create=yes ;; 17276404edcSAsim Jamshed u*) ;; # TODO: don't ignore the update modifier 17376404edcSAsim Jamshed v*) ;; # TODO: don't ignore the verbose modifier 17476404edcSAsim Jamshed *) 17576404edcSAsim Jamshed func_error "unknown action specified" 17676404edcSAsim Jamshed ;; 17776404edcSAsim Jamshed esac 17876404edcSAsim Jamshed action=${action#?} 17976404edcSAsim Jamsheddone 18076404edcSAsim Jamshed 18176404edcSAsim Jamshedcase $delete$extract$list$quick$replace,$index in 18276404edcSAsim Jamshed yes,* | ,yes) 18376404edcSAsim Jamshed ;; 18476404edcSAsim Jamshed yesyes*) 18576404edcSAsim Jamshed func_error "more than one action specified" 18676404edcSAsim Jamshed ;; 18776404edcSAsim Jamshed *) 18876404edcSAsim Jamshed func_error "no action specified" 18976404edcSAsim Jamshed ;; 19076404edcSAsim Jamshedesac 19176404edcSAsim Jamshed 19276404edcSAsim Jamshedif test -n "$delete"; then 19376404edcSAsim Jamshed if test ! -f "$orig_archive"; then 19476404edcSAsim Jamshed func_error "archive not found" 19576404edcSAsim Jamshed fi 19676404edcSAsim Jamshed for member 19776404edcSAsim Jamshed do 19876404edcSAsim Jamshed case $1 in 19976404edcSAsim Jamshed @*) 20076404edcSAsim Jamshed func_at_file "${1#@}" -REMOVE "$archive" 20176404edcSAsim Jamshed ;; 20276404edcSAsim Jamshed *) 20376404edcSAsim Jamshed func_file_conv "$1" 20476404edcSAsim Jamshed $AR -NOLOGO -REMOVE:"$file" "$archive" || exit $? 20576404edcSAsim Jamshed ;; 20676404edcSAsim Jamshed esac 20776404edcSAsim Jamshed done 20876404edcSAsim Jamshed 20976404edcSAsim Jamshedelif test -n "$extract"; then 21076404edcSAsim Jamshed if test ! -f "$orig_archive"; then 21176404edcSAsim Jamshed func_error "archive not found" 21276404edcSAsim Jamshed fi 21376404edcSAsim Jamshed if test $# -gt 0; then 21476404edcSAsim Jamshed for member 21576404edcSAsim Jamshed do 21676404edcSAsim Jamshed case $1 in 21776404edcSAsim Jamshed @*) 21876404edcSAsim Jamshed func_at_file "${1#@}" -EXTRACT "$archive" 21976404edcSAsim Jamshed ;; 22076404edcSAsim Jamshed *) 22176404edcSAsim Jamshed func_file_conv "$1" 22276404edcSAsim Jamshed $AR -NOLOGO -EXTRACT:"$file" "$archive" || exit $? 22376404edcSAsim Jamshed ;; 22476404edcSAsim Jamshed esac 22576404edcSAsim Jamshed done 22676404edcSAsim Jamshed else 22776404edcSAsim Jamshed $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member 22876404edcSAsim Jamshed do 22976404edcSAsim Jamshed $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $? 23076404edcSAsim Jamshed done 23176404edcSAsim Jamshed fi 23276404edcSAsim Jamshed 23376404edcSAsim Jamshedelif test -n "$quick$replace"; then 23476404edcSAsim Jamshed if test ! -f "$orig_archive"; then 23576404edcSAsim Jamshed if test -z "$create"; then 23676404edcSAsim Jamshed echo "$me: creating $orig_archive" 23776404edcSAsim Jamshed fi 23876404edcSAsim Jamshed orig_archive= 23976404edcSAsim Jamshed else 24076404edcSAsim Jamshed orig_archive=$archive 24176404edcSAsim Jamshed fi 24276404edcSAsim Jamshed 24376404edcSAsim Jamshed for member 24476404edcSAsim Jamshed do 24576404edcSAsim Jamshed case $1 in 24676404edcSAsim Jamshed @*) 24776404edcSAsim Jamshed func_file_conv "${1#@}" 24876404edcSAsim Jamshed set x "$@" "@$file" 24976404edcSAsim Jamshed ;; 25076404edcSAsim Jamshed *) 25176404edcSAsim Jamshed func_file_conv "$1" 25276404edcSAsim Jamshed set x "$@" "$file" 25376404edcSAsim Jamshed ;; 25476404edcSAsim Jamshed esac 25576404edcSAsim Jamshed shift 25676404edcSAsim Jamshed shift 25776404edcSAsim Jamshed done 25876404edcSAsim Jamshed 25976404edcSAsim Jamshed if test -n "$orig_archive"; then 26076404edcSAsim Jamshed $AR -NOLOGO -OUT:"$archive" "$orig_archive" "$@" || exit $? 26176404edcSAsim Jamshed else 26276404edcSAsim Jamshed $AR -NOLOGO -OUT:"$archive" "$@" || exit $? 26376404edcSAsim Jamshed fi 26476404edcSAsim Jamshed 26576404edcSAsim Jamshedelif test -n "$list"; then 26676404edcSAsim Jamshed if test ! -f "$orig_archive"; then 26776404edcSAsim Jamshed func_error "archive not found" 26876404edcSAsim Jamshed fi 26976404edcSAsim Jamshed $AR -NOLOGO -LIST "$archive" || exit $? 27076404edcSAsim Jamshedfi 271