[libvirt] [PATCH] virt-wireshark.m4: Defer $(prefix) substitution

Andrea Bolognani abologna at redhat.com
Thu Oct 20 14:33:18 UTC 2016


On Thu, 2016-10-20 at 15:54 +0800, Michal Privoznik wrote:
> The problem with evaluating $(prefix) in configure phase is that
> autoconf does a lot of magic with this variable. Firstly, if the
> --prefix argument is not set for the configure script, the
> variable will have value "NONE". Wait, wat? Secondly, even
> autoconf scripts then have special cases for when variable is
> "NONE". It's even worse - whenever they need to construct new
> path based on prefix, they save its current value, substitute it
> with proper value (like /usr/local/), do what they need and then
> restore the original value. Le sigh.
> This mad behaviour is, however, suppressed if there's --prefix on
> the configure command line.
> Now, the problem is that we tried to construct path for wireshark
> plugin in the m4 file. Based on the knowledge described above, we
> shouldn't do it and just construct the full path in Makefile
> later where prefix has proper value.

I don't think we need to go into so much detail, we can just
point to the autoconf manual[1] which tells us *not* to use
these variables outside of Makefiles so that users still have
a chance to override $(prefix) at 'make' or 'make install'
time.

> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  m4/virt-wireshark.m4 | 2 +-
>  tools/Makefile.am    | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/m4/virt-wireshark.m4 b/m4/virt-wireshark.m4
> index f383e2b..e1e4a59 100644
> --- a/m4/virt-wireshark.m4
> +++ b/m4/virt-wireshark.m4
> @@ -38,7 +38,7 @@ AC_DEFUN([LIBVIRT_CHECK_WIRESHARK],[
>          if test "x$ws_prefix" = "x" ; then
>            ws_prefix="/usr";
>          fi
> -        plugindir="${prefix}${plugindir#$ws_prefix}"
> +        plugindir="${plugindir#$ws_prefix}"

This got me wondering: is what we're doing even correct?

If the plugindir for wireshark is eg.
/usr/lib64/wireshark/plugins, should we still install under
an arbitrary $(prefix)? Will wireshark pick up the plugin
then?

>        fi
>      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])
> diff --git a/tools/Makefile.am b/tools/Makefile.am
> index e7e42c3..08e1680 100644
> --- a/tools/Makefile.am
> +++ b/tools/Makefile.am
> @@ -398,7 +398,7 @@ EXTRA_DIST += \
>  
>  if WITH_WIRESHARK_DISSECTOR
>  
> -ws_plugindir = $(plugindir)
> +ws_plugindir = $(prefix)$(plugindir)
>  ws_plugin_LTLIBRARIES = wireshark/src/libvirt.la
>  wireshark_src_libvirt_la_CPPFLAGS = \
>  	-I wireshark/src $(WIRESHARK_DISSECTOR_CFLAGS)

ACK


[1] https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Installation-Directory-Variables.html
-- 
Andrea Bolognani / Red Hat / Virtualization




More information about the libvir-list mailing list