Index: autotools/ar-lib |
diff --git a/autotools/ar-lib b/autotools/ar-lib |
new file mode 100755 |
index 0000000000000000000000000000000000000000..463b9ec0206e04fb772dc4bc68a731e468e34703 |
--- /dev/null |
+++ b/autotools/ar-lib |
@@ -0,0 +1,270 @@ |
+#! /bin/sh |
+# Wrapper for Microsoft lib.exe |
+ |
+me=ar-lib |
+scriptversion=2012-03-01.08; # UTC |
+ |
+# Copyright (C) 2010-2014 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 <http://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*) |
+ 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 <<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" | 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 |