aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/local.mk
diff options
context:
space:
mode:
authorAlexander Bantyev <balsoft@balsoft.ru>2023-03-01 14:01:45 +0400
committerAlexander Bantyev <balsoft@balsoft.ru>2023-03-01 14:01:45 +0400
commitdd0aab2f94a6cef69d6219c3d363de76a11ed663 (patch)
tree11f6cec340a31646a21959028b4a931a3e6a9503 /doc/manual/local.mk
parent21fb1a5ec2f554cf70628ce13561e984f7dccf18 (diff)
Documentation: process #include directives
Diffstat (limited to 'doc/manual/local.mk')
-rw-r--r--doc/manual/local.mk41
1 files changed, 28 insertions, 13 deletions
diff --git a/doc/manual/local.mk b/doc/manual/local.mk
index 52b1aedd8..b6540e8e3 100644
--- a/doc/manual/local.mk
+++ b/doc/manual/local.mk
@@ -26,9 +26,20 @@ dummy-env = env -i \
nix-eval = $(dummy-env) $(bindir)/nix eval --experimental-features nix-command -I nix/corepkgs=corepkgs --store dummy:// --impure --raw
+# re-implement mdBook's include directive to make it usable for terminal output and for proper @docroot@ substitution
+define process-includes
+ while read -r line; do \
+ filename=$$(sed 's/{{#include \(.*\)}}/\1/'<<< $$line); \
+ matchline=$$(sed 's|/|\\/|g' <<< $$line); \
+ sed -i "/$$matchline/r $$(dirname $(2))/$$filename" $(2); \
+ sed -i "s/$$matchline//" $(2); \
+ done < <(grep '{{#include' $(1))
+endef
+
$(d)/%.1: $(d)/src/command-ref/%.md
@printf "Title: %s\n\n" "$$(basename $@ .1)" > $^.tmp
@cat $^ >> $^.tmp
+ @$(call process-includes,$^,$^.tmp)
$(trace-gen) lowdown -sT man --nroff-nolinks -M section=1 $^.tmp -o $@
@rm $^.tmp
@@ -45,21 +56,17 @@ $(d)/nix.conf.5: $(d)/src/command-ref/conf-file.md
@rm $^.tmp
$(d)/src/SUMMARY.md: $(d)/src/SUMMARY.md.in $(d)/src/command-ref/new-cli
- $(trace-gen) cat doc/manual/src/SUMMARY.md.in | while IFS= read line; do if [[ $$line = @manpages@ ]]; then cat doc/manual/src/command-ref/new-cli/SUMMARY.md; else echo "$$line"; fi; done > $@.tmp
- @mv $@.tmp $@
+ @cp $< $@
+ @$(call process-includes,$@,$@)
$(d)/src/command-ref/new-cli: $(d)/nix.json $(d)/generate-manpage.nix $(bindir)/nix
@rm -rf $@
$(trace-gen) $(nix-eval) --write-to $@.tmp --expr 'import doc/manual/generate-manpage.nix { toplevel = builtins.readFile $<; }'
- @# @docroot@: https://nixos.org/manual/nix/unstable/contributing/hacking.html#docroot-variable
- $(trace-gen) sed -i $@.tmp/*.md -e 's^@docroot@^../..^g'
@mv $@.tmp $@
$(d)/src/command-ref/conf-file.md: $(d)/conf-file.json $(d)/generate-options.nix $(d)/src/command-ref/conf-file-prefix.md $(bindir)/nix
@cat doc/manual/src/command-ref/conf-file-prefix.md > $@.tmp
- @# @docroot@: https://nixos.org/manual/nix/unstable/contributing/hacking.html#docroot-variable
- $(trace-gen) $(nix-eval) --expr 'import doc/manual/generate-options.nix (builtins.fromJSON (builtins.readFile $<))' \
- | sed -e 's^@docroot@^..^g'>> $@.tmp
+ $(trace-gen) $(nix-eval) --expr 'import doc/manual/generate-options.nix (builtins.fromJSON (builtins.readFile $<))' >> $@.tmp;
@mv $@.tmp $@
$(d)/nix.json: $(bindir)/nix
@@ -72,9 +79,7 @@ $(d)/conf-file.json: $(bindir)/nix
$(d)/src/language/builtins.md: $(d)/builtins.json $(d)/generate-builtins.nix $(d)/src/language/builtins-prefix.md $(bindir)/nix
@cat doc/manual/src/language/builtins-prefix.md > $@.tmp
- @# @docroot@: https://nixos.org/manual/nix/unstable/contributing/hacking.html#docroot-variable
- $(trace-gen) $(nix-eval) --expr 'import doc/manual/generate-builtins.nix (builtins.fromJSON (builtins.readFile $<))' \
- | sed -e 's^@docroot@^..^g' >> $@.tmp
+ $(trace-gen) $(nix-eval) --expr 'import doc/manual/generate-builtins.nix (builtins.fromJSON (builtins.readFile $<))' >> $@.tmp;
@cat doc/manual/src/language/builtins-suffix.md >> $@.tmp
@mv $@.tmp $@
@@ -91,6 +96,8 @@ install: $(mandir)/man1/nix3-manpages
man: doc/manual/generated/man1/nix3-manpages
all: doc/manual/generated/man1/nix3-manpages
+# FIXME: unify with how the other man pages are generated.
+# this one works differently and does not use any of the amenities provided by `/mk/lib.mk`.
$(mandir)/man1/nix3-manpages: doc/manual/generated/man1/nix3-manpages
@mkdir -p $(DESTDIR)$$(dirname $@)
$(trace-install) install -m 0644 $$(dirname $<)/* $(DESTDIR)$$(dirname $@)
@@ -110,9 +117,17 @@ doc/manual/generated/man1/nix3-manpages: $(d)/src/command-ref/new-cli
$(docdir)/manual/index.html: $(MANUAL_SRCS) $(d)/book.toml $(d)/anchors.jq $(d)/custom.css $(d)/src/SUMMARY.md $(d)/src/command-ref/new-cli $(d)/src/command-ref/conf-file.md $(d)/src/language/builtins.md
$(trace-gen) \
- set -euo pipefail; \
- RUST_LOG=warn mdbook build doc/manual -d $(DESTDIR)$(docdir)/manual.tmp 2>&1 \
- | { grep -Fv "because fragment resolution isn't implemented" || :; }
+ tmp="$$(mktemp -d)"; \
+ cp -r doc/manual "$$tmp"; \
+ find "$$tmp" -name '*.md' | while read -r file; do \
+ $(call process-includes,$$file,$$file); \
+ docroot="$$(realpath --relative-to="$$(dirname "$$file")" $$tmp/manual/src)"; \
+ sed -i "s,@docroot@,$$docroot,g" "$$file"; \
+ done; \
+ set -euo pipefail; \
+ RUST_LOG=warn mdbook build "$$tmp/manual" -d $(DESTDIR)$(docdir)/manual.tmp 2>&1 \
+ | { grep -Fv "because fragment resolution isn't implemented" || :; }; \
+ rm -rf "$$tmp/manual"
@rm -rf $(DESTDIR)$(docdir)/manual
@mv $(DESTDIR)$(docdir)/manual.tmp/html $(DESTDIR)$(docdir)/manual
@rm -rf $(DESTDIR)$(docdir)/manual.tmp