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

