[master] 26f31d8 New VARNISH_COUNTERS macro for varnish.m4

Dridi Boukelmoune dridi.boukelmoune at gmail.com
Thu Mar 15 10:03:08 UTC 2018


commit 26f31d84ecec807f75b2a20d265c55f6dc6031c5
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date:   Thu Mar 15 11:00:49 2018 +0100

    New VARNISH_COUNTERS macro for varnish.m4
    
    Initially written and tested for Varnish 5.2, but not included then
    because VMODs weren't allowed custom counters yet. Tested again with
    success for Varnish 6.0 and documented.

diff --git a/doc/sphinx/whats-new/changes-6.0.rst b/doc/sphinx/whats-new/changes-6.0.rst
index e49a8a3..55001dd 100644
--- a/doc/sphinx/whats-new/changes-6.0.rst
+++ b/doc/sphinx/whats-new/changes-6.0.rst
@@ -68,7 +68,9 @@ just like builtin counters, because there is no difference.
 The counters are described in a ``.vsc`` file which is
 processed with a new python script which does a lot of
 magic etc.  There is a tiny example in ``vmod_debug`` in
-the source tree.
+the source tree.  If you're using autotools, a new
+``VARNISH_COUNTERS`` macro helps you set everything up,
+and is documented in ``varnish.m4``.
 
 This took a major retooling of the stats counters in general, and
 the VSM, VSC and VSL apis have all subtly or not so subtly changed
diff --git a/varnish.m4 b/varnish.m4
index 07dbcc8..8a92d5f 100644
--- a/varnish.m4
+++ b/varnish.m4
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Varnish Software AS
+# Copyright (c) 2016-2018 Varnish Software AS
 # All rights reserved.
 #
 # Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
@@ -29,7 +29,7 @@
 # OF THE POSSIBILITY OF SUCH DAMAGE.
 
 # varnish.m4 - Macros to build against Varnish.         -*- Autoconf -*-
-# serial 9 (varnish-5.2.1)
+# serial 10 (varnish-6.0.0)
 #
 # This collection of macros helps create VMODs or tools interacting with
 # Varnish Cache using the GNU build system (autotools). In order to work
@@ -375,6 +375,98 @@ AC_DEFUN([VARNISH_VMODS], [
 		[_VARNISH_VMOD(_vmod_name)])
 ])
 
+# _VARNISH_VSC_CONFIG
+# --------------------
+AC_DEFUN([_VARNISH_VSC_CONFIG], [
+
+	AC_REQUIRE([_VARNISH_PKG_CONFIG])
+	AC_REQUIRE([_VARNISH_CHECK_DEVEL])
+	AC_REQUIRE([_VARNISH_CHECK_PYTHON])
+
+	dnl Define an automake silent execution for vmodtool
+	[am__v_VSCTOOL_0='@echo "  VSCTOOL " $''@;']
+	[am__v_VSCTOOL_1='']
+	[am__v_VSCTOOL_='$(am__v_VSCTOOL_$(AM_DEFAULT_VERBOSITY))']
+	[AM_V_VSCTOOL='$(am__v_VSCTOOL_$(V))']
+	AC_SUBST([am__v_VSCTOOL_0])
+	AC_SUBST([am__v_VSCTOOL_1])
+	AC_SUBST([am__v_VSCTOOL_])
+	AC_SUBST([AM_V_VSCTOOL])
+])
+
+# _VARNISH_COUNTER(NAME)
+# ----------------------
+AC_DEFUN([_VARNISH_COUNTER], [
+
+	AC_REQUIRE([_VARNISH_VSC_CONFIG])
+
+	VSC_RULES="
+
+VSC_$1.h: $1.vsc
+	\$(A""M_V_VSCTOOL) \$(PYTHON) \$(VSCTOOL) -h \$(srcdir)/$1.vsc
+
+VSC_$1.c: $1.vsc
+	\$(A""M_V_VSCTOOL) \$(PYTHON) \$(VSCTOOL) -c \$(srcdir)/$1.vsc
+
+VSC_$1.rst: $1.vsc
+	\$(A""M_V_VSCTOOL) \$(PYTHON) \$(VSCTOOL) -r \$(srcdir)/$1.vsc >VSC_$1.rst
+
+clean: clean-vsc-$1
+
+distclean: clean-vsc-$1
+
+clean-vsc-$1:
+	rm -f VSC_$1.h VSC_$1.c VSC_$1.rst
+
+"
+
+	AC_SUBST(m4_toupper(BUILD_VSC_$1), [$VSC_RULES])
+	m4_ifdef([_AM_SUBST_NOTMAKE],
+		[_AM_SUBST_NOTMAKE(m4_toupper(BUILD_VSC_$1))])
+])
+
+# VARNISH_COUNTERS(NAMES)
+# -----------------------
+# Since: Varnish 6.0.0
+#
+# In order to manipulate custom counters that tools like varnishstat can
+# report, it is possible to do that via a VMOD. This macro allows you
+# to declare sets of counters, but does not associates them automatically
+# with their respective VMODs:
+#
+#     VARNISH_UTILITIES([foo bar])
+#
+# Two build rules will be available for use in Makefile.am for the counters
+# foo and bar:
+#
+#     @BUILD_VSC_FOO@
+#     @BUILD_VSC_BAR@
+#
+# They take care of turning VSC_foo.vsc and VCS_bar.vcs into C code and
+# RST documentation.
+#
+# Just like the vcc_*_if.[ch] files, you need to manually add the generated
+# sources to the appropriate VMODs:
+#
+#     nodist_libvmod_baz_la_SOURCES = \
+#             vcc_baz_if.c \
+#             vcc_baz_if.h \
+#             VSC_foo.c \
+#             VSC_foo.h
+#
+# You can then include the counters documentation somewhere in the VMOD's
+# VCC descriptor:
+#
+#     .. include:: VSC_foo.rst
+#
+# That should be all you need to do to start implementing custom counters.
+#
+AC_DEFUN([VARNISH_COUNTERS], [
+	m4_foreach([_vsc_name],
+		m4_split(m4_normalize([$1])),
+		[_VARNISH_COUNTER(_vsc_name)])
+])
+
 # _VARNISH_UTILITY(NAME)
 # ----------------------
 AC_DEFUN([_VARNISH_UTILITY], [


More information about the varnish-commit mailing list