diff --git a/scripts/osgideps.pl b/scripts/osgideps.pl index 7b02016..0f73724 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 (@_) { @@ -71,7 +61,6 @@ foreach $file (@_) { } if (m/(^Bundle-Version: )(.*)/) { $version = $2; - $version = fixVersion($version); } if (m/(^(Export-Package): )(.*)$/) { my $bunlist = "$3"."\n"; @@ -100,8 +89,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 +109,7 @@ sub do_requires { open(MANIFEST, "$MANIFEST_NAME"); chdir $cdir; } - } else { + } else { open(MANIFEST, "$file"); } my %reqcomp = (); @@ -146,8 +134,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 +144,12 @@ sub parsePkgString { $bunstr =~ s/\n//g; $bunstr =~ s/[^[:print:]]//g; $bunstr =~ s/("[[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+)(,)([[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+")/$1 $3/g; + # Remove uses bundle from Export-Package + $bunstr =~ s/uses:="[[:alnum:]|\-|\_|\.|\(|\)|\[|\]|,]+"//g; + # Remove optional dependencies + $bunstr =~ s/,[[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+;resolution:=optional//g; + # Remove x-friends + $bunstr =~ s/;x-friends:="[[:alnum:]|\-|\_|\.|\(|\)|\[|\]|,]+"//g; @reqcomp = split /,/g, $bunstr; foreach $reqelement (@reqcomp) { @reqelementfrmnt = split /;/g, $reqelement; @@ -170,7 +163,6 @@ sub parsePkgString { } } $version = parseVersion($version); - $version = fixVersion($version); # dirty fix for provides that contain " char $name =~ s/\"//g; push @return, { NAME=>"$name", VERSION=>"$version"}; @@ -183,21 +175,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) seem 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 operator. + 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; -} -