Skip to content

docs: templatize man-page .TH headers for date + version - #802

Merged
mrjimenez merged 5 commits into
amule-project:masterfrom
got3nks:docs-templatize-man-headers
Jun 1, 2026
Merged

docs: templatize man-page .TH headers for date + version#802
mrjimenez merged 5 commits into
amule-project:masterfrom
got3nks:docs-templatize-man-headers

Conversation

@got3nks

@got3nks got3nks commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes #759 — replaces the hardcoded "September 2016" date and "aMule v2.3.2" (etc.) version strings in the .TH headers of the 5 program man pages with CMake placeholders that auto-substitute at configure time.

@PACKAGE_VERSION@ comes from the existing CMake variable (git-describe / tag-derived). @MAN_DATE@ is assembled from string(TIMESTAMP) with a locale-neutral month-name lookup table, and SOURCE_DATE_EPOCH is honoured automatically for reproducible builds (Debian etc.).

Scope

Templatized: amule.1, amulecmd.1, amuled.1, amulegui.1, amuleweb.1 (the 5 in #759) + their 10 translated copies each = 55 file renames .1.1.in.

Out of scope (still .1, not .in): ed2k.1 (separate v1.5.1), alc.1, alcc.1, cas.1 (separate v0.8), wxcas.1 — these can be migrated in a follow-up. cmake/manpage_install.cmake was extended to handle both forms in the same source tree, so the migration is incremental.

What gets substituted

Placeholder Source Snapshot example Tagged release example
@MAN_DATE@ string(TIMESTAMP) (UTC), locale-neutral via month-name table June 2026 June 2026 (build-time, not source-time)
@PACKAGE_VERSION@ Existing PACKAGE_VERSION from cmake/git_describe logic GIT 3.0.0

So the .TH line on a snapshot becomes .TH AMULE 1 "June 2026" "aMule vGIT" "aMule" and on a tagged 3.0.0 build becomes .TH AMULE 1 "<release-month> <release-year>" "aMule v3.0.0" "aMule".

Files touched

  • 55 file renames: docs/man/{amule,amulecmd,amuled,amulegui,amuleweb}{,.LANG}.1.1.in with .TH line templatized
  • cmake/manpage_install.cmake: check_manpage() now globs both .1 and .1.in, uses configure_file() for the latter
  • CMakeLists.txt: defines MAN_DATE via locale-neutral month-name lookup
  • docs/man/po4a.config: source/target paths updated to .1.in
  • docs/man/po/manpages-*.po + manpages.pot: msgid/msgstr updated to use placeholder strings so po4a-update won't mark every .TH entry fuzzy

Test plan

  • macOS local build: cmake -B build -DBUILD_MONOLITHIC=YES -DBUILD_REMOTEGUI=YES → exit 0, configure-time substitution produces correct .TH lines in build/docs/man/*.1
  • cmake --install build --destdir /tmp/test lays out English + 10 translated man pages under share/man/{,LANG/}man1/, all with templated .TH
  • Both English (amule.1) and translated (de/man1/amule.1) generated copies confirm "June 2026" "aMule vGIT" substitution at install time
  • CI green
  • Translator workflow: cmake --build build --target po4a-update cleanly round-trips .1.in.po.LANG.1.in (will be tested by next translator pass)
  • Tagged release verifies @PACKAGE_VERSION@ resolves to 3.0.0 (will be verified when 3.0.0 is tagged)

Replaces the hardcoded "September 2016" date and "aMule v2.3.2" version
strings in the .TH headers of the 5 program man pages with CMake
placeholders that get substituted at configure time:

  "September 2016"   -> "@MAN_DATE@"     (computed via string(TIMESTAMP),
                                          honours SOURCE_DATE_EPOCH)
  "aMule v2.3.2"     -> "aMule v@PACKAGE_VERSION@"

The 5 English masters (amule, amulecmd, amuled, amulegui, amuleweb)
and their 10 translated copies each are renamed to .1.in and processed
via configure_file() into the build directory. Install rules read from
the build dir instead of the source tree.

Also propagated to:
- docs/man/po/manpages-*.po + manpages.pot: msgid/msgstr updated to
  use placeholders so po4a-update doesn't mark every .TH entry fuzzy
- docs/man/po4a.config: source/target paths updated to .1.in
- cmake/manpage_install.cmake: check_manpage() now handles both .1
  and .1.in (ed2k + the 4 util man pages keep .1 unchanged for now)

Verified on macOS: configure + install produces .TH lines reading
.TH AMULE 1 "June 2026" "aMule vGIT" "aMule" on a snapshot, and will
produce aMule v3.0.0 once the next release is tagged.

Closes amule-project#759.
got3nks added 4 commits June 1, 2026 23:42
…pies

cardpuncher reported in amule-project#759 that after running po4a against the new
master templates and rebuilding, the rendered French man-page footer
showed a split date — "2026" on the left and "June" centered —
instead of "June 2026" as a single field.

Root cause: po4a's man module elides the outer quotes around
single-token translatable values when it regenerates a translated
.1.in. A master like

  .TH AMULE 1 "@MAN_DATE@" "aMule v@PACKAGE_VERSION@" "aMule"

becomes

  .TH AMULE 1 @MAN_DATE@ "aMule v@PACKAGE_VERSION@" aMule

in the translated copy. CMake's configure_file then substitutes
@MAN_DATE@ with the literal "June 2026", and groff parses the result
as two .TH arguments — DATE=June, SOURCE=2026 — breaking the footer.

The English masters happened to render correctly only because they
are hand-written and never pass through po4a. The German .de.1.in
copies (regenerated by this PR with msgstr "@MAN_DATE@") were
already broken; the bug just hadn't been observed yet.

Fix: embed the surrounding quote characters in the MAN_DATE value
itself, and drop the outer quotes from @MAN_DATE@ in every .1.in
that uses it (5 English masters + 5 German .de.1.in copies). The
final substitution then always lands as "Month Year" regardless of
whether the file went through po4a. Translations that still carry a
hardcoded localized date string ("Septembre 2016", etc.) are
unaffected because po4a keeps the quotes on multi-word values.

Also drops the hardcoded "v3.0.0" SOURCE string from the 5 pt_BR
translations (likely added before the templatization sweep) in
favour of "v@PACKAGE_VERSION@" for parity with the other
translations.

Verified end-to-end:
  - All 11 language .1 files render with quoted "Month Year" footer
  - cardpuncher's exact reproduction (msgstr "@MAN_DATE@" in
    manpages-fr.po -> po4a regen -> cmake build) now produces
    `aMule vGIT       June 2026       AMULE(1)` in the footer

Refs amule-project#759
…, cas, wxcas)

Follow-up to PR amule-project#802 / amule-project#759 completing the incremental migration:
rename ed2k.1, alc.1, alcc.1, cas.1, wxcas.1 (plus their 10
translated copies each) to .1.in, replace "September 2016" with
@MAN_DATE@ in the 5 English masters, and update po4a.config to
point at the new .1.in paths.

Translations keep their historical localized date strings
("Septembre 2016", "Setembro de 2016", etc.) — they'll get refreshed
to @MAN_DATE@ when translators next run po4a-update, same as the
program pages did. No .po catalog or translation-content changes in
this commit.

Per-binary version strings ("cas v0.8", "aMule eD2k link parser
v1.5.1", etc.) are kept as literals — they're independent of aMule's
PACKAGE_VERSION and turn over at the utility's own pace.

Refs amule-project#759
… pt_BR version fix

Follow-up to PR amule-project#802 / amule-project#759 ensuring man-page dates auto-update for
every translation, not just German.

Before this commit, 9 of the 10 .po catalogs (es, fr, hu, it, pt_BR,
ro, ru, tr, zh_TW) kept localized hardcoded date strings as msgstr
("Septembre 2016", "Setembro de 2016", "сентябрь 2016", etc.). The
templatization work on the masters had no effect on those languages:
every time a translator ran po4a, the regenerated .1.in files would
re-stamp the 2016 date and stay frozen on each release. Only German
(msgstr "@MAN_DATE@") auto-updated.

Switching all 10 languages to msgstr "@MAN_DATE@" makes the date
field track the build date in every language — at the cost of the
month name being English everywhere ("June 2026" instead of
"Junho de 2026" etc.). The alternative — CMake emitting locale
month names per language — would be far more code for a minor
display detail, so this trade-off matches what the German path
already did.

Also fixes the pt_BR catalog's stale version msgstrs that would
otherwise revert the .1.in files from v@PACKAGE_VERSION@ back to
literal "v3.0.0" on every po4a-update cycle (5 entries:
aMule / aMuleCmd / aMule Daemon / aMuleGUI / aMule webserver).
The other 9 languages already had v@PACKAGE_VERSION@ — only pt_BR
was broken.

The 99 .1.in changes in this commit are the corresponding po4a-
regenerated outputs (mechanical .TH date-field swaps in 90 files,
plus 4 Turkish files carrying body-content updates that had been
sitting in the .po waiting to propagate — they would have landed on
the next translator regen anyway).

Verified by cmake-configuring every binary and checking the rendered
.TH line for all 11 languages × 10 binaries (110 files); each shows
"June 2026" as the date field.

Refs amule-project#759
Caught while doing a from-scratch po4a verification (delete every
translated .1.in, then run po4a once). The 5 German utility man
pages (ed2k.de.1.in + alc/alcc/cas/wxcas .de.1.in) were the only
files in the tree still carrying the literal "September 2016"
string: my previous catalog-templatization commit (1ef76d8)
updated their .po msgstr to "@MAN_DATE@", but po4a's "doesn't need
to be updated" timestamp caching skipped these 5 specific files,
so the source-tree .de.1.in copies never got the .TH swap.

A from-scratch po4a run (rm -f all translated .1.in; po4a po4a.config)
regenerates them correctly. All 110 files (10 binaries × 11 languages)
now render "June 2026" in the .TH date field.

Refs amule-project#759
@mrjimenez
mrjimenez merged commit 236aebc into amule-project:master Jun 1, 2026
7 checks passed
mrjimenez pushed a commit that referenced this pull request Jun 1, 2026
…, cas, wxcas)

Follow-up to PR #802 / #759 completing the incremental migration:
rename ed2k.1, alc.1, alcc.1, cas.1, wxcas.1 (plus their 10
translated copies each) to .1.in, replace "September 2016" with
@MAN_DATE@ in the 5 English masters, and update po4a.config to
point at the new .1.in paths.

Translations keep their historical localized date strings
("Septembre 2016", "Setembro de 2016", etc.) — they'll get refreshed
to @MAN_DATE@ when translators next run po4a-update, same as the
program pages did. No .po catalog or translation-content changes in
this commit.

Per-binary version strings ("cas v0.8", "aMule eD2k link parser
v1.5.1", etc.) are kept as literals — they're independent of aMule's
PACKAGE_VERSION and turn over at the utility's own pace.

Refs #759
mrjimenez pushed a commit that referenced this pull request Jun 1, 2026
… pt_BR version fix

Follow-up to PR #802 / #759 ensuring man-page dates auto-update for
every translation, not just German.

Before this commit, 9 of the 10 .po catalogs (es, fr, hu, it, pt_BR,
ro, ru, tr, zh_TW) kept localized hardcoded date strings as msgstr
("Septembre 2016", "Setembro de 2016", "сентябрь 2016", etc.). The
templatization work on the masters had no effect on those languages:
every time a translator ran po4a, the regenerated .1.in files would
re-stamp the 2016 date and stay frozen on each release. Only German
(msgstr "@MAN_DATE@") auto-updated.

Switching all 10 languages to msgstr "@MAN_DATE@" makes the date
field track the build date in every language — at the cost of the
month name being English everywhere ("June 2026" instead of
"Junho de 2026" etc.). The alternative — CMake emitting locale
month names per language — would be far more code for a minor
display detail, so this trade-off matches what the German path
already did.

Also fixes the pt_BR catalog's stale version msgstrs that would
otherwise revert the .1.in files from v@PACKAGE_VERSION@ back to
literal "v3.0.0" on every po4a-update cycle (5 entries:
aMule / aMuleCmd / aMule Daemon / aMuleGUI / aMule webserver).
The other 9 languages already had v@PACKAGE_VERSION@ — only pt_BR
was broken.

The 99 .1.in changes in this commit are the corresponding po4a-
regenerated outputs (mechanical .TH date-field swaps in 90 files,
plus 4 Turkish files carrying body-content updates that had been
sitting in the .po waiting to propagate — they would have landed on
the next translator regen anyway).

Verified by cmake-configuring every binary and checking the rendered
.TH line for all 11 languages × 10 binaries (110 files); each shows
"June 2026" as the date field.

Refs #759
@got3nks
got3nks deleted the docs-templatize-man-headers branch June 3, 2026 14:16
got3nks added a commit to got3nks/amule that referenced this pull request Jun 4, 2026
…ndex

Adds 55+ merged PRs to the 3.0.0 changelog since the last update
(amule-project#747, 2026-05-27). Narrative additions cover:

- Packaging: expanded the top list to include the macOS per-arch .app
  bundles and the Windows NSIS installer alongside the existing
  AppImage / Flatpak / .dmg / .zip entries. New bullets for amule-project#785
  (alc/alcc/cas/wxcas everywhere + Windows amuleweb), amule-project#794 (.dmg
  amuleweb path), amule-project#789 (<OS>-<arch> artifact naming), amule-project#780 / amule-project#796
  (Windows DPI + comctl32 manifest), amule-project#784 (FHS share/amule paths).

- Bug Fixes & Stability: post-amule-project#744 fixes including EC notification
  leak (amule-project#797), big-library scaling (amule-project#736, amule-project#840 superseding amule-project#728),
  amulegui ghost entries (amule-project#810, amule-project#819, amule-project#841, amule-project#824, amule-project#830, amule-project#760),
  PartFile early hash (amule-project#762), server protocol fixes (amule-project#835, amule-project#788,
  amule-project#721, amule-project#787), crypto stream UB (amule-project#779), UAF prevention (amule-project#756),
  Kad rotation (amule-project#795, amule-project#799/amule-project#805), GTK warning silencing (amule-project#833,
  amule-project#826/amule-project#836), and the clang-tidy worklist (amule-project#770, amule-project#772-amule-project#774).

- Translations: late-cycle wave covering French/Turkish manpages
  (amule-project#753/amule-project#754/amule-project#776), Galician (amule-project#763), Slovenian (amule-project#771), pt-BR
  (amule-project#768/amule-project#775/amule-project#812), French (amule-project#811), plus man-page tooling for
  date+version drift (amule-project#802).

- Contributors: added ngosang for UX feedback on the late-3.0
  cycle (amule-project#817/amule-project#818/amule-project#821/amule-project#828/amule-project#844) and ongoing work on the
  user-facing manual at amule-org.github.io.

- Merged PRs flat index: extended with amule-project#746-amule-project#845 + amule-project#841.
got3nks added a commit to got3nks/amule that referenced this pull request Jun 4, 2026
…ndex

Adds 55+ merged PRs to the 3.0.0 changelog since the last update
(amule-project#747, 2026-05-27). Narrative additions cover:

- Packaging: expanded the top list to include the macOS per-arch .app
  bundles and the Windows NSIS installer alongside the existing
  AppImage / Flatpak / .dmg / .zip entries. New bullets for amule-project#785
  (alc/alcc/cas/wxcas everywhere + Windows amuleweb), amule-project#794 (.dmg
  amuleweb path), amule-project#789 (<OS>-<arch> artifact naming), amule-project#780 / amule-project#796
  (Windows DPI + comctl32 manifest), amule-project#784 (FHS share/amule paths).

- Bug Fixes & Stability: post-amule-project#744 fixes including EC notification
  leak (amule-project#797), big-library scaling (amule-project#736, amule-project#840 superseding amule-project#728),
  amulegui ghost entries (amule-project#810, amule-project#819, amule-project#841, amule-project#824, amule-project#830, amule-project#760),
  PartFile early hash (amule-project#762), server protocol fixes (amule-project#835, amule-project#788,
  amule-project#721, amule-project#787), crypto stream UB (amule-project#779), UAF prevention (amule-project#756),
  Kad rotation (amule-project#795, amule-project#799/amule-project#805), GTK warning silencing (amule-project#833,
  amule-project#826/amule-project#836), and the clang-tidy worklist (amule-project#770, amule-project#772-amule-project#774).

- Translations: late-cycle wave covering French/Turkish manpages
  (amule-project#753/amule-project#754/amule-project#776), Galician (amule-project#763), Slovenian (amule-project#771), pt-BR
  (amule-project#768/amule-project#775/amule-project#812), French (amule-project#811), plus man-page tooling for
  date+version drift (amule-project#802).

- Contributors: added ngosang for UX feedback on the late-3.0
  cycle (amule-project#817/amule-project#818/amule-project#821/amule-project#828/amule-project#844) and ongoing work on the
  user-facing manual at amule-org.github.io.

- Merged PRs flat index: extended with amule-project#746-amule-project#845 + amule-project#841.
mrjimenez pushed a commit that referenced this pull request Jun 4, 2026
Adds 55+ merged PRs to the 3.0.0 changelog since the last update
(#747, 2026-05-27). Narrative additions cover:

- Packaging: expanded the top list to include the macOS per-arch .app
  bundles and the Windows NSIS installer alongside the existing
  AppImage / Flatpak / .dmg / .zip entries. New bullets for #785
  (alc/alcc/cas/wxcas everywhere + Windows amuleweb), #794 (.dmg
  amuleweb path), #789 (<OS>-<arch> artifact naming), #780 / #796
  (Windows DPI + comctl32 manifest), #784 (FHS share/amule paths).

- Bug Fixes & Stability: post-#744 fixes including EC notification
  leak (#797), big-library scaling (#736, #840 superseding #728),
  amulegui ghost entries (#810, #819, #841, #824, #830, #760),
  PartFile early hash (#762), server protocol fixes (#835, #788,
  #721, #787), crypto stream UB (#779), UAF prevention (#756),
  Kad rotation (#795, #799/#805), GTK warning silencing (#833,
  #826/#836), and the clang-tidy worklist (#770, #772-#774).

- Translations: late-cycle wave covering French/Turkish manpages
  (#753/#754/#776), Galician (#763), Slovenian (#771), pt-BR
  (#768/#775/#812), French (#811), plus man-page tooling for
  date+version drift (#802).

- Contributors: added ngosang for UX feedback on the late-3.0
  cycle (#817/#818/#821/#828/#844) and ongoing work on the
  user-facing manual at amule-org.github.io.

- Merged PRs flat index: extended with #746-#845 + #841.
got3nks added a commit to got3nks/amule that referenced this pull request Aug 5, 2026
…mule-project#802)

BuildTranscript defines a byte layout that the client and the server each
build independently and feed to the AEAD as associated data, so the two
must agree exactly or authentication fails with no useful diagnostic.
Nothing in the suite covered it: the refactor in the previous commit
could have changed the format and still passed every test.

Four cases -- a golden vector pinning the exact layout, the 255-cipher
cap (where the count byte and the bytes that follow must come from one
value), sensitivity to every input including nonce order, and the
degenerate empty-input case.

Verified to fail on a mutation: swapping the two nonces in the builder
makes BuildTranscriptMatchesGoldenVector fail, so the test can detect
the class of change it exists to catch.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Mentions of old aMule versions in the man pages

2 participants