- update to 4.7.1, drop merged patches

- fix source url
This commit is contained in:
Panu Matilainen 2009-07-21 10:15:33 +00:00
parent 20e9972fc7
commit e296089e4d
11 changed files with 9 additions and 1027 deletions

View File

@ -1 +1 @@
rpm-4.7.0.tar.bz2
rpm-4.7.1.tar.bz2

View File

@ -1,158 +0,0 @@
commit 71a7dd8b7a2df677214c18473eac661ea38fb649
Author: Panu Matilainen <pmatilai@redhat.com>
Date: Tue Jun 16 13:52:43 2009 +0300
Add debugedit support for DWARF-3 (RhBug:505774)
- patch from Jakub Jelinek
diff --git a/tools/debugedit.c b/tools/debugedit.c
index f42b34a..b9db7db 100644
--- a/tools/debugedit.c
+++ b/tools/debugedit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001, 2002, 2003, 2005, 2007 Red Hat, Inc.
+/* Copyright (C) 2001, 2002, 2003, 2005, 2007, 2009 Red Hat, Inc.
Written by Alexander Larsson <alexl@redhat.com>, 2002
Based on code by Jakub Jelinek <jakub@redhat.com>, 2001.
@@ -88,6 +88,7 @@ static uint32_t (*do_read_32) (unsigned char *ptr);
static void (*write_32) (unsigned char *ptr, GElf_Addr val);
static int ptr_size;
+static int cu_version;
static inline uint16_t
buf_read_ule16 (unsigned char *data)
@@ -213,16 +214,18 @@ static struct
#define DEBUG_LINE 2
#define DEBUG_ARANGES 3
#define DEBUG_PUBNAMES 4
-#define DEBUG_MACINFO 5
-#define DEBUG_LOC 6
-#define DEBUG_STR 7
-#define DEBUG_FRAME 8
-#define DEBUG_RANGES 9
+#define DEBUG_PUBTYPES 5
+#define DEBUG_MACINFO 6
+#define DEBUG_LOC 7
+#define DEBUG_STR 8
+#define DEBUG_FRAME 9
+#define DEBUG_RANGES 10
{ ".debug_info", NULL, NULL, 0, 0, 0 },
{ ".debug_abbrev", NULL, NULL, 0, 0, 0 },
{ ".debug_line", NULL, NULL, 0, 0, 0 },
{ ".debug_aranges", NULL, NULL, 0, 0, 0 },
{ ".debug_pubnames", NULL, NULL, 0, 0, 0 },
+ { ".debug_pubtypes", NULL, NULL, 0, 0, 0 },
{ ".debug_macinfo", NULL, NULL, 0, 0, 0 },
{ ".debug_loc", NULL, NULL, 0, 0, 0 },
{ ".debug_str", NULL, NULL, 0, 0, 0 },
@@ -302,7 +305,7 @@ no_memory:
}
if (*slot != NULL)
{
- error (0, 0, "%s: Duplicate DWARF-2 abbreviation %d", dso->filename,
+ error (0, 0, "%s: Duplicate DWARF abbreviation %d", dso->filename,
t->entry);
free (t);
htab_delete (h);
@@ -322,7 +325,7 @@ no_memory:
form = read_uleb128 (ptr);
if (form == 2 || form > DW_FORM_indirect)
{
- error (0, 0, "%s: Unknown DWARF-2 DW_FORM_%d", dso->filename, form);
+ error (0, 0, "%s: Unknown DWARF DW_FORM_%d", dso->filename, form);
htab_delete (h);
return NULL;
}
@@ -332,7 +335,7 @@ no_memory:
}
if (read_uleb128 (ptr) != 0)
{
- error (0, 0, "%s: DWARF-2 abbreviation does not end with 2 zeros",
+ error (0, 0, "%s: DWARF abbreviation does not end with 2 zeros",
dso->filename);
htab_delete (h);
return NULL;
@@ -484,7 +487,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off, char *comp_dir, int phase)
}
value = read_16 (ptr);
- if (value != 2)
+ if (value != 2 && value != 3)
{
error (0, 0, "%s: DWARF version %d unhandled", dso->filename,
value);
@@ -829,7 +832,12 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
switch (form)
{
- case DW_FORM_ref_addr: /* ptr_size in DWARF 2, offset in DWARF 3 */
+ case DW_FORM_ref_addr:
+ if (cu_version == 2)
+ ptr += ptr_size;
+ else
+ ptr += 4;
+ break;
case DW_FORM_addr:
ptr += ptr_size;
break;
@@ -881,7 +889,7 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
assert (len < UINT_MAX);
break;
default:
- error (0, 0, "%s: Unknown DWARF-2 DW_FORM_%d", dso->filename,
+ error (0, 0, "%s: Unknown DWARF DW_FORM_%d", dso->filename,
form);
return NULL;
}
@@ -1178,11 +1186,11 @@ edit_dwarf2 (DSO *dso)
return 1;
}
- value = read_16 (ptr);
- if (value != 2)
+ cu_version = read_16 (ptr);
+ if (cu_version != 2 && cu_version != 3)
{
error (0, 0, "%s: DWARF version %d unhandled", dso->filename,
- value);
+ cu_version);
return 1;
}
@@ -1192,7 +1200,7 @@ edit_dwarf2 (DSO *dso)
if (debug_sections[DEBUG_ABBREV].data == NULL)
error (0, 0, "%s: .debug_abbrev not present", dso->filename);
else
- error (0, 0, "%s: DWARF-2 CU abbrev offset too large",
+ error (0, 0, "%s: DWARF CU abbrev offset too large",
dso->filename);
return 1;
}
@@ -1202,14 +1210,14 @@ edit_dwarf2 (DSO *dso)
ptr_size = read_1 (ptr);
if (ptr_size != 4 && ptr_size != 8)
{
- error (0, 0, "%s: Invalid DWARF-2 pointer size %d",
+ error (0, 0, "%s: Invalid DWARF pointer size %d",
dso->filename, ptr_size);
return 1;
}
}
else if (read_1 (ptr) != ptr_size)
{
- error (0, 0, "%s: DWARF-2 pointer size differs between CUs",
+ error (0, 0, "%s: DWARF pointer size differs between CUs",
dso->filename);
return 1;
}
@@ -1227,7 +1235,7 @@ edit_dwarf2 (DSO *dso)
t = htab_find_with_hash (abbrev, &tag, tag.entry);
if (t == NULL)
{
- error (0, 0, "%s: Could not find DWARF-2 abbreviation %d",
+ error (0, 0, "%s: Could not find DWARF abbreviation %d",
dso->filename, tag.entry);
htab_delete (abbrev);
return 1;

View File

@ -1,19 +0,0 @@
commit acfe923bf21a4402a48b6e357a53a398b107f0b3
Author: Ville Skyttä <ville.skytta@iki.fi>
Date: Sun Apr 12 21:39:50 2009 +0300
Fix --with-kde with KDE3 (rhbz#466009).
diff --git a/scripts/find-lang.sh b/scripts/find-lang.sh
index 2dd9e0d..bb25b31 100755
--- a/scripts/find-lang.sh
+++ b/scripts/find-lang.sh
@@ -138,7 +138,7 @@ if [ x"$KDE3_HTML" != x -a -d "$TOP_DIR$KDE3_HTML" ]; then
find $TOP_DIR$KDE3_HTML -type d|sed '
s:'"$TOP_DIR"'::
'"$NO_ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/'"$NAME"'/\)::
-'"$NO_ALL_NAME$KDE"'s:\(.*/HTML\)\([^/_]\+\)\(.*/'"$NAME"'\)$:%lang(\2) \1\2\3:
+'"$NO_ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/'"$NAME"'\)$:%lang(\2) \1\2\3:
'"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\)::
'"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
s:^\([^%].*\)::

View File

@ -1,105 +0,0 @@
diff --git a/lib/fprint.c b/lib/fprint.c
index e57ba20..c56b0e5 100644
--- a/lib/fprint.c
+++ b/lib/fprint.c
@@ -37,8 +37,10 @@ fingerPrintCache fpCacheCreate(int sizeHint)
fingerPrintCache fpCacheFree(fingerPrintCache cache)
{
- cache->ht = rpmFpEntryHashFree(cache->ht);
- free(cache);
+ if (cache) {
+ cache->ht = rpmFpEntryHashFree(cache->ht);
+ free(cache);
+ }
return NULL;
}
diff --git a/lib/rpmdb.c b/lib/rpmdb.c
index 439a974..d76630e 100644
--- a/lib/rpmdb.c
+++ b/lib/rpmdb.c
@@ -1098,20 +1098,20 @@ int rpmdbVerify(const char * prefix)
static int rpmdbFindByFile(rpmdb db, const char * filespec,
DBT * key, DBT * data, dbiIndexSet * matches)
{
- char * dirName;
+ char * dirName = NULL;
const char * baseName;
- fingerPrintCache fpc;
+ fingerPrintCache fpc = NULL;
fingerPrint fp1;
dbiIndex dbi = NULL;
DBC * dbcursor;
dbiIndexSet allMatches = NULL;
dbiIndexItem rec = NULL;
unsigned int i;
- int rc;
+ int rc = -2; /* assume error */
int xx;
*matches = NULL;
- if (filespec == NULL) return -2;
+ if (filespec == NULL) return rc; /* nothing alloced yet */
if ((baseName = strrchr(filespec, '/')) != NULL) {
size_t len = baseName - filespec + 1;
@@ -1123,11 +1123,7 @@ static int rpmdbFindByFile(rpmdb db, const char * filespec,
baseName = filespec;
}
if (baseName == NULL)
- return -2;
-
- fpc = fpCacheCreate(20);
- fp1 = fpLookup(fpc, dirName, baseName, 1);
- free(dirName);
+ goto exit;
dbi = dbiOpen(db, RPMTAG_BASENAMES, 0);
if (dbi != NULL) {
@@ -1154,16 +1150,14 @@ static int rpmdbFindByFile(rpmdb db, const char * filespec,
} else
rc = -2;
- if (rc) {
- allMatches = dbiFreeIndexSet(allMatches);
- fpc = fpCacheFree(fpc);
- return rc;
- }
+ if (rc || allMatches == NULL) goto exit;
*matches = xcalloc(1, sizeof(**matches));
rec = dbiIndexNewItem(0, 0);
+ fpc = fpCacheCreate(allMatches->count);
+ fp1 = fpLookup(fpc, dirName, baseName, 1);
+
i = 0;
- if (allMatches != NULL)
while (i < allMatches->count) {
struct rpmtd_s bn, dn, di;
const char ** baseNames, ** dirNames;
@@ -1216,16 +1210,19 @@ static int rpmdbFindByFile(rpmdb db, const char * filespec,
}
rec = _free(rec);
- allMatches = dbiFreeIndexSet(allMatches);
-
- fpc = fpCacheFree(fpc);
+ fpCacheFree(fpc);
if ((*matches)->count == 0) {
*matches = dbiFreeIndexSet(*matches);
- return 1;
+ rc = 1;
+ } else {
+ rc = 0;
}
- return 0;
+exit:
+ dbiFreeIndexSet(allMatches);
+ free(dirName);
+ return rc;
}
/* XXX python/upgrade.c, install.c, uninstall.c */

View File

@ -1,26 +0,0 @@
commit 1b9e6d7f48a68fd677c70d04c9a6bb4274cf7b9f
Author: Florian Festi <ffesti@redhat.com>
Date: Tue Jun 16 17:37:40 2009 +0200
Fix Segfault for to be installed symlinks pointing to existing locations
fixes rhbz#505777
diff --git a/lib/fprint.c b/lib/fprint.c
index d32eec1..e57ba20 100644
--- a/lib/fprint.c
+++ b/lib/fprint.c
@@ -311,10 +311,10 @@ void fpLookupSubdir(rpmFpHash symlinks, rpmFpHash fphash, fingerPrintCache fpc,
/* setup current_fp for the new path */
found = 1;
current_fp = *fp;
- if (!fp->subDir) {
- lensubDir = 0;
- currentsubdir = endsubdir = NULL;
- break;
+ if (fp->subDir == NULL) {
+ /* directory exists - no need to look for symlinks */
+ rpmFpHashAddEntry(fphash, fp, ffi);
+ return;
}
lensubDir = strlen(fp->subDir);
currentsubdir = xstrdup(fp->subDir);

View File

@ -1,98 +0,0 @@
commit cdfd0934841d4eccc26d7da7c35b23e6e9f76a9c
Author: Panu Matilainen <pmatilai@redhat.com>
Date: Fri May 29 09:02:44 2009 +0300
Fix calculation of hardlinked files (RhBug:503020)
- regression from commit 899dfb58927ec6e91014773430824462f4d0002e,
size of hardlinked file set is the size of one file of the set
- add isHardLink() internal helper to avoid a copy-paste code
diff --git a/build/files.c b/build/files.c
index ef60ae2..98abedd 100644
--- a/build/files.c
+++ b/build/files.c
@@ -981,6 +981,14 @@ static int isDoc(FileList fl, const char * fileName)
return 0;
}
+static int isHardLink(FileListRec flp, FileListRec tlp)
+{
+ return ((S_ISREG(flp->fl_mode) && S_ISREG(tlp->fl_mode)) &&
+ ((flp->fl_nlink > 1) && (flp->fl_nlink == tlp->fl_nlink)) &&
+ (flp->fl_ino == tlp->fl_ino) &&
+ (flp->fl_dev == tlp->fl_dev));
+}
+
/**
* Verify that file attributes scope over hardlinks correctly.
* If partial hardlink sets are possible, then add tracking dependency.
@@ -999,14 +1007,18 @@ static int checkHardLinks(FileList fl)
for (j = i + 1; j < fl->fileListRecsUsed; j++) {
jlp = fl->fileList + j;
- if (!S_ISREG(jlp->fl_mode))
- continue;
- if (ilp->fl_nlink != jlp->fl_nlink)
- continue;
- if (ilp->fl_ino != jlp->fl_ino)
- continue;
- if (ilp->fl_dev != jlp->fl_dev)
- continue;
+ if (isHardLink(ilp, jlp)) {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+static int seenHardLink(FileList fl, FileListRec flp)
+{
+ for (FileListRec ilp = fl->fileList; ilp < flp; ilp++) {
+ if (isHardLink(flp, ilp)) {
return 1;
}
}
@@ -1147,9 +1159,12 @@ static void genCpioListAndHeader(FileList fl,
rpm_off_t rsize32 = (rpm_off_t)flp->fl_size;
headerPutUint32(h, RPMTAG_FILESIZES, &rsize32, 1);
}
- /* Excludes and dupes have been filtered out by now */
- if (S_ISREG(flp->fl_mode))
- totalFileSize += flp->fl_size;
+ /* Excludes and dupes have been filtered out by now. */
+ if (S_ISREG(flp->fl_mode)) {
+ if (flp->fl_nlink == 1 || !seenHardLink(fl, flp)) {
+ totalFileSize += flp->fl_size;
+ }
+ }
/*
* For items whose size varies between systems, always explicitly
@@ -1492,25 +1507,7 @@ static rpmRC addFile(FileList fl, const char * diskPath,
flp->specdFlags = fl->currentSpecdFlags;
flp->verifyFlags = fl->currentVerifyFlags;
- /* Hard links need be counted only once. */
- if (S_ISREG(flp->fl_mode) && flp->fl_nlink > 1) {
- FileListRec ilp;
- for (i = 0; i < fl->fileListRecsUsed; i++) {
- ilp = fl->fileList + i;
- if (!S_ISREG(ilp->fl_mode))
- continue;
- if (flp->fl_nlink != ilp->fl_nlink)
- continue;
- if (flp->fl_ino != ilp->fl_ino)
- continue;
- if (flp->fl_dev != ilp->fl_dev)
- continue;
- break;
- }
- } else
- i = fl->fileListRecsUsed;
-
- if (!(flp->flags & RPMFILE_EXCLUDE) && S_ISREG(flp->fl_mode) && i >= fl->fileListRecsUsed) {
+ if (!(flp->flags & RPMFILE_EXCLUDE) && S_ISREG(flp->fl_mode)) {
/*
* XXX Simple and stupid check for now, this needs to be per-payload
* format check once we have other payloads than good 'ole cpio.

View File

@ -1,531 +0,0 @@
commit 7417cd283a3641ee62b282ae36c5d2d7df349d04
Author: Panu Matilainen <pmatilai@redhat.com>
Date: Thu Jun 18 13:06:42 2009 +0300
Pile of OSGi dependency generator fixes from Alphonse Van Assche (ticket #39)
- use Temp perl module to provide temp dir
- re-enable deps solving in Require-Bundle, Import-Package, Export-Package
OSGI properties
- remove uses bundle of Export-Package OSGI property
- use RPM '>=' as version operator to match OSGI '='
- remove all .0 at the end of the version string
- typo fixes
diff --git a/scripts/osgideps.pl b/scripts/osgideps.pl
index 7b02016..971dade 100644
--- a/scripts/osgideps.pl
+++ b/scripts/osgideps.pl
@@ -1,203 +1,357 @@
#!/usr/bin/perl
-
+#
+# osgideps.pl -- Analyze dependencies of OSGi bundles.
+#
+# Kyu Lee
+# Alphonse Van Assche <alcapcom@fedoraproject.org>
+#
+# $Id: osgideps.pl,v 1.0 2009/06/08 12:12:12 mej Exp $
+#
use Cwd;
use Getopt::Long;
-
+use File::Temp qw/ tempdir /;
$cdir = getcwd();
-$TEMPDIR="/tmp";
-$MANIFEST_NAME="META-INF/MANIFEST.MF";
-
+$TEMPDIR = tempdir( CLEANUP => 1 );
+$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;}
+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);
-
-
+my ( $show_provides, $show_requires, $show_system_bundles, $debug );
+my $result = GetOptions(
+ "provides" => \$show_provides,
+ "requires" => \$show_requires,
+ "system" => \$show_system_bundles,
+ "debug" => \$debug
+);
+exit(1) if ( not $result );
+# run selected function
@allfiles = <STDIN>;
-
if ($show_provides) {
- do_provides(@allfiles);
+ getProvides(@allfiles);
}
-
if ($show_requires) {
- do_requires(@allfiles);
+ getRequires(@allfiles);
+}
+if ($show_system_bundles) {
+ getSystemBundles(@allfiles);
}
-
-
exit(0);
-
-
-sub do_provides {
-
-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;
+# this function print provides of OSGi aware files
+sub getProvides {
+ foreach $file (@_) {
+ chomp($file);
+ # we don't follow symlinks for provides
+ 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 ( `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" );
}
- } 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);
+ my $bundleName = "";
+ my $version = "";
+ # parse Bundle-SymbolicName, Bundle-Version and Export-Package attributes
+ while (<MANIFEST>) {
+ # get rid of non-print chars (some manifest files contain weird chars)
+ s/[^[:print]]//g;
+ if ( m/(^(Bundle-SymbolicName): )(.*)$/ ) {
+ $bundleName = "$3" . "\n";
+ while (<MANIFEST>) {
+ if ( m/^[[:upper:]][[:alpha:]]+-[[:upper:]][[:alpha:]]+: .*/ ) {
+ $len = length $_;
+ seek MANIFEST, $len * -1, 1;
+ last;
+ }
+ $bundleName .= "$_";
+ }
+ $bundleName =~ s/\s+//g;
+ $bundleName =~ s/;.*//g;
+ }
+ if ( m/(^Bundle-Version: )(.*)/ ) {
+ $version = $2;
+ }
+ 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, $file);
+ }
}
- 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.="$_";
+
+ # skip this jar if no bundle name exists
+ if ( !$bundleName eq "" ) {
+ if ( !$version eq "" ) {
+ $version = parseVersion($version);
+ push @bundlelist, { FILE => "$file", NAME => "$bundleName", VERSION => "$version" };
+ } else {
+ push @bundlelist, { FILE => "$file", NAME => "$bundleName", VERSION => "" };
}
- push @bundlelist, parsePkgString($bunlist);
}
- }
- # skip this jar if no bundle name exists
- if (! $bundleName eq "") {
- if (! $version eq "") {
- print "osgi(".$bundleName.") = ".$version."\n";
- } else {
- print "osgi(".$bundleName.")\n";
- }
- }
+ }
}
-}
-$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;
+ if ( !$debug ) { @bundlelist = prepareOSGiBundlesList(@bundlelist); }
+ $list = "";
+ for $bundle (@bundlelist) {
+ if ( !$debug ) {
+ $list .= "osgi(" . $bundle->{NAME} . ")" . $bundle->{VERSION} . "\n";
+ } else {
+ $list .= $bundle->{FILE} . " osgi(" . $bundle->{NAME} . ")" . $bundle->{VERSION} . "\n";
+ }
+ }
+ print $list;
}
-
-sub do_requires {
-
+# this function print requires of OSGi aware files
+sub getRequires {
foreach $file (@_) {
-
- next if -f $file && -r $file;
+ next if (-f $file && -r $file);
+ # we explicitly requires symlinked jars
+ if (-l $file) {
+ $file = readlink $file;
+ if ( !$file eq "" ) {
+ print "$file" . "\n";
+ }
+ next;
+ }
$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") {
+ if ( $file =~ m/$MANIFEST_NAME$/ || $file =~ m/\.jar$/ ) {
+ if ( $file =~ m/\.jar$/ ) {
+ 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 $TEMPDIR;
+ `jar xf $file $MANIFEST_NAME`;
+ open( MANIFEST, "$MANIFEST_NAME" );
chdir $cdir;
}
- } else {
- open(MANIFEST, "$file");
+ } else {
+ open( MANIFEST, "$file" );
+ }
+ 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;
+ }
+ $bunlist .= "$_";
+ }
+ push @bundlelist, parsePkgString($bunlist, $file);
+ }
+ # we also explicitly require symlinked jars define by
+ # Bundle-ClassPath attribut
+ if ( m/(^(Bundle-ClassPath): )(.*)$/ ) {
+ $bunclp = "$3" . "\n";
+ while (<MANIFEST>) {
+ if ( m/^[[:upper:]][[:alpha:]]+-[[:upper:]][[:alpha:]]+: .*/ ) {
+ $len = length $_;
+ seek MANIFEST, $len * -1, 1;
+ last;
+ }
+ $bunclp .= "$_";
+ }
+ $bunclp =~ s/\ //g;
+ $bunclp =~ s/\n//g;
+ $bunclp =~ s/[^[:print:]]//g;
+ $dir = `dirname $file`;
+ $dir =~ s/\n//g;
+ @jars = split /,/, $bunclp;
+ for $jarfile (@jars) {
+ $jarfile = "$dir\/\.\.\/$jarfile";
+ $jarfile = readlink $jarfile;
+ if ( !$jarfile eq "" ) {
+ print "$jarfile" . "\n";
+ }
+ }
+ }
}
- 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;
- }
- $bunlist.="$_";
- }
- push @bundlelist, parsePkgString($bunlist);
- }
- }
+ }
}
+ if ( !$debug ) { @bundlelist = prepareOSGiBundlesList(@bundlelist); }
+ $list = "";
+ for $bundle (@bundlelist) {
+ # replace '=' by '>=' because qualifiers are set on provides
+ # but not on requires.
+ $bundle->{VERSION} =~ s/\ =/\ >=/g;
+ if ( !$debug ) {
+ $list .= "osgi(" . $bundle->{NAME} . ")" . $bundle->{VERSION} . "\n";
+ } else {
+ $list .= $bundle->{FILE} . " osgi(" . $bundle->{NAME} . ")" . $bundle->{VERSION} . "\n";
+ }
+ }
+ print $list;
}
-$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;
+# this function print system bundles of OSGi profile files.
+sub getSystemBundles {
+ foreach $file (@_) {
+ if ( -r $file && -r $file ) {
+ print "'$file' file not found or cannot be read!";
+ next;
+ } else {
+ open( PROFILE, "$file" );
+ while (<PROFILE>) {
+ if ( $file =~ m/\.profile$/ ) {
+ if (m/(^(org\.osgi\.framework\.system\.packages)[=|\ ]+)(.*)$/) {
+ $syspkgs = "$3" . "\n";
+ while (<PROFILE>) {
+ if (m/^[a-z]/) {
+ $len = length $_;
+ seek MANIFEST, $len * -1, 1;
+ last;
+ }
+ $syspkgs .= "$_";
+ }
+ $syspkgs =~ s/\s+//g;
+ $syspkgs =~ s/\\//g;
+ @bundles = split /,/, $syspkgs;
+ foreach $bundle (@bundles) {
+ print "osgi(" . $bundle . ")\n";
+ }
+ }
+ }
+ }
+ }
+ }
}
sub parsePkgString {
- my $bunstr = $_[0];
- my @return;
+ my $bunstr = $_[0];
+ my $file = $_[1];
+ my @return;
$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="";
- $version="";
- $name = $reqelementfrmnt[0];
- for $i (1 .. $#reqelementfrmnt) {
- if ($reqelementfrmnt[$i] =~ m/(^(bundle-|)version=")(.*)(")/){
- $version = $3;
- last;
- }
- }
- $version = parseVersion($version);
- $version = fixVersion($version);
- # dirty fix for provides that contain " char
+ $bunstr =~ s/\n//g;
+ $bunstr =~ s/[^[:print:]]//g;
+ $bunstr =~ s/("[[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+)(,)([[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+")/$1 $3/g;
+ # remove uses bundle from Export-Package attribute
+ $bunstr =~ s/uses:="[[:alnum:]|\-|\_|\.|\(|\)|\[|\]|,]+"//g;
+ # remove optional dependencies
+ $bunstr =~ s/,.*;resolution:=optional//g;
+ # remove x-friends
+ $bunstr =~ s/;x-friends:="[[:alnum:]|\-|\_|\.|\(|\)|\[|\]|,]+"//g;
+ # remove signatures
+ $bunstr =~ s/Name:.*SHA1-Digest:.*//g;
+ @reqcomp = split /,/, $bunstr;
+ foreach $reqelement (@reqcomp) {
+ @reqelementfrmnt = split /;/, $reqelement;
+ $name = "";
+ $version = "";
+ $name = $reqelementfrmnt[0];
$name =~ s/\"//g;
- push @return, { NAME=>"$name", VERSION=>"$version"};
- }
-
- return @return;
+ # ignore 'system.bundle'.
+ # see http://help.eclipse.org/stable/index.jsp?topic=/org.eclipse.platform.doc.isv/porting/3.3/incompatibilities.html
+ next if ( $name =~ m/^system\.bundle$/ );
+ for $i ( 1 .. $#reqelementfrmnt ) {
+ if ( $reqelementfrmnt[$i] =~ m/(^(bundle-|)version=")(.*)(")/ ) {
+ $version = $3;
+ last;
+ }
+ }
+ $version = parseVersion($version);
+ push @return, { FILE => "$file", NAME => "$name", VERSION => "$version" };
+ }
+ return @return;
}
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
- # but when you look at the requires >= look more permssive/correct?
- ($1 eq "\[") ? return " >= $2" : return " > $2";
- } else {
- return " = $ver";
- }
- return $ver;
+ my $ver = $_[0];
+ if ( $ver eq "" ) { return ""; }
+ if ( $ver =~ m/(^[\[|\(])(.+)\ (.+)([\]|\)]$)/ ) {
+ if ( $1 eq "\[" ) {
+ $ver = " >= $2";
+ } else {
+ $ver = " > $2";
+ }
+ } else {
+ $ver = " = $ver";
+ }
+ # we always return a full OSGi version to be able to match 1.0
+ # and 1.0.0 as equal in RPM.
+ ( $major, $minor, $micro, $qualifier ) = split( '\.', $ver );
+ if ( !defined($minor) || !$minor ) {
+ $minor = 0;
+ }
+ if ( !defined($micro) || !$micro ) {
+ $micro = 0;
+ }
+ if ( !defined($qualifier) || !$qualifier ) {
+ $qualifier = "";
+ } else {
+ $qualifier = "." . $qualifier;
+ }
+ $ver = $major . "." . $minor . "." . $micro . $qualifier;
+ 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;
+# this function put the max version on each bundles to be able to remove
+# duplicate deps with 'sort -u' command.
+sub prepareOSGiBundlesList {
+ foreach $bundle (@_) {
+ foreach $cmp (@_) {
+ if ( $bundle->{NAME} eq $cmp->{NAME} ) {
+ $result = compareVersion( $bundle->{VERSION}, $cmp->{VERSION} );
+ if ( $result < 0 ) {
+ $bundle->{VERSION} = $cmp->{VERSION};
+ }
+ }
+ }
+ }
+ return @_;
}
+# this function returns a negative integer, zero, or a positive integer if
+# $ver1 is less than, equal to, or greater than $ver2.
+#
+# REMEMBER: we mimic org.osgi.framework.Version#compareTo method but
+# *at this time* we don't take care of the qualifier part of the version.
+sub compareVersion {
+ my $ver1 = $_[0];
+ my $ver2 = $_[1];
+
+ $ver1 = "0.0.0" if ( $ver1 eq "" );
+ $ver2 = "0.0.0" if ( $ver2 eq "" );
+
+ $ver1 =~ m/([0-9]+)(\.)([0-9]+)(\.)([0-9]+)/;
+ $major1 = $1;
+ $minor1 = $3;
+ $micro1 = $5;
+
+ $ver2 =~ m/([0-9]+)(\.)([0-9]+)(\.)([0-9]+)/;
+ $major2 = $1;
+ $minor2 = $3;
+ $micro2 = $5;
+
+ $result = $major1 - $major2;
+ return $result if ( $result != 0 );
+
+ $result = $minor1 - $minor2;
+ return $result if ( $result != 0 );
+
+ $result = $micro1 - $micro2;
+ return $result if ( $result != 0 );
+
+ return $result;
+}

