Skip to content

Commit f04cdb2

Browse files
committed
Add build-all-manpages.sh for multi-language manpage generation
Orchestrates manpage builds for 19 languages: downloads per-language tldr archives, copies l10n locales into coreutils, generates manpages with the appropriate LANG setting, and invokes build-manpages.sh with English tldr fallback for each language.
1 parent 8f16f6b commit f04cdb2

1 file changed

Lines changed: 119 additions & 0 deletions

File tree

scripts/build-all-manpages.sh

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
#!/bin/bash
2+
# Build manpages for all languages
3+
# Usage: build-all-manpages.sh <coreutils-dir> <coreutils-l10n-dir> <output-dir> <templates-dir>
4+
5+
set -euo pipefail
6+
7+
COREUTILS_DIR="${1:?Usage: $0 <coreutils-dir> <coreutils-l10n-dir> <output-dir> <templates-dir>}"
8+
L10N_DIR="${2:?}"
9+
OUTPUT_DIR="${3:?}"
10+
TEMPLATES_DIR="${4:?}"
11+
12+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
13+
14+
# Language config: lang-code -> LANG env value
15+
declare -A LANG_MAP=(
16+
[en]="en_US.UTF-8"
17+
[fr]="fr_FR.UTF-8"
18+
[de]="de_DE.UTF-8"
19+
[es]="es_ES.UTF-8"
20+
[it]="it_IT.UTF-8"
21+
[pt]="pt_PT.UTF-8"
22+
[pt-BR]="pt_BR.UTF-8"
23+
[ja]="ja_JP.UTF-8"
24+
[ko]="ko_KR.UTF-8"
25+
[ru]="ru_RU.UTF-8"
26+
[zh]="zh_CN.UTF-8"
27+
[uk]="uk_UA.UTF-8"
28+
[sv]="sv_SE.UTF-8"
29+
[pl]="pl_PL.UTF-8"
30+
[tr]="tr_TR.UTF-8"
31+
[ar]="ar_SA.UTF-8"
32+
[cs]="cs_CZ.UTF-8"
33+
[da]="da_DK.UTF-8"
34+
[id]="id_ID.UTF-8"
35+
)
36+
37+
# manpage lang code -> tldr lang code (when they differ)
38+
declare -A MANPAGE_TO_TLDR=(
39+
[fr-FR]="fr"
40+
[es-ES]="es"
41+
[zh-Hans]="zh"
42+
)
43+
44+
# lang code used in output URLs
45+
declare -A LANG_TO_URL=(
46+
[en]="en"
47+
[fr_FR]="fr" [de_DE]="de" [es_ES]="es" [it_IT]="it"
48+
[pt_PT]="pt" [pt_BR]="pt-BR" [ja_JP]="ja" [ko_KR]="ko"
49+
[ru_RU]="ru" [zh_CN]="zh" [uk_UA]="uk" [sv_SE]="sv"
50+
[pl_PL]="pl" [tr_TR]="tr" [ar_SA]="ar" [cs_CZ]="cs"
51+
[da_DK]="da" [id_ID]="id"
52+
)
53+
54+
TMPDIR=$(mktemp -d)
55+
trap 'rm -rf "$TMPDIR"' EXIT
56+
57+
# Copy l10n locales into coreutils so uudoc picks them up
58+
cp -r "$L10N_DIR"/src/uu/* "$COREUTILS_DIR"/src/uu/ 2>/dev/null || true
59+
cp -r "$L10N_DIR"/src/uucore/* "$COREUTILS_DIR"/src/uucore/ 2>/dev/null || true
60+
61+
# Download tldr archives
62+
echo "Downloading tldr archives..."
63+
mkdir -p "$TMPDIR/tldr-archives"
64+
curl -sfL "https://github.com/tldr-pages/tldr/releases/download/v2.3/tldr-pages.zip" \
65+
-o "$TMPDIR/tldr-archives/en.zip" || true
66+
for lang in fr de es it pt pt-BR ja ko ru zh uk sv pl tr ar cs da id; do
67+
curl -sfL "https://github.com/tldr-pages/tldr/releases/download/v2.3/tldr-pages.${lang}.zip" \
68+
-o "$TMPDIR/tldr-archives/${lang}.zip" || true
69+
done
70+
71+
# Extract English tldr as fallback for untranslated pages
72+
EN_TLDR_DIR="$TMPDIR/tldr-pages-en"
73+
mkdir -p "$EN_TLDR_DIR"
74+
if [ -f "$TMPDIR/tldr-archives/en.zip" ]; then
75+
unzip -o "$TMPDIR/tldr-archives/en.zip" -d "$TMPDIR/tldr-extract-en" > /dev/null 2>&1 || true
76+
find "$TMPDIR/tldr-extract-en" -name "*.md" -exec cp {} "$EN_TLDR_DIR/" \; 2>/dev/null || true
77+
fi
78+
79+
# Generate and build manpages for each language
80+
for lang in "${!LANG_MAP[@]}"; do
81+
echo "=== Building $lang manpages ==="
82+
83+
# Determine the tldr/url lang code
84+
tldr_lang="${MANPAGE_TO_TLDR[$lang]:-$lang}"
85+
86+
# Extract tldr pages for this language
87+
tldr_dir="$TMPDIR/tldr-pages-${lang}"
88+
mkdir -p "$tldr_dir"
89+
if [ "$lang" != "en" ]; then
90+
archive="$TMPDIR/tldr-archives/${tldr_lang}.zip"
91+
if [ -f "$archive" ]; then
92+
extract_dir="$TMPDIR/tldr-extract-${lang}"
93+
unzip -o "$archive" -d "$extract_dir" > /dev/null 2>&1 || true
94+
find "$extract_dir" -name "*.md" -exec cp {} "$tldr_dir/" \; 2>/dev/null || true
95+
fi
96+
else
97+
tldr_dir="$EN_TLDR_DIR"
98+
fi
99+
100+
# Generate manpages with the right locale
101+
manpages_dir="$TMPDIR/manpages-${lang}"
102+
LANG="${LANG_MAP[$lang]}" make -C "$COREUTILS_DIR" install-manpages DESTDIR="$manpages_dir" 2>&1 | tail -1
103+
104+
# Determine output subdirectory
105+
if [ "$lang" = "en" ]; then
106+
out_subdir="$OUTPUT_DIR/en"
107+
else
108+
out_subdir="$OUTPUT_DIR/${tldr_lang}"
109+
fi
110+
111+
# Build HTML (pass English tldr as fallback for non-English builds)
112+
if [ "$lang" = "en" ]; then
113+
"$SCRIPT_DIR/build-manpages.sh" "$manpages_dir" "$tldr_dir" "$out_subdir" "$TEMPLATES_DIR" "$tldr_lang"
114+
else
115+
"$SCRIPT_DIR/build-manpages.sh" "$manpages_dir" "$tldr_dir" "$out_subdir" "$TEMPLATES_DIR" "$tldr_lang" "$EN_TLDR_DIR"
116+
fi
117+
done
118+
119+
echo "All manpages built in $OUTPUT_DIR"

0 commit comments

Comments
 (0)