summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorjbj <devnull@localhost>1999-06-05 20:52:30 +0000
committerjbj <devnull@localhost>1999-06-05 20:52:30 +0000
commitb7a61f5b889f9c3b1cbd628847dd8ac47c243bd6 (patch)
treea96d47a614e2b71ed01bcb5371acc1d836124274 /scripts
parentf3a29caf8fabf6f6280a976c41c8d3bba7d7e13a (diff)
downloadrpm-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.am8
-rwxr-xr-xscripts/perl.prov112
-rwxr-xr-xscripts/perl.req120
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}=$_;
+ }
+
+ }
+
+}