]> git.pld-linux.org Git - packages/systemtap.git/blob - systemtap-rpm5-support.patch
- cleanup building with(out) crash
[packages/systemtap.git] / systemtap-rpm5-support.patch
1 diff -dur systemtap-3.2.orig/configure.ac systemtap-3.2/configure.ac
2 --- systemtap-3.2.orig/configure.ac     2017-11-13 10:02:17.000000000 +0100
3 +++ systemtap-3.2/configure.ac  2017-11-13 10:16:52.000000000 +0100
4 @@ -465,6 +465,19 @@
5    [AS_HELP_STRING([--with-rpm],
6                    [query rpm database for missing debuginfos])], [], [with_rpm="auto"])
7  if test "$with_rpm" != "no"; then
8 +  PKG_CHECK_MODULES([RPM], [rpm], [
9 +      AC_DEFINE_UNQUOTED([HAVE_RPM],1,[Define if RPM backend is available])
10 +      CPPFLAGS="$RPM_CFLAGS $CPPFLAGS"
11 +      stap_LIBS="$stap_LIBS $RPM_LIBS"
12 +   ], [
13 +      AC_PATH_PROG(RPM_PATH,rpm,none)
14 +      if test "$RPM_PATH" = "none"; then
15 +         AC_MSG_ERROR([RPM executable was not found in your system])
16 +      else
17 +         AC_DEFINE_UNQUOTED([HAVE_RPM],1,[Define if RPM backend is available])
18 +      fi
19 +   ]
20 +)
21    AC_CHECK_LIB(rpm, rpmtsInitIterator, [
22                      AC_DEFINE([HAVE_LIBRPM],[1],[have librpm])
23                      stap_LIBS="$stap_LIBS -lc -lrpm"
24 diff -dur systemtap-3.2.orig/rpm_finder.cxx systemtap-3.2/rpm_finder.cxx
25 --- systemtap-3.2.orig/rpm_finder.cxx   2017-10-18 19:59:37.000000000 +0200
26 +++ systemtap-3.2/rpm_finder.cxx        2017-11-13 10:16:28.000000000 +0100
27 @@ -20,20 +20,22 @@
28  
29  #ifdef HAVE_LIBRPM
30  
31 -extern "C" {
32 -
33 -#include <string.h>
34 -#include <rpm/rpmlib.h>
35 -#include <rpm/rpmts.h>
36 -#include <rpm/rpmdb.h>
37 -#include <rpm/header.h>
38 +#include <cstring>
39 +#include <tr1/cstdint>
40 +#include <rpmtypes.h>
41 +#include <rpmiotypes.h>
42 +#include <rpmtag.h>
43 +#include <rpmts.h>
44 +#include <rpmrc.h>
45 +#include <rpmdb.h>
46 +#include <rpmmacro.h>
47 +#include <rpmio.h>
48 +#include <rpmcli.h>
49  
50  #ifndef xfree
51  #define xfree free
52  #endif
53  
54 -}
55 -
56  #if ! HAVE_LIBRPMIO && HAVE_NSS
57  extern "C" {
58  #include <nss.h>
59 @@ -50,7 +52,7 @@
60  {
61    static int rpm_init_done = 0;
62    rpmts ts;
63 -  rpmdbMatchIterator mi;
64 +  rpmmi mi;
65    int count = 0;
66  
67    if (filename == NULL)
68 @@ -93,13 +95,15 @@
69           errmsg_t err;
70           size_t rpminfolen = strlen(rpm_type);
71           size_t srcrpmlen = sizeof (".src.rpm") - 1;
72 -         rpmdbMatchIterator mi_rpminfo;
73 -         h = rpmdbNextIterator(mi);
74 +         rpmmi mi_rpminfo;
75 +         h = rpmmiNext(mi);
76           if (h == NULL)
77             break;
78           /* Verify the kernel file is not already installed.  */
79  
80 -         rpminfo = headerFormat(h, header, &err);
81 +          char *nvra = rpmExpand("%{___NVRA}", NULL);
82 +         rpminfo = headerSprintf(h, header, rpmTagTable, rpmHeaderFormats, &err);
83 +         free(nvra);
84  
85           if (!rpminfo)
86             {
87 @@ -140,20 +144,21 @@
88           /* s = `-debuginfo-%{version}-%{release}.%{arch}' */
89  
90           /* RPMDBI_PACKAGES requires keylen == sizeof (int).  */
91 -         /* RPMDBI_LABEL is an interface for NVR-based dbiFindByLabel().  */
92 -         mi_rpminfo = rpmtsInitIterator(ts, (rpmTag)  RPMDBI_LABEL,
93 +         /* RPMTAG_NVRA is an interface for NVR-based dbiFindByLabel().  */
94 +         mi_rpminfo = rpmtsInitIterator(ts, (rpmTag)  RPMTAG_NVRA,
95                                               rpminfo, 0);
96           if (mi_rpminfo)
97             {
98 -             rpmdbFreeIterator(mi_rpminfo);
99 +             rpmmiFree(mi_rpminfo);
100               count = 0;
101               break;
102             }
103           /* The allocated memory gets utilized below for MISSING_RPM_HASH.  */
104            if(strcmp(rpm_type,"-debuginfo")==0){
105 +           char *nvra = rpmExpand("%{___NVRA}", NULL);
106             xfree(rpminfo);
107 -           rpminfo = headerFormat(h, "%{name}-%{version}-%{release}.%{arch}",
108 -                                  &err);
109 +           rpminfo = headerSprintf(h, nvra, rpmTagTable, rpmHeaderFormats, &err);
110 +           free(nvra);
111           }
112           if (!rpminfo)
113             {
114 @@ -177,7 +182,7 @@
115           sess.rpms_to_install.insert(rpminfo);
116         }
117        count++;
118 -      rpmdbFreeIterator(mi);
119 +      rpmmiFree(mi);
120      }
121  
122    rpmtsFree(ts);
This page took 0.066461 seconds and 3 git commands to generate.