|
| 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