diff --git a/docs/.gitignore b/docs/.gitignore
index 3a1fe66a79e..94f516c74b4 100644
--- a/docs/.gitignore
+++ b/docs/.gitignore
@@ -18,34 +18,3 @@ src/code/hss.svg
src/code/hss_es.svg
src/code/task-state-transitions.svg
src/code/task-state-transitions_es.svg
-
-# Troff manpages generated from .adoc by the asciidoctor manpage backend.
-man/man1/
-man/man3/
-man/man9/
-
-# po4a-translated man trees.
-man/ar/*
-man/bg/*
-man/ckb/*
-man/cs/*
-man/da/*
-man/de/*
-man/es/*
-man/fr/*
-man/hu/*
-man/it/*
-man/ka/*
-man/nb/*
-man/pl/*
-man/pt/*
-man/pt_BR/*
-man/ro/*
-man/ru/*
-man/sai/*
-man/sk/*
-man/sv/*
-man/tr/*
-man/uk/*
-man/vi/*
-man/zh_CN/*
diff --git a/docs/man/an-old-fixed.tmac b/docs/man/an-old-fixed.tmac
deleted file mode 100644
index 38c27813e55..00000000000
--- a/docs/man/an-old-fixed.tmac
+++ /dev/null
@@ -1,838 +0,0 @@
-.\" an-old.tmac
-.\"
-.\" Copyright (C) 1989-2020 Free Software Foundation, Inc.
-.\" Written by James Clark (jjc@jclark.com)
-.\"
-.\" This file is part of groff.
-.\"
-.\" groff is free software; you can redistribute it and/or modify it
-.\" under the terms of the GNU General Public License as published by
-.\" the Free Software Foundation, either version 3 of the License, or
-.\" (at your option) any later version.
-.\"
-.\" groff is distributed in the hope that it will be useful, but WITHOUT
-.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-.\" or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-.\" License for more details.
-.\"
-.\" You should have received a copy of the GNU General Public License
-.\" along with this program. If not, see
-.\" .
-.
-.
-.\" The file man.local is loaded at the end. Put local additions there.
-.\" If you need to add things to TH, use '.am1 TH'.
-.
-.if !\n(.g \
-. ab groff man macros require groff extensions; aborting
-.
-.do if d RI .nx
-.
-.do mso devtag.tmac
-.
-.do nr *groff_an-old_tmac_C \n[.cp]
-.cp 0
-.
-.\" Define a string for use in diagnostic messages.
-.ds an-old an-old.tmac\"
-.
-.if (\n[.x]\n[.y] < 118) \{\
-. ds an-msg \*[an-old]: groff man macros require groff 1.18 or later,\"
-. as an-msg " but found groff \n[.x].\n[.y]; aborting\"
-. ab \*[an-msg]
-.\}
-.
-.de an-warn
-. tm \*[an-old]:\\n[.F]:\\n[.c]: warning: \\$*
-..
-.
-.de an-style-warn
-. if \\n[CHECKSTYLE] \
-. tm \*[an-old]:\\n[.F]:\\n[.c]: style: \\$*
-..
-.
-.nr need_eo_h 0
-.nr need_col2 0
-.
-.nr an-first 1
-.
-.nr an-html 0
-.if '\*[.T]'html' .nr an-html 1
-.
-.\" Define alternate requests to handle continuous rendering.
-.\"
-.\" This .ne replacement avoids page breaks; instead, the page length is
-.\" increased to the necessary amount (this is needed for tables).
-.de an-ne
-. ie \\n[.$] \
-. nr an-need (v;\\$*)
-. el \
-. nr an-need 1v
-. if (\\n[an-need] >= \\n[.t]) \
-. pl +(\\n[an-need]u - \\n[.t]u + 1v)
-..
-.
-.\" This .bp replacement adjusts the page length to the current position
-.\" so that no empty lines are inserted.
-.de an-bp
-. br
-. pl \\n[nl]u
-. an-real-bp \\$*
-..
-.
-.\" We need an end macro for continuous rendering as well, to flush any
-.\" pending output line and write the footer for the final man page
-.\" rendered.
-.de1 an-end
-. nr % 1
-. pl +4v
-. fl
-. sp 3
-. an-p-footer
-. pl \\n[nl]u
-..
-.
-.\" Move macros into place for continuous rendering.
-.de an-set-up-continuous-rendering
-. rn ne an-real-ne
-. rn bp an-real-bp
-. rn an-ne ne
-. rn an-bp bp
-. em an-end
-..
-.
-.de an-set-margin
-. nr an-level 1
-. nr an-margin \\n[IN]
-. nr an-saved-margin1 \\n[IN]
-. nr an-prevailing-indent \\n[IN]
-. nr an-saved-prevailing-indent1 \\n[IN]
-..
-.
-.ds an-extra1 \" empty
-.ds an-extra2 \" empty
-.ds an-extra3 \" empty
-.
-.\" .TH title section extra1 extra2 extra3
-.de1 TH
-. if ((\\n[.$] < 2) : (\\n[.$] > 5)) \
-. an-style-warn .\\$0 expects 2 to 5 arguments, got \\n[.$]
-. if \\n[an-html] \{\
-. DEVTAG-TL
-. nop \\$1
-. DEVTAG-EO-TL
-. \}
-.
-. DT
-.
-. nr PS 10z \" default point size
-. nr PS-SS 10z
-. nr PS-SH 10.95z
-. nr VS 12p
-.
-. \" use sizes similar to LaTeX
-. if t \{\
-. ie (\\n[S] == 11) \{\
-. nr PS 10.95z
-. nr PS-SS 10.95z
-. nr PS-SH 12z
-. nr VS 13.6p
-. \}
-. el \{\
-. if (\\n[S] == 12) \{\
-. nr PS 12z
-. nr PS-SS 12z
-. nr PS-SH 14.4z
-. nr VS 14.5p
-. \}
-. \}
-. \}
-.
-. ps \\n[PS]u
-. vs \\n[VS]u
-.
-. \" Restore parameters that a previous man page might have messed up.
-. ad \\*[AD]
-. hy \\n[HY]
-. ll \\n[LL]u
-. ss 12
-.
-. PD
-. an-set-margin
-.
-. nr an-tag-sep 1n
-. nr an-no-space-flag 0
-. nr an-break-flag 0
-. nr an-div? 0
-.
-. ds an-title "\\$1\"
-. if \\n[CT] .stringup an-title
-. ds an-section "\\$2\"
-. ie (\\n[.$] > 4) .ds an-extra3 "\\$5\"
-. el \{ .ie '\\$2'1' .ds an-extra3 General Commands Manual\"
-. el \{ .ie '\\$2'2' .ds an-extra3 System Calls Manual\"
-. el \{ .ie '\\$2'3' .ds an-extra3 Library Functions Manual\"
-. el \{ .ie '\\$2'3p' .ds an-extra3 Perl Programmer's Reference Guide\"
-. el \{ .ie '\\$2'4' .ds an-extra3 Kernel Interfaces Manual\"
-. el \{ .ie '\\$2'5' .ds an-extra3 File Formats Manual\"
-. el \{ .ie '\\$2'6' .ds an-extra3 Games Manual\"
-. el \{ .ie '\\$2'7' .ds an-extra3 Miscellaneous Information Manual\"
-. el \{ .ie '\\$2'8' .ds an-extra3 System Manager's Manual\"
-. el \{ .ie '\\$2'9' .ds an-extra3 Kernel Developer's Manual\"
-. el .ds an-extra3 \" empty
-. \}\}\}\}\}\}\}\}\}\}
-.
-. ie \\n[cR] \
-. an-header
-. el \{\
-. wh 0 an-header
-. wh -1i an-footer
-. wh \\n[FT]u an-p-footer
-.
-. if \\n[nl] \{\
-. ie \\n[C] .bp (\\n[%] + 1)
-. el .bp 1
-. \}
-. \}
-.
-. ds an-extra1 "\\$3\"
-. ie (\\n[.$] > 3) .ds an-extra2 "\\$4\"
-. el .ds an-extra2 \" empty
-..
-.
-.\" BSD compatibility macros: .AT and .UC
-.
-.de1 AT
-. ds an-extra2 "7th Edition\"
-. if "\\$1"3" .ds an-extra2 "7th Edition\"
-. if "\\$1"4" .ds an-extra2 "System III\"
-. if "\\$1"5" \{\
-. ie "\\$2"" .ds an-extra2 "System V\"
-. el .ds an-extra2 "System V Release \\$2\"
-. \}
-..
-.
-.de1 UC
-. ds an-extra2 "3rd Berkeley Distribution\"
-. if "\\$1"3" .ds an-extra2 "3rd Berkeley Distribution\"
-. if "\\$1"4" .ds an-extra2 "4th Berkeley Distribution\"
-. if "\\$1"5" .ds an-extra2 "4.2 Berkeley Distribution\"
-. if "\\$1"6" .ds an-extra2 "4.3 Berkeley Distribution\"
-. if "\\$1"7" .ds an-extra2 "4.4 Berkeley Distribution\"
-..
-.
-.de1 DT
-. ta T .5i \" This sets tabs every .5 inches
-..
-.
-.de1 PD
-. ie \\n[.$] .nr PD (v;\\$1)
-. el .nr PD (.4v >? \n[.V])
-..
-.
-.\" Redefine these to customize the header & footer
-.
-.de1 PT
-. tl '\\*[an-title](\\*[an-section])'\\*[an-extra3]'\
-\\*[an-title](\\*[an-section])'
-..
-.
-.de1 BT
-. if r ps4html \
-. return
-. ie \\n[D] \{\
-. if o .tl '\\*[an-extra2]'\\*[an-extra1]'\\*[an-page-string]'
-. if e .tl '\\*[an-page-string]'\\*[an-extra1]'\\*[an-extra2]'
-. \}
-. el \
-. tl '\\*[an-extra2]'\\*[an-extra1]'\\*[an-page-string]'
-..
-.
-.de1 an-header
-. if \\n[cR] \{\
-. ie \\n[an-first] \
-. nr an-first 0
-. el \
-. sp .5i
-. \}
-. ev an-1
-. ps \\n[PS]u
-. vs \\n[VS]u
-. lt \\n[LT]u
-. ie \\n[an-html] \
-. tl ''''
-. el \{\
-. if !\\n[cR] \
-. sp .5i
-. PT
-. ie !\\n[cR] \
-. sp |1i
-. el \
-. sp .5i
-. \}
-. ev
-. ns
-..
-.
-.de1 an-footer
-' bp
-..
-.
-.af an-page-letter a
-.
-.de1 an-p-footer
-. ev an-1
-. ps \\n[PS]u
-. vs \\n[VS]u
-. lt \\n[LT]u
-. ie \\n[an-html] \{\
-. ds an-page-string \" empty
-. ds an-extra1 \" empty
-. ds an-extra2 \" empty
-. \}
-. el \{\
-. ie r X \{\
-. ie (\\n[%] > \\n[X]) \{\
-. nr an-page-letter (\\n[%] - \\n[X])
-. ds an-page-string \\n[X]\\n[an-page-letter]\"
-. \}
-. el \
-. ds an-page-string \\n[%]\"
-. \}
-. el \{\
-. ie \\n[cR] \
-. ds an-page-string "\\*[an-title](\\*[an-section])\"
-. el \
-. ds an-page-string \\n[%]\"
-. \}
-. \}
-. BT
-. ev
-..
-.
-.de1 SH
-. sp \\n[PD]u
-. an-set-margin
-. fi
-. in \\n[an-margin]u
-. ti 0
-. nr need_eo_h 1
-. DEVTAG-SH 1
-. itc 1 an-trap
-. nr an-no-space-flag 1
-. nr an-break-flag 1
-. ps \\n[PS-SH]u
-. ft \\*[HF]
-. ne (2v + 1u)
-. if \\n[.$] \{\
-. ds an-section-heading \\$*\"
-. if \\n[CS] .stringup an-section-heading
-\&\\*[an-section-heading]
-. \}
-..
-.
-.de1 SS
-. sp \\n[PD]u
-. an-set-margin
-. fi
-. in \\n[IN]u
-. ti \\n[SN]u
-. nr need_eo_h 1
-. DEVTAG-SH 2
-. itc 1 an-trap
-. nr an-no-space-flag 1
-. nr an-break-flag 1
-. ps \\n[PS-SS]u
-. ft \\*[HF]
-. ne (2v + 1u)
-. if \\n[.$] \&\\$*
-..
-.
-.de1 B
-. itc 1 an-trap
-. ft B
-. if \\n[.$] \&\\$*
-..
-.
-.de1 I
-. itc 1 an-trap
-. ft I
-. if \\n[.$] \,\\$*\/
-..
-.
-.de1 SM
-. itc 1 an-trap
-. ps -1
-. if \\n[.$] \&\\$*
-..
-.
-.de1 SB
-. itc 1 an-trap
-. ps -1
-. ft B
-. if \\n[.$] \&\\$*
-..
-.
-.de1 TP
-. sp \\n[PD]u
-. if \\n[.$] .nr an-prevailing-indent (n;\\$1)
-. itc 1 an-trap
-. in 0
-. if !\\n[an-div?] \{\
-. ll -\\n[an-margin]u
-. di an-div
-. \}
-. nr an-div? 1
-..
-.
-.de1 an-trap
-. if \\n[need_eo_h]>0 .DEVTAG-EO-H
-. nr need_eo_h 0
-. if \\n[need_col2]>0 .DEVTAG-COL 2
-. nr need_col2 0
-. ft R
-. ps \\n[PS]u
-. vs \\n[VS]u
-. if \\n[an-break-flag] \{\
-. br
-. nr an-break-flag 0
-. \}
-. if \\n[an-no-space-flag] \{\
-. ns
-. nr an-no-space-flag 0
-. \}
-. if \\n[an-div?] .an-do-tag
-..
-.
-.de an-do-tag
-. br
-. di
-. nr an-div? 0
-. ll
-. \" We must emit the diversion in a separate environment to assure
-. \" that a possible margin character is printed correctly.
-. ev an-2
-. evc 0
-. mc
-. nf
-. in \\n[an-margin]u
-. ie (\\n[dl] + \\n[an-tag-sep] > \\n[an-prevailing-indent]) \{\
-. ne (2v + 1u)
-. an-div
-. ev
-. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
-. \}
-. el \{\
-. \" In nroff mode, the indentation value should be an integer
-. \" multiple of the character cell, to avoid different results
-. \" compared to the .ie part above.
-. ne (1v + 1u)
-. DEVTAG-COL 1
-. an-div
-. sp -1
-. ev
-. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
-. DEVTAG-COL-NEXT 2
-. \}
-..
-.
-.de1 LP
-. sp \\n[PD]u
-. ps \\n[PS]u
-. vs \\n[VS]u
-. ft R
-. in \\n[an-margin]u
-. nr an-prevailing-indent \\n[IN]
-. ns
-..
-.
-.als PP LP
-.als P LP
-.
-.de1 IP
-. ie !\\n[.$] \{\
-. ps \\n[PS]u
-. vs \\n[VS]u
-. ft R
-. sp \\n[PD]u
-. ne (1v + 1u)
-. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
-. ns
-. \}
-. el \{\
-. ie (\\n[.$] - 1) .TP "\\$2"
-. el .TP
-\&\\$1
-. \}
-..
-.
-.de1 HP
-. ps \\n[PS]u
-. vs \\n[VS]u
-. ft R
-. sp \\n[PD]u
-. ne (1v + 1u)
-. if \\n[.$] .nr an-prevailing-indent (n;\\$1)
-. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
-. ti \\n[an-margin]u
-. DEVTAG-COL 1
-. nr need_col2 1
-. ns
-..
-.
-.de1 RI
-. if (\\n[.$] < 2) \
-. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
-. if \\n[.$] \{\
-. ds an-result \&\f[R]\\$1\"
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \,\f[I]\\$1\f[R]\/\\$2\"
-. shift 2
-. \}
-. if \\n[.$] .as an-result \,\f[I]\\$1\"
-\\*[an-result]
-. ft R
-. \}
-..
-.
-.de1 IR
-. if (\\n[.$] < 2) \
-. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
-. if \\n[.$] \{\
-. ds an-result \&\f[I]\,\\$1\f[R]\"
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \/\\$1\f[I]\,\\$2\f[R]\"
-. shift 2
-. \}
-. if \\n[.$] .as an-result \/\\$1\"
-\\*[an-result]
-. ft R
-. \}
-..
-.
-.de1 IB
-. if (\\n[.$] < 2) \
-. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
-. if \\n[.$] \{\
-. ds an-result \&\f[I]\,\\$1\"
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \/\f[B]\\$1\f[I]\,\\$2\"
-. shift 2
-. \}
-. if \\n[.$] .as an-result \/\f[B]\\$1\"
-\\*[an-result]
-. ft R
-. \}
-..
-.
-.de1 BI
-. if (\\n[.$] < 2) \
-. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
-. if \\n[.$] \{\
-. ds an-result \&\f[B]\\$1\"
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \,\f[I]\\$1\f[B]\/\\$2\"
-. shift 2
-. \}
-. if \\n[.$] .as an-result \,\f[I]\\$1\"
-\\*[an-result]
-. ft R
-. \}
-..
-.
-.de1 RB
-. if (\\n[.$] < 2) \
-. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
-. ds an-result \&\"
-. while (\\n[.$] >= 2) \{\
-. as an-result \f[R]\\$1\f[B]\\$2\"
-. shift 2
-. \}
-. if \\n[.$] .as an-result \f[R]\\$1\"
-\\*[an-result]
-. ft R
-..
-.
-.de1 BR
-. if (\\n[.$] < 2) \
-. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
-. ds an-result \&\"
-. while (\\n[.$] >= 2) \{\
-. as an-result \f[B]\\$1\f[R]\\$2\"
-. shift 2
-. \}
-. if \\n[.$] .as an-result \f[B]\\$1\"
-\\*[an-result]
-. ft R
-..
-.
-.de1 RS
-. nr an-saved-margin\\n[an-level] \\n[an-margin]
-. nr an-saved-prevailing-indent\\n[an-level] \\n[an-prevailing-indent]
-. ie \\n[.$] .nr an-margin +(n;\\$1)
-. el .nr an-margin +\\n[an-prevailing-indent]
-. in \\n[an-margin]u
-. nr an-prevailing-indent \\n[IN]
-. nr an-level +1
-..
-.
-.de1 RE
-. ie \\n[.$] .nr an-RE-requested-level \\$1
-. el .nr an-RE-requested-level (\\n[an-level] - 1)
-. ie \\n[.$] \{\
-. if (\\n[an-RE-requested-level] = \\n[an-level]) \
-. ds an-RE-problem redundant; already at level \\n[an-level]\"
-. if (\\n[an-RE-requested-level] > \\n[an-level]) \
-. ds an-RE-problem too large\"
-. if (\\n[an-RE-requested-level] < 1) \
-. ds an-RE-problem too small\"
-. if d an-RE-problem \
-. an-style-warn argument """\\$1""" to .\\$0 \\*[an-RE-problem]
-. rm an-RE-problem
-. \}
-. el .if !(\\n[an-RE-requested-level]) .an-style-warn unbalanced .\\$0
-. rr an-RE-requested-level
-. ie \\n[.$] .nr an-level ((;\\$1) \\n[an-level])
-. el .nr an-level -1
-. nr an-level (1 >? \\n[an-level])
-. nr an-margin \\n[an-saved-margin\\n[an-level]]
-. nr an-prevailing-indent \\n[an-saved-prevailing-indent\\n[an-level]]
-. in \\n[an-margin]u
-..
-.
-.\" table support
-.
-.de1 TS
-. \" If continuous rendering, tell tbl not to use keeps.
-. ie \\n[cR] \
-. nr 3usekeeps 0
-. el \
-. nr 3usekeeps 1
-. sp \\n[PD]u
-. if \\n[an-html] \{\
-. nr an-TS-ll \\n[.l]
-. ll 1000n
-. \}
-. HTML-IMAGE
-..
-.
-.de1 T&
-..
-.
-.de1 TE
-. HTML-IMAGE-END
-. if \\n[an-html] \
-. ll \\n[an-TS-ll]u
-..
-.
-.\" dummy equation delimiters
-.de1 EQ
-. if \\n[an-html] \{\
-. nr an-EQ-ll \\n[.l]
-. ll 1000n
-. \}
-. HTML-IMAGE
-..
-.de1 EN
-. HTML-IMAGE-END
-. if \\n[an-html] \
-. ll \\n[an-EQ-ll]u
-..
-.
-.de1 R
-\c
-. ie \\n[.$] \{\
-. ds an-msg 'R' is a string (producing the registered sign),\"
-. as an-msg " not a macro\"
-. an-warn \\*[an-msg]
-. rm an-msg
-. nop \\$*
-. \}
-. el \{\
-. ie c\[rg] \
-. nop \[rg]\c
-. el \
-. nop (Reg.)\c
-. \}
-..
-.
-.\" These strings must work in compatibility mode also.
-.
-.ds S \s'\\n(PSu'\"
-.ie c\[tm] .ds Tm \(tm\"
-.el .ds Tm (TM)\"
-.ie c\[lq] .ds lq \(lq\"
-.el .ds lq ""\"
-.ie c\[rq] .ds rq \(rq\"
-.el .ds rq ""\"
-.
-.\" For UTF-8, map the hyphen-minus to itself to facilitate copy and
-.\" paste of code examples, file names, and URLs embedding it.
-.
-.if '\*[.T]'utf8' \{\
-. char \- \N'45'
-. char - \N'45'
-.\}
-.
-.\" Load man macro extensions.
-.mso an-ext.tmac
-.
-.\" Load local modifications.
-.mso man.local
-.
-.\" Set each rendering parameter only if its -[dr] option or man.local
-.\" did not.
-.
-.\" continuous rendering (one long page)
-.if !r cR \{\
-. ie n \
-. nr cR 1
-. el \
-. nr cR 0
-.\}
-.
-.\" continuous page numbering over multiple documents
-.\"
-.\" We must use consecutive page numbers when using PostScript to
-.\" generate HTML images; we must not reset the page number at the
-.\" beginning of each document (the 'ps4html' register is automatically
-.\" added to the command line by the pre-HTML preprocessor).
-.\"
-.\" \n[C] may get set to 1 redundantly in the below; we could replace
-.\" that with a complex conditional, but it doesn't seem to be worth the
-.\" trouble given AT&T-compatible restrictions on '!' placement.
-.ie !r C \
-. nr C 0
-.el \
-. if !\n[C] \
-. if \n[an-html] \{\
-. tm \*[an-old]: ignoring continuous page numbering in HTML output
-. nr C 1
-. \}
-.if \n[an-html] \
-. nr C 1
-.if r ps4html \
-. nr C 1
-.
-.\" emit diagnostics for man page style problems
-.if !r CHECKSTYLE \
-. nr CHECKSTYLE 0
-.
-.\" full capitalization of section headings
-.if !r CS \
-. nr CS 0
-.
-.\" full capitalization of page title
-.if !r CT \
-. nr CT 0
-.
-.\" double-sided layout
-.ie !r D \
-. nr D 0
-.el \
-. if \n[D] \
-. if \n[an-html] \{\
-. tm \*[an-old]: ignoring double-sided layout in HTML output
-. nr D 0
-. \}
-.
-.\" footer distance
-.if !r FT \
-. nr FT (-.5i)
-.
-.\" hyphenation mode
-.if !r HY \{\
-. \" No page breaks occur in continuous rendering.
-. ie \n[cR] \
-. nr HY 4
-. el \
-. nr HY 6
-.\}
-.
-.\" standard indentation
-.if !r IN \{\
-. \" We must select an integer indentation value for nroff; see comment
-. \" in an-do-tag.
-. ie t \
-. nr IN 7.2n
-. el \
-. nr IN 7n
-.\}
-.
-.\" line length
-.if !r LL \{\
-. \" If in troff mode, respect device default.
-. ie t \
-. nr LL \n[.l]
-. \" Otherwise, override nroff mode default of 65n.
-. el \
-. nr LL 78n
-.\}
-.
-.\" title (header, footer) length
-.if !r LT \
-. nr LT \n[LL]u
-.
-.\" starting page number
-.\"
-.\" Unlike most of these parameters, we do not set a default for P;
-.\" groff supplies a default starting page number (1). Also, when
-.\" rendering for the HTML output device, page numbers are concealed and
-.\" used for internal purposes like image embedding.
-.\"
-.if r P \
-. if \n[an-html] \
-. if !(\n[P] = 1) \{\
-. tm \*[an-old]: ignoring starting page number in HTML output
-. rr P
-. \}
-.
-.if !r ps4html \
-. if r P \
-. pn 0\n[P]
-.
-.\" point size
-.if !r S \{\
-. nr S 10
-. if '\*[.T]'X75-12' \
-. nr S 12
-. if '\*[.T]'X100-12' \
-. nr S 12
-.\}
-.
-.\" subsection indentation
-.if !r SN \
-. nr SN 3n
-.
-.\" page number after which to apply letter suffixes
-.\"
-.\" Unlike most of these parameters, we do not set a default for X; only
-.\" the macro an-p-footer uses it.
-.if r X \
-. if \n[an-html] \{\
-. tm \*[an-old]: ignoring page letter suffixing in HTML output
-. rr X
-. \}
-.
-.\" adjustment mode
-.if !d AD \
-. ds AD b\"
-.
-.\" (sub)section heading font
-.if !d HF \
-. ds HF B\"
-.
-.if \n[cR] \
-. an-set-up-continuous-rendering
-.
-.cp \n[*groff_an-old_tmac_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" fill-column: 72
-.\" End:
-.\" vim: set filetype=groff textwidth=72:
diff --git a/docs/man/images/Images_info.adoc b/docs/man/images/Images_info.adoc
deleted file mode 100644
index b8461c51656..00000000000
--- a/docs/man/images/Images_info.adoc
+++ /dev/null
@@ -1,60 +0,0 @@
-# Images in man pages
-
-Images in man pages are not recommended. It's better to use an ASCII representation (ASCII art) if possible.
-
-## Timing diagrams
-
-Timing diagrams can be created using link:https://wavedrom.com/editor.html[Wavedrom]. +
-To use them in a man page as ASCII art folloe these steps:
-
-1. Save in a text file
-2. Use link:https://github.com/Wren6991/asciiwave[asciiwave] to create the ascii output
-3. Copy into the man page using `.br` as line separator
-
-Here an example:
-
-.toggle2nist: Timing diagram source code
-----
-{'signal': [
- {name: 'in', wave: 'lHx.l.Hx.l'},
- {name: 'on', wave: 'lh.l......' },
- {name: 'off', wave: 'l.....h.l.' },
- {name: 'is-on', wave: 'l..h....l.' },
-]}
-----
-
-
-
-.toggle2nist: ASCII art generated by asciiwave
-----
- ┐ ┏─────xxxxxxxxxxxx┐ ┏─────xxxxxxxxxxxx┐
-.br
-in : └─────┛ xxxxxxxxxxxx└───────────┛ xxxxxxxxxxxx└─────
-.br
- ┐ ┌───────────┐
-.br
-on : └─────┘ └─────────────────────────────────────────
- ┐ ┌───────────┐
-.br
-off : └───────────────────────────────────┘ └───────────
-.br
- ┐ ┌─────────────────────────────┐
-.br
-is-on: └─────────────────┘ └───────────
-
-----
-
-
-## Diagrams
-
-ASCII art diagrams can be drawn e.g., with link:https://asciiflow.com/[asciiflow]
-
-.toggle2nist: Diagram drawn with asciiflow
-----
- toggle2nist
- ┌───────────┐
- ──┤in on├──
- │ │
- ──┤is-on off├──
- └───────────┘
-----
diff --git a/docs/man/images/toggle.json b/docs/man/images/toggle.json
deleted file mode 100644
index 08c2f3e5b59..00000000000
--- a/docs/man/images/toggle.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{signal: [
- {name: 'in', wave: 'lPlP'},
- {name: 'out', wave: 'lh.l' },
-]}
diff --git a/docs/man/images/toggle.ps b/docs/man/images/toggle.ps
deleted file mode 100644
index a9b5d70cbd0..00000000000
Binary files a/docs/man/images/toggle.ps and /dev/null differ
diff --git a/docs/man/images/toggle2nist.json b/docs/man/images/toggle2nist.json
deleted file mode 100644
index 32d68278a02..00000000000
--- a/docs/man/images/toggle2nist.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{'signal': [
- {name: 'in', wave: 'lHx.l.Hx.l'},
- {name: 'on', wave: 'lh.l......' },
- {name: 'off', wave: 'l.....h.l.' },
- {name: 'is-on', wave: 'l..h....l.' },
-]}
diff --git a/docs/man/images/toggle2nist.ps b/docs/man/images/toggle2nist.ps
deleted file mode 100644
index 0ed194d8825..00000000000
Binary files a/docs/man/images/toggle2nist.ps and /dev/null differ
diff --git a/docs/man/stylesheet.9 b/docs/man/stylesheet.9
deleted file mode 100644
index 461245f921d..00000000000
--- a/docs/man/stylesheet.9
+++ /dev/null
@@ -1,2 +0,0 @@
-.HEAD " " \
-
\ No newline at end of file
diff --git a/docs/po4a.cfg b/docs/po4a.cfg
index 3d9c8a1b29e..dfe73958541 100644
--- a/docs/po4a.cfg
+++ b/docs/po4a.cfg
@@ -371,122 +371,122 @@
[type: Text_def] src/gui/panelui_handler.py $lang:build/adoc/$lang/gui/panelui_handler.py
-[type: man_def] man/man1/pi500_vfd.1 $lang:man/$lang/man1/pi500_vfd.1
-[type: man_def] man/man1/thermistor.1 $lang:man/$lang/man1/thermistor.1
-[type: man_def] man/man1/wj200_vfd.1 $lang:man/$lang/man1/wj200_vfd.1
-[type: man_def] man/man9/abs.9 $lang:man/$lang/man9/abs.9
-[type: man_def] man/man9/abs_s32.9 $lang:man/$lang/man9/abs_s32.9
-[type: man_def] man/man9/and2.9 $lang:man/$lang/man9/and2.9
-[type: man_def] man/man9/axistest.9 $lang:man/$lang/man9/axistest.9
-[type: man_def] man/man9/bin2gray.9 $lang:man/$lang/man9/bin2gray.9
-[type: man_def] man/man9/biquad.9 $lang:man/$lang/man9/biquad.9
-[type: man_def] man/man9/bitslice.9 $lang:man/$lang/man9/bitslice.9
-[type: man_def] man/man9/bitwise.9 $lang:man/$lang/man9/bitwise.9
-[type: man_def] man/man9/bldc.9 $lang:man/$lang/man9/bldc.9
-[type: man_def] man/man9/blend.9 $lang:man/$lang/man9/blend.9
-[type: man_def] man/man9/carousel.9 $lang:man/$lang/man9/carousel.9
-[type: man_def] man/man9/charge_pump.9 $lang:man/$lang/man9/charge_pump.9
-[type: man_def] man/man9/clarke2.9 $lang:man/$lang/man9/clarke2.9
-[type: man_def] man/man9/clarke3.9 $lang:man/$lang/man9/clarke3.9
-[type: man_def] man/man9/clarkeinv.9 $lang:man/$lang/man9/clarkeinv.9
-[type: man_def] man/man9/comp.9 $lang:man/$lang/man9/comp.9
-[type: man_def] man/man9/conv_bit_float.9 $lang:man/$lang/man9/conv_bit_float.9
-[type: man_def] man/man9/conv_bit_s32.9 $lang:man/$lang/man9/conv_bit_s32.9
-[type: man_def] man/man9/conv_bit_u32.9 $lang:man/$lang/man9/conv_bit_u32.9
-[type: man_def] man/man9/conv_float_s32.9 $lang:man/$lang/man9/conv_float_s32.9
-[type: man_def] man/man9/conv_float_u32.9 $lang:man/$lang/man9/conv_float_u32.9
-[type: man_def] man/man9/conv_s32_bit.9 $lang:man/$lang/man9/conv_s32_bit.9
-[type: man_def] man/man9/conv_s32_float.9 $lang:man/$lang/man9/conv_s32_float.9
-[type: man_def] man/man9/conv_s32_u32.9 $lang:man/$lang/man9/conv_s32_u32.9
-[type: man_def] man/man9/conv_u32_bit.9 $lang:man/$lang/man9/conv_u32_bit.9
-[type: man_def] man/man9/conv_u32_float.9 $lang:man/$lang/man9/conv_u32_float.9
-[type: man_def] man/man9/conv_u32_s32.9 $lang:man/$lang/man9/conv_u32_s32.9
-[type: man_def] man/man9/corexy_by_hal.9 $lang:man/$lang/man9/corexy_by_hal.9
-[type: man_def] man/man9/dbounce.9 $lang:man/$lang/man9/dbounce.9
-[type: man_def] man/man9/ddt.9 $lang:man/$lang/man9/ddt.9
-[type: man_def] man/man9/deadzone.9 $lang:man/$lang/man9/deadzone.9
-[type: man_def] man/man9/demux.9 $lang:man/$lang/man9/demux.9
-[type: man_def] man/man9/differential.9 $lang:man/$lang/man9/differential.9
-[type: man_def] man/man9/edge.9 $lang:man/$lang/man9/edge.9
-[type: man_def] man/man9/eoffset_per_angle.9 $lang:man/$lang/man9/eoffset_per_angle.9
-[type: man_def] man/man9/estop_latch.9 $lang:man/$lang/man9/estop_latch.9
-[type: man_def] man/man9/feedcomp.9 $lang:man/$lang/man9/feedcomp.9
-[type: man_def] man/man9/filter_kalman.9 $lang:man/$lang/man9/filter_kalman.9
-[type: man_def] man/man9/flipflop.9 $lang:man/$lang/man9/flipflop.9
-[type: man_def] man/man9/gantry.9 $lang:man/$lang/man9/gantry.9
-[type: man_def] man/man9/gearchange.9 $lang:man/$lang/man9/gearchange.9
-[type: man_def] man/man9/gray2bin.9 $lang:man/$lang/man9/gray2bin.9
-[type: man_def] man/man9/histobins.9 $lang:man/$lang/man9/histobins.9
-[type: man_def] man/man9/hypot.9 $lang:man/$lang/man9/hypot.9
-[type: man_def] man/man9/ilowpass.9 $lang:man/$lang/man9/ilowpass.9
-[type: man_def] man/man9/integ.9 $lang:man/$lang/man9/integ.9
-[type: man_def] man/man9/invert.9 $lang:man/$lang/man9/invert.9
-[type: man_def] man/man9/joyhandle.9 $lang:man/$lang/man9/joyhandle.9
-[type: man_def] man/man9/knob2float.9 $lang:man/$lang/man9/knob2float.9
-[type: man_def] man/man9/latencybins.9 $lang:man/$lang/man9/latencybins.9
-[type: man_def] man/man9/limit1.9 $lang:man/$lang/man9/limit1.9
-[type: man_def] man/man9/limit2.9 $lang:man/$lang/man9/limit2.9
-[type: man_def] man/man9/limit3.9 $lang:man/$lang/man9/limit3.9
-[type: man_def] man/man9/lincurve.9 $lang:man/$lang/man9/lincurve.9
-[type: man_def] man/man9/logic.9 $lang:man/$lang/man9/logic.9
-[type: man_def] man/man9/lowpass.9 $lang:man/$lang/man9/lowpass.9
-[type: man_def] man/man9/lut5.9 $lang:man/$lang/man9/lut5.9
-[type: man_def] man/man9/maj3.9 $lang:man/$lang/man9/maj3.9
-[type: man_def] man/man9/match8.9 $lang:man/$lang/man9/match8.9
-[type: man_def] man/man9/matrix_kb.9 $lang:man/$lang/man9/matrix_kb.9
-[type: man_def] man/man9/max31855.9 $lang:man/$lang/man9/max31855.9
-[type: man_def] man/man9/mesa_7i65.9 $lang:man/$lang/man9/mesa_7i65.9
-[type: man_def] man/man9/mesa_pktgyro_test.9 $lang:man/$lang/man9/mesa_pktgyro_test.9
-[type: man_def] man/man9/message.9 $lang:man/$lang/man9/message.9
-[type: man_def] man/man9/millturn.9 $lang:man/$lang/man9/millturn.9
-[type: man_def] man/man9/minmax.9 $lang:man/$lang/man9/minmax.9
-[type: man_def] man/man9/moveoff.9 $lang:man/$lang/man9/moveoff.9
-[type: man_def] man/man9/mult2.9 $lang:man/$lang/man9/mult2.9
-[type: man_def] man/man9/multiclick.9 $lang:man/$lang/man9/multiclick.9
-[type: man_def] man/man9/multiswitch.9 $lang:man/$lang/man9/multiswitch.9
-[type: man_def] man/man9/mux16.9 $lang:man/$lang/man9/mux16.9
-[type: man_def] man/man9/mux2.9 $lang:man/$lang/man9/mux2.9
-[type: man_def] man/man9/mux4.9 $lang:man/$lang/man9/mux4.9
-[type: man_def] man/man9/mux8.9 $lang:man/$lang/man9/mux8.9
-[type: man_def] man/man9/mux_generic.9 $lang:man/$lang/man9/mux_generic.9
-[type: man_def] man/man9/near.9 $lang:man/$lang/man9/near.9
-[type: man_def] man/man9/not.9 $lang:man/$lang/man9/not.9
-[type: man_def] man/man9/offset.9 $lang:man/$lang/man9/offset.9
-[type: man_def] man/man9/ohmic.9 $lang:man/$lang/man9/ohmic.9
-[type: man_def] man/man9/oneshot.9 $lang:man/$lang/man9/oneshot.9
-[type: man_def] man/man9/or2.9 $lang:man/$lang/man9/or2.9
-[type: man_def] man/man9/orient.9 $lang:man/$lang/man9/orient.9
-[type: man_def] man/man9/pid.9 $lang:man/$lang/man9/pid.9
-[type: man_def] man/man9/plasmac.9 $lang:man/$lang/man9/plasmac.9
-[type: man_def] man/man9/pwmgen.9 $lang:man/$lang/man9/pwmgen.9
-[type: man_def] man/man9/sample_hold.9 $lang:man/$lang/man9/sample_hold.9
-[type: man_def] man/man9/scale.9 $lang:man/$lang/man9/scale.9
-[type: man_def] man/man9/select8.9 $lang:man/$lang/man9/select8.9
-[type: man_def] man/man9/serport.9 $lang:man/$lang/man9/serport.9
-[type: man_def] man/man9/sim_axis_hardware.9 $lang:man/$lang/man9/sim_axis_hardware.9
-[type: man_def] man/man9/sim_encoder.9 $lang:man/$lang/man9/sim_encoder.9
-[type: man_def] man/man9/sim_home_switch.9 $lang:man/$lang/man9/sim_home_switch.9
-[type: man_def] man/man9/sim_matrix_kb.9 $lang:man/$lang/man9/sim_matrix_kb.9
-[type: man_def] man/man9/sim_parport.9 $lang:man/$lang/man9/sim_parport.9
-[type: man_def] man/man9/simple_tp.9 $lang:man/$lang/man9/simple_tp.9
-[type: man_def] man/man9/sim_spindle.9 $lang:man/$lang/man9/sim_spindle.9
-[type: man_def] man/man9/sphereprobe.9 $lang:man/$lang/man9/sphereprobe.9
-[type: man_def] man/man9/spindle.9 $lang:man/$lang/man9/spindle.9
-[type: man_def] man/man9/spindle_monitor.9 $lang:man/$lang/man9/spindle_monitor.9
-[type: man_def] man/man9/steptest.9 $lang:man/$lang/man9/steptest.9
-[type: man_def] man/man9/sum2.9 $lang:man/$lang/man9/sum2.9
-[type: man_def] man/man9/thc.9 $lang:man/$lang/man9/thc.9
-[type: man_def] man/man9/thcud.9 $lang:man/$lang/man9/thcud.9
-[type: man_def] man/man9/threadtest.9 $lang:man/$lang/man9/threadtest.9
-[type: man_def] man/man9/time.9 $lang:man/$lang/man9/time.9
-[type: man_def] man/man9/timedelay.9 $lang:man/$lang/man9/timedelay.9
-[type: man_def] man/man9/timedelta.9 $lang:man/$lang/man9/timedelta.9
-[type: man_def] man/man9/toggle2nist.9 $lang:man/$lang/man9/toggle2nist.9
-[type: man_def] man/man9/toggle.9 $lang:man/$lang/man9/toggle.9
-[type: man_def] man/man9/tristate_bit.9 $lang:man/$lang/man9/tristate_bit.9
-[type: man_def] man/man9/tristate_float.9 $lang:man/$lang/man9/tristate_float.9
-[type: man_def] man/man9/updown.9 $lang:man/$lang/man9/updown.9
-[type: man_def] man/man9/userkins.9 $lang:man/$lang/man9/userkins.9
-[type: man_def] man/man9/wcomp.9 $lang:man/$lang/man9/wcomp.9
-[type: man_def] man/man9/xhc_hb04_util.9 $lang:man/$lang/man9/xhc_hb04_util.9
-[type: man_def] man/man9/xor2.9 $lang:man/$lang/man9/xor2.9
+[type: man_def] build/man/man1/pi500_vfd.1 $lang:build/man/$lang/man1/pi500_vfd.1
+[type: man_def] build/man/man1/thermistor.1 $lang:build/man/$lang/man1/thermistor.1
+[type: man_def] build/man/man1/wj200_vfd.1 $lang:build/man/$lang/man1/wj200_vfd.1
+[type: man_def] build/man/man9/abs.9 $lang:build/man/$lang/man9/abs.9
+[type: man_def] build/man/man9/abs_s32.9 $lang:build/man/$lang/man9/abs_s32.9
+[type: man_def] build/man/man9/and2.9 $lang:build/man/$lang/man9/and2.9
+[type: man_def] build/man/man9/axistest.9 $lang:build/man/$lang/man9/axistest.9
+[type: man_def] build/man/man9/bin2gray.9 $lang:build/man/$lang/man9/bin2gray.9
+[type: man_def] build/man/man9/biquad.9 $lang:build/man/$lang/man9/biquad.9
+[type: man_def] build/man/man9/bitslice.9 $lang:build/man/$lang/man9/bitslice.9
+[type: man_def] build/man/man9/bitwise.9 $lang:build/man/$lang/man9/bitwise.9
+[type: man_def] build/man/man9/bldc.9 $lang:build/man/$lang/man9/bldc.9
+[type: man_def] build/man/man9/blend.9 $lang:build/man/$lang/man9/blend.9
+[type: man_def] build/man/man9/carousel.9 $lang:build/man/$lang/man9/carousel.9
+[type: man_def] build/man/man9/charge_pump.9 $lang:build/man/$lang/man9/charge_pump.9
+[type: man_def] build/man/man9/clarke2.9 $lang:build/man/$lang/man9/clarke2.9
+[type: man_def] build/man/man9/clarke3.9 $lang:build/man/$lang/man9/clarke3.9
+[type: man_def] build/man/man9/clarkeinv.9 $lang:build/man/$lang/man9/clarkeinv.9
+[type: man_def] build/man/man9/comp.9 $lang:build/man/$lang/man9/comp.9
+[type: man_def] build/man/man9/conv_bit_float.9 $lang:build/man/$lang/man9/conv_bit_float.9
+[type: man_def] build/man/man9/conv_bit_s32.9 $lang:build/man/$lang/man9/conv_bit_s32.9
+[type: man_def] build/man/man9/conv_bit_u32.9 $lang:build/man/$lang/man9/conv_bit_u32.9
+[type: man_def] build/man/man9/conv_float_s32.9 $lang:build/man/$lang/man9/conv_float_s32.9
+[type: man_def] build/man/man9/conv_float_u32.9 $lang:build/man/$lang/man9/conv_float_u32.9
+[type: man_def] build/man/man9/conv_s32_bit.9 $lang:build/man/$lang/man9/conv_s32_bit.9
+[type: man_def] build/man/man9/conv_s32_float.9 $lang:build/man/$lang/man9/conv_s32_float.9
+[type: man_def] build/man/man9/conv_s32_u32.9 $lang:build/man/$lang/man9/conv_s32_u32.9
+[type: man_def] build/man/man9/conv_u32_bit.9 $lang:build/man/$lang/man9/conv_u32_bit.9
+[type: man_def] build/man/man9/conv_u32_float.9 $lang:build/man/$lang/man9/conv_u32_float.9
+[type: man_def] build/man/man9/conv_u32_s32.9 $lang:build/man/$lang/man9/conv_u32_s32.9
+[type: man_def] build/man/man9/corexy_by_hal.9 $lang:build/man/$lang/man9/corexy_by_hal.9
+[type: man_def] build/man/man9/dbounce.9 $lang:build/man/$lang/man9/dbounce.9
+[type: man_def] build/man/man9/ddt.9 $lang:build/man/$lang/man9/ddt.9
+[type: man_def] build/man/man9/deadzone.9 $lang:build/man/$lang/man9/deadzone.9
+[type: man_def] build/man/man9/demux.9 $lang:build/man/$lang/man9/demux.9
+[type: man_def] build/man/man9/differential.9 $lang:build/man/$lang/man9/differential.9
+[type: man_def] build/man/man9/edge.9 $lang:build/man/$lang/man9/edge.9
+[type: man_def] build/man/man9/eoffset_per_angle.9 $lang:build/man/$lang/man9/eoffset_per_angle.9
+[type: man_def] build/man/man9/estop_latch.9 $lang:build/man/$lang/man9/estop_latch.9
+[type: man_def] build/man/man9/feedcomp.9 $lang:build/man/$lang/man9/feedcomp.9
+[type: man_def] build/man/man9/filter_kalman.9 $lang:build/man/$lang/man9/filter_kalman.9
+[type: man_def] build/man/man9/flipflop.9 $lang:build/man/$lang/man9/flipflop.9
+[type: man_def] build/man/man9/gantry.9 $lang:build/man/$lang/man9/gantry.9
+[type: man_def] build/man/man9/gearchange.9 $lang:build/man/$lang/man9/gearchange.9
+[type: man_def] build/man/man9/gray2bin.9 $lang:build/man/$lang/man9/gray2bin.9
+[type: man_def] build/man/man9/histobins.9 $lang:build/man/$lang/man9/histobins.9
+[type: man_def] build/man/man9/hypot.9 $lang:build/man/$lang/man9/hypot.9
+[type: man_def] build/man/man9/ilowpass.9 $lang:build/man/$lang/man9/ilowpass.9
+[type: man_def] build/man/man9/integ.9 $lang:build/man/$lang/man9/integ.9
+[type: man_def] build/man/man9/invert.9 $lang:build/man/$lang/man9/invert.9
+[type: man_def] build/man/man9/joyhandle.9 $lang:build/man/$lang/man9/joyhandle.9
+[type: man_def] build/man/man9/knob2float.9 $lang:build/man/$lang/man9/knob2float.9
+[type: man_def] build/man/man9/latencybins.9 $lang:build/man/$lang/man9/latencybins.9
+[type: man_def] build/man/man9/limit1.9 $lang:build/man/$lang/man9/limit1.9
+[type: man_def] build/man/man9/limit2.9 $lang:build/man/$lang/man9/limit2.9
+[type: man_def] build/man/man9/limit3.9 $lang:build/man/$lang/man9/limit3.9
+[type: man_def] build/man/man9/lincurve.9 $lang:build/man/$lang/man9/lincurve.9
+[type: man_def] build/man/man9/logic.9 $lang:build/man/$lang/man9/logic.9
+[type: man_def] build/man/man9/lowpass.9 $lang:build/man/$lang/man9/lowpass.9
+[type: man_def] build/man/man9/lut5.9 $lang:build/man/$lang/man9/lut5.9
+[type: man_def] build/man/man9/maj3.9 $lang:build/man/$lang/man9/maj3.9
+[type: man_def] build/man/man9/match8.9 $lang:build/man/$lang/man9/match8.9
+[type: man_def] build/man/man9/matrix_kb.9 $lang:build/man/$lang/man9/matrix_kb.9
+[type: man_def] build/man/man9/max31855.9 $lang:build/man/$lang/man9/max31855.9
+[type: man_def] build/man/man9/mesa_7i65.9 $lang:build/man/$lang/man9/mesa_7i65.9
+[type: man_def] build/man/man9/mesa_pktgyro_test.9 $lang:build/man/$lang/man9/mesa_pktgyro_test.9
+[type: man_def] build/man/man9/message.9 $lang:build/man/$lang/man9/message.9
+[type: man_def] build/man/man9/millturn.9 $lang:build/man/$lang/man9/millturn.9
+[type: man_def] build/man/man9/minmax.9 $lang:build/man/$lang/man9/minmax.9
+[type: man_def] build/man/man9/moveoff.9 $lang:build/man/$lang/man9/moveoff.9
+[type: man_def] build/man/man9/mult2.9 $lang:build/man/$lang/man9/mult2.9
+[type: man_def] build/man/man9/multiclick.9 $lang:build/man/$lang/man9/multiclick.9
+[type: man_def] build/man/man9/multiswitch.9 $lang:build/man/$lang/man9/multiswitch.9
+[type: man_def] build/man/man9/mux16.9 $lang:build/man/$lang/man9/mux16.9
+[type: man_def] build/man/man9/mux2.9 $lang:build/man/$lang/man9/mux2.9
+[type: man_def] build/man/man9/mux4.9 $lang:build/man/$lang/man9/mux4.9
+[type: man_def] build/man/man9/mux8.9 $lang:build/man/$lang/man9/mux8.9
+[type: man_def] build/man/man9/mux_generic.9 $lang:build/man/$lang/man9/mux_generic.9
+[type: man_def] build/man/man9/near.9 $lang:build/man/$lang/man9/near.9
+[type: man_def] build/man/man9/not.9 $lang:build/man/$lang/man9/not.9
+[type: man_def] build/man/man9/offset.9 $lang:build/man/$lang/man9/offset.9
+[type: man_def] build/man/man9/ohmic.9 $lang:build/man/$lang/man9/ohmic.9
+[type: man_def] build/man/man9/oneshot.9 $lang:build/man/$lang/man9/oneshot.9
+[type: man_def] build/man/man9/or2.9 $lang:build/man/$lang/man9/or2.9
+[type: man_def] build/man/man9/orient.9 $lang:build/man/$lang/man9/orient.9
+[type: man_def] build/man/man9/pid.9 $lang:build/man/$lang/man9/pid.9
+[type: man_def] build/man/man9/plasmac.9 $lang:build/man/$lang/man9/plasmac.9
+[type: man_def] build/man/man9/pwmgen.9 $lang:build/man/$lang/man9/pwmgen.9
+[type: man_def] build/man/man9/sample_hold.9 $lang:build/man/$lang/man9/sample_hold.9
+[type: man_def] build/man/man9/scale.9 $lang:build/man/$lang/man9/scale.9
+[type: man_def] build/man/man9/select8.9 $lang:build/man/$lang/man9/select8.9
+[type: man_def] build/man/man9/serport.9 $lang:build/man/$lang/man9/serport.9
+[type: man_def] build/man/man9/sim_axis_hardware.9 $lang:build/man/$lang/man9/sim_axis_hardware.9
+[type: man_def] build/man/man9/sim_encoder.9 $lang:build/man/$lang/man9/sim_encoder.9
+[type: man_def] build/man/man9/sim_home_switch.9 $lang:build/man/$lang/man9/sim_home_switch.9
+[type: man_def] build/man/man9/sim_matrix_kb.9 $lang:build/man/$lang/man9/sim_matrix_kb.9
+[type: man_def] build/man/man9/sim_parport.9 $lang:build/man/$lang/man9/sim_parport.9
+[type: man_def] build/man/man9/simple_tp.9 $lang:build/man/$lang/man9/simple_tp.9
+[type: man_def] build/man/man9/sim_spindle.9 $lang:build/man/$lang/man9/sim_spindle.9
+[type: man_def] build/man/man9/sphereprobe.9 $lang:build/man/$lang/man9/sphereprobe.9
+[type: man_def] build/man/man9/spindle.9 $lang:build/man/$lang/man9/spindle.9
+[type: man_def] build/man/man9/spindle_monitor.9 $lang:build/man/$lang/man9/spindle_monitor.9
+[type: man_def] build/man/man9/steptest.9 $lang:build/man/$lang/man9/steptest.9
+[type: man_def] build/man/man9/sum2.9 $lang:build/man/$lang/man9/sum2.9
+[type: man_def] build/man/man9/thc.9 $lang:build/man/$lang/man9/thc.9
+[type: man_def] build/man/man9/thcud.9 $lang:build/man/$lang/man9/thcud.9
+[type: man_def] build/man/man9/threadtest.9 $lang:build/man/$lang/man9/threadtest.9
+[type: man_def] build/man/man9/time.9 $lang:build/man/$lang/man9/time.9
+[type: man_def] build/man/man9/timedelay.9 $lang:build/man/$lang/man9/timedelay.9
+[type: man_def] build/man/man9/timedelta.9 $lang:build/man/$lang/man9/timedelta.9
+[type: man_def] build/man/man9/toggle2nist.9 $lang:build/man/$lang/man9/toggle2nist.9
+[type: man_def] build/man/man9/toggle.9 $lang:build/man/$lang/man9/toggle.9
+[type: man_def] build/man/man9/tristate_bit.9 $lang:build/man/$lang/man9/tristate_bit.9
+[type: man_def] build/man/man9/tristate_float.9 $lang:build/man/$lang/man9/tristate_float.9
+[type: man_def] build/man/man9/updown.9 $lang:build/man/$lang/man9/updown.9
+[type: man_def] build/man/man9/userkins.9 $lang:build/man/$lang/man9/userkins.9
+[type: man_def] build/man/man9/wcomp.9 $lang:build/man/$lang/man9/wcomp.9
+[type: man_def] build/man/man9/xhc_hb04_util.9 $lang:build/man/$lang/man9/xhc_hb04_util.9
+[type: man_def] build/man/man9/xor2.9 $lang:build/man/$lang/man9/xor2.9
diff --git a/docs/src/Submakefile b/docs/src/Submakefile
index 7611b346612..50aa2061f32 100644
--- a/docs/src/Submakefile
+++ b/docs/src/Submakefile
@@ -44,11 +44,26 @@ DOC_SRCDIR=../docs/src
# docs/build/html//pdf/LinuxCNC_*_.pdf
# docs/build/adoc//... # po4a-translated source tree
#
-# Manpage troff stays at docs/man/ (input to docs build; also written by
-# halcompile and consumed by install-man).
+# Manpage troff is generated under build/, not committed to the source tree.
+# Written by halcompile and the docs build; consumed by install-man and the
+# run-in-place MANPATH.
+#
+# Layout follows the /usr/share/man hierarchy, NOT the build/html/ and
+# build/adoc/ convention used everywhere else in this tree:
+#
+# docs/build/man/manN # English (the C / default locale)
+# docs/build/man//manN # translations, keyed by locale
+#
+# This asymmetry is deliberate. man(1) resolves a MANPATH entry by locale,
+# reading //manN for a translation and falling back to
+# /manN for the default locale; putting English under an en/ subdir
+# would break a plain `MANPATH=.../build/man` under LANG=C. The cost is that
+# the English man tree is special-cased below (top-level manN, no en/ prefix),
+# unlike html/adoc which key every language including English under /.
DOC_BUILD := $(DOC_DIR)/build
DOC_OUT_HTML := $(DOC_BUILD)/html
DOC_OUT_ADOC := $(DOC_BUILD)/adoc
+DOC_MAN := $(DOC_BUILD)/man
# PDFs live under the html tree (docs/build/html//pdf/) so the html
# subtree is self-contained and can link them with relative paths.
@@ -59,13 +74,13 @@ ASCIIDOCTOR_DEFAULT_CSS := $(shell ruby -e 'require "asciidoctor"; print Asciido
LANGUAGES := $(strip $(shell sed -e's/#.*//' < $(DOC_DIR)/po4a.cfg | grep '^\[po4a_langs\]' | cut -d" " -f2-))
LANGUAGES_MATCH := $(shell echo $(LANGUAGES) | tr " " "|")
-GENERATED_MANPAGES += ../docs/man/man1/linuxcnc.1
-GENERATED_MANPAGES += $(patsubst ../docs/src/man/%.adoc, ../docs/man/%, $(wildcard ../docs/src/man/*/*.adoc))
+GENERATED_MANPAGES += $(DOC_MAN)/man1/linuxcnc.1
+GENERATED_MANPAGES += $(patsubst ../docs/src/man/%.adoc, $(DOC_MAN)/%, $(wildcard ../docs/src/man/man?/*.adoc))
MAN_SRCS = $(sort \
- $(wildcard $(DOC_DIR)/man/man1/*.1) \
- $(wildcard $(DOC_DIR)/man/man3/*.3) \
- $(wildcard $(DOC_DIR)/man/man9/*.9) \
+ $(wildcard $(DOC_MAN)/man1/*.1) \
+ $(wildcard $(DOC_MAN)/man3/*.3) \
+ $(wildcard $(DOC_MAN)/man9/*.9) \
$(GENERATED_MANPAGES))
$(DOC_OUT_ADOC)/en/man/man1/linuxcnc.1.adoc: $(DOC_SRCDIR)/man/man1/linuxcnc.1.adoc.in $(SRCDIR)/config.status
@@ -75,7 +90,7 @@ $(DOC_OUT_ADOC)/en/man/man1/linuxcnc.1.adoc: $(DOC_SRCDIR)/man/man1/linuxcnc.1.a
# linuxcnc.1 troff comes from the build-tree-generated .adoc above; the
# generic pattern rule at the end of this file expects sources under
# $(DOC_DIR)/src/man/, so override with an explicit rule.
-../docs/man/man1/linuxcnc.1: $(DOC_OUT_ADOC)/en/man/man1/linuxcnc.1.adoc
+$(DOC_MAN)/man1/linuxcnc.1: $(DOC_OUT_ADOC)/en/man/man1/linuxcnc.1.adoc
$(ECHO) Making manpage $(notdir $@)
@mkdir -p $(dir $@)
$(Q)asciidoctor --doctype=manpage \
@@ -248,7 +263,7 @@ endef
GENERATED_TRANSLATED = $(foreach l, $(LANGUAGES), \
$(DOC_OUT_ADOC)/$(l) \
$(DOC_OUT_HTML)/$(l) \
- $(DOC_DIR)/man/$(l) \
+ $(DOC_MAN)/$(l) \
)
# Time how long po4a takes to run if the system has the `time` command
@@ -270,7 +285,7 @@ endif
# auto-generated from the English manpages by gen_complist.py. It must
# exist before po4a is invoked, otherwise po4a aborts with "master file
# does not exist". gen_complist.py reads the manpage source list from
-# $(DOC_DIR)/man/, so changes to that set must invalidate the file --
+# $(DOC_MAN)/, so changes to that set must invalidate the file --
# hence $(MAN_SRCS) as a real prereq (the script is content-stable via
# write_if_changed, so re-running over the same set is a no-op for
# mtime, which keeps downstream po4a from re-firing every build).
@@ -333,9 +348,14 @@ endif
$(foreach L,en $(LANGUAGES),\
$(eval DOC_SRCS_$(call toUC,$(L))_SMALL := \
- $(filter-out Master_%,$(DOC_SRCS_$(call toUC,$(L))))))
+ $(filter-out Master_% man/% $(L)/man/%,$(DOC_SRCS_$(call toUC,$(L))))))
-DOC_SRCS_HTML = $(patsubst %.adoc, %.html, $(foreach p, $(DOC_SRCS), $(if $(findstring Master_, $(p)),, $p)))
+# Manpages are produced by the translated-manpage pipeline further
+# down (asciidoctor --doctype=manpage), not the generic adoc-to-html
+# rule. Filter them out so DOC_TARGETS_HTML_ does not claim the
+# same html//man/... output paths.
+DOC_SRCS_HTML = $(patsubst %.adoc, %.html, $(foreach p, $(DOC_SRCS), \
+ $(if $(findstring Master_, $(p)),, $(if $(findstring /man/, /$(p)),, $(p)))))
# Per-language HTML target lists. English files have no lang/ prefix in
# their source path; translated files already include $(L)/ in DOC_SRCS_$L.
@@ -349,7 +369,8 @@ $(foreach L,$(LANGUAGES), \
$(eval DOC_TARGETS_HTML_$(call toUC,$(L)) := \
$$(addprefix $(DOC_OUT_HTML)/, \
$$(patsubst %.adoc,%.html, \
- $$(filter-out $(L)/Master_%, $$(DOC_SRCS_$(call toUC,$(L))))))))
+ $$(filter-out $(L)/Master_% $(L)/man/%, \
+ $$(DOC_SRCS_$(call toUC,$(L))))))))
DOC_TARGETS_HTML = $(DOC_TARGETS_HTML_EN)
ifeq ($(BUILD_DOCS_TRANSLATED),yes)
DOC_TARGETS_HTML += $(foreach L,$(LANGUAGES),$(DOC_TARGETS_HTML_$(call toUC,$(L))))
@@ -365,15 +386,33 @@ DOC_TARGETS_XML += $(foreach L,$(LANGUAGES),$(DOC_TARGETS_XML_$(call toUC,$(L)))
endif
# Manpage HTML. English manpages live at docs/build/html/en/man/manN/X.html;
-# translated manpages mirror the layout under their own lang dir.
-MAN_HTML_TARGETS_EN := $(patsubst $(DOC_DIR)/man/%, $(DOC_OUT_HTML)/en/man/%.html, \
- $(filter-out $(foreach L,$(LANGUAGES),$(DOC_DIR)/man/$(L)/%), $(MAN_SRCS)))
+# translated manpages mirror the layout under their own lang dir. The
+# per-lang list is derived from po4a.cfg (authoritative source of which
+# manpages have a translated counterpart) rather than MAN_SRCS, which
+# would close a cycle through components_gen.adoc and over-include.
+# Every language renders the FULL English manpage set so the docs stay
+# uniform: translated where a po4a leg provides it, English fallback
+# otherwise (the per-page banner shows the completeness).
+MAN_EN_STEMS := $(patsubst $(DOC_MAN)/%, %, $(MAN_SRCS))
+MAN_HTML_TARGETS_EN := $(addprefix $(DOC_OUT_HTML)/en/man/, $(addsuffix .html, $(MAN_EN_STEMS)))
+# Stems that get a po4a-built per-language troff: AsciiDoc_def (committed
+# src/man/*.adoc, rendered per-lang via TRANSLATED_TROFF_RULE) and man_def
+# (the comp manpages, translated troff direct). Everything else is
+# English-only and gets an English troff copy per language (rule below) so
+# the per-language target set can be the full English set.
+PO4A_MANPAGE_STEMS := $(shell sed -ne 's|^\[type: AsciiDoc_def\] src/man/\([^ ]*\)\.adoc .*|\1|p' $(DOC_DIR)/po4a.cfg)
+PO4A_MANPAGE_STEMS += $(shell sed -ne 's|^\[type: man_def\] build/man/\([^ ]*\) .*|\1|p' $(DOC_DIR)/po4a.cfg)
+MAN_ENONLY_STEMS := $(filter-out $(sort $(PO4A_MANPAGE_STEMS)), $(MAN_EN_STEMS))
$(foreach L,$(LANGUAGES), \
$(eval MAN_HTML_TARGETS_$(call toUC,$(L)) := \
- $$(patsubst $(DOC_DIR)/man/$(L)/%, $(DOC_OUT_HTML)/$(L)/man/%.html, \
- $$(filter $(DOC_DIR)/man/$(L)/%, $$(MAN_SRCS)))))
+ $$(addprefix $(DOC_OUT_HTML)/$(L)/man/, \
+ $$(addsuffix .html, $$(MAN_EN_STEMS)))))
+ifeq ($(BUILD_DOCS_TRANSLATED),yes)
MAN_HTML_TARGETS = $(MAN_HTML_TARGETS_EN) \
$(foreach L,$(LANGUAGES),$(MAN_HTML_TARGETS_$(call toUC,$(L))))
+else
+MAN_HTML_TARGETS = $(MAN_HTML_TARGETS_EN)
+endif
# PDFs live in their own subtree alongside html/ and adoc/ so the html
# tree zips up cleanly without PDF bloat, matching the rest of the
@@ -421,7 +460,7 @@ clean: clean-manpages clean-translated
clean-manpages:
-rm -f $(GENERATED_MANPAGES)
# Remove generated alias man pages too.
- $(RM) $$(grep -lr '^\.so ' $(DOC_DIR)/man/man*)
+ $(RM) $$(grep -lr '^\.so ' $(DOC_MAN)/man*)
clean-translated:
-$(RM) -r $(GENERATED_TRANSLATED)
@@ -553,7 +592,7 @@ $(DOC_DIR)/.checkref-%-stamp: $$(DOC_TARGETS_HTML_$$(call uc,$$*)) \
@touch $@
-MAN_SRCS_NOSO = $(patsubst $(DOC_DIR)/man/%,%, \
+MAN_SRCS_NOSO = $(patsubst $(DOC_MAN)/%,%, \
$(shell grep -s -L '^\.so ' $(MAN_SRCS)))
PDF_MAN_ORDER := man1/linuxcnc.1 $(filter-out %/linuxcnc.1, $(filter man1/%, $(MAN_SRCS_NOSO))) \
@@ -603,8 +642,8 @@ $(foreach L,$(LANGUAGES), \
# Manpage HTML rule, parameterised over language tag (en / de / ...). The
-# English bucket reads troff from docs/man/manN; translated buckets read
-# from docs/man//manN. cssrel is ../../../ for both: each output
+# English bucket reads troff from docs/build/man/manN; translated buckets read
+# from docs/build/man//manN. cssrel is ../../../ for both: each output
# sits at docs/build/html//man/manN/X.html (4 levels under html/).
define MAN_HTML_RULE
$(DOC_OUT_HTML)/$(1)/man/%.html: $(2)/% $(DOC_SRCDIR)/docinfo.html
@@ -622,6 +661,10 @@ $(DOC_OUT_HTML)/$(1)/man/%.html: $(2)/% $(DOC_SRCDIR)/docinfo.html
F="$(DOC_OUT_ADOC)/$(1)/man/$$$$S/$$$$N"; \
elif [ -r "objects/man/$$$$S/$$$$N" ]; then \
F="objects/man/$$$$S/$$$$N"; \
+ elif [ -r "$(DOC_SRCDIR)/man/$$$$S/$$$$N" ]; then \
+ F="$(DOC_SRCDIR)/man/$$$$S/$$$$N"; \
+ elif [ -r "$(DOC_OUT_ADOC)/en/man/$$$$S/$$$$N" ]; then \
+ F="$(DOC_OUT_ADOC)/en/man/$$$$S/$$$$N"; \
else \
echo "Error: Cannot find manpage '$$<' in adoc format"; \
exit 1; \
@@ -648,9 +691,9 @@ $(DOC_OUT_HTML)/$(1)/man/%.html: $(2)/% $(DOC_SRCDIR)/docinfo.html
; \
fi;
endef
-$(eval $(call MAN_HTML_RULE,en,$(DOC_DIR)/man,$(DOC_SRCDIR)))
+$(eval $(call MAN_HTML_RULE,en,$(DOC_MAN),$(DOC_SRCDIR)))
$(foreach L,$(LANGUAGES), \
- $(eval $(call MAN_HTML_RULE,$(L),$(DOC_DIR)/man/$(L),$(DOC_OUT_ADOC)/$(L))))
+ $(eval $(call MAN_HTML_RULE,$(L),$(DOC_MAN)/$(L),$(DOC_OUT_ADOC)/$(L))))
#
# This function appends a section to the "manpages" HTML fragment called
@@ -671,7 +714,10 @@ ADD_HTML_MANPAGES = \
echo "" >> objects/index.incl; \
-objects/index.incl: $(GENERATED_MANPAGES) objects/var-MAN_HTML_TARGETS $(DOC_SRCDIR)/Submakefile
+# Depends on the English target list only (the index is built from it); the
+# full 9-language MAN_HTML_TARGETS would overflow a single bash arg
+# (MAX_ARG_STRLEN) once every language renders the whole manpage set.
+objects/index.incl: $(GENERATED_MANPAGES) objects/var-MAN_HTML_TARGETS_EN $(DOC_SRCDIR)/Submakefile
rm -f $@
$(call ADD_HTML_MANPAGES, 1, Commands and userspace components, $(filter $(DOC_OUT_HTML)/en/man/man1/%.html, $(MAN_HTML_TARGETS_EN))) \
$(call ADD_HTML_MANPAGES, 9, Realtime components and kernel modules, $(filter $(DOC_OUT_HTML)/en/man/man9/%.html, $(MAN_HTML_TARGETS_EN))) \
@@ -681,7 +727,7 @@ objects/index.incl: $(GENERATED_MANPAGES) objects/var-MAN_HTML_TARGETS $(DOC_SRC
$(call ADD_HTML_MANPAGES, 3, API: General, $(filter-out $(DOC_OUT_HTML)/en/man/man3/hal%.html, $(filter-out $(DOC_OUT_HTML)/en/man/man3/rtapi%.html, $(filter-out $(DOC_OUT_HTML)/en/man/man3/hm2%.html, $(filter $(DOC_OUT_HTML)/en/man/man3/%.html, $(MAN_HTML_TARGETS_EN)))))) \
# now make sure all English manpages made it into the html index
FAIL=0; \
- for F in $$(find $(DOC_DIR)/man/man* -maxdepth 2 -type f); do \
+ for F in $$(find $(DOC_MAN)/man* -maxdepth 2 -type f); do \
B=$$(basename $$F); \
if ! grep -q $$B $@; then \
FAIL=1; \
@@ -694,9 +740,12 @@ objects/index.incl: $(GENERATED_MANPAGES) objects/var-MAN_HTML_TARGETS $(DOC_SRC
done; \
if [ $$FAIL -ne 0 ]; then exit 1; fi
mkdir -p $(DOC_OUT_HTML)/en/man/man/images/
- find $(DOC_DIR)/man -maxdepth 3 -name "*.png" ! -name "grohtml*" -exec mv {} "$(DOC_OUT_HTML)/en/man/man/images/" \;
+ find $(DOC_MAN) -maxdepth 3 -name "*.png" ! -name "grohtml*" -exec mv {} "$(DOC_OUT_HTML)/en/man/man/images/" \;
-$(DOC_OUT_HTML)/%/index.html: $(DOC_OUT_ADOC)/%/index.tmpl ../VERSION $(DOC_SRCDIR)/index.foot
+# Translated landing pages append the same manpage index English uses; every
+# language now renders the full manpage set, so the relative man/ hrefs all
+# resolve under /man/ (no dead links).
+$(DOC_OUT_HTML)/%/index.html: $(DOC_OUT_ADOC)/%/index.tmpl objects/index.incl ../VERSION $(DOC_SRCDIR)/index.foot
@mkdir -p $(dir $@)
cat $(filter-out ../VERSION, $^) | \
sed "s/@VERSION@/`cat ../VERSION`/" | \
@@ -1086,12 +1135,12 @@ docclean:
-rm -f $(DOTFILES:.dot=.svg)
-MAN_DEPS := $(patsubst $(DOC_DIR)/man/%, depends/%.d, $(MAN_SRCS))
-$(MAN_DEPS): depends/%.d: $(DOC_DIR)/man/%
+MAN_DEPS := $(patsubst $(DOC_MAN)/%, depends/%.d, $(MAN_SRCS))
+$(MAN_DEPS): depends/%.d: $(DOC_MAN)/%
@echo Depending $(notdir $<)
@mkdir -p $(dir $@)
$(Q)echo -n "$(DOC_OUT_HTML)/en/man/$*.html: $<" > $@.tmp
- $(Q)grep '^\.so ' $< | awk '{ if ($$2 ~ /\//) printf " \\\n\t$(DOC_DIR)/man/%s", $$2; else printf " \\\n\t$(DOC_DIR)/man/$(*D)/%s", $$2 }' >> $@.tmp
+ $(Q)grep '^\.so ' $< | awk '{ if ($$2 ~ /\//) printf " \\\n\t$(DOC_MAN)/%s", $$2; else printf " \\\n\t$(DOC_MAN)/$(*D)/%s", $$2 }' >> $@.tmp
$(Q)echo >> $@.tmp
$(Q)mv -f $@.tmp $@
@@ -1127,8 +1176,8 @@ manpages: $(GENERATED_MANPAGES)
TARGETS += manpages
# make manpages from all the asciidoc manpage-sources
-GENERATED_MANPAGES += $(patsubst $(DOC_DIR)/src/man/%.adoc, $(DOC_DIR)/man/%, $(wildcard $(DOC_DIR)/src/man/man?/*.adoc))
-$(DOC_DIR)/man/%: $(DOC_DIR)/src/man/%.adoc
+GENERATED_MANPAGES += $(patsubst $(DOC_DIR)/src/man/%.adoc, $(DOC_MAN)/%, $(wildcard $(DOC_DIR)/src/man/man?/*.adoc))
+$(DOC_MAN)/%: $(DOC_DIR)/src/man/%.adoc
$(ECHO) Making manpage $(notdir $@)
@mkdir -p $(dir $@)
$(Q)asciidoctor --doctype=manpage \
@@ -1138,3 +1187,51 @@ $(DOC_DIR)/man/%: $(DOC_DIR)/src/man/%.adoc
-a mansource=LinuxCNC \
-a manmanual='LinuxCNC Documentation' \
$<
+
+# Translated manpages. po4a writes per-lang adocs under
+# $(DOC_OUT_ADOC)//man/manN/X.adoc; generate troff under
+# $(DOC_MAN)//manN/X (the path MAN_HTML_RULE expects for translations,
+# alongside the English tree at $(DOC_MAN)/manN). The MAN_HTML_TARGETS_
+# list is already populated by the general logic earlier in this file once
+# GENERATED_MANPAGES carries the translated paths, so HTML generation reuses
+# MAN_HTML_RULE and avoids duplicate recipes.
+ifeq ($(BUILD_DOCS_TRANSLATED),yes)
+define TRANSLATED_TROFF_RULE
+$$(DOC_MAN)/$1/%: $$(DOC_OUT_ADOC)/$1/man/%.adoc | $$(DOC_DIR)/.translateddocs-stamp
+ $$(ECHO) Making translated manpage $1 $$(notdir $$@)
+ @mkdir -p $$(dir $$@)
+ $$(Q)asciidoctor --doctype=manpage \
+ --backend=manpage \
+ --destination-dir="$$(dir $$@)" \
+ -a compat-mode \
+ -a mansource=LinuxCNC \
+ -a manmanual='LinuxCNC Documentation' \
+ $$<
+endef
+$(foreach L,$(LANGUAGES),$(eval $(call TRANSLATED_TROFF_RULE,$(L))))
+
+# English-only manpages (no po4a entry on either leg: man3 API reference,
+# some man1/man9) have no translated troff. Copy the English troff into
+# each language so every language can render the full manpage set, English
+# where untranslated. Static-pattern targets, so this takes precedence
+# over TRANSLATED_TROFF_RULE's pattern rule (whose translated-adoc prereq
+# does not exist for these stems). HTML still routes through MAN_HTML_RULE,
+# which resolves the adoc to the committed/objects English source.
+define MAN_ENONLY_TROFF_RULE
+$(addprefix $(DOC_MAN)/$(1)/,$(MAN_ENONLY_STEMS)): $(DOC_MAN)/$(1)/%: $(DOC_MAN)/% | $(DOC_DIR)/.translateddocs-stamp
+ @mkdir -p $$(dir $$@)
+ $(Q)cp $$< $$@
+endef
+$(foreach L,$(LANGUAGES),$(eval $(call MAN_ENONLY_TROFF_RULE,$(L))))
+
+# Wire translated manpages into `docs` only (not `manpages`). Pulling
+# them into `manpages` would create a cycle: the troff rule's order-only
+# dep on .translateddocs-stamp resolves through po4a -> manpages, and
+# adding the translated manpages back to that node closes the loop.
+TRANSLATED_MAN_HTML_TARGETS := $(foreach L,$(LANGUAGES),$(MAN_HTML_TARGETS_$(call toUC,$(L))))
+TRANSLATED_GENERATED_MANPAGES := $(foreach L,$(LANGUAGES), \
+ $(patsubst $(DOC_OUT_ADOC)/$(L)/man/%.adoc, $(DOC_MAN)/$(L)/%, \
+ $(wildcard $(DOC_OUT_ADOC)/$(L)/man/man?/*.adoc)))
+docs: $(TRANSLATED_MAN_HTML_TARGETS)
+.SECONDARY: $(TRANSLATED_MAN_HTML_TARGETS) $(TRANSLATED_GENERATED_MANPAGES)
+endif
diff --git a/docs/src/gen_complist.py b/docs/src/gen_complist.py
index 7a7f4df6374..7b47a56654d 100644
--- a/docs/src/gen_complist.py
+++ b/docs/src/gen_complist.py
@@ -22,9 +22,9 @@ def write_if_changed(path, content):
f.write(content)
return True
-man1_path = '../docs/man/man1'
+man1_path = '../docs/build/man/man1'
man1_files = {f for f in os.listdir(man1_path) if f[0] != '.' and os.path.isfile(os.path.join(man1_path, f))}
-man9_path = '../docs/man/man9'
+man9_path = '../docs/build/man/man9'
man9_files = {f for f in os.listdir(man9_path) if f[0] != '.' and os.path.isfile(os.path.join(man9_path, f))}
man_files = man1_files.union(man9_files)
complist_doc = set()
@@ -58,7 +58,7 @@ def add_links(lines, add_descr):
line = line.replace(comp_man, 'link:../man/man'+man+'/'+comp_man+'.html['+comp+']', 1)
if add_descr:
splitted = line.split('|')
- splitted[2] = extract_descr('../docs/man/man'+man+'/'+comp_man)\
+ splitted[2] = extract_descr('../docs/build/man/man'+man+'/'+comp_man)\
.replace(comp + ' ', ' ', 1).strip('\n -')
line = '|'.join(splitted)
result.append(line)
diff --git a/docs/src/hal/tutorial.adoc b/docs/src/hal/tutorial.adoc
index cacd61d7c55..87dcfa00d74 100644
--- a/docs/src/hal/tutorial.adoc
+++ b/docs/src/hal/tutorial.adoc
@@ -27,7 +27,7 @@ man page is not installed but is accessible in the LinuxCNC main directory
with the following command:
----
-$ man -M docs/man halcmd
+$ man -M docs/build/man halcmd
----
=== Notation
diff --git a/scripts/rip-environment.in b/scripts/rip-environment.in
index 0f3ade3d596..13da69e22e8 100644
--- a/scripts/rip-environment.in
+++ b/scripts/rip-environment.in
@@ -93,12 +93,12 @@ fi
if [ -z "$MANPATH" ]; then
if type -path manpath > /dev/null 2>&1; then
- MANPATH=$EMC2_HOME/docs/man:"$(manpath)"
+ MANPATH=$EMC2_HOME/docs/build/man:"$(manpath)"
else
- MANPATH=$EMC2_HOME/docs/man:/usr/local/man:/usr/local/share/man:/usr/share/man
+ MANPATH=$EMC2_HOME/docs/build/man:/usr/local/man:/usr/local/share/man:/usr/share/man
fi
else
- MANPATH=$EMC2_HOME/docs/man:"$MANPATH"
+ MANPATH=$EMC2_HOME/docs/build/man:"$MANPATH"
fi
if [ -z "$GLADE_CATALOG_SEARCH_PATH" ]; then
diff --git a/src/Doxyfile b/src/Doxyfile
index 6e210be5a76..ba7e4cc6865 100644
--- a/src/Doxyfile
+++ b/src/Doxyfile
@@ -2095,7 +2095,7 @@ GENERATE_MAN = NO
# The default directory is: man.
# This tag requires that the tag GENERATE_MAN is set to YES.
-MAN_OUTPUT = ../docs/man
+MAN_OUTPUT = ../docs/build/man
# The MAN_EXTENSION tag determines the extension that is added to the generated
# man pages. In case the manual section does not start with a number, the number
diff --git a/src/Makefile b/src/Makefile
index 482d453198c..4b221e6546b 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -679,9 +679,9 @@ install-dirs:
$(DESTDIR)$(datadir)/linuxcnc/hallib
install-kernel-indep: install-dirs
- $(FILE) ../docs/man/man1/*.1 $(DESTDIR)$(mandir)/man1
- $(FILE) $(wildcard ../docs/man/man3/*.3) $(DESTDIR)$(mandir)/man3
- $(FILE) $(wildcard ../docs/man/man9/*.9) $(DESTDIR)$(mandir)/man9
+ $(FILE) ../docs/build/man/man1/*.1 $(DESTDIR)$(mandir)/man1
+ $(FILE) $(wildcard ../docs/build/man/man3/*.3) $(DESTDIR)$(mandir)/man3
+ $(FILE) $(wildcard ../docs/build/man/man9/*.9) $(DESTDIR)$(mandir)/man9
$(FILE) objects/*.msg $(DESTDIR)$(tcldir)/msgs
$(EXE) ../scripts/realtime $(DESTDIR)$(prefix)/lib/linuxcnc
$(EXE) ../scripts/halrun $(DESTDIR)$(bindir)
@@ -1461,7 +1461,7 @@ swish:
$(dir $(BASEPWD))scripts \
$(dir $(BASEPWD))configs \
$(dir $(BASEPWD))docs/src \
- $(dir $(BASEPWD))docs/man/man1
+ $(dir $(BASEPWD))docs/build/man/man1
# When you depend on objects/var-ZZZ you are depending on the contents of the
# variable ZZZ, which is assumed to depend on a Makefile, a Submakefile, or
diff --git a/src/hal/components/Submakefile b/src/hal/components/Submakefile
index 2c37b2043f8..718ed39d1a6 100644
--- a/src/hal/components/Submakefile
+++ b/src/hal/components/Submakefile
@@ -33,7 +33,7 @@ CONVERTERS := \
conv_u64_u32.comp \
conv_u64_s64.comp
COMPS := $(filter-out hal/components/tpcomp.comp hal/components/homecomp.comp, $(sort $(wildcard hal/components/*.comp) $(addprefix hal/components/, $(CONVERTERS))))
-COMP_MANPAGES := $(patsubst hal/components/%.comp, ../docs/man/man9/%.9, $(COMPS)) ../docs/man/man9/tpcomp.9 ../docs/man/man9/homecomp.9
+COMP_MANPAGES := $(patsubst hal/components/%.comp, ../docs/build/man/man9/%.9, $(COMPS)) ../docs/build/man/man9/tpcomp.9 ../docs/build/man/man9/homecomp.9
ifeq ($(BUILD_SYS),uspace)
COMP_DRIVERS += hal/drivers/serport.comp
COMP_DRIVERS += hal/drivers/mesa_7i65.comp
@@ -41,7 +41,7 @@ COMP_DRIVERS += hal/drivers/mesa_uart.comp
else
COMP_DRIVERS := $(wildcard hal/drivers/*.comp)
endif
-COMP_DRIVER_MANPAGES := $(patsubst hal/drivers/%.comp, ../docs/man/man9/%.9, $(COMP_DRIVERS))
+COMP_DRIVER_MANPAGES := $(patsubst hal/drivers/%.comp, ../docs/build/man/man9/%.9, $(COMP_DRIVERS))
TARGETS += manpages
GENERATED_MANPAGES += $(COMP_MANPAGES)
GENERATED_MANPAGES += $(COMP_DRIVER_MANPAGES)
@@ -76,7 +76,7 @@ $(COMP_DRIVER_MANPAGE_ADOCS): objects/man/man9/%.9.adoc: hal/drivers/%.comp ../b
# emitting troff directly with sed post-processing to escape .als / .URL
# directives that the old dblatex-based PDF pipeline choked on; with the
# asciidoctor toolchain reading adoc straight through, that hack is gone.
-$(COMP_MANPAGES) $(COMP_DRIVER_MANPAGES): ../docs/man/man9/%.9: objects/man/man9/%.9.adoc
+$(COMP_MANPAGES) $(COMP_DRIVER_MANPAGES): ../docs/build/man/man9/%.9: objects/man/man9/%.9.adoc
$(ECHO) Making halcompile manpage $(notdir $@)
@mkdir -p $(dir $@)
$(Q)asciidoctor --doctype=manpage \
diff --git a/src/hal/components/stylesheet.9 b/src/hal/components/stylesheet.9
deleted file mode 100644
index e313077c576..00000000000
--- a/src/hal/components/stylesheet.9
+++ /dev/null
@@ -1 +0,0 @@
-.HEAD " "
diff --git a/src/hal/user_comps/Submakefile b/src/hal/user_comps/Submakefile
index 42a52579cee..3dd1fe725b9 100644
--- a/src/hal/user_comps/Submakefile
+++ b/src/hal/user_comps/Submakefile
@@ -2,7 +2,7 @@ USER_COMP_PY = pyvcp hal_input gladevcp scorbot-er-3 mitsub_vfd pmx485 sim-torch
USER_COMPS := $(sort $(wildcard hal/user_comps/*.comp))
USER_COMP_BINS := $(patsubst hal/user_comps/%.comp, ../bin/%, $(USER_COMPS))
-USER_COMP_MANPAGES := $(patsubst hal/user_comps/%.comp, ../docs/man/man1/%.1, $(USER_COMPS))
+USER_COMP_MANPAGES := $(patsubst hal/user_comps/%.comp, ../docs/build/man/man1/%.1, $(USER_COMPS))
USER_COMP_SRCS := $(patsubst %.comp, objects/%.c, $(USER_COMPS))
GENERATED_MANPAGES += $(USER_COMP_MANPAGES)
USERSRCS += $(USER_COMP_SRCS)
@@ -86,7 +86,7 @@ USERSRCS += $(SENDKEYS_SRC)
$(Q)$(CC) $(LDFLAGS) -o $@ $^
TARGETS += ../bin/sendkeys
-$(USER_COMP_MANPAGES): ../docs/man/man1/%.1: hal/user_comps/%.comp ../bin/halcompile
+$(USER_COMP_MANPAGES): ../docs/build/man/man1/%.1: hal/user_comps/%.comp ../bin/halcompile
$(ECHO) Making halcompile manpage $(notdir $@)
@mkdir -p $(dir $@) objects/man/man1
$(Q)../bin/halcompile -U --userspace --document --keep-adoc=$@.adoc -o $@ $<
diff --git a/src/hal/user_comps/pi500_vfd/Submakefile b/src/hal/user_comps/pi500_vfd/Submakefile
index 18c31a6249c..231c34aa085 100644
--- a/src/hal/user_comps/pi500_vfd/Submakefile
+++ b/src/hal/user_comps/pi500_vfd/Submakefile
@@ -16,7 +16,7 @@ hal/user_comps/pi500_vfd/pi500_vfd.c: hal/user_comps/pi500_vfd/pi500_vfd.comp ..
$(ECHO) "Preprocessing pi500_vfd.comp"
$(Q)../bin/halcompile -U --preprocess $<
-../docs/man/man1/pi500_vfd.1: hal/user_comps/pi500_vfd/pi500_vfd.comp ../bin/halcompile
+../docs/build/man/man1/pi500_vfd.1: hal/user_comps/pi500_vfd/pi500_vfd.comp ../bin/halcompile
@mkdir -p $(dir $@) objects/man/man1
$(Q)../bin/halcompile -U -u --document --keep-adoc=$@.adoc -o $@ $<
$(Q)sed -i -e's/^\.als /.\\" .als /' $@
@@ -28,6 +28,6 @@ pi500_clean:
-rm -f hal/user_comps/pi500_vfd/pi500_vfd.1
TARGETS += ../bin/pi500_vfd
-GENERATED_MANPAGES += ../docs/man/man1/pi500_vfd.1
+GENERATED_MANPAGES += ../docs/build/man/man1/pi500_vfd.1
endif
diff --git a/src/hal/user_comps/wj200_vfd/Submakefile b/src/hal/user_comps/wj200_vfd/Submakefile
index a8b582a3e38..81a41e6442c 100644
--- a/src/hal/user_comps/wj200_vfd/Submakefile
+++ b/src/hal/user_comps/wj200_vfd/Submakefile
@@ -16,7 +16,7 @@ hal/user_comps/wj200_vfd/wj200_vfd.c: hal/user_comps/wj200_vfd/wj200_vfd.comp ..
$(ECHO) "Preprocessing wj200_vfd.comp"
$(Q)../bin/halcompile -U --preprocess $<
-../docs/man/man1/wj200_vfd.1: hal/user_comps/wj200_vfd/wj200_vfd.comp ../bin/halcompile
+../docs/build/man/man1/wj200_vfd.1: hal/user_comps/wj200_vfd/wj200_vfd.comp ../bin/halcompile
@mkdir -p $(dir $@) objects/man/man1
$(Q)../bin/halcompile -U -u --document --keep-adoc=$@.adoc -o $@ $<
$(Q)sed -i -e's/^\.als /.\\" .als /' $@
@@ -28,6 +28,6 @@ wj200_clean:
-rm -f hal/user_comps/wj200_vfd/wj200_vfd.1
TARGETS += ../bin/wj200_vfd
-GENERATED_MANPAGES += ../docs/man/man1/wj200_vfd.1
+GENERATED_MANPAGES += ../docs/build/man/man1/wj200_vfd.1
endif
diff --git a/src/hal/utils/halcompile.g b/src/hal/utils/halcompile.g
index fcce8c63297..ab5a38310ed 100644
--- a/src/hal/utils/halcompile.g
+++ b/src/hal/utils/halcompile.g
@@ -1308,7 +1308,7 @@ def main():
manpath = os.path.join(BASE, "share/man/man" + section)
sharepath = manpath
if not os.path.isdir(manpath):
- manpath = os.path.join(BASE, "docs/man/man" + section)
+ manpath = os.path.join(BASE, "docs/build/man/man" + section)
if not os.path.isdir(manpath):
raise SystemExit("Error: directory '%s' (nor alternative '%s') found" % (sharepath, manpath))
outfile = os.path.join(manpath, basename + "." + section)