]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
doc: support html post processing in all cases
authorPádraig Brady <P@draigBrady.com>
Tue, 9 Dec 2025 17:07:13 +0000 (17:07 +0000)
committerPádraig Brady <P@draigBrady.com>
Wed, 10 Dec 2025 16:02:30 +0000 (16:02 +0000)
Previously the html-local make rule only worked for `make html`.
Instead add support for `make doc/coreutils.html` or `make web-manual`
through the use of a makeinfo wrapper.

* doc/local.mk: Move post processing from here to ...
* build-aux/makeinfo-wrapper.sh: ... here.
* cfg.mk: Ensure our wrapper is called with MAKEINFO.
Also pass --no-node-files so redirection html files
are not created for each anchor.

build-aux/makeinfo-wrapper.sh [new file with mode: 0755]
cfg.mk
doc/local.mk

diff --git a/build-aux/makeinfo-wrapper.sh b/build-aux/makeinfo-wrapper.sh
new file mode 100755 (executable)
index 0000000..41b7ad4
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+# makeinfo wrapper that post-processes HTML output to replace _002d with -,
+# only on lines containing "option", corresponding to our @optAnchor macro.
+# Note texi uses "-" in anchors for spaces, hence why it escapes - with _002d.
+
+makeinfo "$@" || exit
+
+process_html()
+{
+  sed_anchor_cleanup=\
+'/id=.*_002doption/{ s/id="\([^"]*\)_002doption/id="\1/g; s/_002d/-/g; }'
+
+  sed -e "$sed_anchor_cleanup" "$1" > "$1.t" &&
+  mv "$1.t" "$1"
+}
+
+case " $* " in
+  *" --html"*)
+    # Find the output file/directory
+    output=""
+    next_is_output=false
+    for arg in "$@"; do
+      if [ "$next_is_output" = true ]; then
+        output="$arg"
+        break
+      fi
+      case "$arg" in
+        -o) next_is_output=true ;;
+        --output=*) output="${arg#--output=}" ;;
+      esac
+    done
+
+    # Process the output file/directory
+    if test -n "$output"; then
+      test -f "$output" && NAMES='*' || NAMES='*.html'
+      find "$output" -name "$NAMES" -type f |
+        # dash doesn't support read -d '' yet.
+        while IFS= read -r htmlfile; do process_html "$htmlfile"; done
+    fi
+    ;;
+esac
diff --git a/cfg.mk b/cfg.mk
index df4926da592a7a47caac6a3ff49b0de163ba83bf..e0d90cf831b2ad4ddd64411a6b02c96456c4144b 100644 (file)
--- a/cfg.mk
+++ b/cfg.mk
 # Used in maint.mk's web-manual rule
 manual_title = Core GNU utilities
 
+# html post processing
+export MAKEINFO = $(abs_top_srcdir)/build-aux/makeinfo-wrapper.sh
+# Don't create node redirection files for each anchor
+gendocs_options_ = --common --no-node-files
+
 # Use the direct link.  This is guaranteed to work immediately, while
 # it can take a while for the faster mirror links to become usable.
 url_dir_list = https://ftp.gnu.org/gnu/$(PACKAGE)
index 1287fca857a7798f3774eb286e0efd8cd752ae18..a1efbe82e516056d5484cc7f02eed7b3bbaebb57 100644 (file)
@@ -132,12 +132,4 @@ sc-lower-case-var:
 
 check-local: check-texinfo
 
-# Post-process generated HTML to clean up anchor IDs
-_sed_anchor_cleanup = \
-  -e '/id=.*_002doption/ { s/id="\([^"]*\)_002doption/id="\1/g; s/_002d/-/g; }'
-html-local: $(HTMLS)
-       $(AM_V_GEN)for htmlfile in $(HTMLS); do \
-         sed $(_sed_anchor_cleanup) $$htmlfile > $$htmlfile-t \
-           && mv $$htmlfile-t $$htmlfile; done
-
 .PHONY: html-local