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