[packages/poldek] - add rpm 5.4.x support

baggins baggins at pld-linux.org
Fri Sep 7 13:33:07 CEST 2012


commit 6b6024ceb5b79bff83e71c9d66911f01372b866c
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Fri Sep 7 13:17:58 2012 +0200

    - add rpm 5.4.x support

 poldek-rpm54.patch | 1153 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 poldek.spec        |    3 +
 2 files changed, 1156 insertions(+)
---
diff --git a/poldek.spec b/poldek.spec
index 4cf070e..bced157 100644
--- a/poldek.spec
+++ b/poldek.spec
@@ -46,6 +46,8 @@ Patch4:		%{name}-git.patch
 Patch5:		%{name}-am.patch
 Patch6:		https://bugs.launchpad.net/poldek/+bug/1031767/+attachment/3252805/+files/%{name}-ls-space-lp1031767.patch
 # Patch6-md5:	9ba0f7abdb2ba1051e1a396f9daec606
+Patch7:		https://bugs.launchpad.net/pld-linux/+bug/1042200/+attachment/3285885/+files/poldek-rpm54.patch
+# Patch7-md5:	128afb37934a3f12077fff12fddaa3ec
 URL:		http://poldek.pld-linux.org/
 BuildRequires:	autoconf
 BuildRequires:	automake
@@ -210,6 +212,7 @@ Moduły języka Python dla poldka.
 %patch4 -p1
 %patch5 -p1
 %patch6 -p1
+%patch7 -p1
 
 %{__rm} m4/libtool.m4 m4/lt*.m4
 
