rpm/scripts/find-req.pl

212 lines
3.5 KiB
Bash
Executable File

#!/bin/sh
# This script reads filenames from STDIN and outputs any relevant provides
# information that needs to be included in the package.
PATH=/usr/bin:/usr/ccs/bin:/usr/sbin:/sbin:/usr/local/bin;
export PATH;
javadeps_args='--requires --rpmformat --keywords'
ulimit -c 0;
IGNORE_DEPS="@"
BUILDROOT="/"
# Loop over all args
while :
do
# Break out if there are no more args
case $# in
0)
break
;;
esac
# Get the first arg, and shuffle
option=$1
shift
# Make all options have two hyphens
orig_option=$option # Save original for error messages
case $option in
--*) ;;
-*) option=-$option ;;
esac
case $option in
--buildroot)
BUILDROOT=$1
shift
;;
--ignore_deps)
IGNORE_DEPS=$1
shift
;;
--help)
echo $usage
exit 0
;;
*)
echo "$0: Unrecognized option: \"$orig_option\"; use --help for usage." >&2
exit 1
;;
esac
done
for file in `cat -`
do
# this section is for processing based on the interpreter specified in
# the '#!' line.
case `get_magic $file` in
bash)
/usr/local/lib/rpm/bash --rpm-requires $file;
;;
sh)
/usr/local/lib/rpm/bash --rpm-requires $file;
;;
perl)
perl.req $file;
;;
wish)
tcl.req $file;
;;
python)
python.req $file;
;;
esac
# this section is for processing based on filename matching. It is
# crude but needed as many library types have no easily identifiable
# '#!' line
case $file in
# Shared libraries can depend on other shared libraries.
*lib*.so*)
ldd $file 2>/dev/null | awk '/\=\>/ { print $1 }' \
| print_deps --identifier so;
# keep this for backward compatibility till we have converted
# everything.
ldd $file 2>/dev/null | awk '/\=\>/ { print $1 }';
;;
# Java jar files are just a special kind of zip files.
# Sun OS 5.5.1 does not understand zip archives, it calls them 'data'
# Sun OS 5.6 has this line in /etc/magic
# 0 string PK\003\004 ZIP archive
*.jar)
unzip -p $file |\
javadeps $javadeps_args -;
;;
# there are enough jar files out there with zip extensions that we
# need to have a separate entry
*.zip)
unzip -p $file |\
javadeps $javadeps_args -;
;;
# Java Class files
# Sun OS 5.6 has this line in /etc/magic
# 0 string \312\376\272\276 java class file
*.class)
javadeps $javadeps_args $file;
;;
# Perl libraries are hard to detect. Need to also Look for #!*perl
*.pl)
perl.req $file;
;;
*.pm)
perl.req $file;
;;
# tcl libraries are hard to detect. Need to also Look for #!*wish #!*tclsh
*.tcl)
tcl.req $file;
;;
# python libraries are hard to detect. Need to also Look for #!*python
*.py)
python.req $file;
;;
# Binary executables can have any filename so let file tell us which
# ones are binary filenames. Assume that users do not name ELF binary
# files with names like runme.java
# Dependencies for html documenets are a bit ill defined. Lets try
# extracting the basename of all strings within "'s
# precise globbing is hard so I use egrep instead of the case statement.
*)
/usr/ucb/file -L $file 2>/dev/null | grep executable | cut -d: -f1 |\
xargs ldd 2>/dev/null | awk '/\=\>/ { print $1 }' | xargs -n 1 basename;
echo $file | egrep '\.((cgi)|(ps)|(pdf)|(png)|(jpg)|(gif)|(tiff)|(tif)|(xbm)|(html)|(htm)|(shtml)|(jhtml))$' | xargs cat | httprequires
# All files are candidates for being an executable. Let the
# magic.req script figure out what should be considered
# execuables.
magic.req $file
;;
esac
done | sort -u | egrep -v \'$IGNORE_DEPS\'