diff mbox series

[libmnl] build: doc: get rid of the need for manual updating of Makefile

Message ID 20210718034722.25321-1-duncan_roe@optusnet.com.au
State Accepted
Delegated to: Pablo Neira
Headers show
Series [libmnl] build: doc: get rid of the need for manual updating of Makefile | expand

Commit Message

Duncan Roe July 18, 2021, 3:47 a.m. UTC
There used to be 3 things in doxygen/Makefile.am that developers had to update:

1. The dependency list (i.e. all C sources)

2. The setgroup lines, which renamed each module man page to be the page for the
   first described function. setgroup also set the target for:

3. The add2group lines, which symlinked pages for other documented functions
   in the group.

The new system eliminates all of the above.

Signed-off-by: Duncan Roe <duncan_roe@optusnet.com.au>
---
 doxygen.cfg.in      |  1 +
 doxygen/Makefile.am | 71 ++++++++++++++++++++-------------------------
 2 files changed, 32 insertions(+), 40 deletions(-)

Comments

Pablo Neira Ayuso Aug. 1, 2021, 10:39 a.m. UTC | #1
On Sun, Jul 18, 2021 at 01:47:22PM +1000, Duncan Roe wrote:
> There used to be 3 things in doxygen/Makefile.am that developers had to update:
> 
> 1. The dependency list (i.e. all C sources)
> 
> 2. The setgroup lines, which renamed each module man page to be the page for the
>    first described function. setgroup also set the target for:
> 
> 3. The add2group lines, which symlinked pages for other documented functions
>    in the group.
> 
> The new system eliminates all of the above.

Applied, thanks.
diff mbox series

Patch

diff --git a/doxygen.cfg.in b/doxygen.cfg.in
index 1e42e44..ae31dbe 100644
--- a/doxygen.cfg.in
+++ b/doxygen.cfg.in
@@ -18,5 +18,6 @@  SEARCHENGINE           = NO
 GENERATE_LATEX         = NO
 LATEX_CMD_NAME         = latex
 GENERATE_MAN           = YES
+MAN_LINKS              = YES
 HAVE_DOT               = @HAVE_DOT@
 DOT_TRANSPARENT        = YES
diff --git a/doxygen/Makefile.am b/doxygen/Makefile.am
index e0598ab..29078de 100644
--- a/doxygen/Makefile.am
+++ b/doxygen/Makefile.am
@@ -1,10 +1,6 @@ 
 if HAVE_DOXYGEN
 
-# Be sure to add new source files to this table
-doc_srcs = $(top_srcdir)/src/attr.c     \
-           $(top_srcdir)/src/callback.c \
-           $(top_srcdir)/src/nlmsg.c    \
-           $(top_srcdir)/src/socket.c
+doc_srcs = $(shell find $(top_srcdir)/src -name '*.c')
 
 doxyfile.stamp: $(doc_srcs) Makefile.am
 	rm -rf html man
