/usr/share/shtool/sh.arx is in shtool 2.0.8-8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | ##
## arx -- Extended archive command
## Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
##
## This file is part of shtool and 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 of the License, or (at your option) any later version.
##
## This file 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, write to the Free Software
## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
## USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
##
str_tool="arx"
str_usage="[-t|--trace] [-C|--command <cmd>] <op> <archive> [<file> ...]"
arg_spec="2+"
opt_spec="t.C:"
opt_alias="t:trace,C:command"
opt_t=no
opt_C="ar"
. ./sh.common
ar_prg="$opt_C"
ar_cmd="$1"; shift
archive="$1"; shift
files="$*"
# walk through the file list and expand archives members
ar_tmpdir=`echo $archive | sed -e 's;[^/]*$;.arx;'`
nfiles=''
if [ ".$files" != . ]; then
for file in $files; do
if [ ! -f $file ]; then
echo "$msgprefix:Error: input file not found: $file" 1>&2
shtool_exit 1
fi
case $file in
*.a )
if [ ! -d $ar_tmpdir ]; then
if [ ".$opt_t" = .yes ]; then
echo "mkdir $ar_tmpdir" 1>&2
fi
mkdir $ar_tmpdir
fi
case $ar_tmpdir in
.arx )
from="../$file"
;;
* )
dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;'`
base=`echo $file | sed -e 's;.*/\([^/]*\)$;\1;'`
from="`cd $dir; pwd`/$base"
;;
esac
if [ ".$opt_t" = .yes ]; then
echo "(cd $ar_tmpdir && $ar_prg x $from)" 1>&2
fi
(cd $ar_tmpdir && eval $ar_prg x $from)
if [ $? -ne 0 ]; then
echo "$msgprefix:Error: member extraction failed for archive: $file" 1>&2
shtool_exit 1
fi
for member in - `eval $ar_prg t $file | sed -e '/_\.SYMDEF/d'`; do
[ ".$member" = .- ] && continue
nfiles="$nfiles $ar_tmpdir/$member"
done
;;
* )
nfiles="$nfiles $file"
;;
esac
done
fi
# run the final archive command
if [ ".$opt_t" = .yes ]; then
echo "$ar_prg $ar_cmd $archive $nfiles" 1>&2
fi
eval $ar_prg $ar_cmd $archive $nfiles
if [ $? -ne 0 ]; then
echo "$msgprefix:Error: archive command failed" 1>&2
shtool_exit $?
fi
# cleanup and die gracefully
if [ -d $ar_tmpdir ]; then
if [ ".$opt_t" = .yes ]; then
echo "rm -rf $ar_tmpdir" 1>&2
fi
rm -rf $ar_tmpdir
fi
shtool_exit 0
##
## manual page
##
=pod
=head1 NAME
B<shtool-arx> - B<GNU shtool> ar(1) extensional command
=head1 SYNOPSIS
B<shtool arx>
[B<-t>|B<--trace>]
[B<-C>|B<--command> I<cmd>]
I<op>
I<archive>
I<file> [I<file> ...]
=head1 DESCRIPTION
B<shtool arx> is a wrapper around the archiving tool ar(1). It provides
the ability to create archives out of existing archives, i.e., if one of
I<file> matches "C<*.a>", the archive member files of I<file> are used
instead of I<file> itself.
The trick of this command is the automatic handling of archive members
which is especially interesting if one wants to construct a (usually
top-level) library archive out of pre-built sub-library archives
(usually staying inside subdirs) in a large source tree. For B<GNU
libtool> based projects, a similar functionality is provided by B<GNU
libtool> internally, too.
=head1 OPTIONS
The following command line options are available.
=over 4
=item B<-t>, B<--trace>
Shows the actually involved shell commands.
=item B<-C>, B<--command> I<cmd>
Set the used ar(1) command to I<cmd> instead of just "ar" (searched in C<$PATH>).
=back
=head1 EXAMPLE
# Makefile
AR=ar
RANLIB=ranlib
:
OBJS=foo.o bar.o
LIBS=baz/libbaz.a quux/libquux.a
:
libfoo.a: $(OBJS) $(LIBS)
shtool arx -C $(AR) rc libfoo.a $(OBJS) $(LIBS)
$(RANLIB) libfoo.a
=head1 HISTORY
The B<GNU shtool> B<arx> command was originally written by Ralf S.
Engelschall E<lt>rse@engelschall.comE<gt> in 1999 for B<GNU shtool>. It
was prompted by need to build libraries out of sub-libraries inside the
B<OSSP> project.
=head1 SEE ALSO
shtool(1), ar(1).
=cut
|