224 lines
4.1 KiB
Perl
224 lines
4.1 KiB
Perl
|
#!/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\'
|
||
|
|