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
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"
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])
17 + AC_DEFINE_UNQUOTED([HAVE_RPM],1,[Define if RPM backend is available])
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
34 -#include <rpm/rpmlib.h>
35 -#include <rpm/rpmts.h>
36 -#include <rpm/rpmdb.h>
37 -#include <rpm/header.h>
39 +#include <tr1/cstdint>
40 +#include <rpmtypes.h>
41 +#include <rpmiotypes.h>
46 +#include <rpmmacro.h>
56 #if ! HAVE_LIBRPMIO && HAVE_NSS
61 static int rpm_init_done = 0;
63 - rpmdbMatchIterator mi;
70 size_t rpminfolen = strlen(rpm_type);
71 size_t srcrpmlen = sizeof (".src.rpm") - 1;
72 - rpmdbMatchIterator mi_rpminfo;
73 - h = rpmdbNextIterator(mi);
78 /* Verify the kernel file is not already installed. */
80 - rpminfo = headerFormat(h, header, &err);
81 + char *nvra = rpmExpand("%{___NVRA}", NULL);
82 + rpminfo = headerSprintf(h, header, rpmTagTable, rpmHeaderFormats, &err);
88 /* s = `-debuginfo-%{version}-%{release}.%{arch}' */
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,
98 - rpmdbFreeIterator(mi_rpminfo);
99 + rpmmiFree(mi_rpminfo);
103 /* The allocated memory gets utilized below for MISSING_RPM_HASH. */
104 if(strcmp(rpm_type,"-debuginfo")==0){
105 + char *nvra = rpmExpand("%{___NVRA}", NULL);
107 - rpminfo = headerFormat(h, "%{name}-%{version}-%{release}.%{arch}",
109 + rpminfo = headerSprintf(h, nvra, rpmTagTable, rpmHeaderFormats, &err);
115 sess.rpms_to_install.insert(rpminfo);
118 - rpmdbFreeIterator(mi);