diff mbox series

[libnetfilter_queue,v2] build: doc: `make distcheck` passes with doxygen enabled

Message ID 20210422093544.5460-1-duncan_roe@optusnet.com.au
State Accepted
Delegated to: Pablo Neira
Headers show
Series [libnetfilter_queue,v2] build: doc: `make distcheck` passes with doxygen enabled | expand

Commit Message

Duncan Roe April 22, 2021, 9:35 a.m. UTC
The main fix is to move fixmanpages.sh to inside doxygen/Makefile.am.

This means that in future, developers need to update doxygen/Makefile.am
when they add new functions and source files, since fixmanpages.sh is deleted.

Signed-off-by: Duncan Roe <duncan_roe@optusnet.com.au>
---
v2: Implement suggestions from Jan Engelhardt <jengelh@inai.de>

 Makefile.am         |  1 -
 configure.ac        | 11 +++++--
 doxygen/Makefile.am | 76 +++++++++++++++++++++++++++++++++++++++++++--
 fixmanpages.sh      | 66 ---------------------------------------
 4 files changed, 82 insertions(+), 72 deletions(-)
 delete mode 100755 fixmanpages.sh

Comments

Duncan Roe April 28, 2021, 11:59 p.m. UTC | #1
Hi Jan,

Are you satisfied with the v2 patch?

If so, could you maybe post an "Acked-by", "Reviewed-by" or LGTM please?

Pablo has not responded and there is a bit of urgency in that I have 3 more
patchsets before the next LNFQ release and was hoping the release would get out
in time for Slackware 15.0.

Cheers ... Duncan.

