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"
25 AC_CHECK_HEADERS([elfutils/version.h])
28 +CPPFLAGS="${CPPFLAGS} -I/usr/include/rpm"
29 +LIBS="${LIBS} -lrpmdb"
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.
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
44 -#include <rpm/rpmlib.h>
45 -#include <rpm/rpmts.h>
46 -#include <rpm/rpmdb.h>
47 -#include <rpm/header.h>
49 +#include <tr1/cstdint>
50 +#include <rpmtypes.h>
51 +#include <rpmiotypes.h>
56 +#include <rpmmacro.h>
66 #if ! HAVE_LIBRPMIO && HAVE_NSS
71 static int rpm_init_done = 0;
73 - rpmdbMatchIterator mi;
80 size_t rpminfolen = strlen(rpm_type);
81 size_t srcrpmlen = sizeof (".src.rpm") - 1;
82 - rpmdbMatchIterator mi_rpminfo;
83 - h = rpmdbNextIterator(mi);
88 /* Verify the kernel file is not already installed. */
90 - rpminfo = headerFormat(h, header, &err);
91 + char *nvra = rpmExpand("%{___NVRA}", NULL);
92 + rpminfo = headerSprintf(h, header, rpmTagTable, rpmHeaderFormats, &err);
98 /* s = `-debuginfo-%{version}-%{release}.%{arch}' */
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,
108 - rpmdbFreeIterator(mi_rpminfo);
109 + rpmmiFree(mi_rpminfo);
113 /* The allocated memory gets utilized below for MISSING_RPM_HASH. */
114 if(strcmp(rpm_type,"-debuginfo")==0){
115 + char *nvra = rpmExpand("%{___NVRA}", NULL);
117 - rpminfo = headerFormat(h, "%{name}-%{version}-%{release}.%{arch}",
119 + rpminfo = headerSprintf(h, nvra, rpmTagTable, rpmHeaderFormats, &err);
125 sess.rpms_to_install.insert(rpminfo);
128 - rpmdbFreeIterator(mi);