- ensure relocatable packages always get install-prefix(es) set (#979443)

This commit is contained in:
Panu Matilainen 2013-07-05 10:41:32 +03:00
parent 1f5bf02b91
commit 2bbb203d3d
2 changed files with 61 additions and 1 deletions

View File

@ -0,0 +1,55 @@
commit 1ac9e84d9a4a04df7c8f659a8df676fc4f8544f0
Author: Panu Matilainen <pmatilai@redhat.com>
Date: Fri Jul 5 10:27:18 2013 +0300
Ensure relocatable packages always get install-prefix(es) set (RhBug:979443)
- Scriptlets from relocatable packages should always run with
$RPM_INSTALL_PREFIX* defined, whether actually being relocated or not.
- Fixes regression introduced by the optimization in commit
5d3018c4ed476b1b7ac18e2573af517f872cb303. We always need to call
addPrefixes() but return early from rpmRelocateFileList() when
no relocations are taking place, fixing the performance regression
introduced all the way back in cb8241dda783f7e8c143b08fecf57fe89a39c3a6
which is what 5d3018c4ed476b1b7ac18e2573af517f872cb303 was trying
to fix. Pooh :)
(cherry picked from commit 88d24b14a8e0e33e768cb74a3487acf0925b012a)
diff --git a/lib/rpmfi.c b/lib/rpmfi.c
index 0bfb5dd..185deae 100644
--- a/lib/rpmfi.c
+++ b/lib/rpmfi.c
@@ -793,7 +793,8 @@ static int addPrefixes(Header h, rpmRelocation *relocations, int numRelocations)
headerPutStringArray(h, RPMTAG_INSTPREFIXES, actualRelocations, numActual);
}
free(actualRelocations);
- return numActual;
+ /* When any relocations are present there'll be more work to do */
+ return 1;
}
static void saveRelocs(Header h, rpmtd bnames, rpmtd dnames, rpmtd dindexes)
@@ -835,7 +836,8 @@ void rpmRelocateFileList(rpmRelocation *relocations, int numRelocations,
int i, j;
struct rpmtd_s bnames, dnames, dindexes, fmodes;
- addPrefixes(h, relocations, numRelocations);
+ if (!addPrefixes(h, relocations, numRelocations))
+ return;
if (!_printed) {
_printed = 1;
diff --git a/lib/rpmte.c b/lib/rpmte.c
index 6afd69e..87fb391 100644
--- a/lib/rpmte.c
+++ b/lib/rpmte.c
@@ -98,7 +98,7 @@ static rpmfi getFI(rpmte p, Header h)
(RPMFI_NOHEADER | RPMFI_FLAGS_ERASE);
/* relocate stuff in header if necessary */
- if (rpmteType(p) == TR_ADDED && rpmfsFC(p->fs) > 0 && p->nrelocs) {
+ if (rpmteType(p) == TR_ADDED && rpmfsFC(p->fs) > 0) {
if (!headerIsSource(h) && !headerIsEntry(h, RPMTAG_ORIGBASENAMES)) {
rpmRelocateFileList(p->relocs, p->nrelocs, p->fs, h);
}

View File

@ -21,7 +21,7 @@
Summary: The RPM package management system
Name: rpm
Version: %{rpmver}
Release: %{?snapver:0.%{snapver}.}2%{?dist}
Release: %{?snapver:0.%{snapver}.}3%{?dist}
Group: System Environment/Base
Url: http://www.rpm.org/
Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2
@ -48,6 +48,7 @@ Patch6: rpm-4.9.0-armhfp-logic.patch
# Patches already in upstream
# Filter soname dependencies by name
Patch100: rpm-4.11.x-filter-soname-deps.patch
Patch101: rpm-4.11.1-instprefix.patch
# These are not yet upstream
Patch301: rpm-4.6.0-niagara.patch
@ -231,6 +232,7 @@ packages on a system.
%patch4 -p1 -b .use-gpg2
%patch100 -p1 -b .filter-soname-deps
%patch101 -p1 -b .instprefix
%patch301 -p1 -b .niagara
%patch302 -p1 -b .geode
@ -466,6 +468,9 @@ exit 0
%doc COPYING doc/librpm/html/*
%changelog
* Fri Jul 05 2013 Panu Matilainen <pmatilai@redhat.com> - 4.11.1-3
- ensure relocatable packages always get install-prefix(es) set (#979443)
* Thu Jul 04 2013 Panu Matilainen <pmatilai@redhat.com> - 4.11.1-2
- fix .gnu_debuglink CRC32 after dwz, buildrequire binutils-devel (#971119)