summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2009-02-02 14:24:33 +0200
committerPanu Matilainen <pmatilai@redhat.com>2009-02-02 14:24:33 +0200
commit5e71c9bd7635aff9630f74f1b19fabb81ff798de (patch)
treed1347cc77e0a32310819da48c2c9455c4dca6c3f /scripts
parent6ce7def270994a675836e2b945a7f70eb2b03c2b (diff)
downloadlibrpm-tizen-5e71c9bd7635aff9630f74f1b19fabb81ff798de.tar.gz
librpm-tizen-5e71c9bd7635aff9630f74f1b19fabb81ff798de.tar.bz2
librpm-tizen-5e71c9bd7635aff9630f74f1b19fabb81ff798de.zip
OSGi dep extractor update (rhbz#466111):
- From Alphonse Van Assche: "This patch fix some parsing bugs and add some new functionality (disable for now)"
Diffstat (limited to 'scripts')
-rw-r--r--scripts/osgideps.pl160
1 files changed, 101 insertions, 59 deletions
diff --git a/scripts/osgideps.pl b/scripts/osgideps.pl
index 428c9080c..7b0201696 100644
--- a/scripts/osgideps.pl
+++ b/scripts/osgideps.pl
@@ -43,93 +43,121 @@ 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;
- }
+foreach $file (@_) {
+
+ next if -f $file && -r $file && !-l $file;
+ $file =~ s/[^[:print:]]//g;
+ if ($file =~ m/$MANIFEST_NAME$/ || $file =~ m/\.jar$/ ) {
+ if ($file =~ m/\.jar$/) {
+ # if this jar contains MANIFEST.MF file
+ if (`jar tf $file | grep -e \^$MANIFEST_NAME` eq "$MANIFEST_NAME\n") {
+ # extract MANIFEST.MF file from jar to temporary directory
+ chdir $TEMPDIR;
+ `jar xf $file $MANIFEST_NAME`;
+ open(MANIFEST, "$MANIFEST_NAME");
+ chdir $cdir;
+ }
+ } else {
+ open(MANIFEST, "$file");
+ }
+ my $bundleName = "";
+ my $version = "";
+ # 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: )(.*)/) {
+ $version = $2;
+ $version = fixVersion($version);
+ }
+ if (m/(^(Export-Package): )(.*)$/) {
+ my $bunlist = "$3"."\n";
+ while(<MANIFEST>) {
+ if (m/^[[:upper:]][[:alpha:]]+-[[:upper:]][[:alpha:]]+: .*/) {
+ $len = length $_;
+ seek MANIFEST, $len*-1 , 1;
+ last;
+ }
+ $bunlist.="$_";
+ }
+ push @bundlelist, parsePkgString($bunlist);
+ }
}
# skip this jar if no bundle name exists
if (! $bundleName eq "") {
- if (! $bundleVersion eq "") {
- print "osgi(".$bundleName.") = ".$bundleVersion."\n";
- } else {
+ if (! $version eq "") {
+ print "osgi(".$bundleName.") = ".$version."\n";
+ } else {
print "osgi(".$bundleName.")\n";
}
}
- chdir $cdir;
- }
-
+ }
}
-
+$list = "";
+for $bundle (@bundlelist) {
+ $list .= "osgi(".$bundle->{NAME}.")".$bundle->{VERSION}."\n";
+}
+# For now we dont take Require-Bundle AND Import-Package in account
+#print $list;
}
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";
+ foreach $file (@_) {
+
+ next if -f $file && -r $file;
+ $file =~ s/[^[:print:]]//g;
+ if ($file =~ m/$MANIFEST_NAME$/ || $file =~ m/\.jar$/ ) {
+ if ($file =~ m/\.jar$/) {
+ # if this jar contains MANIFEST.MF file
+ if (`jar tf $file | grep -e \^$MANIFEST_NAME` eq "$MANIFEST_NAME\n") {
+ # extract MANIFEST.MF file from jar to temporary directory
+ chdir $TEMPDIR;
+ `jar xf $file $MANIFEST_NAME`;
+ open(MANIFEST, "$MANIFEST_NAME");
+ chdir $cdir;
+ }
+ } else {
+ open(MANIFEST, "$file");
+ }
+ my %reqcomp = ();
+ while(<MANIFEST>) {
+ if (m/(^(Require-Bundle|Import-Package): )(.*)$/) {
+ my $bunlist = "$3"."\n";
while(<MANIFEST>) {
if (m/^[[:upper:]][[:alpha:]]+-[[:upper:]][[:alpha:]]+: .*/) {
$len = length $_;
seek MANIFEST, $len*-1 , 1;
last;
}
- $reqlist.="$_";
+ $bunlist.="$_";
}
- push @requirelist, parseReqString($reqlist);
+ push @bundlelist, parsePkgString($bunlist);
}
-
}
- chdir $cdir;
}
-
}
$list = "";
-for $require (@requirelist) {
- $list .= "osgi(".$require->{NAME}.")".$require->{VERSION}."\n";
+for $bundle (@bundlelist) {
+ $list .= "osgi(".$bundle->{NAME}.")".$bundle->{VERSION}."\n";
}
-#$abc = `echo \"$list\"|grep -e \^osgi\\(.*\\)| sort|uniq`;
-print $list;
-
+# For now we dont take Require-Bundle AND Import-Package in account
+#print $list;
}
-sub parseReqString {
- my $reqstr = $_[0];
+sub parsePkgString {
+ my $bunstr = $_[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;
+ $bunstr =~ s/ //g;
+ $bunstr =~ s/\n//g;
+ $bunstr =~ s/[^[:print:]]//g;
+ $bunstr =~ s/("[[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+)(,)([[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+")/$1 $3/g;
+ @reqcomp = split /,/g, $bunstr;
foreach $reqelement (@reqcomp) {
@reqelementfrmnt = split /;/g, $reqelement;
$name="";
@@ -142,6 +170,9 @@ sub parseReqString {
}
}
$version = parseVersion($version);
+ $version = fixVersion($version);
+ # dirty fix for provides that contain " char
+ $name =~ s/\"//g;
push @return, { NAME=>"$name", VERSION=>"$version"};
}
@@ -152,10 +183,21 @@ sub parseVersion {
my $ver = $_[0];
if ($ver eq "") { return "";}
if ($ver =~ m/(^[\[|\(])(.+)\ (.+)([\]|\)]$)/) {
- ($1 eq "\[") ? return " <= $2" : return " < $2";
+ # FIXME: The right rpm match of osgi version [1,2) seems to be <= 2
+ # but when you look at the requires >= look more permssive/correct?
+ ($1 eq "\[") ? return " >= $2" : return " > $2";
} else {
return " = $ver";
}
return $ver;
}
+sub fixVersion {
+ my $version = $_[0];
+ # remove version qualifier.
+ $version =~ s/\.v.[0-9]*.*//g;
+ # We try to match RPM version, so remove last .0
+ $version =~ s/\.0$//g;
+ return $version;
+}
+