]>
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 | 23 | stap_LIBS="$stap_LIBS -lc -lrpm" |
99214564 JR |
24 | @@ -548,6 +548,9 @@ |
25 | AC_CHECK_HEADERS([elfutils/version.h]) | |
26 | fi | |
27 | ||
28 | +CPPFLAGS="${CPPFLAGS} -I/usr/include/rpm" | |
29 | +LIBS="${LIBS} -lrpmdb" | |
30 | + | |
31 | dnl This is here mainly to make sure that configure --prefix=... changes | |
32 | dnl the config.h files so files depending on it are recompiled | |
33 | dnl prefix is passed through indirectly in the Makefile.am AM_CPPFLAGS. | |
3d0924cd JK |
34 | diff -dur systemtap-3.2.orig/rpm_finder.cxx systemtap-3.2/rpm_finder.cxx |
35 | --- systemtap-3.2.orig/rpm_finder.cxx 2017-10-18 19:59:37.000000000 +0200 | |
36 | +++ systemtap-3.2/rpm_finder.cxx 2017-11-13 10:16:28.000000000 +0100 | |
37 | @@ -20,20 +20,22 @@ | |
6fbeb569 JR |
38 | |
39 | #ifdef HAVE_LIBRPM | |
40 | ||
41 | -extern "C" { | |
42 | - | |
6fbeb569 JR |
43 | -#include <string.h> |
44 | -#include <rpm/rpmlib.h> | |
45 | -#include <rpm/rpmts.h> | |
46 | -#include <rpm/rpmdb.h> | |
47 | -#include <rpm/header.h> | |
48 | +#include <cstring> | |
49 | +#include <tr1/cstdint> | |
50 | +#include <rpmtypes.h> | |
51 | +#include <rpmiotypes.h> | |
52 | +#include <rpmtag.h> | |
53 | +#include <rpmts.h> | |
54 | +#include <rpmrc.h> | |
55 | +#include <rpmdb.h> | |
56 | +#include <rpmmacro.h> | |
57 | +#include <rpmio.h> | |
58 | +#include <rpmcli.h> | |
59 | ||
60 | #ifndef xfree | |
61 | #define xfree free | |
62 | #endif | |
63 | ||
64 | -} | |
65 | - | |
66 | #if ! HAVE_LIBRPMIO && HAVE_NSS | |
67 | extern "C" { | |
68 | #include <nss.h> | |
3d0924cd | 69 | @@ -50,7 +52,7 @@ |
6fbeb569 JR |
70 | { |
71 | static int rpm_init_done = 0; | |
72 | rpmts ts; | |
73 | - rpmdbMatchIterator mi; | |
74 | + rpmmi mi; | |
75 | int count = 0; | |
76 | ||
77 | if (filename == NULL) | |
3d0924cd | 78 | @@ -93,13 +95,15 @@ |
6fbeb569 JR |
79 | errmsg_t err; |
80 | size_t rpminfolen = strlen(rpm_type); | |
81 | size_t srcrpmlen = sizeof (".src.rpm") - 1; | |
82 | - rpmdbMatchIterator mi_rpminfo; | |
83 | - h = rpmdbNextIterator(mi); | |
84 | + rpmmi mi_rpminfo; | |
85 | + h = rpmmiNext(mi); | |
86 | if (h == NULL) | |
87 | break; | |
88 | /* Verify the kernel file is not already installed. */ | |
3d0924cd JK |
89 | |
90 | - rpminfo = headerFormat(h, header, &err); | |
91 | + char *nvra = rpmExpand("%{___NVRA}", NULL); | |
92 | + rpminfo = headerSprintf(h, header, rpmTagTable, rpmHeaderFormats, &err); | |
93 | + free(nvra); | |
94 | ||
95 | if (!rpminfo) | |
96 | { | |
97 | @@ -140,20 +144,21 @@ | |
6fbeb569 JR |
98 | /* s = `-debuginfo-%{version}-%{release}.%{arch}' */ |
99 | ||
100 | /* RPMDBI_PACKAGES requires keylen == sizeof (int). */ | |
101 | - /* RPMDBI_LABEL is an interface for NVR-based dbiFindByLabel(). */ | |
102 | - mi_rpminfo = rpmtsInitIterator(ts, (rpmTag) RPMDBI_LABEL, | |
103 | + /* RPMTAG_NVRA is an interface for NVR-based dbiFindByLabel(). */ | |
104 | + mi_rpminfo = rpmtsInitIterator(ts, (rpmTag) RPMTAG_NVRA, | |
105 | rpminfo, 0); | |
106 | if (mi_rpminfo) | |
107 | { | |
108 | - rpmdbFreeIterator(mi_rpminfo); | |
109 | + rpmmiFree(mi_rpminfo); | |
110 | count = 0; | |
111 | break; | |
112 | } | |
113 | /* The allocated memory gets utilized below for MISSING_RPM_HASH. */ | |
114 | if(strcmp(rpm_type,"-debuginfo")==0){ | |
115 | + char *nvra = rpmExpand("%{___NVRA}", NULL); | |
116 | xfree(rpminfo); | |
3d0924cd JK |
117 | - rpminfo = headerFormat(h, "%{name}-%{version}-%{release}.%{arch}", |
118 | - &err); | |
119 | + rpminfo = headerSprintf(h, nvra, rpmTagTable, rpmHeaderFormats, &err); | |
6fbeb569 JR |
120 | + free(nvra); |
121 | } | |
122 | if (!rpminfo) | |
123 | { | |
3d0924cd | 124 | @@ -177,7 +182,7 @@ |
6fbeb569 JR |
125 | sess.rpms_to_install.insert(rpminfo); |
126 | } | |
127 | count++; | |
128 | - rpmdbFreeIterator(mi); | |
129 | + rpmmiFree(mi); | |
130 | } | |
131 | ||
132 | rpmtsFree(ts); |