docs: templatize man-page .TH headers for date + version - #802
Merged
mrjimenez merged 5 commits intoJun 1, 2026
Conversation
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.
…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
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
1 task
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #759 — replaces the hardcoded
"September 2016"date and"aMule v2.3.2"(etc.) version strings in the.THheaders 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 fromstring(TIMESTAMP)with a locale-neutral month-name lookup table, andSOURCE_DATE_EPOCHis 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(separatev1.5.1),alc.1,alcc.1,cas.1(separatev0.8),wxcas.1— these can be migrated in a follow-up.cmake/manpage_install.cmakewas extended to handle both forms in the same source tree, so the migration is incremental.What gets substituted
@MAN_DATE@string(TIMESTAMP)(UTC), locale-neutral via month-name tableJune 2026June 2026(build-time, not source-time)@PACKAGE_VERSION@PACKAGE_VERSIONfromcmake/git_describelogicGIT3.0.0So the
.THline 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
docs/man/{amule,amulecmd,amuled,amulegui,amuleweb}{,.LANG}.1→.1.inwith.THline templatizedcmake/manpage_install.cmake:check_manpage()now globs both.1and.1.in, usesconfigure_file()for the latterCMakeLists.txt: definesMAN_DATEvia locale-neutral month-name lookupdocs/man/po4a.config: source/target paths updated to.1.indocs/man/po/manpages-*.po+manpages.pot: msgid/msgstr updated to use placeholder strings sopo4a-updatewon't mark every.THentry fuzzyTest plan
cmake -B build -DBUILD_MONOLITHIC=YES -DBUILD_REMOTEGUI=YES→ exit 0, configure-time substitution produces correct.THlines inbuild/docs/man/*.1cmake --install build --destdir /tmp/testlays out English + 10 translated man pages undershare/man/{,LANG/}man1/, all with templated.THamule.1) and translated (de/man1/amule.1) generated copies confirm"June 2026" "aMule vGIT"substitution at install timecmake --build build --target po4a-updatecleanly round-trips.1.in→.po→.LANG.1.in(will be tested by next translator pass)@PACKAGE_VERSION@resolves to3.0.0(will be verified when 3.0.0 is tagged)