From 373973206aab26ba72d66363db85adb38f49c4de Mon Sep 17 00:00:00 2001 From: Pavel Hrdina Date: Mon, 16 Mar 2015 12:52:13 +0100 Subject: [PATCH] rpm-build: use pkg-config to detect wireshark presence Wireshark supports pkg-config since 1.11.3. Right now we build wireshark-dissectior tool as default trough rpm build only on fedora >= 21 and there is new wireshark that supports pkg-config. If someone wants to build libvirt with wireshark-dissector against old wireshark, they should specify the location by hand. This patch is mainly to fix wrong dependency on wireshark binary as it doesn't make sense to require that binary file to just get version info of that package in makefile. Signed-off-by: Pavel Hrdina --- configure.ac | 66 +-------------------------------- m4/virt-wireshark.m4 | 44 ++++++++++++++++++++++ tools/wireshark/src/Makefile.am | 2 +- 3 files changed, 47 insertions(+), 65 deletions(-) create mode 100644 m4/virt-wireshark.m4 diff --git a/configure.ac b/configure.ac index 2fedd1a34d..b5a05bbf99 100644 --- a/configure.ac +++ b/configure.ac @@ -247,6 +247,7 @@ LIBVIRT_CHECK_SELINUX LIBVIRT_CHECK_SSH2 LIBVIRT_CHECK_SYSTEMD_DAEMON LIBVIRT_CHECK_UDEV +LIBVIRT_CHECK_WIRESHARK LIBVIRT_CHECK_YAJL AC_MSG_CHECKING([for CPUID instruction]) @@ -2642,70 +2643,6 @@ AM_CONDITIONAL([HAVE_LIBNL], [test "$have_libnl" = "yes"]) AC_SUBST([LIBNL_CFLAGS]) AC_SUBST([LIBNL_LIBS]) -dnl wireshark dissector - -AC_ARG_WITH([wireshark-dissector], - [AS_HELP_STRING([--with-wireshark-dissector], - [enable wireshark dissector plugin support @<:@default=check@:>@])], - [ with_wireshark_dissector=$withval ], - [ with_wireshark_dissector=check ]) - -AC_DEFUN([LIBVIRT_WS_HANDLE_ERROR], [ - if test "$with_wireshark_dissector" = "yes"; then - AC_MSG_ERROR([$1]) - else - with_wireshark_dissector=no - fi -]) -if test "$with_wireshark_dissector" != "no"; then - dnl Check for XDR headers existence - AC_CHECK_HEADERS([rpc/types.h]) - - dnl Check for glib-2.0 existence - PKG_CHECK_MODULES([GLIB], [glib-2.0], [ - WS_DISSECTOR_CPPFLAGS="$WS_DISSECTOR_CPPFLAGS `$PKG_CONFIG --cflags glib-2.0`" - ], [ - LIBVIRT_WS_HANDLE_ERROR([pkg-config 'glib-2.0' is required for wireshark-dissector support]) - ]) - - dnl Search for wireshark(or tshark) command - AC_PATH_PROG([WIRESHARK], [wireshark]) - AC_PATH_PROG([WIRESHARK], [tshark]) - if test -z "$WIRESHARK"; then - LIBVIRT_WS_HANDLE_ERROR([command not found wireshark or tshark]) - else - dnl Check for wireshark headers - save_CPPFLAGS="$CPPFLAGS" - WS_DISSECTOR_CPPFLAGS="$WS_DISSECTOR_CPPFLAGS -I`dirname $WIRESHARK`/../include/wireshark" - CPPFLAGS="$CPPFLAGS $WS_DISSECTOR_CPPFLAGS" - AC_CHECK_HEADERS([wireshark/config.h],, [ - LIBVIRT_WS_HANDLE_ERROR([wireshark/config.h is required for wireshark-dissector support]) - ]) - AC_CHECK_HEADERS([wireshark/epan/packet.h wireshark/epan/dissectors/packet-tcp.h],, [ - LIBVIRT_WS_HANDLE_ERROR([wireshark/epan/{packet,packet-tcp}.h are required for wireshark-dissector support]) - ], [ - #include - ]) - CPPFLAGS="$save_CPPFLAGS" - fi - if test "$with_wireshark_dissector" != "no"; then - with_wireshark_dissector=yes - fi -fi -AC_SUBST([WS_DISSECTOR_CPPFLAGS]) -AM_CONDITIONAL([WITH_WIRESHARK_DISSECTOR], [test "$with_wireshark_dissector" = "yes"]) - -AC_ARG_WITH([ws-plugindir], - [AS_HELP_STRING([--with-ws-plugindir], - [wireshark plugins directory for use when installing wireshark plugin])], - [ws_plugindir=$withval]) - -if test "$with_wireshark_dissector" != "no" && test -z "$ws_plugindir"; then - ws_version=`$WIRESHARK -v | head -1 | cut -f 2 -d' '` - ws_plugindir="$libdir/wireshark/plugins/$ws_version" -fi -AC_SUBST([ws_plugindir]) - # Check for Linux vs. BSD ifreq members AC_CHECK_MEMBERS([struct ifreq.ifr_newname, struct ifreq.ifr_ifindex, @@ -2937,6 +2874,7 @@ LIBVIRT_RESULT_SELINUX LIBVIRT_RESULT_SSH2 LIBVIRT_RESULT_SYSTEMD_DAEMON LIBVIRT_RESULT_UDEV +LIBVIRT_RESULT_WIRESHARK LIBVIRT_RESULT_YAJL AC_MSG_NOTICE([ libxml: $LIBXML_CFLAGS $LIBXML_LIBS]) AC_MSG_NOTICE([ dlopen: $DLOPEN_LIBS]) diff --git a/m4/virt-wireshark.m4 b/m4/virt-wireshark.m4 new file mode 100644 index 0000000000..47204ed2a3 --- /dev/null +++ b/m4/virt-wireshark.m4 @@ -0,0 +1,44 @@ +dnl The libvirt.so wireshark plugin +dnl +dnl Copyright (C) 2015 Red Hat, Inc. +dnl +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License, or (at your option) any later version. +dnl +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library. If not, see +dnl . +dnl + +AC_DEFUN([LIBVIRT_CHECK_WIRESHARK],[ + LIBVIRT_CHECK_PKG([WIRESHARK_DISSECTOR], [wireshark], [1.11.3]) + + AC_ARG_WITH([ws-plugindir], + [AS_HELP_STRING([--with-ws-plugindir], + [wireshark plugins directory for use when installing wireshark plugin])], + [], [with_ws_plugindir=check]) + + dnl Check for system location of wireshark plugins + if test "x$with_wireshark_dissector" != "xno" ; then + if test "x$with_ws_plugindir" = "xcheck" ; then + ws_plugindir="$libdir/wireshark/plugins/$($PKG_CONFIG --modversion wireshark)" + elif test "x$with_ws_plugindir" = "xno" || test "x$with_ws_plugindir" = "xyes"; then + AC_MSG_ERROR([ws-plugindir must be used only with valid path]) + else + ws_plugindir=$with_ws_plugindir + fi + fi + + AC_SUBST([ws_plugindir]) +]) + +AC_DEFUN([LIBVIRT_RESULT_WIRESHARK],[ + LIBVIRT_RESULT_LIB([WIRESHARK_DISSECTOR]) +]) diff --git a/tools/wireshark/src/Makefile.am b/tools/wireshark/src/Makefile.am index 61ddb388f5..d4edc655de 100644 --- a/tools/wireshark/src/Makefile.am +++ b/tools/wireshark/src/Makefile.am @@ -26,7 +26,7 @@ INCLUDES = \ ws_plugin_LTLIBRARIES = libvirt.la libvirt_la_SOURCES = packet-libvirt.h packet-libvirt.c plugin.c -libvirt_la_CPPFLAGS = $(WS_DISSECTOR_CPPFLAGS) +libvirt_la_CPPFLAGS = $(WIRESHARK_DISSECTOR_CFLAGS) libvirt_la_LDFLAGS = -avoid-version -module packet-libvirt.c: packet-libvirt.h libvirt/protocol.h