rpm/scripts/find-prov.pl

224 lines
4.1 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='--provides --rpmformat --keywords --starprov'
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)
print_deps --identifier executable $file
print_deps --identifier executable --basename $file
;;
sh)
print_deps --identifier executable $file
print_deps --identifier executable --basename $file
;;
perl)
perl.prov $file;
;;
wish)
print_deps --identifier tcl $file
print_deps --identifier tcl --basename $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
# We can not count on finding a SONAME in third party Libraries though
# they tend to include softlinks with the correct SONMAE name. We
# must assume anything with a *\.so* and is of type 'dynamic lib' is a
# library. This scriptlet works because 'file' follows soft links.
*lib*.so*)
/usr/ucb/file -L $file 2>/dev/null | \
grep "ELF.*dynamic lib" | cut -d: -f1 | \
xargs -n 1 basename | print_deps --identifier so;
# keep this for backward compatibility till we have converted
# everything.
/usr/ucb/file -L $file 2>/dev/null | \
grep "ELF.*dynamic lib" | cut -d: -f1 | \
xargs -n 1 basename;
;;
# 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. Use file endings.
*.pl)
perl.prov $file;
# pl files are often required using the .pl extension
# so provide that name as well
print_deps --identifier perl --basename $file
;;
*.pm)
perl.prov $file;
;;
*.ph)
# ph files do not use the package name inside the file.
# perlmodlib documentation says:
# the .ph files made by h2ph will probably end up as
# extension modules made by h2xs.
# so do not expend much effort on these.
print_deps --identifier perl --basename $file
;;
# tcl libraries are hard to detect. Use file endings.
*.tcl)
print_deps --identifier tcl $file
print_deps --identifier tcl --basename $file
;;
*)
# Dependencies for html documenets are a bit ill defined. Lets try
# using file endings like the browsers do.
# precise globbing is hard so I use egrep instead of the case statement.
hfile=`basename $file | egrep '\.((cgi)|(ps)|(pdf)|(png)|(jpg)|(gif)|(tiff)|(tif)|(xbm)|(html)|(htm)|(shtml)|(jhtml))$'`;
if [ "${hfile}" != "" ]
then
print_deps --identifier http --basename $file
fi
# all files are candidates for being an executable. Let the
# magic.prov script figure out what should be considered
# execuables.
magic.prov --buildroot=$BUILDROOT $file
;;
esac
done | sort -u | egrep -v \'$IGNORE_DEPS\'