From 6b6024ceb5b79bff83e71c9d66911f01372b866c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Fri, 7 Sep 2012 13:17:58 +0200 Subject: [PATCH] - add rpm 5.4.x support --- poldek-rpm54.patch | 1153 ++++++++++++++++++++++++++++++++++++++++++++ poldek.spec | 3 + 2 files changed, 1156 insertions(+) create mode 100644 poldek-rpm54.patch 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 +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 ]]) + + 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 + #endif + ++#ifdef HAVE_RPMMI ++# include ++#endif ++ + #if HAVE_RPMDSRPMLIB + # include + #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 +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 + #include + #include + #include +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 + + #include +-#include + + #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 + #include + #include ++#include + #include /* rpmts.h with defined _RPMTS_INTERNAL needs ctime() */ + + #include + #include + +-#include ++#ifdef HAVE_RPM_5 ++# include ++# include ++# include ++#else ++# include ++#endif + #include + #if HAVE_RPM_4_1 + # define _RPMPRCO_INTERNAL + # include + #endif +-#define _RPMTS_INTERNAL ++//#define _RPMTS_INTERNAL + #include + + #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 /* timeval */ + + #define _RPMPRCO_INTERNAL 1 /* see pm_rpmdsSysinfo */ +-#include ++ ++#ifdef HAVE_RPM_5 ++# include ++# include ++# include ++# include ++#else ++# include ++# include ++#endif /* HAVE_RPM_5 */ + + #ifdef HAVE_RPM_RPMCB_H + # include + #endif + +-#ifdef HAVE_RPMMI +-# include +-#endif +- + #if HAVE_RPMDSRPMLIB + # include + #endif +@@ -45,7 +50,6 @@ + # include + #endif + +-#include + #include + + #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 ++# 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 + #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 ++ Copyright (C) 2010 - 2012 Marcin Banasiak ++ ++ 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 + #include + #include + ++#ifdef HAVE_RPM_5 ++# include ++#endif ++ + #define _RPMEVR_INTERNAL + #include + ++#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 + #include + ++#include ++#include + #include +-#include + #include +-#include + #include + + #include +-- +1.7.11.2 + + +From 9e4fe82da2df9b43b22a2bf36f2da69bb3238e87 Mon Sep 17 00:00:00 2001 +From: Marcin Banasiak +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 + #include + #include +-#include /* rpmts.h with defined _RPMTS_INTERNAL needs ctime() */ + + #include + #include +@@ -34,13 +29,11 @@ + #else + # include + #endif +-#include ++ + #if HAVE_RPM_4_1 + # define _RPMPRCO_INTERNAL + # include + #endif +-//#define _RPMTS_INTERNAL +-#include + + #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 +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 +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 ]]) ++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 +- #ifdef RPMDBI_PACKAGES +- yes +- #endif +- ], is_rpm4=yes, is_rpm4=no) ++ [#include ++ #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 + ], 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 + ], 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 ++ ], have_tag_pubkeys=yes, have_tag_pubkeys=no) ++ ++ AC_EGREP_CPP(RPMTAG_SUGGESTS, ++ [ #include ++ ], 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 ]]) ++ + dnl - removed enum (not macro) HEADER_MAGIC_YES + if test "${is_rpm4}." = "yes." ; then + AC_EGREP_CPP(HEADER_MAGIC_YES, +-- +1.7.11.2 + 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 -- 2.44.0