diff --git a/scripts/osgideps.pl b/scripts/osgideps.pl index 7b02016..428a82f 100644 --- a/scripts/osgideps.pl +++ b/scripts/osgideps.pl @@ -1,14 +1,12 @@ #!/usr/bin/perl - use Cwd; use Getopt::Long; - +use File::Temp qw/ tempdir /; $cdir = getcwd(); -$TEMPDIR="/tmp"; -$MANIFEST_NAME="META-INF/MANIFEST.MF"; - +$TEMPDIR = tempdir($template, CLEANUP => 1); +$MANIFEST_NAME = "META-INF/MANIFEST.MF"; # prepare temporary directory if (! (-d $TEMPDIR)) { @@ -18,29 +16,21 @@ if (! (-d $TEMPDIR)) { # parse options my ($show_provides, $show_requires); - my $result = GetOptions("provides" => \$show_provides, - "requires" => \$show_requires); - + "requires" => \$show_requires); exit(1) if (not $result); - - +# run selected sub @allfiles = ; - if ($show_provides) { do_provides(@allfiles); } - if ($show_requires) { do_requires(@allfiles); } - - exit(0); - sub do_provides { foreach $file (@_) { @@ -55,7 +45,7 @@ foreach $file (@_) { chdir $TEMPDIR; `jar xf $file $MANIFEST_NAME`; open(MANIFEST, "$MANIFEST_NAME"); - chdir $cdir; + chdir $cdir; } } else { open(MANIFEST, "$file"); @@ -100,8 +90,7 @@ $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; +print $list; } @@ -121,7 +110,7 @@ sub do_requires { open(MANIFEST, "$MANIFEST_NAME"); chdir $cdir; } - } else { + } else { open(MANIFEST, "$file"); } my %reqcomp = (); @@ -146,8 +135,7 @@ $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; +print $list; } sub parsePkgString { @@ -157,6 +145,8 @@ sub parsePkgString { $bunstr =~ s/\n//g; $bunstr =~ s/[^[:print:]]//g; $bunstr =~ s/("[[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+)(,)([[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+")/$1 $3/g; + # Remove uses bundle from Export-Package props + $bunstr =~ s/uses:="[[:alnum:]|\-|\_|\.|\(|\)|\[|\]|,]+"//g; @reqcomp = split /,/g, $bunstr; foreach $reqelement (@reqcomp) { @reqelementfrmnt = split /;/g, $reqelement; @@ -183,11 +173,13 @@ sub parseVersion { my $ver = $_[0]; if ($ver eq "") { return "";} if ($ver =~ m/(^[\[|\(])(.+)\ (.+)([\]|\)]$)/) { - # FIXME: The right rpm match of osgi version [1,2) seems to be <= 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"; + # FIXME: Same here, equal seem to be the correct version match operation but Eclipse + # OSGI implementation seem to be permissive about version check. + return " >= $ver"; } return $ver; } @@ -196,8 +188,8 @@ 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; + # rpm don't manage .0 at the end of the version string like OSGI do. + $version =~ s/[0|\.]*$//g; return $version; }