#!/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\'