rpm: Fix the canonical arch --target processing and cleanup

[YOCTO #1352]

Fix the canonical arch --target processor to work with the way OE
handles the GNU canonical arch.

Also cleanup a number of files that are no longer used, and refactor
the no-loop patch into the "no-loopmsg" patch.

(From OE-Core rev: 25904ad2bdeadda9189805bb7a210eafe5795024)

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Mark Hatle 2011-08-10 11:13:33 -05:00 committed by Richard Purdie
parent 8bc2ebf59a
commit 9308457404
7 changed files with 153 additions and 127 deletions

View File

@ -1,45 +0,0 @@
rpmbag.h (added in 5.1.10) is used by rpmts.h, thus should be
exported. Change Makefile.in as well since currently autoreconf
is not performed for rpm.
8/26/2010 - created by Qing He <qing.he@intel.com>
diff --git a/rpmio/Makefile.am b/rpmio/Makefile.am
index ce9e4f7..0d825b6 100644
--- a/rpmio/Makefile.am
+++ b/rpmio/Makefile.am
@@ -59,12 +59,12 @@ pkginc_HEADERS = \
argv.h envvar.h fts.h mire.h rpmbc.h rpmcb.h rpmdav.h rpmgc.h \
rpmhash.h rpmio.h rpmiotypes.h rpmio-stub.h rpmku.h rpmlog.h \
rpmmacro.h rpmmg.h rpmnss.h rpmpgp.h rpmsq.h rpmssl.h rpmsw.h \
- rpmurl.h rpmxar.h ugid.h rpmuuid.h rpmzlog.h yarn.h
+ rpmurl.h rpmxar.h ugid.h rpmuuid.h rpmzlog.h yarn.h rpmbag.h
noinst_HEADERS = \
ar.h cpio.h crc.h fnmatch.h glob.h iosm.h \
md2.h md4.h poptIO.h rmd128.h rmd160.h rmd256.h rmd320.h sha224.h \
salsa10.h salsa20.h tar.h tiger.h \
- rpmbag.h rpmbf.h rpmbz.h rpmhook.h rpmio_internal.h rpmlua.h
+ rpmbf.h rpmbz.h rpmhook.h rpmio_internal.h rpmlua.h
usrlibdir = $(libdir)
usrlib_LTLIBRARIES = librpmio.la
diff --git a/rpmio/Makefile.in b/rpmio/Makefile.in
index ef76570..0b212bd 100644
--- a/rpmio/Makefile.in
+++ b/rpmio/Makefile.in
@@ -638,13 +638,13 @@ pkginc_HEADERS = \
argv.h envvar.h fts.h mire.h rpmbc.h rpmcb.h rpmdav.h rpmgc.h \
rpmhash.h rpmio.h rpmiotypes.h rpmio-stub.h rpmku.h rpmlog.h \
rpmmacro.h rpmmg.h rpmnss.h rpmpgp.h rpmsq.h rpmssl.h rpmsw.h \
- rpmurl.h rpmxar.h ugid.h rpmuuid.h rpmzlog.h yarn.h
+ rpmurl.h rpmxar.h ugid.h rpmuuid.h rpmzlog.h yarn.h rpmbag.h
noinst_HEADERS = \
ar.h cpio.h crc.h fnmatch.h glob.h iosm.h \
md2.h md4.h poptIO.h rmd128.h rmd160.h rmd256.h rmd320.h sha224.h \
salsa10.h salsa20.h tar.h tiger.h \
- rpmbag.h rpmbf.h rpmbz.h rpmhook.h rpmio_internal.h rpmlua.h
+ rpmbf.h rpmbz.h rpmhook.h rpmio_internal.h rpmlua.h
usrlibdir = $(libdir)
usrlib_LTLIBRARIES = librpmio.la

View File

@ -1,22 +0,0 @@
diff --git a/lib/rpm4compat.h b/lib/rpm4compat.h
index b957f8e..b1954d5 100644
--- a/lib/rpm4compat.h
+++ b/lib/rpm4compat.h
@@ -211,6 +211,17 @@ static inline int headerAddEntry(Header h, int_32 tag, int_32 type, const void *
return headerPut(h, he, 0);
}
+static inline int headerAddOrAppendEntry(Header h, int_32 tag, int_32 type, const void * p, int_32 c) {
+ HE_t he = (HE_s*)memset(alloca(sizeof(*he)), 0, sizeof(*he));
+
+ he->tag = (rpmTag)tag;
+ he->t = (rpmTagType)type;
+ he->p.str = (const char*)p;
+ he->c = (rpmTagCount)c;
+ he->append = 1;
+ return headerPut(h, he, 0);
+}
+
static inline int headerRemoveEntry(Header h, int_32 tag) {
HE_t he = (HE_s*)memset(alloca(sizeof(*he)), 0, sizeof(*he));

View File

@ -0,0 +1,134 @@
lib/rpmrc.c: Update --target processing to support full GNU canonical arch
Prior to this patch, when using --target, RPM supported the format:
<arch>
<arch>-<os>
<arch>-<os>-gnu
<arch>-<arbitrary items>-<os>
<arch>-<arbitrary items>-<os>-gnu
This patch changes the list of supported items to:
<arch>
<arch>-<os>
<arch>-<os>-gnu
<arch>-<vendor>-<os>
<arch>-<vendor>-<os>-<extension>
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
Index: rpm-5.4.0/lib/rpmrc.c
===================================================================
--- rpm-5.4.0.orig/lib/rpmrc.c 2011-08-10 17:04:35.798814821 -0500
+++ rpm-5.4.0/lib/rpmrc.c 2011-08-10 17:33:51.505871895 -0500
@@ -916,8 +916,8 @@
static void rpmRebuildTargetVars(const char ** target, const char ** canontarget)
{
-
- char *ca = NULL, *co = NULL, *ct = NULL;
+ /* ca = arch, cv = vendor, co = os, ce = extension, ct = canon target */
+ char *ca = NULL, *cv = NULL, *co = NULL, *ce = NULL, *ct = NULL;
int x;
/* Rebuild the compat table to recalculate the current target arch. */
@@ -927,23 +927,60 @@
rpmSetTables(RPM_MACHTABLE_BUILDARCH, RPM_MACHTABLE_BUILDOS);
if (target && *target) {
+ /* GNU canonical format is:
+ * <arch>-<vendor>-<os>[-extension]
+ *
+ * We support the both the GNU canonical format
+ * as well as the traditional RPM formats:
+ * <arch>
+ * <arch>-<os>[-gnu]
+ */
char *c;
/* Set arch and os from specified build target */
ca = xstrdup(*target);
- if ((c = strchr(ca, '-')) != NULL) {
+ if ((c = strchr(ca, '-')) == NULL) {
+ /* Format is <arch> */
+ ;
+ } else {
*c++ = '\0';
-
- if ((co = strrchr(c, '-')) == NULL) {
- co = c;
+ cv = c;
+
+ if ((c = strchr(c, '-')) == NULL) {
+ /* Format is <arch>-<os> */
+ co = cv;
+ cv = NULL;
} else {
- if (!xstrcasecmp(co, "-gnu"))
- *co = '\0';
- if ((co = strrchr(c, '-')) == NULL)
- co = c;
- else
- co++;
+ *c++ = '\0';
+ co = c;
+
+ if ((c = strchr(c, '-')) == NULL) {
+ /* Might be:
+ * <arch>-<vendor>-<os>
+ * <arch>-<os>-gnu
+ */
+ if (!xstrcasecmp(co, "gnu")) {
+ /* Format was <arch>-<os>-gnu */
+ ce = co;
+ co = cv;
+ cv = NULL;
+ }
+ } else {
+ /* Format was <arch>-<vendor>-<os>-<extension> */
+ *c++ = '\0';
+ ce = c;
+ }
}
+ if (cv != NULL) cv = xstrdup(cv);
if (co != NULL) co = xstrdup(co);
+ if (ce != NULL) {
+ /* We need to prefix it with a "-" */
+ char * lce = NULL;
+
+ lce = xmalloc(strlen(ce) + sizeof("-"));
+ sprintf(lce, "-%s", ce);
+
+ ce = lce;
+ }
}
} else {
const char *a = NULL;
@@ -988,8 +1025,16 @@
addMacro(NULL, "_target", NULL, ct, RMIL_RPMRC);
delMacro(NULL, "_target_cpu");
addMacro(NULL, "_target_cpu", NULL, ca, RMIL_RPMRC);
+ if (cv) {
+ delMacro(NULL, "_target_vendor");
+ addMacro(NULL, "_target_vendor", NULL, cv, RMIL_RPMRC);
+ }
delMacro(NULL, "_target_os");
addMacro(NULL, "_target_os", NULL, co, RMIL_RPMRC);
+ if (ce) {
+ delMacro(NULL, "_gnu");
+ addMacro(NULL, "_gnu", NULL, ce, RMIL_RPMRC);
+ }
if (canontarget)
*canontarget = ct;
@@ -997,8 +1041,12 @@
ct = _free(ct);
ca = _free(ca);
/*@-usereleased@*/
+ cv = _free(cv);
+ /*@-usereleased@*/
co = _free(co);
/*@=usereleased@*/
+ ce = _free(ce);
+ /*@-usereleased@*/
}
void rpmFreeRpmrc(void)

View File

@ -1,38 +0,0 @@
The LOOP: ... messages appear to be errors, but in reality they are
simply debug messages that indicate there is one or more dependency
loop within the system.
Due to Poky packages owning all of the directories they use, a large
number of depedency loops may be present. So disabling this message
seems to make the most sense.
Signed-off-by: mark.hatle@windriver.com
diff -ur rpm-5.1.10.orig/lib/depends.c rpm-5.1.10/lib/depends.c
--- rpm-5.1.10.orig/lib/depends.c 2010-09-29 12:23:48.307048065 -0500
+++ rpm-5.1.10/lib/depends.c 2010-09-29 12:33:23.306022259 -0500
@@ -2044,9 +2044,11 @@
* Attempt to unravel a dependency loop by eliminating Requires's.
*/
if (zap) {
+#if 0
rpmlog(msglvl,
_("removing %s \"%s\" from tsort relations.\n"),
(rpmteNEVRA(p) ? rpmteNEVRA(p) : "???"), dp);
+#endif
rpmteTSI(p)->tsi_count--;
if (tsi_prev) tsi_prev->tsi_next = tsi->tsi_next;
tsi->tsi_next = NULL;
@@ -2676,10 +2678,12 @@
/* Unchain predecessor loop. */
rpmteTSI(p)->tsi_chain = NULL;
+#if 0
if (!printed) {
rpmlog(msglvl, _("LOOP:\n"));
printed = 1;
}
+#endif
/* Find (and destroy if co-requisite) "q <- p" relation. */
dp = zapRelation(q, p, 1, &nzaps, msglvl);

View File

@ -0,0 +1,16 @@
lib/order.c: Make the dependency loop messages into debug msgs
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
diff -urN rpm-5.4.0.orig/lib/order.c rpm-5.4.0/lib/order.c
--- rpm-5.4.0.orig/lib/order.c 2010-12-13 17:36:39.000000000 -0600
+++ rpm-5.4.0/lib/order.c 2011-08-10 11:11:43.194686332 -0500
@@ -2170,7 +2170,7 @@
const char * dp;
rpmlogLvl msglvl = (anaconda || (rpmtsDFlags(ts) & RPMDEPS_FLAG_DEPLOOPS))
? RPMLOG_WARNING : RPMLOG_ERR;
-#if defined(RPM_VENDOR_MANDRIVA) /* loop-detection-optional-loglevel */
+#if defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_POKY) /* loop-detection-optional-loglevel */
// Report loops as debug-level message by default (7 = RPMLOG_DEBUG), overridable
msglvl = rpmExpandNumeric("%{?_loop_detection_loglevel}%{?!_loop_detection_loglevel:7}");
#endif

View File

@ -1,17 +0,0 @@
We need to increase the number of dependency rescans as we have a large
number of self-referencing dependencies within Poky. 100 seem reasonable.
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
diff -ur rpm-5.1.10.orig/lib/depends.c rpm-5.1.10/lib/depends.c
--- rpm-5.1.10.orig/lib/depends.c 2010-08-20 17:12:43.000000000 -0500
+++ rpm-5.1.10/lib/depends.c 2010-09-02 13:37:21.966116309 -0500
@@ -2310,7 +2310,7 @@
int numOrderList;
int npeer = 128; /* XXX more than deep enough for now. */
int * peer = memset(alloca(npeer*sizeof(*peer)), 0, (npeer*sizeof(*peer)));
- int nrescans = 10;
+ int nrescans = 100;
int _printed = 0;
char deptypechar;
size_t tsbytes;

View File

@ -45,7 +45,7 @@ LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1"
DEPENDS = "bzip2 zlib db openssl elfutils expat libpcre attr acl popt ${extrarpmdeps}"
extrarpmdeps = "python perl"
extrarpmdeps_virtclass-native = ""
PR = "r19"
PR = "r20"
# rpm2cpio is a shell script, which is part of the rpm src.rpm. It is needed
# in order to extract the distribution SRPM into a format we can extract...
@ -61,14 +61,12 @@ SRC_URI = "http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.0-0.20101229.src.rpm;ex
file://rpm-tools-mtree-LDFLAGS.patch \
file://fprint-pointer-fix.patch \
file://rpm-fileclass.patch \
file://rpm-canonarch.patch \
file://rpm-no-loopmsg.patch \
"
# file://hdraddorappend.patch \
# file://export-rpmbag-h.patch \
# file://rpm-nrescan.patch \
# file://rpm-autoconf.patch \
# file://remove-compiled-tests.patch;apply=no \
# file://rpm-no-loop.patch \
# "
SRC_URI[md5sum] = "19c1a7f68d7765eeb7615c9c4e54e380"