]>
Commit | Line | Data |
---|---|---|
3d0924cd JK |
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 @@ | |
6fbeb569 JR |
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]) | |
3d0924cd JK |
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 @@ | |
6fbeb569 JR |
28 | |
29 | #ifdef HAVE_LIBRPM | |
30 | ||
31 | -extern "C" { | |
32 | - | |
6fbeb569 JR |
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> | |
3d0924cd | 59 | @@ -50,7 +52,7 @@ |
6fbeb569 JR |
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) | |
3d0924cd | 68 | @@ -93,13 +95,15 @@ |
6fbeb569 JR |
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. */ | |
3d0924cd JK |
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 @@ | |
6fbeb569 JR |
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); | |
3d0924cd JK |
107 | - rpminfo = headerFormat(h, "%{name}-%{version}-%{release}.%{arch}", |
108 | - &err); | |
109 | + rpminfo = headerSprintf(h, nvra, rpmTagTable, rpmHeaderFormats, &err); | |
6fbeb569 JR |
110 | + free(nvra); |
111 | } | |
112 | if (!rpminfo) | |
113 | { | |
3d0924cd | 114 | @@ -177,7 +182,7 @@ |
6fbeb569 JR |
115 | sess.rpms_to_install.insert(rpminfo); |
116 | } | |
117 | count++; | |
118 | - rpmdbFreeIterator(mi); | |
119 | + rpmmiFree(mi); | |
120 | } | |
121 | ||
122 | rpmtsFree(ts); |