On 26.10.2016 18:08, Andrea Bolognani wrote:
If we can't obtain Wireshark's plugindir variable from
pkg-config, we fall back to building it ourselves starting
from $libdir.
The problem with that is that we have zero insights on what
$libdir actually looks like, so we can't simply strip $prefix
and call it a day. On the other hand, we have to do *something*
or $ws_plugindir will be unusable.
Our solution is to try the four most likely prefixes, and use
the first one that matches. It's not perfect, but should be
able to cope with all but the weirdest setups.
Worst case scenario, the user can pass --with-ws-plugindir to
configure and explicitly provide a suitable installation path.
---
m4/virt-wireshark.m4 | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/m4/virt-wireshark.m4 b/m4/virt-wireshark.m4
index 556272a..75786de 100644
--- a/m4/virt-wireshark.m4
+++ b/m4/virt-wireshark.m4
@@ -35,11 +35,20 @@ AC_DEFUN([LIBVIRT_CHECK_WIRESHARK],[
dnl On some systems the plugindir variable may not be stored within pkg config.
dnl Fall back to older style of constructing the plugin dir path.
ws_plugindir="$libdir/wireshark/plugins/$ws_modversion"
- ws_prefix="$prefix"
+ dnl We have no idea what the contents of $libdir look like, so we'll
+ dnl have to play a bit of a guessing game: let's try stripping off
+ dnl a bunch of likels prefixed and pick the first one that matches.
+ dnl Even if none does, we'll still have one last shot later
+ for try in "$prefix" "$exec_prefix" '${prefix}'
'${exec_prefix}'; do
+ if test "x${ws_plugindir#$try}" != "x$ws_plugindir"; then
+ ws_prefix="$try"
+ break
+ fi
+ done
fi
if test "x$ws_prefix" = "x" ; then
- dnl If the wireshark prefix cannot be retrieved from pkg-config,
- dnl /usr is our best bet
+ dnl If the wireshark prefix cannot be retrieved from pkg-config
+ dnl or otherwise guessed, /usr is our best bet
ws_prefix="/usr"
fi
dnl Replace the wireshark prefix with our own.
I am under the impression that it will be pretty hard to build a
functioning solution for a plugindir-less wireshark.pc file other than
for the purpose to fix the RPM build (and don't break make distcheck).
My first idea was to start off using the libdir value from wireshark,
see
https://www.redhat.com/archives/libvir-list/2016-October/msg01186.html
(the wireshark.pc versions I've seen all have it set, as well as the
prefix). This would cover the case where libdir[wireshark] !=
libdir[libvirt].
But both your and my approach will only be correct if the [exec_]prefix
of both libvirt and wireshark match, which will not be the case for
non-RPM builds for the default configuration (exec_prefix=/usr/local) or
the less usual but valid /opt/$package naming scheme.
Plus libdir has to be the same in both packages anyway in order to not
break the RPM build (unless you want to tweak the spec file). I'd
suggest to stick to your original version (and rely on the last shot as
you put it): the general case is really hard to fix properly.
--
Mit freundlichen Grüßen/Kind Regards
Viktor Mihajlovski
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martina Köderitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294