On Thu, Apr 22, 2021 at 07:35:44PM +1000, Duncan Roe wrote:
> The main fix is to move fixmanpages.sh to inside doxygen/Makefile.am.
>
> This means that in future, developers need to update doxygen/Makefile.am
> when they add new functions and source files, since fixmanpages.sh is deleted.
>
> Signed-off-by: Duncan Roe <duncan_roe@optusnet.com.au>
> ---
> v2: Implement suggestions from Jan Engelhardt <jengelh@inai.de>
>
>  Makefile.am         |  1 -
>  configure.ac        | 11 +++++--
>  doxygen/Makefile.am | 76 +++++++++++++++++++++++++++++++++++++++++++--
>  fixmanpages.sh      | 66 ---------------------------------------
>  4 files changed, 82 insertions(+), 72 deletions(-)
>  delete mode 100755 fixmanpages.sh
>
> diff --git a/Makefile.am b/Makefile.am
> index 796f0d0..a5b347b 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -10,4 +10,3 @@ pkgconfigdir = $(libdir)/pkgconfig
>  pkgconfig_DATA = libnetfilter_queue.pc
>
>  EXTRA_DIST += Make_global.am
> -EXTRA_DIST += fixmanpages.sh
> diff --git a/configure.ac b/configure.ac
> index 32e4990..bdbee98 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -37,9 +37,10 @@ AC_CONFIG_FILES([Makefile src/Makefile utils/Makefile examples/Makefile
>  	include/linux/Makefile include/linux/netfilter/Makefile])
>
>  AC_ARG_WITH([doxygen], [AS_HELP_STRING([--with-doxygen],
> -	    [create doxygen documentation [default=no]])],
> -	    [], [with_doxygen=no])
> -AS_IF([test "x$with_doxygen" = xyes], [
> +	    [create doxygen documentation])],
> +	    [with_doxygen="$withval"], [with_doxygen=yes])
> +
> +AS_IF([test "x$with_doxygen" != xno], [
>  	AC_CHECK_PROGS([DOXYGEN], [doxygen])
>  	AC_CHECK_PROGS([DOT], [dot], [""])
>  	AS_IF([test "x$DOT" != "x"],
> @@ -48,6 +49,10 @@ AS_IF([test "x$with_doxygen" = xyes], [
>  ])
>
>  AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"])
> +AS_IF([test "x$DOXYGEN" = x], [
> +	dnl Only run doxygen Makefile if doxygen installed
> +	AC_MSG_WARN([Doxygen not found - continuing without Doxygen support])
> +])
>  AC_OUTPUT
>
>  echo "
> diff --git a/doxygen/Makefile.am b/doxygen/Makefile.am
> index 0f99feb..b4268a5 100644
> --- a/doxygen/Makefile.am
> +++ b/doxygen/Makefile.am
> @@ -1,4 +1,6 @@
>  if HAVE_DOXYGEN
> +
> +# Be sure to add new source files to this table
>  doc_srcs = $(top_srcdir)/src/libnetfilter_queue.c  \
>             $(top_srcdir)/src/nlmsg.c               \
>             $(top_srcdir)/src/extra/checksum.c      \
> @@ -9,8 +11,74 @@ doc_srcs = $(top_srcdir)/src/libnetfilter_queue.c  \
>             $(top_srcdir)/src/extra/icmp.c          \
>             $(top_srcdir)/src/extra/pktbuff.c
>
> -doxyfile.stamp: $(doc_srcs) $(top_srcdir)/fixmanpages.sh
> -	rm -rf html man && cd .. && doxygen doxygen.cfg >/dev/null && ./fixmanpages.sh
> +doxyfile.stamp: $(doc_srcs) Makefile.am
> +	rm -rf html man
> +
> +# Test for running under make distcheck.
> +# If so, sibling src directory will be empty:
> +# move it out of the way and symlink the real one while we run doxygen.
> +	[ -f ../src/Makefile.in ] || \
> +{ set -x; cd ..; mv src src.distcheck; ln -s $(top_srcdir)/src; }
> +
> +	cd ..; doxygen doxygen.cfg >/dev/null
> +
> +	[ ! -d ../src.distcheck ] || \
> +{ set -x; cd ..; rm src; mv src.distcheck src; }
> +
> +# Keep this command up to date after adding new functions and source files.
> +# The command has to be a single line so the functions work
> +# (hence ";\" at the end of every line but the last).
> +	main() { set -e; cd man/man3; rm -f _*;\
> +setgroup LibrarySetup nfq_open;\
> +  add2group nfq_close nfq_bind_pf nfq_unbind_pf;\
> +setgroup Parsing nfq_get_msg_packet_hdr;\
> +  add2group nfq_get_nfmark nfq_get_timestamp nfq_get_indev nfq_get_physindev;\
> +  add2group nfq_get_outdev nfq_get_physoutdev nfq_get_indev_name;\
> +  add2group nfq_get_physindev_name nfq_get_outdev_name;\
> +  add2group nfq_get_physoutdev_name nfq_get_packet_hw;\
> +  add2group nfq_get_skbinfo;\
> +  add2group nfq_get_uid nfq_get_gid;\
> +  add2group nfq_get_secctx nfq_get_payload;\
> +setgroup Queue nfq_fd;\
> +  add2group nfq_create_queue nfq_destroy_queue nfq_handle_packet nfq_set_mode;\
> +  add2group nfq_set_queue_flags nfq_set_queue_maxlen nfq_set_verdict;\
> +  add2group nfq_set_verdict2 nfq_set_verdict_batch;\
> +  add2group nfq_set_verdict_batch2 nfq_set_verdict_mark;\
> +setgroup ipv4 nfq_ip_get_hdr;\
> +  add2group nfq_ip_set_transport_header nfq_ip_mangle nfq_ip_snprintf;\
> +  setgroup ip_internals nfq_ip_set_checksum;\
> +setgroup ipv6 nfq_ip6_get_hdr;\
> +  add2group nfq_ip6_set_transport_header nfq_ip6_mangle nfq_ip6_snprintf;\
> +setgroup nfq_cfg nfq_nlmsg_cfg_put_cmd;\
> +  add2group nfq_nlmsg_cfg_put_params nfq_nlmsg_cfg_put_qmaxlen;\
> +setgroup nfq_verd nfq_nlmsg_verdict_put;\
> +  add2group nfq_nlmsg_verdict_put_mark nfq_nlmsg_verdict_put_pkt;\
> +setgroup nlmsg nfq_nlmsg_parse;\
> +  add2group nfq_nlmsg_put;\
> +setgroup pktbuff pktb_alloc;\
> +  add2group pktb_data pktb_len pktb_mangle pktb_mangled;\
> +  add2group pktb_free;\
> +  setgroup otherfns pktb_tailroom;\
> +    add2group pktb_mac_header pktb_network_header pktb_transport_header;\
> +    setgroup uselessfns pktb_push;\
> +      add2group pktb_pull pktb_put pktb_trim;\
> +setgroup tcp nfq_tcp_get_hdr;\
> +  add2group nfq_tcp_get_payload nfq_tcp_get_payload_len;\
> +  add2group nfq_tcp_snprintf nfq_tcp_mangle_ipv4 nfq_tcp_mangle_ipv6;\
> +  setgroup tcp_internals nfq_tcp_compute_checksum_ipv4;\
> +    add2group nfq_tcp_compute_checksum_ipv6;\
> +setgroup udp nfq_udp_get_hdr;\
> +  add2group nfq_udp_get_payload nfq_udp_get_payload_len;\
> +  add2group nfq_udp_mangle_ipv4 nfq_udp_mangle_ipv6 nfq_udp_snprintf;\
> +  setgroup udp_internals nfq_udp_compute_checksum_ipv4;\
> +    add2group nfq_udp_compute_checksum_ipv6;\
> +setgroup Printing nfq_snprintf_xml;\
> +setgroup icmp nfq_icmp_get_hdr;\
> +};\
> +setgroup() { mv $$1.3 $$2.3; BASE=$$2; };\
> +add2group() { for i in $$@; do ln -sf $$BASE.3 $$i.3; done; };\
> +main
> +
>  	touch doxyfile.stamp
>
>  CLEANFILES = doxyfile.stamp
> @@ -21,4 +89,8 @@ clean-local:
>  install-data-local:
>  	mkdir -p $(DESTDIR)$(mandir)/man3
>  	cp --no-dereference --preserve=links,mode,timestamps man/man3/*.3 $(DESTDIR)$(mandir)/man3/
> +
> +# make distcheck needs uninstall-local
> +uninstall-local:
> +	rm -r $(DESTDIR)$(mandir) man html doxyfile.stamp
>  endif
> diff --git a/fixmanpages.sh b/fixmanpages.sh
> deleted file mode 100755
> index 02064ab..0000000
> --- a/fixmanpages.sh
> +++ /dev/null
> @@ -1,66 +0,0 @@
> -#!/bin/bash -p
> -#set -x
> -function main
> -{
> -  set -e
> -  cd doxygen/man/man3
> -  rm -f _*
> -  setgroup LibrarySetup nfq_open
> -    add2group nfq_close nfq_bind_pf nfq_unbind_pf
> -  setgroup Parsing nfq_get_msg_packet_hdr
> -    add2group nfq_get_nfmark nfq_get_timestamp nfq_get_indev nfq_get_physindev
> -    add2group nfq_get_outdev nfq_get_physoutdev nfq_get_indev_name
> -    add2group nfq_get_physindev_name nfq_get_outdev_name
> -    add2group nfq_get_physoutdev_name nfq_get_packet_hw
> -    add2group nfq_get_skbinfo
> -    add2group nfq_get_uid nfq_get_gid
> -    add2group nfq_get_secctx nfq_get_payload
> -  setgroup Queue nfq_fd
> -    add2group nfq_create_queue nfq_destroy_queue nfq_handle_packet nfq_set_mode
> -    add2group nfq_set_queue_flags nfq_set_queue_maxlen nfq_set_verdict
> -    add2group nfq_set_verdict2 nfq_set_verdict_batch
> -    add2group nfq_set_verdict_batch2 nfq_set_verdict_mark
> -  setgroup ipv4 nfq_ip_get_hdr
> -    add2group nfq_ip_set_transport_header nfq_ip_mangle nfq_ip_snprintf
> -    setgroup ip_internals nfq_ip_set_checksum
> -  setgroup ipv6 nfq_ip6_get_hdr
> -    add2group nfq_ip6_set_transport_header nfq_ip6_mangle nfq_ip6_snprintf
> -  setgroup nfq_cfg nfq_nlmsg_cfg_put_cmd
> -    add2group nfq_nlmsg_cfg_put_params nfq_nlmsg_cfg_put_qmaxlen
> -  setgroup nfq_verd nfq_nlmsg_verdict_put
> -    add2group nfq_nlmsg_verdict_put_mark nfq_nlmsg_verdict_put_pkt
> -  setgroup nlmsg nfq_nlmsg_parse
> -    add2group nfq_nlmsg_put
> -  setgroup pktbuff pktb_alloc
> -    add2group pktb_data pktb_len pktb_mangle pktb_mangled
> -    add2group pktb_free
> -    setgroup otherfns pktb_tailroom
> -      add2group pktb_mac_header pktb_network_header pktb_transport_header
> -      setgroup uselessfns pktb_push
> -        add2group pktb_pull pktb_put pktb_trim
> -  setgroup tcp nfq_tcp_get_hdr
> -    add2group nfq_tcp_get_payload nfq_tcp_get_payload_len
> -    add2group nfq_tcp_snprintf nfq_tcp_mangle_ipv4 nfq_tcp_mangle_ipv6
> -    setgroup tcp_internals nfq_tcp_compute_checksum_ipv4
> -      add2group nfq_tcp_compute_checksum_ipv6
> -  setgroup udp nfq_udp_get_hdr
> -    add2group nfq_udp_get_payload nfq_udp_get_payload_len
> -    add2group nfq_udp_mangle_ipv4 nfq_udp_mangle_ipv6 nfq_udp_snprintf
> -    setgroup udp_internals nfq_udp_compute_checksum_ipv4
> -      add2group nfq_udp_compute_checksum_ipv6
> -  setgroup Printing nfq_snprintf_xml
> -  setgroup icmp nfq_icmp_get_hdr
> -}
> -function setgroup
> -{
> -  mv $1.3 $2.3
> -  BASE=$2
> -}
> -function add2group
> -{
> -  for i in $@
> -  do
> -    ln -sf $BASE.3 $i.3
> -  done
> -}
> -main
> --
> 2.17.5
>
Jan Engelhardt April 29, 2021, 9:11 a.m. UTC | #2
On Thursday 2021-04-29 01:59, Duncan Roe wrote:

>Hi Jan,
>
>Are you satisfied with the v2 patch?

Acked-by: Jan Engelhardt <jengelh@inai.de>
Pablo Neira Ayuso May 2, 2021, 9:45 p.m. UTC | #3
On Thu, Apr 22, 2021 at 07:35:44PM +1000, Duncan Roe wrote:
> The main fix is to move fixmanpages.sh to inside doxygen/Makefile.am.
> 
> This means that in future, developers need to update doxygen/Makefile.am
> when they add new functions and source files, since fixmanpages.sh is deleted.

Applied.
diff mbox series

Patch

diff --git a/Makefile.am b/Makefile.am
index 796f0d0..a5b347b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -10,4 +10,3 @@  pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libnetfilter_queue.pc
 
 EXTRA_DIST += Make_global.am
-EXTRA_DIST += fixmanpages.sh
diff --git a/configure.ac b/configure.ac
index 32e4990..bdbee98 100644
--- a/configure.ac
+++ b/configure.ac
@@ -37,9 +37,10 @@  AC_CONFIG_FILES([Makefile src/Makefile utils/Makefile examples/Makefile
 	include/linux/Makefile include/linux/netfilter/Makefile])
 
 AC_ARG_WITH([doxygen], [AS_HELP_STRING([--with-doxygen],
-	    [create doxygen documentation [default=no]])],
-	    [], [with_doxygen=no])
-AS_IF([test "x$with_doxygen" = xyes], [
+	    [create doxygen documentation])],
+	    [with_doxygen="$withval"], [with_doxygen=yes])
+
+AS_IF([test "x$with_doxygen" != xno], [
 	AC_CHECK_PROGS([DOXYGEN], [doxygen])
 	AC_CHECK_PROGS([DOT], [dot], [""])
 	AS_IF([test "x$DOT" != "x"],
@@ -48,6 +49,10 @@  AS_IF([test "x$with_doxygen" = xyes], [
 ])
 
 AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"])
+AS_IF([test "x$DOXYGEN" = x], [
+	dnl Only run doxygen Makefile if doxygen installed
+	AC_MSG_WARN([Doxygen not found - continuing without Doxygen support])
+])
 AC_OUTPUT
 
 echo "
diff --git a/doxygen/Makefile.am b/doxygen/Makefile.am
index 0f99feb..b4268a5 100644
--- a/doxygen/Makefile.am
+++ b/doxygen/Makefile.am
@@ -1,4 +1,6 @@ 
 if HAVE_DOXYGEN
+
+# Be sure to add new source files to this table
 doc_srcs = $(top_srcdir)/src/libnetfilter_queue.c  \
            $(top_srcdir)/src/nlmsg.c               \
            $(top_srcdir)/src/extra/checksum.c      \
@@ -9,8 +11,74 @@  doc_srcs = $(top_srcdir)/src/libnetfilter_queue.c  \
            $(top_srcdir)/src/extra/icmp.c          \
            $(top_srcdir)/src/extra/pktbuff.c
 
-doxyfile.stamp: $(doc_srcs) $(top_srcdir)/fixmanpages.sh
-	rm -rf html man && cd .. && doxygen doxygen.cfg >/dev/null && ./fixmanpages.sh
+doxyfile.stamp: $(doc_srcs) Makefile.am
+	rm -rf html man
+
+# Test for running under make distcheck.
+# If so, sibling src directory will be empty:
+# move it out of the way and symlink the real one while we run doxygen.
+	[ -f ../src/Makefile.in ] || \
+{ set -x; cd ..; mv src src.distcheck; ln -s $(top_srcdir)/src; }
+
+	cd ..; doxygen doxygen.cfg >/dev/null
+
+	[ ! -d ../src.distcheck ] || \
+{ set -x; cd ..; rm src; mv src.distcheck src; }
+
+# Keep this command up to date after adding new functions and source files.
+# The command has to be a single line so the functions work
+# (hence ";\" at the end of every line but the last).
+	main() { set -e; cd man/man3; rm -f _*;\
+setgroup LibrarySetup nfq_open;\
+  add2group nfq_close nfq_bind_pf nfq_unbind_pf;\
+setgroup Parsing nfq_get_msg_packet_hdr;\
+  add2group nfq_get_nfmark nfq_get_timestamp nfq_get_indev nfq_get_physindev;\
+  add2group nfq_get_outdev nfq_get_physoutdev nfq_get_indev_name;\
+  add2group nfq_get_physindev_name nfq_get_outdev_name;\
+  add2group nfq_get_physoutdev_name nfq_get_packet_hw;\
+  add2group nfq_get_skbinfo;\
+  add2group nfq_get_uid nfq_get_gid;\
+  add2group nfq_get_secctx nfq_get_payload;\
+setgroup Queue nfq_fd;\
+  add2group nfq_create_queue nfq_destroy_queue nfq_handle_packet nfq_set_mode;\
+  add2group nfq_set_queue_flags nfq_set_queue_maxlen nfq_set_verdict;\
+  add2group nfq_set_verdict2 nfq_set_verdict_batch;\
+  add2group nfq_set_verdict_batch2 nfq_set_verdict_mark;\
+setgroup ipv4 nfq_ip_get_hdr;\
+  add2group nfq_ip_set_transport_header nfq_ip_mangle nfq_ip_snprintf;\
+  setgroup ip_internals nfq_ip_set_checksum;\
+setgroup ipv6 nfq_ip6_get_hdr;\
+  add2group nfq_ip6_set_transport_header nfq_ip6_mangle nfq_ip6_snprintf;\
+setgroup nfq_cfg nfq_nlmsg_cfg_put_cmd;\
+  add2group nfq_nlmsg_cfg_put_params nfq_nlmsg_cfg_put_qmaxlen;\
+setgroup nfq_verd nfq_nlmsg_verdict_put;\
+  add2group nfq_nlmsg_verdict_put_mark nfq_nlmsg_verdict_put_pkt;\
+setgroup nlmsg nfq_nlmsg_parse;\
+  add2group nfq_nlmsg_put;\
+setgroup pktbuff pktb_alloc;\
+  add2group pktb_data pktb_len pktb_mangle pktb_mangled;\
+  add2group pktb_free;\
+  setgroup otherfns pktb_tailroom;\
+    add2group pktb_mac_header pktb_network_header pktb_transport_header;\
+    setgroup uselessfns pktb_push;\
+      add2group pktb_pull pktb_put pktb_trim;\
+setgroup tcp nfq_tcp_get_hdr;\
+  add2group nfq_tcp_get_payload nfq_tcp_get_payload_len;\
+  add2group nfq_tcp_snprintf nfq_tcp_mangle_ipv4 nfq_tcp_mangle_ipv6;\
+  setgroup tcp_internals nfq_tcp_compute_checksum_ipv4;\
+    add2group nfq_tcp_compute_checksum_ipv6;\
+setgroup udp nfq_udp_get_hdr;\
+  add2group nfq_udp_get_payload nfq_udp_get_payload_len;\
+  add2group nfq_udp_mangle_ipv4 nfq_udp_mangle_ipv6 nfq_udp_snprintf;\
+  setgroup udp_internals nfq_udp_compute_checksum_ipv4;\
+    add2group nfq_udp_compute_checksum_ipv6;\
+setgroup Printing nfq_snprintf_xml;\
+setgroup icmp nfq_icmp_get_hdr;\
+};\
+setgroup() { mv $$1.3 $$2.3; BASE=$$2; };\
+add2group() { for i in $$@; do ln -sf $$BASE.3 $$i.3; done; };\
+main
+
 	touch doxyfile.stamp
 
 CLEANFILES = doxyfile.stamp
@@ -21,4 +89,8 @@  clean-local:
 install-data-local:
 	mkdir -p $(DESTDIR)$(mandir)/man3
 	cp --no-dereference --preserve=links,mode,timestamps man/man3/*.3 $(DESTDIR)$(mandir)/man3/
+
+# make distcheck needs uninstall-local
+uninstall-local:
+	rm -r $(DESTDIR)$(mandir) man html doxyfile.stamp
 endif
diff --git a/fixmanpages.sh b/fixmanpages.sh
deleted file mode 100755
index 02064ab..0000000
--- a/fixmanpages.sh
+++ /dev/null
@@ -1,66 +0,0 @@ 
-#!/bin/bash -p
-#set -x
-function main
-{
-  set -e
-  cd doxygen/man/man3
-  rm -f _*
-  setgroup LibrarySetup nfq_open
-    add2group nfq_close nfq_bind_pf nfq_unbind_pf
-  setgroup Parsing nfq_get_msg_packet_hdr
-    add2group nfq_get_nfmark nfq_get_timestamp nfq_get_indev nfq_get_physindev
-    add2group nfq_get_outdev nfq_get_physoutdev nfq_get_indev_name
-    add2group nfq_get_physindev_name nfq_get_outdev_name
-    add2group nfq_get_physoutdev_name nfq_get_packet_hw
-    add2group nfq_get_skbinfo
-    add2group nfq_get_uid nfq_get_gid
-    add2group nfq_get_secctx nfq_get_payload
-  setgroup Queue nfq_fd
-    add2group nfq_create_queue nfq_destroy_queue nfq_handle_packet nfq_set_mode
-    add2group nfq_set_queue_flags nfq_set_queue_maxlen nfq_set_verdict
-    add2group nfq_set_verdict2 nfq_set_verdict_batch
-    add2group nfq_set_verdict_batch2 nfq_set_verdict_mark
-  setgroup ipv4 nfq_ip_get_hdr
-    add2group nfq_ip_set_transport_header nfq_ip_mangle nfq_ip_snprintf
-    setgroup ip_internals nfq_ip_set_checksum
-  setgroup ipv6 nfq_ip6_get_hdr
-    add2group nfq_ip6_set_transport_header nfq_ip6_mangle nfq_ip6_snprintf
-  setgroup nfq_cfg nfq_nlmsg_cfg_put_cmd
-    add2group nfq_nlmsg_cfg_put_params nfq_nlmsg_cfg_put_qmaxlen
-  setgroup nfq_verd nfq_nlmsg_verdict_put
-    add2group nfq_nlmsg_verdict_put_mark nfq_nlmsg_verdict_put_pkt
-  setgroup nlmsg nfq_nlmsg_parse
-    add2group nfq_nlmsg_put
-  setgroup pktbuff pktb_alloc
-    add2group pktb_data pktb_len pktb_mangle pktb_mangled
-    add2group pktb_free
-    setgroup otherfns pktb_tailroom
-      add2group pktb_mac_header pktb_network_header pktb_transport_header
-      setgroup uselessfns pktb_push
-        add2group pktb_pull pktb_put pktb_trim
-  setgroup tcp nfq_tcp_get_hdr
-    add2group nfq_tcp_get_payload nfq_tcp_get_payload_len
-    add2group nfq_tcp_snprintf nfq_tcp_mangle_ipv4 nfq_tcp_mangle_ipv6
-    setgroup tcp_internals nfq_tcp_compute_checksum_ipv4
-      add2group nfq_tcp_compute_checksum_ipv6
-  setgroup udp nfq_udp_get_hdr
-    add2group nfq_udp_get_payload nfq_udp_get_payload_len
-    add2group nfq_udp_mangle_ipv4 nfq_udp_mangle_ipv6 nfq_udp_snprintf
-    setgroup udp_internals nfq_udp_compute_checksum_ipv4
-      add2group nfq_udp_compute_checksum_ipv6
-  setgroup Printing nfq_snprintf_xml
-  setgroup icmp nfq_icmp_get_hdr
-}
-function setgroup
-{
-  mv $1.3 $2.3
-  BASE=$2
-}
-function add2group
-{
-  for i in $@
-  do
-    ln -sf $BASE.3 $i.3
-  done
-}
-main