RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
  Module: rpm                              Date:   14-Jul-2007 08:46:15
  Branch: HEAD                             Handle: 2007071407461401

  Added files:
    rpm/scripts             osgideps.pl
  Modified files:
    rpm                     CHANGES
    rpm/scripts             Makefile.am

  Log:
    - add osgi automagic dependency extractors <[EMAIL PROTECTED]>.

  Summary:
    Revision    Changes     Path
    1.1461      +1  -0      rpm/CHANGES
    1.42        +2  -2      rpm/scripts/Makefile.am
    1.1         +161 -0     rpm/scripts/osgideps.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1460 -r1.1461 CHANGES
  --- rpm/CHANGES       14 Jul 2007 06:29:21 -0000      1.1460
  +++ rpm/CHANGES       14 Jul 2007 06:46:14 -0000      1.1461
  @@ -1,4 +1,5 @@
   4.5 -> 5.0:
  +    - jbj: add osgi automagic dependency extractors <[EMAIL PROTECTED]>.
       - jbj: debugedit warning removal <[EMAIL PROTECTED]>.
       - jbj: free 5 bits in FCOLOR_e for future use. 
       - jbj: add arbitrary tag strings to header metadata.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/scripts/Makefile.am
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 Makefile.am
  --- rpm/scripts/Makefile.am   12 Jul 2007 22:25:31 -0000      1.41
  +++ rpm/scripts/Makefile.am   14 Jul 2007 06:46:15 -0000      1.42
  @@ -15,7 +15,7 @@
        check-java-closure.sh java.prov.sh java.req.sh \
        javadeps.sh libtooldeps.sh \
        mono-find-provides mono-find-requires \
  -     pkgconfigdeps.sh \
  +     osgideps.pl pkgconfigdeps.sh \
        perldeps.pl perl.prov perl.req pythondeps.sh \
        php.prov php.req rpm2cpio \
        rpmdb_loadcvt rpmdiff rpmdiff.cgi \
  @@ -42,7 +42,7 @@
        find-requires.perl getpo.sh http.req \
        javadeps.sh libtooldeps.sh \
        mono-find-provides mono-find-requires \
  -     pkgconfigdeps.sh \
  +     osgideps.pl pkgconfigdeps.sh \
        perldeps.pl perl.prov perl.req pythondeps.sh \
        php.prov php.req \
        rpmdb_loadcvt \
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/scripts/osgideps.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 osgideps.pl
  --- /dev/null 2007-07-14 08:44:00 +0200
  +++ osgideps.pl       2007-07-14 08:46:15 +0200
  @@ -0,0 +1,161 @@
  +#!/usr/bin/perl
  +
  +
  +use Cwd;
  +use Getopt::Long;
  +
  +
  +$cdir = getcwd();
  +$TEMPDIR="/tmp";
  +$MANIFEST_NAME="META-INF/MANIFEST.MF";
  +
  +
  +# prepare temporary directory
  +if (! (-d $TEMPDIR)) {
  +        if (($_ = `mkdir $TEMPDIR`) != 0) {exit 1;}
  +        elsif (! (-w $TEMPDIR) && (-x $TEMPDIR)) {exit 1;}
  +}
  +
  +# parse options
  +my ($show_provides, $show_requires);
  +
  +my $result = GetOptions("provides" => \$show_provides,
  +                     "requires" => \$show_requires);
  +
  +exit(1) if (not $result);
  +
  +
  +
  [EMAIL PROTECTED] = <STDIN>;
  +
  +if ($show_provides) {
  +     do_provides(@allfiles);
  +}
  +
  +if ($show_requires) {
  +     do_requires(@allfiles);
  +}
  +
  +
  +exit(0);
  +
  +
  +
  +sub do_provides {
  +
  +
  +foreach $jar (@_) {
  +
  +next if -f $jar && -r $jar;
  + $jar =~ s/[^[:print:]]//g;
  +        # if this jar contains MANIFEST.MF file
  +        if (`jar tf $jar | grep -e \^$MANIFEST_NAME` eq "$MANIFEST_NAME\n") {
  +                # extract MANIFEST.MF file from jar to temporary directory
  +                chdir $TEMPDIR;
  +                `jar xf $cdir/$jar $MANIFEST_NAME`;
  +                open(MANIFEST, "$MANIFEST_NAME");
  +                my $bundleName = "";
  +                my $bundleVersion = "";
  +                # parse bundle name and version
  +                while(<MANIFEST>) {
  +                        # get rid of non-print chars (some manifest files 
contain weird chars
  +                        s/[^[:print]]//g;
  +                        if (m/(^Bundle-SymbolicName: 
)((\w|\.)+)(\;*)(.*\n)/) {
  +                                $bundleName = $2;
  +                        }
  +                        if (m/(^Bundle-Version: )(.*)/) {
  +                                $bundleVersion = $2;
  +                        }
  +                }
  +                # skip this jar if no bundle name exists
  +                if (! $bundleName eq "") {
  +                        if (! $bundleVersion eq "") {
  +                                print "osgi(".$bundleName.") = 
".$bundleVersion."\n";
  +                        } else {
  +                                print "osgi(".$bundleName.")\n";
  +                        }
  +                }
  +                chdir $cdir;
  +        }
  +     
  +}
  +
  +}
  +
  +
  +sub do_requires {
  +
  +foreach $jar (@_) {
  +next if -f $jar && -r $jar;
  +$jar =~ s/[^[:print:]]//g;
  +        if (`jar tf $jar | grep -e \^$MANIFEST_NAME` eq "$MANIFEST_NAME\n") {
  +                chdir $TEMPDIR;
  +                `jar xf $cdir/$jar $MANIFEST_NAME`;
  +                open(MANIFEST, "$MANIFEST_NAME") or die;
  +                my %reqcomp = ();
  +                while(<MANIFEST>) {
  +                        if (m/(^(Require-Bundle|Import-Package): )(.*)$/) {
  +                                my $reqlist = "$3"."\n";
  +                                while(<MANIFEST>) {
  +                                        if 
(m/^[[:upper:]][[:alpha:]]+-[[:upper:]][[:alpha:]]+: .*/) {
  +                                                $len = length $_;
  +                                                seek MANIFEST, $len*-1 , 1;
  +                                                last;
  +                                        }
  +                                        $reqlist.="$_";
  +                                }
  +                                push @requirelist,  parseReqString($reqlist);
  +                        }
  +
  +                }
  +                chdir $cdir;
  +     }
  +
  +}
  +
  +$list = "";
  +for $require (@requirelist) {
  +        $list .= "osgi(".$require->{NAME}.")".$require->{VERSION}."\n";
  +}
  +#$abc = `echo \"$list\"|grep -e \^osgi\\(.*\\)| sort|uniq`;
  +print $list;
  +
  +}
  +
  +sub parseReqString {
  +        my $reqstr = $_[0];
  +        my @return;
  +        $reqstr =~ s/ //g;
  +        $reqstr =~ s/\n//g;
  +        $reqstr =~ s/[^[:print:]]//g;
  +        $reqstr =~ 
s/("[[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+)(,)([[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+")/$1
 $3/g;
  +        @reqcomp = split /,/g, $reqstr;
  +        foreach $reqelement (@reqcomp) {
  +                @reqelementfrmnt = split /;/g, $reqelement;
  +                $name="";
  +                $version="";
  +                $name = $reqelementfrmnt[0];
  +                for $i (1 .. $#reqelementfrmnt) {
  +                        if ($reqelementfrmnt[$i] =~ 
m/(^(bundle-|)version=")(.*)(")/){
  +                                $version = $3;
  +                                last;
  +                        }
  +                }
  +                $version = parseVersion($version);
  +                push @return, { NAME=>"$name", VERSION=>"$version"};
  +        }
  +
  +        return @return;
  +}
  +
  +sub parseVersion {
  +        my $ver = $_[0];
  +        if ($ver eq "") { return "";}
  +        if ($ver =~ m/(^[\[|\(])(.+)\ (.+)([\]|\)]$)/) {
  +                ($1 eq "\[") ? return " <= $2" : return " < $2";
  +        } else {
  +                return " = $ver";
  +        }
  +        return $ver;
  +}
  +
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to