diff --git a/poldek-rpm54.patch b/poldek-rpm54.patch
new file mode 100644
index 0000000..ef20130
--- /dev/null
+++ b/poldek-rpm54.patch
@@ -0,0 +1,1153 @@
+From 8cf145343137ceee3a4355ab02e2160481efb5c1 Mon Sep 17 00:00:00 2001
+From: Marcin Banasiak <marcin.banasiak at gmail.com>
+Date: Wed, 29 Aug 2012 20:52:58 +0200
+Subject: [PATCH 1/5] Drop support for ancient rpm versions
+
+---
+ configure.ac           |   8 ++-
+ pm/rpm/pm_rpm.h        |   4 ++
+ pm/rpm/rpm.c           |   5 +-
+ pm/rpm/rpmdb_depdirs.c |   3 -
+ pm/rpm/rpmdb_it.c      | 164 ++++++++-----------------------------------------
+ pm/rpm/signature4.c    |  72 ----------------------
+ 6 files changed, 36 insertions(+), 220 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 64eac04..5f14b64 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -79,6 +79,7 @@ if test -n "$GCC"; then
+   )
+ fi
+ 
++PKG_PROG_PKG_CONFIG()
+ 
+ PKG_CHECK_MODULES(CHECK, check >= 0.9.4, have_check=yes, have_check=no)
+  
+@@ -196,7 +197,12 @@ AC_CHECK_HEADERS([sys/filio.h])
+ 
+ dnl RH rpm needs this
+ CPPFLAGS="-I/usr/include/rpm $CPPFLAGS"
+-AC_CHECK_HEADER([rpm/rpmlib.h],,AC_MSG_ERROR(["missing required rpmlib.h"]))
++AC_CHECK_HEADER([rpm/rpmdb.h],,AC_MSG_ERROR(["missing required rpmlib.h"]))
++
++AC_CHECK_TYPE([rpmmi],
++	      [AC_DEFINE([HAVE_RPMMI], 1, [rpm with database iterator])],
++	      [],
++	      [[#include <rpm/rpmtypes.h>]])
+ 
+ AC_MSG_CHECKING([for rpm 4.x])
+ #RPMDBI_PACKAGES
+diff --git a/pm/rpm/pm_rpm.h b/pm/rpm/pm_rpm.h
+index a34dd60..8c6a179 100644
+--- a/pm/rpm/pm_rpm.h
++++ b/pm/rpm/pm_rpm.h
+@@ -22,6 +22,10 @@
+ # include <rpm/rpmcb.h>
+ #endif
+ 
++#ifdef HAVE_RPMMI
++# include <rpm/rpmtypes.h>
++#endif
++
+ #if HAVE_RPMDSRPMLIB
+ # include <rpm/rpmds.h>
+ #endif
+diff --git a/pm/rpm/rpm.c b/pm/rpm/rpm.c
+index 512a8ea..73275af 100644
+--- a/pm/rpm/rpm.c
++++ b/pm/rpm/rpm.c
+@@ -253,14 +253,11 @@ char *pm_rpm_dbpath(void *pm_rpm, char *path, size_t size)
+ 
+ time_t pm_rpm_dbmtime(void *pm_rpm, const char *dbpath) 
+ {
+-    const char *file = "packages.rpm";
++    const char *file = "Packages";
+     char path[PATH_MAX];
+     struct stat st;
+ 
+     pm_rpm = pm_rpm;
+-#ifdef HAVE_RPM_4_0
+-    file = "Packages";
+-#endif
+     
+     snprintf(path, sizeof(path), "%s/%s", dbpath, file);
+      
+diff --git a/pm/rpm/rpmdb_depdirs.c b/pm/rpm/rpmdb_depdirs.c
+index 4898958..9eab1bf 100644
+--- a/pm/rpm/rpmdb_depdirs.c
++++ b/pm/rpm/rpmdb_depdirs.c
+@@ -76,10 +76,7 @@ int pm_rpm_dbdepdirs(void *pm_rpm, const char *rootdir, const char *dbpath,
+     return -1;
+ #endif    
+     
+-    index = "requirename.rpm";
+-#ifdef HAVE_RPM_4_0
+     index = "Requirename";
+-#endif
+ 
+ #ifdef HAVE_RPM_5
+     dbtype = DB_BTREE; /* XXX: should be detected at runtime */
+diff --git a/pm/rpm/rpmdb_it.c b/pm/rpm/rpmdb_it.c
+index 3578977..37c7ef2 100644
+--- a/pm/rpm/rpmdb_it.c
++++ b/pm/rpm/rpmdb_it.c
+@@ -10,10 +10,6 @@
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+ 
+-/*
+-  $Id$
+-*/
+-
+ #ifdef HAVE_CONFIG_H
+ # include "config.h"
+ #endif
+@@ -30,21 +26,16 @@
+ /* remeber! don't touch any member */
+ struct rpmdb_it {
+     int                  tag;
+-#ifdef HAVE_RPM_4_0
+-    rpmdbMatchIterator   mi;
++#ifdef HAVE_RPMMI
++    rpmmi                mi;
+ #else
+-    dbiIndexSet          matches;
+-    int                  i;
+-    int                  recno;
+-#endif
++    rpmdbMatchIterator   mi;
++#endif /* HAVE_RPMMI */
+     
+     struct pm_dbrec      dbrec;
+     rpmdb                db; 
+ };
+ 
+-
+-
+-#ifdef HAVE_RPM_4_0
+ static
+ int rpmdb_it_init(rpmdb db, struct rpmdb_it *it, int tag, const char *arg)
+ {
+@@ -94,154 +85,50 @@ int rpmdb_it_init(rpmdb db, struct rpmdb_it *it, int tag, const char *arg)
+             break;
+     }
+     
+-    
+     DBGF("%p, %p\n", it, db);
+     it->tag = tag;
+     it->db = db;
++#ifdef HAVE_RPMMI
++    it->mi = rpmmiInit(db, rpmtag, arg, argsize);
++    return rpmmiCount(it->mi);
++#else
+     it->mi = rpmdbInitIterator(db, rpmtag, arg, argsize);
+     return rpmdbGetIteratorCount(it->mi);
++#endif /* HAVE_RPMMI */
+ }
+ 
+-#else  /* HAVE_RPM_4_0 */
+-/* Ancient rpm3 */
+-static
+-int rpmdb_it_init(rpmdb db, struct rpmdb_it *it, int tag, const char *arg) 
+-{
+-    int rc, n;
+-    
+-    it->matches.count = 0;
+-    it->matches.recs = NULL;
+-    it->i = 0;
+-    it->recno = 0;
+-    it->db = db;
+-    it->dbrec.hdr = NULL;
+-    it->dbrec.recno = 0;
+-    it->tag = tag;
+-    
+-    switch (tag) {
+-        case PMTAG_RECNO:
+-            it->recno = rpmdbFirstRecNum(db);
+-            if (recno == 0)
+-                return 0;
+-            if (recno < 0)
+-                n_die("%d: invalid recno", recno);
+-            break;
+-            
+-        case PMTAG_NAME:
+-            rc = rpmdbFindPackage(db, arg, &it->matches);
+-            break;
+-            
+-        case PMTAG_FILE:
+-        case PMTAG_DIRNAME:
+-            rc = rpmdbFindByFile(db, arg, &it->matches);
+-            break;
+-
+-        case PMTAG_CAP:
+-            rc = rpmdbFindByProvides(db, arg, &it->matches);
+-            break;
+-            
+-        case PMTAG_REQ:
+-            rc = rpmdbFindByRequiredBy(db, arg, &it->matches);
+-            break;
+-            
+-        case PMTAG_CNFL:
+-            rc = rpmdbFindByConflicts(db, arg, &it->matches);
+-            break;
+-            
+-        case PMTAG_OBSL:
+-            n_die("missing feature"); /* don't remember in fact */
+-            rc = rpmdbFindByConflicts(db, arg, &it->matches);
+-            break;
+-            
+-        default:
+-            n_assert(0);
+-    }
+-    if (rc < 0)
+-        n_die("rpm database error");
+-    
+-    else if (rc != 0) {
+-        n = 0;
+-        it->matches.count = 0;
+-        
+-    } else if (rc == 0)
+-        n = it->matches.count;
+-
+-    return n;
+-}
+-#endif /* HAVE_RPM_4_0 */
+-
+-
+ static
+ void rpmdb_it_destroy(struct rpmdb_it *it) 
+ {
+-
+-#ifdef HAVE_RPM_4_0
++#ifdef HAVE_RPMMI
+     rpmdbFreeIterator(it->mi);
++#else
++    rpmmiFree(it->mi);
++#endif /* HAVE_RPMMI */
+     it->mi = NULL;
+     it->dbrec.hdr = NULL;
+     DBGF("%p, %p\n", it, it->db);
+-#else
+-    if (it->dbrec.hdr != NULL) {
+-        headerFree(it->dbrec.hdr);
+-        it->dbrec.hdr = NULL;
+-    }
+-    
+-    it->db = NULL;
+-    if (it->tag != PMTAG_RECNO)
+-        dbiFreeIndexRecord(it->matches);
+-    it->matches.count = 0;
+-    it->matches.recs = NULL;
+-#endif    
+ }
+ 
+ 
+ static
+ const struct pm_dbrec *rpmdb_it_get(struct rpmdb_it *it)
+ {
+-#ifdef HAVE_RPM_4_0
+-    it->dbrec.hdr = rpmdbNextIterator(it->mi);
+-    DBGF("%p, %p\n", it, it->db);
++#ifdef HAVE_RPMMI
++    it->dbrec.hdr = rpmmiNext(it->mi);
+     
+     if (it->dbrec.hdr == NULL)
+         return NULL;
+ 
+-    it->dbrec.recno = rpmdbGetIteratorOffset(it->mi);
++    it->dbrec.recno = rpmmiInstance(it->mi);
+ #else
++    it->dbrec.hdr = rpmdbNextIterator(it->mi);
+     
+-    if (it->tag == PMTAG_RECNO) {
+-        if (it->recno <= 0)
+-            return NULL;
+-        
+-        n_assert(it->recno);
+-        it->dbrec.recno = it->recno;
+-        it->dbrec.hdr = rpmdbGetRecord(it->db, it->recno);
+-        it->recno = rpmdbNextRecNum(db, it->recno);
+-        it->i++;
+-        return &it->dbrec;
+-    }
+-
+-    if (it->i == it->matches.count) {
+-        if (it->dbrec.hdr != NULL) 
+-            headerFree(it->dbrec.hdr);
+-        it->dbrec.hdr = NULL;
+-        it->i++;
++    if (it->dbrec.hdr == NULL)
+         return NULL;
+-    }
+ 
+-    if (it->i > it->matches.count)
+-        n_die("rpm database error?");
+-
+-    if (it->dbrec.hdr != NULL)
+-        headerFree(it->dbrec.hdr);
+-    
+-    it->dbrec.recno = it->matches.recs[it->i].recOffset;
+-    it->dbrec.hdr = rpmdbGetRecord(it->db, it->dbrec.recno);
+-    it->i++;
+-    
+-    if (it->dbrec.hdr == NULL)
+-        n_die("rpm database error?");
+-    
+-#endif /* HAVE_RPM_4_0 */
++    it->dbrec.recno = rpmdbGetIteratorOffset(it->mi);
++#endif /* HAVE_RPMMI */
+ 
+     return &it->dbrec;
+ }
+@@ -249,14 +136,11 @@ const struct pm_dbrec *rpmdb_it_get(struct rpmdb_it *it)
+ static
+ int rpmdb_it_get_count(struct rpmdb_it *it)
+ {
+-#ifdef HAVE_RPM_4_0
+-    return rpmdbGetIteratorCount(it->mi);
++#ifdef HAVE_RPMMI
++    return rpmmiCount(it->mi);
+ #else
+-    if (it->tag == PMTAG_RECNO)
+-        return it->recno > 0 ? 1000:0; /* TODO howto do dbcount() with rpm3 */
+-        
+-    return it->matches.count;
+-#endif /* HAVE_RPM_4_0 */
++    return rpmdbGetIteratorCount(it->mi);
++#endif /* HAVE_RPMMI */
+ }
+ 
+ static 
+diff --git a/pm/rpm/signature4.c b/pm/rpm/signature4.c
+index e69970a..7321e3c 100644
+--- a/pm/rpm/signature4.c
++++ b/pm/rpm/signature4.c
+@@ -10,10 +10,6 @@
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+ 
+-/*
+-  $Id$
+-*/
+-
+ #ifdef HAVE_CONFIG_H
+ # include "config.h"
+ #endif
+@@ -66,17 +62,6 @@ static int rpm_read_signature(FD_t fd, Header *sighp, int sig_type)
+     return 0;
+ }
+     
+-/* rpmlib's rpmCheckSig reports success when GPG signature is missing,
+-   so it is useless for real sig verification */
+-#if !defined HAVE_RPM_4_0
+-static int rpm_signatures(const char *path, unsigned *signature_flags, FD_t *fd)
+-{
+-    *signature_flags = VRFYSIG_DGST;
+-    path = path;
+-    return 1;
+-}
+-
+-#else  /* 4.x series  */
+ static int rpm_signatures(const char *path, unsigned *signature_flags, FD_t *fd) 
+ {
+     unsigned        flags;
+@@ -161,7 +146,6 @@ static int rpm_signatures(const char *path, unsigned *signature_flags, FD_t *fd)
+     *signature_flags = flags;
+     return 1;
+ }
+-#endif 
+ 
+ 
+ 
+@@ -279,7 +263,6 @@ int do_verify_signature(const char *path, unsigned flags)
+ #endif
+ 
+ 
+-#ifdef HAVE_RPM_4_0
+ static
+ int do_pm_rpm_verify_signature(void *pm_rpm, const char *path, unsigned flags) 
+ {
+@@ -303,61 +286,6 @@ int do_pm_rpm_verify_signature(void *pm_rpm, const char *path, unsigned flags)
+     return do_verify_signature(path, rpmflags);
+ }
+ 
+-#else  /* HAVE_RPMCHECKSIG */
+-extern int pm_rpm_execrpm(const char *cmd, char *const argv[],
+-                          int ontty, int verbose_level);
+-static
+-int do_pm_rpm_verify_signature(void *pm_rpm, const char *path, unsigned flags) 
+-{
+-    struct pm_rpm *pm = pm_rpm;
+-    char **argv;
+-    char *cmd;
+-    int i, n, nopts = 0;
+-
+-    pm_rpm_setup_commands(pm);
+-    
+-    n = 32;
+-    argv = alloca((n + 1) * sizeof(*argv));
+-    argv[n] = NULL;
+-    n = 0;
+-    
+-    cmd = pm->rpm;
+-    argv[n++] = n_basenam(pm->rpm);
+-    argv[n++] = "-K";
+-
+-    nopts = n;
+-    
+-    if ((flags & PKGVERIFY_GPG) == 0)
+-        argv[n++] = "--nogpg";
+-
+-    if ((flags & PKGVERIFY_PGP) == 0)
+-        argv[n++] = "--nopgp";
+-    
+-    
+-    if ((flags & PKGVERIFY_MD) == 0) {
+-        argv[n++] = "--nomd5";
+-    }
+-    n_assert(n > nopts);        /* any PKGVERIFY_* given? */
+-    
+-    argv[n++] = (char*)path;
+-    nopts = n;
+-    argv[n++] = NULL;
+-    
+-    if (verbose > 1) {
+-        char buf[1024], *p;
+-        p = buf;
+-        
+-        for (i=0; i < nopts; i++) 
+-            p += n_snprintf(p, &buf[sizeof(buf) - 1] - p, " %s", argv[i]);
+-        *p = '\0';
+-        msgn(1, _("Executing%s..."), buf);
+-    }
+-
+-    return pm_rpm_execrpm(cmd, argv, 0, 4) == 0;
+-}
+-
+-#endif /* HAVE_RPMCHECKSIG */
+-
+ extern int pm_rpm_verbose;
+ int pm_rpm_verify_signature(void *pm_rpm, const char *path, unsigned flags) 
+ {
+-- 
+1.7.11.2
+
+
+From dceacab14dec5f5f8a2cfeb426edee7191b0f578 Mon Sep 17 00:00:00 2001
+From: Marcin Banasiak <marcin.banasiak at gmail.com>
+Date: Fri, 31 Aug 2012 14:27:41 +0200
+Subject: [PATCH 2/5] Fix build with rpm 5.4 (lp#1042200)
+
+Currently poldek builds with rpm 5.4 and seems to work, but is not well
+tested and some regressions may still occur.
+---
+ pkgdir/dir/dir.c    |  1 +
+ pkgroup.c           |  4 ----
+ pm/rpm/misc.c       | 17 +++++++++++++++--
+ pm/rpm/pm_rpm.h     | 22 ++++++++++++++++------
+ pm/rpm/rpm_pkg_ld.c |  1 -
+ pm/rpm/rpmdb_it.c   |  4 ++--
+ pm/rpm/rpmhdr.c     | 15 +++++++++++----
+ pm/rpm/rpmvercmp.c  | 29 +++++++++++++++++++++++++++--
+ pm/rpm/signature5.c |  6 +++---
+ 9 files changed, 75 insertions(+), 24 deletions(-)
+
+diff --git a/pkgdir/dir/dir.c b/pkgdir/dir/dir.c
+index cfe16cb..69d9eef 100644
+--- a/pkgdir/dir/dir.c
++++ b/pkgdir/dir/dir.c
+@@ -18,6 +18,7 @@
+ # include "config.h"
+ #endif
+ 
++#include <dirent.h>
+ #include <limits.h>
+ #include <stdint.h>
+ #include <stdio.h>
+diff --git a/pkgroup.c b/pkgroup.c
+index 21b29c5..62f124e 100644
+--- a/pkgroup.c
++++ b/pkgroup.c
+@@ -6,9 +6,6 @@
+   the Free Software Foundation (see file COPYING for details).
+ */
+ 
+-/*
+-  $Id$
+-*/
+ #ifdef HAVE_CONFIG_H
+ # include "config.h"
+ #endif
+@@ -19,7 +16,6 @@
+ #include <string.h>
+ 
+ #include <trurl/trurl.h>
+-#include <rpm/rpmlib.h>
+ 
+ #define ENABLE_TRACE 0
+ 
+diff --git a/pm/rpm/misc.c b/pm/rpm/misc.c
+index 613ac1b..89ef808 100644
+--- a/pm/rpm/misc.c
++++ b/pm/rpm/misc.c
+@@ -21,18 +21,25 @@
+ #include <ctype.h>
+ #include <stdint.h>
+ #include <string.h>
++#include <stdio.h>
+ #include <time.h> /* rpmts.h with defined _RPMTS_INTERNAL needs ctime() */
+ 
+ #include <trurl/nassert.h>
+ #include <trurl/nstr.h>
+ 
+-#include <rpm/rpmlib.h>
++#ifdef HAVE_RPM_5
++# include <rpm/rpmtypes.h>
++# include <rpm/rpmtag.h>
++# include <rpm/rpmio.h>
++#else
++# include <rpm/rpmlib.h>
++#endif
+ #include <rpm/rpmte.h>
+ #if HAVE_RPM_4_1
+ # define _RPMPRCO_INTERNAL
+ # include <rpm/rpmds.h>
+ #endif
+-#define _RPMTS_INTERNAL
++//#define _RPMTS_INTERNAL
+ #include <rpm/rpmts.h>
+ 
+ #include "capreq.h"
+@@ -224,6 +231,8 @@ static int rpmioaccess_satisfies(const struct capreq *req)
+     return rc;
+ }
+ 
++
++#if 0
+ static int rpmdiskspace_satisfies(const struct capreq *req)
+ {
+     const char *name = NULL;
+@@ -307,6 +316,8 @@ static int rpmdiskspace_satisfies(const struct capreq *req)
+     
+     return rc;
+ }
++#endif
++
+ 
+ int pm_rpm_satisfies(void *pm_rpm, const struct capreq *req)
+ {
+@@ -320,8 +331,10 @@ int pm_rpm_satisfies(void *pm_rpm, const struct capreq *req)
+     if (rpmioaccess_satisfies(req))
+         return 1;
+ 
++#if 0
+     if (rpmdiskspace_satisfies(req))
+ 	return 1;
++#endif
+ 
+     if (pm->caps == NULL)
+         if ((pm->caps = load_internal_caps(pm_rpm)) == NULL)
+diff --git a/pm/rpm/pm_rpm.h b/pm/rpm/pm_rpm.h
+index 8c6a179..2494bf0 100644
+--- a/pm/rpm/pm_rpm.h
++++ b/pm/rpm/pm_rpm.h
+@@ -16,16 +16,21 @@
+ #include <sys/time.h>           /* timeval */
+ 
+ #define _RPMPRCO_INTERNAL 1 /* see pm_rpmdsSysinfo */
+-#include <rpm/rpmlib.h>
++
++#ifdef HAVE_RPM_5
++# include <rpm/rpmtypes.h>
++# include <rpm/rpmiotypes.h>
++# include <rpm/rpmtag.h>
++# include <rpm/pkgio.h>
++#else
++# include <rpm/rpmlib.h>
++# include <rpm/rpmurl.h>
++#endif /* HAVE_RPM_5 */
+ 
+ #ifdef HAVE_RPM_RPMCB_H
+ # include <rpm/rpmcb.h>
+ #endif
+ 
+-#ifdef HAVE_RPMMI
+-# include <rpm/rpmtypes.h>
+-#endif
+-
+ #if HAVE_RPMDSRPMLIB
+ # include <rpm/rpmds.h>
+ #endif
+@@ -45,7 +50,6 @@
+ # include <rpm/rpmdb.h>
+ #endif
+ 
+-#include <rpm/rpmurl.h>
+ #include <rpm/rpmmacro.h>
+ 
+ #ifdef RPM_MAJOR_VERSION
+@@ -56,6 +60,12 @@
+ # if PM_RPMVER(RPM_FORMAT_VERSION,RPM_MAJOR_VERSION,RPM_MINOR_VERSION) >= PM_RPMVER(5,0,0)
+ #  define HAVE_RPM_VERSION_GE_5 1
+ # endif
++#else
++# include <rpm/rpmversion.h>
++# if defined(RPMLIB_VERSION) && RPMLIB_VERSION >= RPMLIB_VERSION_ENCODE(5,0,r,0,0,_)
++#  define HAVE_RPM_VERSION_GE_4_4_8 1
++#  define HAVE_RPM_VERSION_GE_5 1
++# endif
+ #endif 
+ 
+ 
+diff --git a/pm/rpm/rpm_pkg_ld.c b/pm/rpm/rpm_pkg_ld.c
+index dbed6f6..8423a62 100644
+--- a/pm/rpm/rpm_pkg_ld.c
++++ b/pm/rpm/rpm_pkg_ld.c
+@@ -21,7 +21,6 @@
+ 
+ #ifdef HAVE_RPM_RPMEVR_H
+ # define _RPMEVR_INTERNAL 1
+-# include <rpm/rpmevr.h>
+ #endif
+ 
+ #include "i18n.h"
+diff --git a/pm/rpm/rpmdb_it.c b/pm/rpm/rpmdb_it.c
+index 37c7ef2..059db46 100644
+--- a/pm/rpm/rpmdb_it.c
++++ b/pm/rpm/rpmdb_it.c
+@@ -101,9 +101,9 @@ static
+ void rpmdb_it_destroy(struct rpmdb_it *it) 
+ {
+ #ifdef HAVE_RPMMI
+-    rpmdbFreeIterator(it->mi);
+-#else
+     rpmmiFree(it->mi);
++#else
++    rpmdbFreeIterator(it->mi);
+ #endif /* HAVE_RPMMI */
+     it->mi = NULL;
+     it->dbrec.hdr = NULL;
+diff --git a/pm/rpm/rpmhdr.c b/pm/rpm/rpmhdr.c
+index 360a6d5..5989553 100644
+--- a/pm/rpm/rpmhdr.c
++++ b/pm/rpm/rpmhdr.c
+@@ -29,12 +29,14 @@
+ #include "pm_rpm.h"
+ 
+ #if defined(HAVE_RPM_4_0_4) || defined(HAVE_RPM_VERSION_GE_4_4_8)           /* missing prototypes in public headers */
++#ifndef HAVE_RPM_5
+ int headerGetRawEntry(Header h, int_32 tag,
+                       /*@null@*/ /*@out@*/ hTYP_t type,
+                       /*@null@*/ /*@out@*/ hPTR_t * p, 
+                       /*@null@*/ /*@out@*/ hCNT_t c);
+ char ** headerGetLangs(Header h);
+ #endif
++#endif
+ 
+ 
+ int pm_rpmhdr_get_string(Header h, int32_t tag, char *value, int size)
+@@ -122,8 +124,9 @@ int pm_rpmhdr_get_raw_entry(Header h, int32_t tag, void *buf, int32_t *cnt)
+         return 0;
+     }
+ #endif
+-    
+-    if (tag == RPMTAG_GROUP && type == RPM_STRING_TYPE) { /* build by old rpm */
++
++#ifndef HAVE_RPM_5
++    if (tag == RPMTAG_GROUP && type == RPM_STRING_TYPE) { // build by old rpm
+         char **g;
+ 	
+         n_assert(*cnt == 1);
+@@ -133,7 +136,8 @@ int pm_rpmhdr_get_raw_entry(Header h, int32_t tag, void *buf, int32_t *cnt)
+         g[1] = NULL;
+         *(char ***)buf = g;
+     }
+-    
++#endif
++
+     DBGF("%d type=%d, cnt=%d\n", tag, type, *cnt);
+     return 1;
+ }
+@@ -147,7 +151,10 @@ int pm_rpmhdr_loadfdt(FD_t fdt, Header *hdr, const char *path)
+ #else 
+     rpmRC rpmrc;
+     rpmts ts = rpmtsCreate();
+-    rpmtsSetVSFlags(ts, _RPMVSF_NODIGESTS | _RPMVSF_NOSIGNATURES);
++    rpmtsSetVSFlags(ts, RPMVSF_NOSHA1HEADER | RPMVSF_NOMD5HEADER |
++                        RPMVSF_NOSHA1 | RPMVSF_NOMD5 |
++                        RPMVSF_NODSAHEADER | RPMVSF_NORSAHEADER |
++                        RPMVSF_NODSA | RPMVSF_NODSA);
+     rpmrc = rpmReadPackageFile(ts, fdt, path, hdr);
+     switch (rpmrc) {
+         case RPMRC_NOTTRUSTED:
+diff --git a/pm/rpm/rpmvercmp.c b/pm/rpm/rpmvercmp.c
+index c40d903..968489a 100644
+--- a/pm/rpm/rpmvercmp.c
++++ b/pm/rpm/rpmvercmp.c
+@@ -1,13 +1,32 @@
++/*
++  Copyright (C) 2000 - 2008 Pawel A. Gajda <mis at pld-linux.org>
++  Copyright (C) 2010 - 2012 Marcin Banasiak <marcin.banasiak at gmail.com>
++
++  This program is free software; you can redistribute it and/or modify
++  it under the terms of the GNU General Public License, version 2 as
++  published by the Free Software Foundation (see file COPYING for details).
++
++  You should have received a copy of the GNU General Public License along
++  with this program; if not, write to the Free Software Foundation, Inc.,
++  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++*/
++
+ #ifdef HAVE_CONFIG_H
+ # include "config.h"
+ #endif 
+ 
++#include <stdint.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ 
++#ifdef HAVE_RPM_5
++# include <rpm/rpmtag.h>
++#endif
++
+ #define _RPMEVR_INTERNAL
+ #include <rpm/rpmevr.h>
+ 
++#ifndef HAVE_RPM_5
+ static void parse(const char *evrstr, EVR_t evr)
+ {
+     rpmEVRparse(evrstr, evr);
+@@ -20,6 +39,7 @@ static void parse(const char *evrstr, EVR_t evr)
+     if (evr->R == NULL)
+ 	evr->R = "0";
+ }
++#endif
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -43,10 +63,15 @@ int main(int argc, char *argv[])
+ 
+     evr1 = malloc(sizeof(struct EVR_s));
+     evr2 = malloc(sizeof(struct EVR_s));
+-    
++
++#ifdef HAVE_RPM_5    
++    rpmEVRparse(v1, evr1);
++    rpmEVRparse(v2, evr2);
++#else
+     parse(v1, evr1);
+     parse(v2, evr2);
+-    
++#endif
++
+     cmprc = rpmEVRcompare(evr1, evr2);
+     
+     printf("%s %s %s\n", v1, cmprc == 0 ?  "==" : cmprc > 0 ? ">" : "<", v2);
+diff --git a/pm/rpm/signature5.c b/pm/rpm/signature5.c
+index e954fa5..ac1f9e4 100644
+--- a/pm/rpm/signature5.c
++++ b/pm/rpm/signature5.c
+@@ -18,7 +18,7 @@
+ # include "config.h"
+ #endif
+ 
+-#ifndef HAVE_RPMPKGREAD          /* rpm 5.x */
++#ifndef HAVE_RPM_5          /* rpm 5.x */
+ # error "not rpm 5.x"
+ #endif
+ 
+@@ -31,10 +31,10 @@
+ #include <sys/stat.h>
+ #include <fcntl.h>
+ 
++#include <rpm/rpmtypes.h>
++#include <rpm/rpmtag.h>
+ #include <rpm/rpmcb.h>
+-#include <rpm/rpmlib.h>
+ #include <rpm/rpmio.h>
+-#include <rpm/rpmurl.h>
+ #include <rpm/rpmmacro.h>
+ 
+ #include <rpm/rpmts.h>
+-- 
+1.7.11.2
+
+
+From 9e4fe82da2df9b43b22a2bf36f2da69bb3238e87 Mon Sep 17 00:00:00 2001
+From: Marcin Banasiak <marcin.banasiak at gmail.com>
+Date: Fri, 31 Aug 2012 14:44:09 +0200
+Subject: [PATCH 3/5] Drop support for diskspace()
+
+It was not a good idea to add support for diskspace() dependency in
+poldek, which, I think, is designed for BuildRequires in spec files.
+Package install size can be measured using RPMTAG_SIZE, so I see no
+point in using diskspace() for this purpose.
+---
+ pm/rpm/misc.c | 102 +---------------------------------------------------------
+ 1 file changed, 1 insertion(+), 101 deletions(-)
+
+diff --git a/pm/rpm/misc.c b/pm/rpm/misc.c
+index 89ef808..8a5c1bf 100644
+--- a/pm/rpm/misc.c
++++ b/pm/rpm/misc.c
+@@ -10,10 +10,6 @@
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+ 
+-/*
+-  $Id$
+-*/
+-
+ #ifdef HAVE_CONFIG_H
+ # include "config.h"
+ #endif
+@@ -22,7 +18,6 @@
+ #include <stdint.h>
+ #include <string.h>
+ #include <stdio.h>
+-#include <time.h> /* rpmts.h with defined _RPMTS_INTERNAL needs ctime() */
+ 
+ #include <trurl/nassert.h>
+ #include <trurl/nstr.h>
+@@ -34,13 +29,11 @@
+ #else
+ # include <rpm/rpmlib.h>
+ #endif
+-#include <rpm/rpmte.h>
++
+ #if HAVE_RPM_4_1
+ # define _RPMPRCO_INTERNAL
+ # include <rpm/rpmds.h>
+ #endif
+-//#define _RPMTS_INTERNAL
+-#include <rpm/rpmts.h>
+ 
+ #include "capreq.h"
+ #include "i18n.h"
+@@ -231,94 +224,6 @@ static int rpmioaccess_satisfies(const struct capreq *req)
+     return rc;
+ }
+ 
+-
+-#if 0
+-static int rpmdiskspace_satisfies(const struct capreq *req)
+-{
+-    const char *name = NULL;
+-    char *s, *e;
+-    int rc = 0;
+-    
+-    name = capreq_name(req);
+-        
+-    if (strncmp(name, "diskspace(", sizeof("diskspace(")-1) == 0 &&
+-	(e = strchr(name, ')')) != NULL) {
+-	const char **fs = NULL;
+-	char path[PATH_MAX];
+-	rpmts ts;
+-	rpmDiskSpaceInfo dsi = NULL;
+-	int nfs = 0, pathlen, longest = 0;
+-	
+-	/* extract path */
+-	s = strchr(name, '(');
+-	n_strncpy(path, s+1, e-s);
+-	pathlen = strlen(path);
+-	
+-	ts = rpmtsCreate();
+-	
+-	/* code copied from lib/depends.c */
+-	rpmtsInitDSI(ts);
+-	fs = ts->filesystems;
+-	nfs = ts->filesystemCount;
+-	
+-	if (fs) {
+-	    int i;
+-	    
+-	    for (i = 0; i < nfs; i++) {
+-		int fslen = strlen(fs[i]);
+-		
+-		if (fslen > pathlen)
+-		    continue;
+-		
+-		if (strncmp(fs[i], path, fslen))
+-		    continue;
+-		
+-		if (fslen > 1 && path[fslen] != '/' && path[fslen] != '\0')
+-		    continue;
+-		
+-		if (fslen < longest)
+-		    continue;
+-		
+-		longest = fslen;
+-		dsi = ts->dsi + i;
+-	    }
+-	    
+-	    if (dsi) {
+-		char *end = NULL;
+-		long long needed = strtoll(capreq_ver(req), &end, 0);		
+-		int x;
+-		
+-		if (end && *end) {
+-		    if (strchr("Gg", end[0]) && strchr("Bb", end[1]) && !end[2])
+-			needed *= 1024 * 1024 * 1024;
+-		    if (strchr("Mm", end[0]) && strchr("Bb", end[1]) && !end[2])
+-			needed *= 1024 * 1024;
+-		    if (strchr("Kk", end[0]) && strchr("Bb", end[1]) && !end[2])
+-			needed *= 1024;
+-		} else {
+-		    /* assume Mb if no units given */
+-		    needed *= 1024 * 1024;
+-		}
+-
+-		needed = BLOCK_ROUND(needed, dsi->f_bsize);
+-		x = (dsi->f_bavail - needed);
+-
+-		if ((req->cr_relflags & REL_LT) && x < 0)
+-		    rc = 1;
+-		else if ((req->cr_relflags & REL_GT) && x > 0)
+-		    rc = 1;
+-		else if ((req->cr_relflags & REL_EQ) && x == 0)
+-		    rc = 1;
+-	    }
+-	}	
+-	rpmtsFree(ts);
+-    }
+-    
+-    return rc;
+-}
+-#endif
+-
+-
+ int pm_rpm_satisfies(void *pm_rpm, const struct capreq *req)
+ {
+     struct pm_rpm *pm = pm_rpm;
+@@ -331,11 +236,6 @@ int pm_rpm_satisfies(void *pm_rpm, const struct capreq *req)
+     if (rpmioaccess_satisfies(req))
+         return 1;
+ 
+-#if 0
+-    if (rpmdiskspace_satisfies(req))
+-	return 1;
+-#endif
+-
+     if (pm->caps == NULL)
+         if ((pm->caps = load_internal_caps(pm_rpm)) == NULL)
+             return 0;
+-- 
+1.7.11.2
+
+
+From ec43fec423b9e577d7b5698185fb3b993dab57ed Mon Sep 17 00:00:00 2001
+From: Marcin Banasiak <marcin.banasiak at gmail.com>
+Date: Fri, 31 Aug 2012 15:48:52 +0200
+Subject: [PATCH 4/5] Adjust autogen.sh and make snap for git
+
+---
+ Makefile.extra | 26 ++++++++++----------------
+ autogen.sh     | 13 +++----------
+ 2 files changed, 13 insertions(+), 26 deletions(-)
+
+diff --git a/Makefile.extra b/Makefile.extra
+index 2c97511..9debaa1 100644
+--- a/Makefile.extra
++++ b/Makefile.extra
+@@ -1,17 +1,11 @@
+-# $Id$
+-
+ PROJ_DIR=$(shell pwd)
+ 
+ copylibs:
+-	./getlib.sh trurlib copy
+-	./getlib.sh tndb copy
+-
+-removelibs:
+-	./getlib.sh trurlib link
+-	./getlib.sh tndb link
++	git submodule init
++	git submodule update
+ 
+-tarball: copylibs dist removelibs
+-tarball-bz2: copylibs dist-bzip2 removelibs
++tarball: copylibs dist
++tarball-bz2: copylibs dist-bzip2
+ 
+ rpm-package: tarball-bz2
+ 	rpmbuild -tb $(distdir).tar.bz2
+@@ -50,21 +44,21 @@ backup:
+ arch : mclean backup 
+ 
+ POTFILES_in:
+-	-rm -f poldek-cvs*
++	-rm -f poldek-git*
+ 	-find . -type f -name \*.c | egrep -v '(poldek-.*/|Cellar/|intl/|trurlib/|tndb/|python/|tests/|conf_sections.c)'  | sed 's|^\./||' | LC_ALL=C sort > po/POTFILES.in
+ 
+ misarch: mclean
+ 	$(MAKE) -C . backup cparch=1 backupdir=/z
+ 
+ snap: tarball-bz2
+-	@dts=`date +%Y%m%d.%H` && rm -rf $(PACKAGE)-cvs$$dts* && \
++	@dts=`date +%Y%m%d.%H` && rm -rf $(PACKAGE)-git$$dts* && \
+ 	tar xpjf $(distdir).tar.bz2 && \
+ 	echo "$$dts" > $(distdir)/0_THIS_IS_SNAPSHOT && \
+         perl -pi -e "s/VERSION_STATUS=.+$$/VERSION_STATUS=\"snap$$dts\"/" $(distdir)/configure $(distdir)/configure.in; \
+-	mv -f $(distdir) $(PACKAGE)-$(VERSION)-cvs$$dts && \
+-	tar cpjf $(PACKAGE)-$(VERSION)-cvs$$dts.tar.bz2 $(PACKAGE)-$(VERSION)-cvs$$dts && \
+-	rm -rf $(PACKAGE)-$(VERSION)-cvs$$dts && \
+-	echo "$(PACKAGE)-$(VERSION)-cvs$$dts.tar.bz2"
++	mv -f $(distdir) $(PACKAGE)-$(VERSION)-git$$dts && \
++	tar cpjf $(PACKAGE)-$(VERSION)-git$$dts.tar.bz2 $(PACKAGE)-$(VERSION)-git$$dts && \
++	rm -rf $(PACKAGE)-$(VERSION)-git$$dts && \
++	echo "$(PACKAGE)-$(VERSION)-git$$dts.tar.bz2"
+ 
+ snap-rpm-package: snap
+ 		dts=`date +%Y%m%d.%H` && echo $$dts && ls -l $(PACKAGE)-$(VERSION)-cvs$$dts.tar.bz2 &&\
+diff --git a/autogen.sh b/autogen.sh
+index 6ec65b6..7248be0 100755
+--- a/autogen.sh
++++ b/autogen.sh
+@@ -1,5 +1,4 @@
+ #!/bin/sh
+-# $Id$
+ 
+ if [ ! -f capreq.h ]; then
+     cd `dirname $0`;
+@@ -19,16 +18,10 @@ runcmd () {
+ }
+ 
+ CONFOPTS="--enable-maintainer-mode --enable-compile-warnings"
+-
+-getlib_mode="link"
+-if [ -n "$1" -a "$1" = "makedist" ]; then
+-    rm -f trurlib tndb
+-    getlib_mode="cp"
+-    shift
+-fi
+ CONFOPTS="$CONFOPTS $@"
+-runcmd ./getlib.sh trurlib $getlib_mode
+-runcmd ./getlib.sh tndb    $getlib_mode
++
++runcmd git submodule init
++runcmd git submodule update
+ 
+ # generate po/POTFILES.in
+ make -f Makefile.extra POTFILES_in
+-- 
+1.7.11.2
+
+
+From c26ae4cfeb59d6529e8c8a0b545f88811ca14c58 Mon Sep 17 00:00:00 2001
+From: Marcin Banasiak <marcin.banasiak at gmail.com>
+Date: Fri, 31 Aug 2012 16:31:48 +0200
+Subject: [PATCH 5/5] rpm 5.x has RPMTAG_* in rpmtag.h
+
+---
+ configure.ac | 65 +++++++++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 38 insertions(+), 27 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 5f14b64..1519149 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -197,21 +197,15 @@ AC_CHECK_HEADERS([sys/filio.h])
+ 
+ dnl RH rpm needs this
+ CPPFLAGS="-I/usr/include/rpm $CPPFLAGS"
+-AC_CHECK_HEADER([rpm/rpmdb.h],,AC_MSG_ERROR(["missing required rpmlib.h"]))
+-
+-AC_CHECK_TYPE([rpmmi],
+-	      [AC_DEFINE([HAVE_RPMMI], 1, [rpm with database iterator])],
+-	      [],
+-	      [[#include <rpm/rpmtypes.h>]])
++AC_CHECK_HEADER([rpm/rpmdb.h], [], AC_MSG_ERROR(["missing required rpmdb.h"]))
+ 
+ AC_MSG_CHECKING([for rpm 4.x])
+-#RPMDBI_PACKAGES
+ AC_EGREP_CPP(yes,
+-     [#include <rpm/rpmlib.h>
+-      #ifdef RPMDBI_PACKAGES
+-       yes
+-      #endif
+-     ], is_rpm4=yes, is_rpm4=no)
++    [#include <rpm/rpmlib.h>
++     #ifdef RPMDBI_PACKAGES
++	yes
++     #endif
++    ], is_rpm4=yes, is_rpm4=no)
+ 
+ if test "${is_rpm4}." = "no." ; then
+ 	AC_MSG_RESULT(no)
+@@ -242,17 +236,36 @@ else
+ 		[ #include <rpm/rpmlib.h>
+ 		], have_tag_pubkeys=yes, have_tag_pubkeys=no)
+ 
+-	if test "${have_tag_pubkeys}." = "yes." ; then
+-		AC_DEFINE([HAVE_RPMTAG_PUBKEYS],1,["rpm with RPMTAG_PUBKEYS"])
+-	fi
+-
+         AC_EGREP_CPP(RPMTAG_SUGGESTS,
+ 		[ #include <rpm/rpmlib.h>
+ 		], have_tag_suggests=yes, have_tag_suggests=no)
++fi
+ 
+-	if test "${have_tag_suggests}." = "yes." ; then
+-		AC_DEFINE([HAVE_RPMTAG_SUGGESTS],1,["rpm with RPMTAG_SUGGESTS support"])
+-	fi
++AC_MSG_CHECKING([for rpm 5.x])
++
++PKG_CHECK_EXISTS([rpm >= 5.0], [is_rpm5=yes], [is_rpm5=no])
++
++if test "${is_rpm5}." = "yes."; then
++    AC_MSG_RESULT(yes)
++    AC_EGREP_CPP(RPMTAG_PUBKEYS,
++    		 [ #include <rpm/rpmtag.h>
++    		 ], have_tag_pubkeys=yes, have_tag_pubkeys=no)
++
++    AC_EGREP_CPP(RPMTAG_SUGGESTS,
++		 [ #include <rpm/rpmtag.h>
++		 ], have_tag_suggests=yes, have_tag_suggests=no)
++
++    AC_DEFINE([HAVE_RPM_5], [1], [])
++else
++    AC_MSG_RESULT(no)
++fi
++
++if test "${have_tag_pubkeys}." = "yes." ; then
++    AC_DEFINE([HAVE_RPMTAG_PUBKEYS], 1, [rpm with RPMTAG_PUBKEYS])
++fi
++
++if test "${have_tag_suggests}." = "yes." ; then
++    AC_DEFINE([HAVE_RPMTAG_SUGGESTS], 1, [rpm with RPMTAG_SUGGESTS support])
+ fi
+ 
+ dnl Checks for libraries.
+@@ -361,22 +374,20 @@ AC_CHECK_FUNCS(_rpmvercmp)
+ dnl rpm 4.4.9
+ AC_CHECK_HEADERS([rpm/rpmevr.h])
+ 
+-dnl
+ dnl rpm 5.x
+ dnl fnpyKey provider
+ AC_CHECK_HEADERS([rpm/rpmcb.h])
+ AC_CHECK_FUNCS(rpmpkgRead)
+-AC_MSG_CHECKING([for rpm 5.x])
+-if test "$ac_cv_func_rpmpkgRead." != "yes."; then
+-     AC_MSG_RESULT(no)   
+-else
+-     AC_DEFINE([HAVE_RPM_5], [1], [])
+-     AC_MSG_RESULT(yes)
+-fi
++
+ AC_CHECK_FUNCS(headerNVR)     # removed since 5.0
+ AC_CHECK_FUNCS(headerNEVRA)  
+ AC_CHECK_FUNCS(rpmErrorString)
+ 
++AC_CHECK_TYPE([rpmmi],
++	      [AC_DEFINE([HAVE_RPMMI], 1, [rpm with database iterator])],
++	      [],
++	      [[#include <rpm/rpmtypes.h>]])
++
+ dnl  - removed enum (not macro) HEADER_MAGIC_YES
+ if test "${is_rpm4}." = "yes." ; then
+    AC_EGREP_CPP(HEADER_MAGIC_YES,
+-- 
+1.7.11.2
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/poldek.git/commitdiff/6b6024ceb5b79bff83e71c9d66911f01372b866c



More information about the pld-cvs-commit mailing list