SOURCES: poldek-rpm_4_4_3.patch (NEW) - support for rpm 4.4.3 from...
wolf
wolf at pld-linux.org
Mon Nov 21 22:31:23 CET 2005
Author: wolf Date: Mon Nov 21 21:31:23 2005 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- support for rpm 4.4.3 from mis
---- Files affected:
SOURCES:
poldek-rpm_4_4_3.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/poldek-rpm_4_4_3.patch
diff -u /dev/null SOURCES/poldek-rpm_4_4_3.patch:1.1
--- /dev/null Mon Nov 21 22:31:23 2005
+++ SOURCES/poldek-rpm_4_4_3.patch Mon Nov 21 22:31:18 2005
@@ -0,0 +1,213 @@
+Index: pm/rpm/misc.c
+===================================================================
+RCS file: /cvsroot/installer/poldek/pm/rpm/misc.c,v
+retrieving revision 1.4
+retrieving revision 1.5
+diff -u -r1.4 -r1.5
+--- pm/rpm/misc.c 12 May 2005 15:44:41 -0000 1.4
++++ pm/rpm/misc.c 21 Nov 2005 17:01:34 -0000 1.5
+@@ -11,7 +11,7 @@
+ */
+
+ /*
+- $Id$
++ $Id$
+ */
+
+ #ifdef HAVE_CONFIG_H
+@@ -23,6 +23,9 @@
+ #include <string.h>
+
+ #include <rpm/rpmlib.h>
++#if HAVE_RPMDSRPMLIB
++# include <rpm/rpmds.h>
++#endif
+
+ #include <trurl/nassert.h>
+ #include <trurl/nstr.h>
+@@ -33,21 +36,49 @@
+ #include "log.h"
+ #include "pm/pm.h"
+
+-tn_array *pm_rpm_rpmlib_caps(void)
++#if HAVE_RPMDSRPMLIB /* rpmdsRpmlib() => rpm >= 4.4.3 */
++static int get_rpmlib_caps(tn_array *caps)
++{
++ rpmds ds = NULL;
++
++ if (rpmdsRpmlib(&ds, NULL) != 0)
++ return 0;
++
++ ds = rpmdsInit(ds);
++ while (rpmdsNext(ds) >= 0) {
++ const char *name, *evr;
++ char tmp[256];
++ struct capreq *cr;
++ uint32_t flags;
++
++ name = rpmdsN(ds);
++ evr = rpmdsEVR(ds);
++ flags = rpmdsFlags(ds);
++
++ n_assert(flags & RPMSENSE_EQUAL);
++ n_assert((flags & (RPMSENSE_LESS | RPMSENSE_GREATER)) == 0);
++
++ n_strncpy(tmp, evr, 128);
++ cr = capreq_new_evr(name, tmp, REL_EQ, 0);
++ if (cr)
++ n_array_push(caps, cr);
++ }
++ ds = rpmdsFree(ds);
++ return n_array_size(caps);
++}
++#endif /* HAVE_RPMDSRPMLIB */
++
++#if HAVE_RPMGETRPMLIBPROVIDES /* rpmGetRpmlibProvides() => rpm < 4.4.3 */
++static int get_rpmlib_caps_rpm_lt_4_4_3(tn_array *caps)
+ {
+ char **names = NULL, **versions = NULL, *evr;
+ int *flags = NULL, n = 0, i;
+- tn_array *caps;
+-
+-#if HAVE_RPMGETRPMLIBPROVIDES
++
+ n = rpmGetRpmlibProvides((const char ***)&names, &flags, (const char ***)&versions);
+-#endif
+-
+ if (n <= 0)
+- return NULL;
++ return 0;
+
+ caps = capreq_arr_new(0);
+-
+ evr = alloca(128);
+
+ for (i=0; i<n; i++) {
+@@ -62,19 +93,39 @@
+ n_array_push(caps, cr);
+ }
+
+- if (names)
+- free(names);
+-
+- if (flags)
+- free(flags);
++ n_cfree(&names);
++ n_cfree(&flags);
++ n_cfree(&versions);
++ return 1;
++}
++#endif
+
+- if (versions)
+- free(versions);
++tn_array *pm_rpm_rpmlib_caps(void)
++{
++ tn_array *caps;
++ int rc = 0;
++
++ caps = capreq_arr_new(0);
+
+- n_array_sort(caps);
++#if HAVE_RPMDSRPMLIB /* rpm >= 4.4.3 */
++ rc = get_rpmlib_caps(caps);
++#else
++# if HAVE_RPMGETRPMLIBPROVIDES
++ rc = get_rpmlib_caps_rpm_lt_4_4_3(caps);
++# endif
++#endif
++
++ if (rc) {
++ n_array_sort(caps);
++
++ } else {
++ n_array_free(caps);
++ caps = NULL;
++ }
+ return caps;
+ }
+
++
+ const char *pm_rpm_get_arch(void *pm_rpm)
+ {
+ pm_rpm = pm_rpm;
+Index: pm/rpm/pm_rpm.h
+===================================================================
+RCS file: /cvsroot/installer/poldek/pm/rpm/pm_rpm.h,v
+retrieving revision 1.11
+retrieving revision 1.12
+diff -u -r1.11 -r1.12
+--- pm/rpm/pm_rpm.h 24 Oct 2005 15:25:58 -0000 1.11
++++ pm/rpm/pm_rpm.h 21 Nov 2005 17:01:34 -0000 1.12
+@@ -10,6 +10,14 @@
+ # include <rpm/rpmts.h>
+ #endif
+
++/* RPMTAG_COPYRIGHT disappears in 4.4.3 but don't know from
++ when RPMTAG_LICENSE starts */
++#ifdef RPMTAG_COPYRIGHT
++# define PM_RPMTAG_LICENSE RPMTAG_COPYRIGHT
++#else
++# define PM_RPMTAG_LICENSE RPMTAG_LICENSE
++#endif
++
+ #include <trurl/trurl.h>
+ #include "poldek.h"
+ #include "pm/pm.h"
+Index: pkgu.c
+===================================================================
+RCS file: /cvsroot/installer/poldek/pkgu.c,v
+retrieving revision 1.30
+retrieving revision 1.31
+diff -u -r1.30 -r1.31
+--- pkgu.c 18 Oct 2005 16:25:12 -0000 1.30
++++ pkgu.c 21 Nov 2005 17:01:34 -0000 1.31
+@@ -11,7 +11,7 @@
+ */
+
+ /*
+- $Id$
++ $Id$
+ */
+
+ #include <ctype.h>
+@@ -337,7 +337,7 @@
+ }
+
+ pkgu->vendor = cp_tag(pkgu->_na, h, RPMTAG_VENDOR);
+- pkgu->license = cp_tag(pkgu->_na, h, RPMTAG_COPYRIGHT);
++ pkgu->license = cp_tag(pkgu->_na, h, PM_RPMTAG_LICENSE);
+ pkgu->url = cp_tag(pkgu->_na, h, RPMTAG_URL);
+ pkgu->distro = cp_tag(pkgu->_na, h, RPMTAG_DISTRIBUTION);
+ pkgu->buildhost = cp_tag(pkgu->_na, h, RPMTAG_BUILDHOST);
+@@ -370,7 +370,7 @@
+ headerAddEntry(hdr, RPMTAG_VENDOR, RPM_STRING_TYPE, pkgu->vendor, 1);
+
+ if (pkgu->license)
+- headerAddEntry(hdr, RPMTAG_COPYRIGHT, RPM_STRING_TYPE, pkgu->license, 1);
++ headerAddEntry(hdr, PM_RPMTAG_LICENSE, RPM_STRING_TYPE, pkgu->license, 1);
+
+ if (pkgu->url)
+ headerAddEntry(hdr, RPMTAG_URL, RPM_STRING_TYPE, pkgu->url, 1);
+Index: configure.in
+===================================================================
+RCS file: /cvsroot/installer/poldek/configure.in,v
+retrieving revision 1.121
+retrieving revision 1.122
+diff -u -r1.121 -r1.122
+--- configure.in 4 Nov 2005 17:44:21 -0000 1.121
++++ configure.in 21 Nov 2005 17:01:34 -0000 1.122
+@@ -293,9 +293,10 @@
+ LIBS="$LIBS -lbz2 -lrpmio"
+ fi
+
+-AC_CHECK_FUNCS(rpmGetRpmlibProvides,,
+- [AC_MSG_WARN("[poldek will not work fine with rpmlib\(...\) capabilities"])],
+- [$CONF_IN_LDFLAGS])
++AC_CHECK_FUNCS(rpmdsRpmlib,,
++ [ AC_CHECK_FUNCS(rpmGetRpmlibProvides,,
++ [AC_MSG_WARN(["poldek will not work fine with rpmlib\(...\) capabilities"])],
++ [$CONF_IN_LDFLAGS])], [$CONF_IN_LDFLAGS])
+
+
+ dnl metadata & xml2
================================================================
More information about the pld-cvs-commit
mailing list