@@ -20,43 +16,37 @@  doxyfile.stamp: $(doc_srcs) Makefile.am
 	[ ! -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.
+# We need to use bash for its associative array facility
+# (`bash -p` prevents import of functions from the environment).
 # The command has to be a single line so the functions work
+# and so `make` gives all lines to `bash -c`
 # (hence ";\" at the end of every line but the last).
-	main() { set -e; cd man/man3; rm -f _*;\
-setgroup attr mnl_attr_get_type;\
-  add2group mnl_attr_get_len mnl_attr_get_payload_len mnl_attr_get_payload;\
-  add2group mnl_attr_ok mnl_attr_next mnl_attr_type_valid mnl_attr_validate;\
-  add2group mnl_attr_validate2 mnl_attr_parse mnl_attr_parse_nested;\
-  add2group mnl_attr_parse_payload mnl_attr_get_u8 mnl_attr_get_u16;\
-  add2group mnl_attr_get_u32 mnl_attr_get_u64 mnl_attr_get_str mnl_attr_put;\
-  add2group mnl_attr_put_u8 mnl_attr_put_u16 mnl_attr_put_u32 mnl_attr_put_u64;\
-  add2group mnl_attr_put_str mnl_attr_put_strz mnl_attr_nest_start;\
-  add2group mnl_attr_put_check mnl_attr_put_u8_check mnl_attr_put_u16_check;\
-  add2group mnl_attr_put_u32_check mnl_attr_put_u64_check;\
-  add2group mnl_attr_put_str_check mnl_attr_put_strz_check;\
-  add2group mnl_attr_nest_start_check mnl_attr_nest_end mnl_attr_nest_cancel;\
-setgroup batch mnl_nlmsg_batch_start;\
-  add2group mnl_nlmsg_batch_stop mnl_nlmsg_batch_next mnl_nlmsg_batch_reset;\
-  add2group mnl_nlmsg_batch_size mnl_nlmsg_batch_head mnl_nlmsg_batch_current;\
-  add2group mnl_nlmsg_batch_is_empty;\
-setgroup callback mnl_cb_run;\
-  add2group mnl_cb_run2;\
-setgroup nlmsg mnl_nlmsg_size;\
-  add2group mnl_nlmsg_get_payload_len mnl_nlmsg_put_header;\
-  add2group mnl_nlmsg_put_extra_header mnl_nlmsg_get_payload;\
-  add2group mnl_nlmsg_get_payload_offset mnl_nlmsg_ok mnl_nlmsg_next;\
-  add2group mnl_nlmsg_get_payload_tail mnl_nlmsg_seq_ok mnl_nlmsg_portid_ok;\
-  add2group mnl_nlmsg_fprintf;\
-setgroup socket mnl_socket_get_fd;\
-  add2group mnl_socket_get_portid mnl_socket_open mnl_socket_open2;\
-  add2group mnl_socket_fdopen mnl_socket_bind mnl_socket_sendto;\
-  add2group mnl_socket_recvfrom mnl_socket_close mnl_socket_setsockopt;\
-  add2group mnl_socket_getsockopt;\
+	/bin/bash -p -c 'declare -A renamed_page;\
+main(){ set -e; cd man/man3; rm -f _*;\
+  count_real_pages;\
+  rename_real_pages;\
+  make_symlinks;\
 };\
-setgroup() { mv $$1.3 $$2.3; BASE=$$2; };\
-add2group() { for i in $$@; do ln -sf $$BASE.3 $$i.3; done; };\
-main
+count_real_pages(){ page_count=0;\
+  for i in $$(ls -S);\
+  do head -n1 $$i | grep -E -q '^\.so' && break;\
+    page_count=$$(($$page_count + 1));\
+  done;\
+  first_link=$$(($$page_count + 1));\
+};\
+rename_real_pages(){ for i in $$(ls -S | head -n$$page_count);\
+  do for j in $$(ls -S | tail -n+$$first_link);\
+    do grep -E -q $$i$$ $$j && break;\
+    done;\
+    mv -f $$i $$j;\
+    renamed_page[$$i]=$$j;\
+  done;\
+};\
+make_symlinks(){ for j in $$(ls -S | tail -n+$$first_link);\
+  do ln -sf $${renamed_page[$$(cat $$j | cut -f2 -d/)]} $$j;\
+  done;\
+};\
+main'
 
 	touch doxyfile.stamp
 
@@ -67,7 +57,8 @@  clean-local:
 	rm -rf $(top_srcdir)/doxygen/man $(top_srcdir)/doxygen/html
 install-data-local:
 	mkdir -p $(DESTDIR)$(mandir)/man3
-	cp --no-dereference --preserve=links,mode,timestamps man/man3/*.3 $(DESTDIR)$(mandir)/man3/
+	cp --no-dereference --preserve=links,mode,timestamps man/man3/*.3\
+	  $(DESTDIR)$(mandir)/man3/
 
 # make distcheck needs uninstall-local
 uninstall-local: