forked from AFPy/python-docs-fr
Running `git checkout CPYTHON_CURRENT_COMMIT` and then `git checkout -c` can render the sphinx build slower because many sources may seem out of date.
172 lines 5.5 KiB Makefile
172 lines
5.5 KiB
Makefile
# Makefile for French Python Documentation | |
# | |
# Here is what you can do: | |
# | |
# - make # Automatically build an HTML local version | |
# - make todo # To list remaining tasks | |
# - make verifs # To check for correctness: wrapping, spelling | |
# - make wrap # To check for wrapping | |
# - make spell # To check for spelling | |
# - make merge # To merge pot from upstream | |
# - make fuzzy # To find fuzzy strings | |
# - make progress # To compute current progression | |
# | |
# Modes are: autobuild-stable, autobuild-dev, and autobuild-html, | |
# documented in gen/src/3.6/Doc/Makefile as we're only delegating the | |
# real work to the Python Doc Makefile. | |
| |
# Configuration | |
| |
# The CPYTHON_CURRENT_COMMIT is the commit, in the cpython repository, | |
# from which we generated our po files. We use it here so when we | |
# test build, we're building with the .rst files that generated our | |
# .po files. | |
CPYTHON_CURRENT_COMMIT := eec8e61992fb654d4cf58de4d727c18622b8303e | |
| |
CPYTHON_PATH := ../cpython/ | |
| |
LANGUAGE := fr | |
BRANCH := 3.9 | |
| |
EXCLUDED := whatsnew/ c-api/ | |
| |
# Internal variables | |
| |
UPSTREAM := https://github.com/python/cpython | |
| |
PYTHON := $(shell which python3) | |
MODE := html | |
POSPELL_TMP_DIR := .pospell/ | |
JOBS := auto | |
| |
# Detect OS | |
| |
ifeq '$(findstring ;,$(PATH))' ';' | |
detected_OS := Windows | |
else | |
detected_OS := $(shell uname 2>/dev/null || echo Unknown) | |
detected_OS := $(patsubst CYGWIN%,Cygwin,$(detected_OS)) | |
detected_OS := $(patsubst MSYS%,MSYS,$(detected_OS)) | |
detected_OS := $(patsubst MINGW%,MSYS,$(detected_OS)) | |
endif | |
| |
ifeq ($(detected_OS),Darwin) # Mac OS X | |
CP_CMD := gcp # accessible with `brew install coreutils` or `brew upgrade coreutils` | |
else | |
CP_CMD := cp | |
endif | |
| |
.PHONY: all | |
all: ensure_prerequisites | |
git -C $(CPYTHON_PATH) checkout $(CPYTHON_CURRENT_COMMIT) | |
mkdir -p locales/$(LANGUAGE)/LC_MESSAGES/ | |
$(CP_CMD) -u --parents *.po */*.po locales/$(LANGUAGE)/LC_MESSAGES/ | |
$(MAKE) -C $(CPYTHON_PATH)/Doc/ \ | |
SPHINXOPTS='-W -j$(JOBS) \ | |
-D locale_dirs=$(abspath locales) \ | |
-D language=$(LANGUAGE) \ | |
-D gettext_compact=0 \ | |
-D latex_engine=xelatex \ | |
-D latex_elements.inputenc= \ | |
-D latex_elements.fontenc=' \ | |
$(MODE) | |
@echo "Build success, open file://$(abspath $(CPYTHON_PATH))/Doc/build/html/index.html or run 'make serve' to see them." | |
| |
| |
.PHONY: ensure_prerequisites | |
ensure_prerequisites: | |
@if [ -z $(CPYTHON_PATH) ]; then \ | |
echo "Your CPYTHON_PATH is empty, please provide one."; \ | |
exit 1; \ | |
fi | |
@if ! [ -d $(CPYTHON_PATH) ]; then \ | |
echo "Building the translation requires a cpython clone."; \ | |
echo "Please provide the path to a clone using the CPYTHON_PATH variable."; \ | |
echo "(Currently CPYTHON_PATH is $(CPYTHON_PATH)."; \ | |
echo "So you may want to run:"; \ | |
echo ""; \ | |
echo " git clone $(UPSTREAM) $(CPYTHON_PATH)"; \ | |
exit 1; \ | |
fi | |
@if [ -n "$$(git -C $(CPYTHON_PATH) status --porcelain)" ]; then \ | |
echo "Your cpython clone at $(CPYTHON_PATH) is not clean."; \ | |
echo "In order to avoid breaking things, please clean it first."; \ | |
exit 1; \ | |
fi | |
@if ! (blurb help >/dev/null 2>&1 && sphinx-build --version >/dev/null 2>&1); then \ | |
git -C $(CPYTHON_PATH) checkout $(BRANCH); \ | |
echo "You're missing dependencies, please enable a venv and install:"; \ | |
echo ""; \ | |
echo " python -m pip install -r requirements.txt -r $(CPYTHON_PATH)/Doc/requirements.txt"; \ | |
exit 1; \ | |
fi | |
| |
.PHONY: serve | |
serve: | |
$(MAKE) -C $(CPYTHON_PATH)/Doc/ serve | |
| |
| |
.PHONY: progress | |
progress: | |
@$(PYTHON) -c 'import sys; print("{:.1%}".format(int(sys.argv[1]) / int(sys.argv[2])))' \ | |
$(shell msgcat *.po */*.po | msgattrib --translated | grep -c '^msgid') \ | |
$(shell msgcat *.po */*.po | grep -c '^msgid') | |
| |
| |
.PHONY: todo | |
todo: ensure_prerequisites | |
potodo --exclude venv .venv $(EXCLUDED) | |
| |
.PHONY: wrap | |
wrap: ensure_prerequisites | |
@echo "Verify wrapping" | |
powrap --check --quiet *.po **/*.po | |
| |
SRCS = $(shell git diff --name-only $(BRANCH) | grep '.po$$') | |
# foo/bar.po => $(POSPELL_TMP_DIR)/foo/bar.po.out | |
DESTS = $(addprefix $(POSPELL_TMP_DIR)/,$(addsuffix .out,$(SRCS))) | |
| |
.PHONY: spell | |
spell: ensure_prerequisites $(DESTS) | |
| |
$(POSPELL_TMP_DIR)/%.po.out: %.po dict | |
@echo "Pospell checking $<..." | |
mkdir -p $(@D) | |
pospell -p dict -l fr_FR $< && touch $@ | |
| |
.PHONY: fuzzy | |
fuzzy: ensure_prerequisites | |
potodo -f --exclude venv .venv $(EXCLUDED) | |
| |
.PHONY: verifs | |
verifs: wrap spell | |
| |
.PHONY: merge | |
merge: ensure_prerequisites | |
@echo "Merge from $(UPSTREAM)" | |
git -C $(CPYTHON_PATH) checkout $(BRANCH) | |
git -C $(CPYTHON_PATH) pull --ff-only | |
(cd $(CPYTHON_PATH)/Doc; sphinx-build -Q -b gettext -D gettext_compact=0 . ../pot) | |
find $(CPYTHON_PATH)/pot/ -name '*.pot' |\ | |
while read -r POT; \ | |
do \ | |
PO="./$$(echo "$$POT" | sed "s#$(CPYTHON_PATH)/pot/##; s#\.pot\$$#.po#")"; \ | |
mkdir -p "$$(dirname "$$PO")"; \ | |
if [ -f "$$PO" ]; \ | |
then \ | |
msgmerge --backup=off --force-po -U "$$PO" "$$POT"; \ | |
else \ | |
msgcat -o "$$PO" "$$POT"; \ | |
fi \ | |
done | |
rm -fr $(CPYTHON_PATH)/pot/ | |
sed -i 's|^#: .*Doc/|#: |' *.po */*.po | |
powrap -m | |
@printf "\n%s %s\n" "Replace CPYTHON_CURRENT_COMMIT in Makefile by: " $(shell git -C $(CPYTHON_PATH) rev-parse HEAD) | |
@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' | |
| |
.PHONY: clean | |
clean: | |
@echo "Cleaning *.mo and $(POSPELL_TMP_DIR)" | |
rm -fr $(POSPELL_TMP_DIR) | |
find -name '*.mo' -delete |