rpm/autodeps/irix6.req

124 lines
3.5 KiB
Bash

#! /usr/bin/ksh
# Original Author: Tim Mooney (mooney@plains.nodak.edu)
# $Id: irix6.req,v 1.3 1999/01/22 00:25:27 jbj Exp $
#
# This file is distributed under the terms of the GNU Public License
#
# find-requires is part of RPM, the Red Hat Package Manager. find-requires
# reads a list of full pathnames (in a package) on stdin, and outputs all
# shared libraries the package requires to execute.
#
# NOTE: I use `:' as the delimiter (by default) between the library soname
# and any library version info. This is because IRIX libraries (even
# system libraries) have "version information" in both the soname and the
# internal version field, so it's important to be able to separate those
# fields. If we just used `.', we wouldn't know where the soname ends and
# the version infromation begins.
#
# On IRIX, use `elfdump -Dl' to find what libraries are required by
# an executable. `elfdump -L' does what we need too, but it gives us more
# than we really need.
#
# Example `elfdump -Dl' output:
#
#$elfdump -Dl /usr/bin/X11/xterm
#
#
#
#/usr/bin/X11/xterm:
#
# **** MIPS LIBLIST INFORMATION ****
#.liblist :
#[INDEX] Timestamp Checksum Flags Name Version
#[1] Nov 23 15:39:02 1997 0x4da65893 ----- libXaw.so.2 sgi2.0
#[2] Nov 23 15:39:02 1997 0x414eece6 ----- libXmu.so sgi1.0
#[3] Nov 23 15:39:02 1997 0x6f314e69 ----- libXt.so sgi1.0
#[4] Nov 23 15:39:02 1997 0xcbe81fff ----- libXext.so sgi1.0
#[5] Nov 23 15:39:02 1997 0x89ae8e98 ----- libX11.so.1 sgi1.0
#[6] Oct 27 01:00:29 1997 0x99b27890 ----- libcurses.so sgi1.0
#[7] Jun 16 18:23:15 1997 0x92321a0c ----- libc.so.1 sgi1.0
#
#
# TVM: it might be better to re-write this so that `file' isn't used, since
# it can all be done with `elfdump', but this works.
#
PATH=/usr/bin:/usr/sbin
export PATH
filelist=`cat -`
#
# Handle scripts first
#
for f in `echo $filelist | xargs file | grep 'script text' | cut -d: -f 2 \
| awk '{ print $1 }'`
do
print $f
done | sort -u
for f in `echo $filelist | xargs file | egrep 'executable|lib' | cut -d: -f1`
do
#echo "Working on $f"
elfdump -Dl $f 2>/dev/null | awk '
#
# For you non-awk-ers, no single quotes in comments -- the shell
# sees them and things get hosed.
#
BEGIN {
found_column_headers = 0;
FS = " ";
RS = "\n";
OFS="";
soname_version_delimiter=":";
}
# uncomment the next line for debugging information
#{ print "Saw input:", $0 }
found_column_headers == 1 && $0 !~ /^$/ {
# get the library name (field 15) and the library version (field 16)
# if present.
numfields = split($0,fields)
if (numfields == 8) {
print fields[8]
} else if (numfields == 9) {
#
print fields[8], soname_version_delimiter, fields[9]
} else if (numfields > 9) {
#
# SGI has this annoying habit of putting comments, complete
# with whitespace, in their library IVERSION field. Yuck.
#
# Handle libraries like this gracefully.
#
verfields = split(fields[NF], junk, "#")
if (verfields == 2) {
print fields[8], soname_version_delimiter, junk[2]
} else if (verfields > 2) {
print fields[8], soname_version_delimiter, junk[verfields]
} else {
print "Cannot find version:", fields[numfields] | "cat 2>&1"
}
}
}
/^\[INDEX\].Timestamp.*Checksum.*Flags.*Name.*Version$/ {
# we better start paying attention now.
found_column_headers = 1
#
# uncomment the next line for debugging information
#print "found the column headers: ", $0
}
' # end of awk
done | sort -u
# comment out the previous line and uncomment the next when debugging
#done