diff options
author | jbj <devnull@localhost> | 1999-06-05 20:52:30 +0000 |
---|---|---|
committer | jbj <devnull@localhost> | 1999-06-05 20:52:30 +0000 |
commit | b7a61f5b889f9c3b1cbd628847dd8ac47c243bd6 (patch) | |
tree | a96d47a614e2b71ed01bcb5371acc1d836124274 /scripts | |
parent | f3a29caf8fabf6f6280a976c41c8d3bba7d7e13a (diff) | |
download | rpm-b7a61f5b889f9c3b1cbd628847dd8ac47c243bd6.tar.gz rpm-b7a61f5b889f9c3b1cbd628847dd8ac47c243bd6.tar.bz2 rpm-b7a61f5b889f9c3b1cbd628847dd8ac47c243bd6.zip |
Add javadeps and perl provides/requires scripts (Ken Estes).
CVS patchset: 3084
CVS date: 1999/06/05 20:52:30
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/Makefile.am | 8 | ||||
-rwxr-xr-x | scripts/perl.prov | 112 | ||||
-rwxr-xr-x | scripts/perl.req | 120 |
3 files changed, 238 insertions, 2 deletions
diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 5dee0a902..98004564a 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -2,12 +2,16 @@ AUTOMAKE_OPTIONS = 1.4 foreign -EXTRA_DIST = convertrpmrc.sh find-lang.sh freshen.sh getpo.sh vpkg-provides.sh +EXTRA_DIST = \ + convertrpmrc.sh find-lang.sh freshen.sh getpo.sh \ + perl.prov perl.req vpkg-provides.sh installprefix = $(DESTDIR) all: configdir = ${prefix}/lib/rpm -config_SCRIPTS = convertrpmrc.sh find-lang.sh freshen.sh getpo.sh vpkg-provides.sh +config_SCRIPTS = \ + convertrpmrc.sh find-lang.sh freshen.sh getpo.sh \ + perl.prov perl.req vpkg-provides.sh diff --git a/scripts/perl.prov b/scripts/perl.prov new file mode 100755 index 000000000..c2aa4f456 --- /dev/null +++ b/scripts/perl.prov @@ -0,0 +1,112 @@ +#!/usr/bin/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) { + process_file($_); + } +} else { + + # notice we are passed a list of filenames NOT as common in unix the + # contents of the file. + + foreach (<>) { + 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 (<FILE>) { + + # 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: 1.1 $ =~ /(\d+)\.(\d+)/); + #ExtUtils/Install.pm:$VERSION = substr q$Revision: 1.1 $, 10; + #CGI/Apache.pm:$VERSION = (qw$Revision: 1.1 $)[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 ; +} diff --git a/scripts/perl.req b/scripts/perl.req new file mode 100755 index 000000000..d19afbcdb --- /dev/null +++ b/scripts/perl.req @@ -0,0 +1,120 @@ +#!/usr/bin/perl + +# a simple makedepends like script for perl. + +# 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 dependencies of a +# given script. + +if ("@ARGV") { + foreach (@ARGV) { + process_file($_); + } +} else { + + # notice we are passed a list of filenames NOT as common in unix the + # contents of the file. + + foreach (<>) { + 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"); + + while (<FILE>) { + + # skip the documentation + if ( (m/^=(head1|head2|pod)/) .. (m/^=(cut)/) ) { + next; + } + + # skip the data section + if (m/^__(DATA|END)__$/) { + last; + } + + if ( + +# ouch could be in a eval, perhaps we do not want these since we catch +# an exception they must not be required + +# eval { require Term::ReadLine } or die $@; +# eval "require Term::Rendezvous;" or die $@; +# eval { require Carp } if defined $^S; # If error/warning during compilation, + + + (m/^\s* # we hope the inclusion starts the line + (do|require|use)\s+(?!\{) # do not want 'do {' loops + # quotes around name are always legal + [\'\"]?([^\;\ \'\"\t]*)[\'\"]?[\t\;\ ] + # the syntax for 'use' allows version requirements + \s*([.0-9]*) + /x) + ) { + my ($module, $version) = ($2,$3); + + # if there is some interpolation of variables just skip this + # dependency, we do not want + # do "$ENV{LOGDIR}/$rcfile"; + + ($module =~ m/\$/) && next; + + # if the module ends in a comma we probaly caught some + # documentation of the form 'check stuff,\n do stuff, clean + # stuff.' there are several of these in the perl distribution + + ($module =~ m/[,>]$/) && next; + + # 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. + + + # there is no easy way to find out if a file named systeminfo.ph + # will be included with the name sys/systeminfo.ph so only use the + # basename of *.ph files + + ($module =~ m/\.ph$/) && ($module =~ s!.*/!!g ); + + + $require{$module}=$version; + $line{$module}=$_; + } + + } + +} |