poldek: poldek/configure.in, poldek/pkgset.c, poldek/pkgset-req.c, ...
mis
mis at pld-linux.org
Sun Jul 9 23:25:02 CEST 2006
Author: mis Date: Sun Jul 9 21:25:01 2006 GMT
Module: poldek Tag: HEAD
---- Log message:
- support for new rpm's internal capabilities: uname(), getconf(),cpuinfo() and sysinfo()
---- Files affected:
poldek/poldek:
configure.in (1.122 -> 1.123) , pkgset.c (1.86 -> 1.87) , pkgset-req.c (1.41 -> 1.42)
poldek/poldek/pm/rpm:
misc.c (1.6 -> 1.7)
---- Diffs:
================================================================
Index: poldek/poldek/configure.in
diff -u poldek/poldek/configure.in:1.122 poldek/poldek/configure.in:1.123
--- poldek/poldek/configure.in:1.122 Sat Jan 7 02:11:58 2006
+++ poldek/poldek/configure.in Sun Jul 9 23:24:56 2006
@@ -298,6 +298,12 @@
[AC_MSG_WARN(["poldek will not work fine with rpmlib\(...\) capabilities"])],
[$CONF_IN_LDFLAGS])], [$CONF_IN_LDFLAGS])
+AC_CHECK_FUNCS(rpmdsUname)
+AC_CHECK_FUNCS(rpmdsSysinfo)
+AC_CHECK_FUNCS(rpmdsGetconf)
+AC_CHECK_FUNCS(rpmdsCpuinfo)
+
+
dnl metadata & xml2
AC_ARG_WITH(xml-metadata,
================================================================
Index: poldek/poldek/pkgset.c
diff -u poldek/poldek/pkgset.c:1.86 poldek/poldek/pkgset.c:1.87
--- poldek/poldek/pkgset.c:1.86 Fri Jun 17 00:15:19 2005
+++ poldek/poldek/pkgset.c Sun Jul 9 23:24:56 2006
@@ -136,9 +136,13 @@
int pkgset_pmprovides(const struct pkgset *ps, const struct capreq *req)
{
struct capreq *cap;
-
+
if (ps->rpmcaps == NULL)
- return 1; /* no caps -> assume yes */
+ return 0; /* no caps -> assume NO */
+
+ /* internal caps have names like name(feature) */
+ if (!capreq_is_rpmlib(req) && strstr(capreq_name(req), "(") == NULL)
+ return 0;
cap = n_array_bsearch_ex(ps->rpmcaps, req,
(tn_fn_cmp)capreq_cmp_name);
================================================================
Index: poldek/poldek/pkgset-req.c
diff -u poldek/poldek/pkgset-req.c:1.41 poldek/poldek/pkgset-req.c:1.42
--- poldek/poldek/pkgset-req.c:1.41 Sat Jul 8 19:41:29 2006
+++ poldek/poldek/pkgset-req.c Sun Jul 9 23:24:56 2006
@@ -332,32 +332,25 @@
n_assert(0);
*/
- if (capreq_is_rpmlib(req)) {
- if (matched) {
- int i;
+ if (capreq_is_rpmlib(req) && matched) {
+ int i;
- for (i=0; i<*npkgs; i++) {
- if (strcmp((*suspkgs)[i]->name, "rpm") != 0) {
- logn(LOGERR, _("%s: provides rpmlib cap \"%s\""),
- pkg_snprintf_s((*suspkgs)[i]), reqname);
- matched = 0;
- }
+ for (i=0; i<*npkgs; i++) {
+ if (strcmp((*suspkgs)[i]->name, "rpm") != 0) {
+ logn(LOGERR, _("%s: provides rpmlib cap \"%s\""),
+ pkg_snprintf_s((*suspkgs)[i]), reqname);
+ matched = 0;
}
}
+
+ *suspkgs = NULL;
+ *npkgs = 0;
+ }
- if (pkgset_pmprovides(ps, req)) {
- matched = 1;
- capreq_set_satisfied(req);
- msg(4, " req %-35s --> PM_CAP\n", capreq_snprintf_s(req));
- }
-#if 0
-DUPA
- if (!matched && (ps->flags & (PSMODE_VERIFY | PSMODE_MKIDX))) {
- matched = 1;
- logn(LOGWARN, "%s: not found (poldek needs to be linked with newer"
- " rpmlib)\n", capreq_snprintf_s(req));
- }
-#endif
+ if (!matched && pkgset_pmprovides(ps, req)) {
+ matched = 1;
+ capreq_set_satisfied(req);
+ msg(4, " req %-35s --> PM_CAP\n", capreq_snprintf_s(req));
*suspkgs = NULL;
*npkgs = 0;
================================================================
Index: poldek/poldek/pm/rpm/misc.c
diff -u poldek/poldek/pm/rpm/misc.c:1.6 poldek/poldek/pm/rpm/misc.c:1.7
--- poldek/poldek/pm/rpm/misc.c:1.6 Sat Mar 18 17:32:15 2006
+++ poldek/poldek/pm/rpm/misc.c Sun Jul 9 23:24:56 2006
@@ -37,35 +37,72 @@
#include "pm/pm.h"
#if HAVE_RPMDSRPMLIB /* rpmdsRpmlib() => rpm >= 4.4.3 */
-static int get_rpmlib_caps(tn_array *caps)
+
+static int extract_rpmds(tn_array *caps, rpmds ds)
{
- rpmds ds = NULL;
-
- if (rpmdsRpmlib(&ds, NULL) != 0)
- return 0;
-
ds = rpmdsInit(ds);
while (rpmdsNext(ds) >= 0) {
const char *name, *evr;
- char tmp[256];
+ char tmp[256], *tmpptr;
struct capreq *cr;
- uint32_t flags;
+ uint32_t flags, crflags;
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)
+ if ((flags & RPMSENSE_EQUAL)) {
+ n_strncpy(tmp, evr, 128);
+ tmpptr = tmp;
+ crflags = REL_EQ;
+
+ } else { /* cap without version */
+ tmpptr = NULL;
+ crflags = 0;
+ }
+
+ cr = capreq_new_evr(name, tmpptr, crflags, 0);
+ if (cr) {
+ msgn(3, " - %s", capreq_snprintf_s(cr));
n_array_push(caps, cr);
+ }
}
ds = rpmdsFree(ds);
return n_array_size(caps);
}
+
+typedef int (*rpmcap_fn)(rpmds *ds, void *);
+
+static int get_rpmlib_caps(tn_array *caps)
+{
+ rpmds ds = NULL;
+ int i;
+ rpmcap_fn functions[] = {
+ rpmdsRpmlib,
+#ifdef HAVE_RPMDSCPUINFO
+ (rpmcap_fn)rpmdsCpuinfo,
+#endif
+#ifdef HAVE_RPMDSGETCONF
+ (rpmcap_fn)rpmdsGetconf,
+#endif
+#ifdef HAVE_RPMDSSYSINFO
+ (rpmcap_fn)rpmdsSysinfo,
+#endif
+#ifdef HAVE_RPMDSUNAME
+ (rpmcap_fn)rpmdsUname,
+#endif
+ NULL,
+ };
+
+ i = 0;
+ msgn(3, "Loading internal capabilities");
+ while (functions[i]) {
+ functions[i++](&ds, NULL);
+ }
+
+ return extract_rpmds(caps, ds);
+}
+
#endif /* HAVE_RPMDSRPMLIB */
#if HAVE_RPMGETRPMLIBPROVIDES /* rpmGetRpmlibProvides() => rpm < 4.4.3 */
================================================================
---- CVS-web:
http://cvs.pld-linux.org/poldek/poldek/configure.in?r1=1.122&r2=1.123&f=u
http://cvs.pld-linux.org/poldek/poldek/pkgset.c?r1=1.86&r2=1.87&f=u
http://cvs.pld-linux.org/poldek/poldek/pkgset-req.c?r1=1.41&r2=1.42&f=u
http://cvs.pld-linux.org/poldek/poldek/pm/rpm/misc.c?r1=1.6&r2=1.7&f=u
More information about the pld-cvs-commit
mailing list