mirror of
https://git.yoctoproject.org/poky
synced 2026-04-21 21:32:12 +02:00
rpm: Add missing patches
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@5154 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
78
meta/packages/rpm/files/extcond.patch
Normal file
78
meta/packages/rpm/files/extcond.patch
Normal file
@@ -0,0 +1,78 @@
|
||||
This patch supports an extension in the condition evaluation.
|
||||
If the condition is a format and returns an nonempty string, it is
|
||||
assumed to be true.
|
||||
This mechanism is used by the weakdeps patch to filter the
|
||||
"RPMSENSE_STRONG" flag.
|
||||
|
||||
--- ./rpmdb/header.c.orig 2005-06-06 23:33:54.000000000 +0000
|
||||
+++ ./rpmdb/header.c 2006-03-17 18:08:02.000000000 +0000
|
||||
@@ -2980,8 +2980,12 @@ static int parseExpression(headerSprintf
|
||||
|
||||
*endPtr = chptr;
|
||||
|
||||
+ token->u.cond.tag.type = NULL;
|
||||
+ token->u.cond.tag.format = "";
|
||||
token->type = PTOK_COND;
|
||||
|
||||
+ if ((token->u.cond.tag.type = strchr(str, ':')) != 0)
|
||||
+ *token->u.cond.tag.type++ = 0;
|
||||
(void) findTag(hsa, token, str);
|
||||
|
||||
return 0;
|
||||
@@ -3239,6 +3243,7 @@ static char * singleSprintf(headerSprint
|
||||
int_32 type;
|
||||
int_32 count;
|
||||
sprintfToken spft;
|
||||
+ sprintfTag stag;
|
||||
int condNumFormats;
|
||||
size_t need;
|
||||
|
||||
@@ -3270,6 +3275,18 @@ static char * singleSprintf(headerSprint
|
||||
if (token->u.cond.tag.ext || headerIsEntry(hsa->h, token->u.cond.tag.tag)) {
|
||||
spft = token->u.cond.ifFormat;
|
||||
condNumFormats = token->u.cond.numIfTokens;
|
||||
+ if (token->u.cond.tag.fmt) {
|
||||
+ /* check if format creates output */
|
||||
+ size_t vallen = hsa->vallen;
|
||||
+ formatValue(hsa, &token->u.cond.tag, element);
|
||||
+ if (hsa->vallen == vallen) {
|
||||
+ spft = token->u.cond.elseFormat;
|
||||
+ condNumFormats = token->u.cond.numElseTokens;
|
||||
+ } else {
|
||||
+ hsa->vallen = vallen;
|
||||
+ hsa->val[hsa->vallen] = 0;
|
||||
+ }
|
||||
+ }
|
||||
} else {
|
||||
spft = token->u.cond.elseFormat;
|
||||
condNumFormats = token->u.cond.numElseTokens;
|
||||
@@ -3291,19 +3308,22 @@ static char * singleSprintf(headerSprint
|
||||
spft = token->u.array.format;
|
||||
for (i = 0; i < token->u.array.numTokens; i++, spft++)
|
||||
{
|
||||
- if (spft->type != PTOK_TAG ||
|
||||
- spft->u.tag.arrayCount ||
|
||||
- spft->u.tag.justOne) continue;
|
||||
+ if (spft->type != PTOK_TAG && spft->type != PTOK_COND)
|
||||
+ continue;
|
||||
+
|
||||
+ stag = (spft->type == PTOK_COND ? &spft->u.cond.tag : &spft->u.tag);
|
||||
+ if (stag->arrayCount || stag->justOne)
|
||||
+ continue;
|
||||
|
||||
- if (spft->u.tag.ext) {
|
||||
+ if (stag->ext) {
|
||||
/*@-boundswrite@*/
|
||||
- if (getExtension(hsa, spft->u.tag.ext, &type, NULL, &count,
|
||||
- hsa->ec + spft->u.tag.extNum))
|
||||
+ if (getExtension(hsa, stag->ext, &type, NULL, &count,
|
||||
+ hsa->ec + stag->extNum))
|
||||
continue;
|
||||
/*@=boundswrite@*/
|
||||
} else {
|
||||
/*@-boundswrite@*/
|
||||
- if (!headerGetEntry(hsa->h, spft->u.tag.tag, &type, NULL, &count))
|
||||
+ if (!headerGetEntry(hsa->h, stag->tag, &type, NULL, &count))
|
||||
continue;
|
||||
/*@=boundswrite@*/
|
||||
}
|
||||
44
meta/packages/rpm/files/missingok.patch
Normal file
44
meta/packages/rpm/files/missingok.patch
Normal file
@@ -0,0 +1,44 @@
|
||||
Obey MISSINGOK flag for dependencies. Backport from rpm-4.4.7.
|
||||
|
||||
Index: lib/depends.c
|
||||
===================================================================
|
||||
--- lib/depends.c.orig 2008-04-01 08:28:22.000000000 +0100
|
||||
+++ lib/depends.c 2008-09-04 14:09:58.000000000 +0100
|
||||
@@ -593,8 +593,13 @@
|
||||
/*@=boundsread@*/
|
||||
|
||||
unsatisfied:
|
||||
- rc = 1; /* dependency is unsatisfied */
|
||||
- rpmdsNotify(dep, NULL, rc);
|
||||
+ if (rpmdsFlags(dep) & RPMSENSE_MISSINGOK) {
|
||||
+ rc = 0; /* dependency is unsatisfied, but just a hint. */
|
||||
+ rpmdsNotify(dep, _("(hint skipped)"), rc);
|
||||
+ } else {
|
||||
+ rc = 1; /* dependency is unsatisfied */
|
||||
+ rpmdsNotify(dep, NULL, rc);
|
||||
+ }
|
||||
|
||||
exit:
|
||||
/*
|
||||
@@ -963,6 +968,8 @@
|
||||
return "Requires(postun):";
|
||||
if (f & RPMSENSE_SCRIPT_VERIFY)
|
||||
return "Requires(verify):";
|
||||
+ if (f & RPMSENSE_MISSINGOK)
|
||||
+ return "Requires(hint):";
|
||||
if (f & RPMSENSE_FIND_REQUIRES)
|
||||
return "Requires(auto):";
|
||||
return "Requires:";
|
||||
Index: lib/rpmlib.h
|
||||
===================================================================
|
||||
--- lib/rpmlib.h.orig 2008-09-03 22:22:43.000000000 +0100
|
||||
+++ lib/rpmlib.h 2008-09-04 15:17:17.000000000 +0100
|
||||
@@ -562,6 +562,8 @@
|
||||
RPMSENSE_SCRIPT_POSTUN | \
|
||||
RPMSENSE_SCRIPT_VERIFY | \
|
||||
RPMSENSE_FIND_REQUIRES | \
|
||||
+ RPMSENSE_MISSINGOK | \
|
||||
+ RPMSENSE_STRONG | \
|
||||
RPMSENSE_SCRIPT_PREP | \
|
||||
RPMSENSE_SCRIPT_BUILD | \
|
||||
RPMSENSE_SCRIPT_INSTALL | \
|
||||
Reference in New Issue
Block a user