--- perl5.005_03/find-perl-provides Thu Jan 1 01:00:00 1970 +++ perl5.005_03.new/find-perl-provides Fri Oct 22 17:43:47 1999 @@ -0,0 +1,10 @@ +#!/bin/sh +ulimit -c 0 + +export LD_LIBRARY_PATH="FPPATH" + +filelist=`sed "s/['\"]/\\\&/g"|egrep -v "\.(ph|pod|gz)$"` + +echo $filelist|/usr/lib/rpm/find-provides +FPPATH/find-perl.prov $filelist + --- perl5.005_03/find-perl.prov Thu Jan 1 01:00:00 1970 +++ perl5.005_03.new/find-perl.prov Fri Oct 22 17:44:18 1999 @@ -0,0 +1,116 @@ +#!FPPATH/perl + +# a simple script to print the proper name for perl libraries. + +# I plan to rewrite this in C so that perl is not required by RPM at +# build time. + +# by Ken Estes Mail.com kestes@staff.mail.com + +# it would be much better if perl could tell us the proper name of a +# given script. + + +if ("@ARGV") { + foreach (@ARGV) { + if (! m=\.(so|gz|ph|pod)$=) { + process_file($_); + } + } +} else { + + # notice we are passed a list of filenames NOT as common in unix the + # contents of the file. + + foreach (<>) { + if (! m=\.(so|gz|ph|pod)$=) { + process_file($_); + } + } +} + + +foreach $module (sort keys %require) { + if (length($require{$module}) == 0) { + print "perl($module)\n"; + } else { + print "perl($module) = $require{$module}\n"; + + # we need to print it without the version number until the + # requires syntax accepts version numbers correctly. + +# print "perl($module)\n"; + } +} + +exit 0; + + + +sub process_file { + + my ($file) = @_; + chomp $file; + + open(FILE, "<$file")|| + die("Could not open file: '$file' : $!\n"); + + my ($package, $version) = (); + + while () { + + # skip the documentation + if ( (m/^=(head1|head2|pod)/) .. (m/^=(cut)/) ) { + next; + } + + # skip the data section + if (m/^__(DATA|END)__$/) { + last; + } + + # not everyone puts the package name of the file as the first + # package name so we report all namespaces as if they were + # provided packages (really ugly). + + if (m/^\s*package\s+([_:a-zA-Z0-9]+)\s*;/) { + $package=$1; + undef $version; + $require{$package}=undef; + } + + # after we found the package name take the first assignment to + # $VERSION as the version number. Exporter requires that the + # variable be called VERSION so we are safe. + + # here are examples of VERSION lines from the perl distribution + + #FindBin.pm:$VERSION = $VERSION = sprintf("%d.%02d", q$Revision$ =~ /(\d+)\.(\d+)/); + #ExtUtils/Install.pm:$VERSION = substr q$Revision$, 10; + #CGI/Apache.pm:$VERSION = (qw$Revision$)[1]; + #DynaLoader.pm:$VERSION = $VERSION = "1.03"; # avoid typo warning + + if ( + ($package) && + (m/^\s*\$VERSION\s+=\s+/) + ) { + + # first see if the version string contains the string + # '$Revision' this often causes bizzare strings and is the most + # common method of non static numbering. + + if (m/(\$Revision: (\d+[.0-9]+))/) { + $version= $2; + } elsif (m/[\'\"]?(\d+[.0-9]+)[\'\"]?/) { + + # look for a static number hard coded in the script + + $version= $1; + } + $require{$package}=$version; + } + + } + + return ; +}