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