View File

@ -1,29 +0,0 @@
diff --git a/rpmio/rpmpgp.c b/rpmio/rpmpgp.c
index 3819449..eb5d627 100644
--- a/rpmio/rpmpgp.c
+++ b/rpmio/rpmpgp.c
@@ -638,13 +638,13 @@ static int pgpPrtSigParams(pgpTag tag, uint8_t pubkey_algo, uint8_t sigtype,
return 0;
}
-static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen, pgpDig _dig)
+static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
+ pgpDig _dig, pgpDigParams _digp)
{
uint8_t version = h[0];
uint8_t * p;
size_t plen;
int rc;
- pgpDigParams _digp = _dig ? &_dig->signature : NULL;
switch (version) {
case 3:
@@ -1170,7 +1170,7 @@ static int pgpPrtPkt(const uint8_t *pkt, size_t pleft,
h = pkt + 1 + plen;
switch (tag) {
case PGPTAG_SIGNATURE:
- rc = pgpPrtSig(tag, h, hlen, _dig);
+ rc = pgpPrtSig(tag, h, hlen, _dig, _digp);
break;
case PGPTAG_PUBLIC_KEY:
/* Get the public key fingerprint. */

View File

@ -1,39 +0,0 @@
commit 9322f737819a3d81088699b1d7fa667259245411
Author: Panu Matilainen <pmatilai@redhat.com>
Date: Tue May 19 10:26:50 2009 +0300
Don't mess up problem altNEVR in python ts.check() (rhbz#501068)
- the use of strrchr() silently casts away the const from the problem
set altNEVR string, which we then happily modify..
- similar to commit 62cc76e25cdfad78ac30bb28f626b474efdecddc
diff --git a/python/rpmts-py.c b/python/rpmts-py.c
index e56e001..9877fbc 100644
--- a/python/rpmts-py.c
+++ b/python/rpmts-py.c
@@ -365,7 +365,7 @@ fprintf(stderr, "*** rpmts_Check(%p) ts %p cb %p\n", s, s->ts, cbInfo.cb);
/* XXX TODO: rpmlib >= 4.0.3 can return multiple suggested keys. */
while ((i = rpmpsNextIterator(psi)) >= 0) {
- const char * needsName;
+ char * altNEVR, * needsName;
char * byName, * byVersion, * byRelease, *byArch;
char * needsOP, * needsVersion;
rpmsenseFlags needsFlags, sense;
@@ -383,7 +383,7 @@ fprintf(stderr, "*** rpmts_Check(%p) ts %p cb %p\n", s, s->ts, cbInfo.cb);
key = rpmProblemGetKey(p);
- needsName = rpmProblemGetAltNEVR(p);
+ altNEVR = needsName = xstrdup(rpmProblemGetAltNEVR(p));
if (needsName[1] == ' ') {
sense = (needsName[0] == 'C')
? RPMDEP_SENSE_CONFLICTS : RPMDEP_SENSE_REQUIRES;
@@ -409,6 +409,7 @@ fprintf(stderr, "*** rpmts_Check(%p) ts %p cb %p\n", s, s->ts, cbInfo.cb);
PyList_Append(list, (PyObject *) cf);
Py_DECREF(cf);
free(byName);
+ free(altNEVR);
}
psi = rpmpsFreeIterator(psi);

View File

@ -11,7 +11,7 @@
%define rpmhome /usr/lib/rpm
%define rpmver 4.7.0
%define rpmver 4.7.1
%define snapver {nil}
%define srcver %{rpmver}
@ -21,10 +21,10 @@
Summary: The RPM package management system
Name: rpm
Version: %{rpmver}
Release: 9%{?dist}
Release: 1%{?dist}
Group: System Environment/Base
Url: http://www.rpm.org/
Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2
Source0: http://rpm.org/releases/rpm-4.7.x/%{name}-%{srcver}.tar.bz2
%if %{with int_bdb}
Source1: db-%{bdbver}.tar.gz
%endif
@ -39,14 +39,6 @@ Patch2: rpm-4.5.90-gstreamer-provides.patch
Patch3: rpm-4.6.0-fedora-specspo.patch
# Patches already in upstream
Patch200: rpm-4.7.0-findlang-kde3.patch
Patch201: rpm-4.7.0-prtsig.patch
Patch202: rpm-4.7.0-python-altnevr.patch
Patch203: rpm-4.7.0-hardlink-sizes.patch
Patch204: rpm-4.7.0-dwarf3.patch
Patch205: rpm-4.7.0-osgideps.patch
Patch206: rpm-4.7.0-fp-symlink.patch
Patch207: rpm-4.7.0-fp-findbyfile.patch
# These are not yet upstream
Patch300: rpm-4.7.0-extra-provides.patch
@ -199,15 +191,6 @@ packages on a system.
%patch2 -p1 -b .gstreamer-prov
%patch3 -p1 -b .fedora-specspo
%patch200 -p1 -b .findlang-kde3
%patch201 -p1 -b .prtsig
%patch202 -p1 -b .py-altnevr
%patch203 -p1 -b .hardlink-sizes
%patch204 -p1 -b .dwarf3
%patch205 -p1 -b .osgideps
%patch206 -p1 -b .fp-symlink
%patch207 -p1 -b .fp-findbyfile
%patch300 -p1 -b .extra-prov
%patch301 -p1 -b .niagara
@ -421,6 +404,10 @@ exit 0
%doc doc/librpm/html/*
%changelog
* Tue Jul 21 2009 Panu Matilainen <pmatilai@redhat.com> - 4.7.1-1
- update to 4.7.1 ((http://rpm.org/wiki/Releases/4.7.1)
- fix source url
* Mon Jul 20 2009 Bill Nottingham <notting@redhat.com> - 4.7.0-9
- enable XZ support

View File

@ -1 +1 @@
74791d638c571ec79f06227d453a6a03 rpm-4.7.0.tar.bz2
e1abe3bcf6514a319a3803d2cf3bf83b rpm-4.7.1.tar.bz2