From 2c832c53e7af7f085324e71c4ab6bc238c45c03b Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sun, 7 Sep 2008 10:55:38 +0000 Subject: rpm: Add missing patches git-svn-id: https://svn.o-hand.com/repos/poky/trunk@5154 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- meta/packages/rpm/files/extcond.patch | 78 +++++++++++++++++++++++++++++++++ meta/packages/rpm/files/missingok.patch | 44 +++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 meta/packages/rpm/files/extcond.patch create mode 100644 meta/packages/rpm/files/missingok.patch diff --git a/meta/packages/rpm/files/extcond.patch b/meta/packages/rpm/files/extcond.patch new file mode 100644 index 0000000000..6963b8606c --- /dev/null +++ b/meta/packages/rpm/files/extcond.patch @@ -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@*/ + } diff --git a/meta/packages/rpm/files/missingok.patch b/meta/packages/rpm/files/missingok.patch new file mode 100644 index 0000000000..b008c9a02b --- /dev/null +++ b/meta/packages/rpm/files/missingok.patch @@ -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 | \ -- cgit v1.2.3-54-g00ecf