|
| 1 | +# Makefile for bn_in Python Documentation |
| 2 | +# |
| 3 | +# Here is what you can do: |
| 4 | +# |
| 5 | +# - make # Automatically build an HTML local version |
| 6 | +# - make todo # To list remaining tasks |
| 7 | +# - make verifs # To check for correctness: wrapping, spelling |
| 8 | +# - make wrap # To check for wrapping |
| 9 | +# - make spell # To check for spelling |
| 10 | +# - make merge # To merge pot from upstream |
| 11 | +# - make fuzzy # To find fuzzy strings |
| 12 | +# - make progress # To compute current progression |
| 13 | +# |
| 14 | +# Modes are: autobuild-stable, autobuild-dev, and autobuild-html, |
| 15 | +# documented in gen/src/3.6/Doc/Makefile as we're only delegating the |
| 16 | +# real work to the Python Doc Makefile. |
| 17 | + |
| 18 | +# Configuration |
| 19 | + |
| 20 | +# The CPYTHON_CURRENT_COMMIT is the commit, in the cpython repository, |
| 21 | +# from which we generated our po files. We use it here so when we |
| 22 | +# test build, we're building with the .rst files that generated our |
| 23 | +# .po files. |
| 24 | +CPYTHON_CURRENT_COMMIT := 9cbde7c6ce6f7b93301a37f03dfa0c0d45e00a39 |
| 25 | + |
| 26 | +CPYTHON_PATH := ../cpython/ |
| 27 | + |
| 28 | +LANGUAGE := bn_in |
| 29 | +BRANCH := 3.12 |
| 30 | + |
| 31 | +EXCLUDED := whatsnew/ c-api/ |
| 32 | + |
| 33 | +# Internal variables |
| 34 | + |
| 35 | +UPSTREAM := https://github.com/python/cpython |
| 36 | + |
| 37 | +PYTHON :=$(shell which python3) |
| 38 | +MODE := html |
| 39 | +POSPELL_TMP_DIR := .pospell/ |
| 40 | +JOBS := auto |
| 41 | + |
| 42 | +# Detect OS |
| 43 | + |
| 44 | +ifeq '$(findstring ;,$(PATH))' ';' |
| 45 | +detected_OS := Windows |
| 46 | +else |
| 47 | +detected_OS :=$(shell uname 2>/dev/null || echo Unknown) |
| 48 | +detected_OS :=$(patsubst CYGWIN%,Cygwin,$(detected_OS)) |
| 49 | +detected_OS :=$(patsubst MSYS%,MSYS,$(detected_OS)) |
| 50 | +detected_OS :=$(patsubst MINGW%,MSYS,$(detected_OS)) |
| 51 | +endif |
| 52 | + |
| 53 | +ifeq ($(detected_OS),Darwin)# Mac OS X |
| 54 | +CP_CMD := gcp# accessible with `brew install coreutils` or `brew upgrade coreutils` |
| 55 | +else |
| 56 | +CP_CMD := cp |
| 57 | +endif |
| 58 | + |
| 59 | +.PHONY: all |
| 60 | +all: ensure_prerequisites |
| 61 | +git -C$(CPYTHON_PATH) checkout$(CPYTHON_CURRENT_COMMIT) |
| 62 | +mkdir -p locales/$(LANGUAGE)/LC_MESSAGES/ |
| 63 | +$(CP_CMD) -u --parents*.po*/*.po locales/$(LANGUAGE)/LC_MESSAGES/ |
| 64 | +$(MAKE) -C$(CPYTHON_PATH)/Doc/\ |
| 65 | + SPHINXOPTS='-qW -j$(JOBS) \ |
| 66 | + -D locale_dirs=$(abspath locales)\ |
| 67 | + -D language=$(LANGUAGE)\ |
| 68 | + -D gettext_compact=0\ |
| 69 | + -D latex_engine=xelatex\ |
| 70 | + -D latex_elements.inputenc=\ |
| 71 | + -D latex_elements.fontenc=' \ |
| 72 | +$(MODE) |
| 73 | +git -C$(CPYTHON_PATH) checkout - |
| 74 | +@echo"Build success, open file://$(abspath$(CPYTHON_PATH))/Doc/build/html/index.html or run 'make serve' to see them." |
| 75 | + |
| 76 | + |
| 77 | +.PHONY: ensure_prerequisites |
| 78 | +ensure_prerequisites: |
| 79 | +@if [-z$(CPYTHON_PATH) ];then\ |
| 80 | +echo"Your CPYTHON_PATH is empty, please provide one.";\ |
| 81 | +exit 1;\ |
| 82 | +fi |
| 83 | +@if! [-d$(CPYTHON_PATH) ];then\ |
| 84 | +echo"Building the translation requires a cpython clone.";\ |
| 85 | +echo"Please provide the path to a clone using the CPYTHON_PATH variable.";\ |
| 86 | +echo"(Currently CPYTHON_PATH is$(CPYTHON_PATH).";\ |
| 87 | +echo"So you may want to run:";\ |
| 88 | +echo"";\ |
| 89 | +echo" git clone$(UPSTREAM)$(CPYTHON_PATH)";\ |
| 90 | +exit 1;\ |
| 91 | +fi |
| 92 | +@if [-n"$$(git -C$(CPYTHON_PATH) status --porcelain)" ];then\ |
| 93 | +echo"Your cpython clone at$(CPYTHON_PATH) is not clean.";\ |
| 94 | +echo"In order to avoid breaking things, please clean it first.";\ |
| 95 | +exit 1;\ |
| 96 | +fi |
| 97 | +@if! (blurbhelp>/dev/null2>&1&& sphinx-build --version>/dev/null2>&1);then\ |
| 98 | + git -C$(CPYTHON_PATH) checkout$(BRANCH);\ |
| 99 | +echo"You're missing dependencies, please enable a venv and install:";\ |
| 100 | +echo"";\ |
| 101 | +echo" python -m pip install -r requirements.txt -r$(CPYTHON_PATH)/Doc/requirements.txt";\ |
| 102 | +exit 1;\ |
| 103 | +fi |
| 104 | + |
| 105 | +.PHONY: serve |
| 106 | +serve: |
| 107 | +$(MAKE) -C$(CPYTHON_PATH)/Doc/ serve |
| 108 | + |
| 109 | + |
| 110 | +.PHONY: progress |
| 111 | +progress: |
| 112 | +@$(PYTHON) -c'import sys; print("{:.1%}".format(int(sys.argv[1]) / int(sys.argv[2])))'\ |
| 113 | +$(shell msgcat*.po*/*.po | msgattrib --translated | grep -c '^msgid')\ |
| 114 | +$(shell msgcat*.po*/*.po | grep -c '^msgid') |
| 115 | + |
| 116 | + |
| 117 | +.PHONY: todo |
| 118 | +todo: ensure_prerequisites |
| 119 | +potodo --exclude venv .venv$(EXCLUDED) |
| 120 | + |
| 121 | +.PHONY: wrap |
| 122 | +wrap: ensure_prerequisites |
| 123 | +@echo"Verify wrapping" |
| 124 | +powrap --check --quiet*.po**/*.po |
| 125 | + |
| 126 | +SRCS =$(shell git diff --name-only$(BRANCH) | grep '.po$$') |
| 127 | +# foo/bar.po => $(POSPELL_TMP_DIR)/foo/bar.po.out |
| 128 | +DESTS =$(addprefix$(POSPELL_TMP_DIR)/,$(addsuffix .out,$(SRCS))) |
| 129 | + |
| 130 | +.PHONY: spell |
| 131 | +spell: ensure_prerequisites$(DESTS) |
| 132 | + |
| 133 | +$(POSPELL_TMP_DIR)/%.po.out:%.po dict |
| 134 | +@echo"Pospell checking $<..." |
| 135 | +mkdir -p$(@D) |
| 136 | +pospell -p dict -l fr_FR$<&& touch$@ |
| 137 | + |
| 138 | +.PHONY: fuzzy |
| 139 | +fuzzy: ensure_prerequisites |
| 140 | +potodo -f --exclude venv .venv$(EXCLUDED) |
| 141 | + |
| 142 | +.PHONY: verifs |
| 143 | +verifs: wrap spell |
| 144 | + |
| 145 | +.PHONY: merge |
| 146 | +merge: ensure_prerequisites |
| 147 | +@echo"Merge from$(UPSTREAM)" |
| 148 | +git -C$(CPYTHON_PATH) checkout$(BRANCH) |
| 149 | +git -C$(CPYTHON_PATH) pull --ff-only |
| 150 | +(cd$(CPYTHON_PATH)/Doc; sphinx-build -Q -b gettext -D gettext_compact=0. ../pot) |
| 151 | +find$(CPYTHON_PATH)/pot/ -name'*.pot'|\ |
| 152 | +whileread -r POT; \ |
| 153 | +do\ |
| 154 | + PO="./$$(echo"$$POT" | sed"s#$(CPYTHON_PATH)/pot/##; s#\.pot\$$#.po#")"; \ |
| 155 | + mkdir -p"$$(dirname"$$PO")";\ |
| 156 | +if [-f"$$PO" ]; \ |
| 157 | +then\ |
| 158 | + msgmerge --backup=off --force-po -U"$$PO""$$POT";\ |
| 159 | +else\ |
| 160 | + msgcat -o"$$PO""$$POT";\ |
| 161 | +fi\ |
| 162 | +done |
| 163 | +rm -fr$(CPYTHON_PATH)/pot/ |
| 164 | +sed -i's|^#: .*Doc/|#: |'*.po*/*.po |
| 165 | +powrap -m |
| 166 | +@printf"\n%s %s\n""Replace CPYTHON_CURRENT_COMMIT in Makefile by:"$(shell git -C$(CPYTHON_PATH) rev-parse HEAD) |
| 167 | +@printf'To add, you can use:\n git status -s | grep "^ M .*\.po" | cut -d" " -f3 | while read -r file; do if [ $$(git diff "$$file" | wc -l) -gt 13 ]; then git add "$$file"; fi ; done\n' |
| 168 | + |
| 169 | +.PHONY: clean |
| 170 | +clean: |
| 171 | +@echo"Cleaning *.mo and$(POSPELL_TMP_DIR)" |
| 172 | +rm -fr$(POSPELL_TMP_DIR) |
| 173 | +find -name'*.mo' -delete |