Trying to simplify the Makefile (#1499)

* Simplify Makefile

* Enfin bon il sera bien sur PyPI soon™, laissons le.

* Garde fou.

* Useless, as rm -fr without argument removes nothing.

* Don't remove locales/.

* Newline at end of file

* I don't get what's happening here.

* Still don't get it.

* I was not sure it was mandatory, now I am.

* Ohh my debug was not debugging.

* WTF

* Ok, it's a Python upgrade...

* Update .github/workflows/tests.yml

* Update Makefile

* Update .github/workflows/tests.yml

* Update Makefile

* No longer needed.
This commit is contained in:
Julien Palard 2021-01-27 19:23:53 +01:00 committed by GitHub
parent 835e083e65
commit 5a4372b895
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 78 additions and 94 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@ venv/
.DS_Store .DS_Store
.pospell/ .pospell/
.potodo/ .potodo/
locales/

167
Makefile
View File

@ -2,7 +2,7 @@
# #
# Here is what you can do: # Here is what you can do:
# #
# - make # Automatically build an html local version # - make # Automatically build an HTML local version
# - make todo # To list remaining tasks # - make todo # To list remaining tasks
# - make verifs # To check for correctness: wrapping, spelling # - make verifs # To check for correctness: wrapping, spelling
# - make wrap # To check for wrapping # - make wrap # To check for wrapping
@ -33,12 +33,10 @@ EXCLUDED := whatsnew/ c-api/
# Internal variables # Internal variables
UPSTREAM := https://github.com/python/cpython UPSTREAM := https://github.com/python/cpython
VENV := $(shell pwd)/venv/
PYTHON := $(shell which python3) PYTHON := $(shell which python3)
MODE := html MODE := html
POSPELL_TMP_DIR := .pospell/ POSPELL_TMP_DIR := .pospell/
WORKTREES := $(VENV)/worktrees/
WORKTREE := $(WORKTREES)/$(CPYTHON_CURRENT_COMMIT)/
JOBS := auto JOBS := auto
# Detect OS # Detect OS
@ -59,132 +57,117 @@ else
endif endif
.PHONY: all .PHONY: all
all: setup all: ensure_prerequisites
mkdir -p $(WORKTREE)/locales/$(LANGUAGE)/LC_MESSAGES/ git -C $(CPYTHON_PATH) checkout $(CPYTHON_CURRENT_COMMIT)
$(CP_CMD) -uv --parents *.po */*.po $(WORKTREE)/locales/$(LANGUAGE)/LC_MESSAGES/ | cut -d"'" -f2 mkdir -p locales/$(LANGUAGE)/LC_MESSAGES/
$(MAKE) -C $(WORKTREE)/Doc/ VENVDIR=$(WORKTREE)/Doc/venv/ PYTHON=$(PYTHON) \ $(CP_CMD) -u --parents *.po */*.po locales/$(LANGUAGE)/LC_MESSAGES/
SPHINXOPTS='-qW -j$(JOBS) \ $(MAKE) -C $(CPYTHON_PATH)/Doc/ \
-D locale_dirs=../locales \ SPHINXOPTS='-qW -j$(JOBS) \
-D language=$(LANGUAGE) \ -D locale_dirs=$(abspath locales) \
-D gettext_compact=0 \ -D language=$(LANGUAGE) \
-D latex_engine=xelatex \ -D gettext_compact=0 \
-D latex_elements.inputenc= \ -D latex_engine=xelatex \
-D latex_elements.fontenc=' \ -D latex_elements.inputenc= \
$(MODE) && echo "Build success, open file://$(WORKTREE)/Doc/build/html/index.html or run 'make serve' to see them." -D latex_elements.fontenc=' \
$(MODE)
git -C $(CPYTHON_PATH) checkout -
@echo "Build success, open file://$(abspath $(CPYTHON_PATH))/Doc/build/html/index.html or run 'make serve' to see them."
.PHONY: setup .PHONY: ensure_prerequisites
setup: venv ensure_prerequisites:
echo "Setup the main clone" @if [ -z $(CPYTHON_PATH) ]; then \
if ! [ -d $(CPYTHON_PATH) ]; then \ echo "Your CPYTHON_PATH is empty, please provide one."; \
git clone --depth 16 --branch $(BRANCH) $(UPSTREAM) $(CPYTHON_PATH); \ exit 1; \
fi fi
@if ! [ -d $(CPYTHON_PATH) ]; then \
echo "Setup the current worktree" echo "Building the translation requires a cpython clone."; \
if ! [ -d $(WORKTREE) ]; then \ echo "Please provide the path to a clone using the CPYTHON_PATH variable."; \
rm -fr $(WORKTREES); \ echo "(Currently CPYTHON_PATH is $(CPYTHON_PATH)."; \
git -C $(CPYTHON_PATH) worktree prune; \ echo "So you may want to run:"; \
mkdir -p $(WORKTREES); \ echo ""; \
if [ -n "$(CPYTHON_CURRENT_COMMIT)" ]; \ echo " git clone $(UPSTREAM) $(CPYTHON_PATH)"; \
then \ exit 1; \
depth=32; \
while ! git -C $(CPYTHON_PATH) cat-file -e $(CPYTHON_CURRENT_COMMIT); \
do \
depth=$$((depth * 2)); \
git -C $(CPYTHON_PATH) fetch --depth $$depth $(UPSTREAM) $(BRANCH); \
done \
else \
git -C $(CPYTHON_PATH) fetch --depth 1 $(UPSTREAM); \
fi; \
git -C $(CPYTHON_PATH) worktree add $(WORKTREE)/ $(CPYTHON_CURRENT_COMMIT); \
$(MAKE) -C $(WORKTREE)/Doc/ VENVDIR=$(WORKTREE)/Doc/venv/ PYTHON=$(PYTHON) venv; \
fi fi
@if [ -n "$$(git -C $(CPYTHON_PATH) status --porcelain)" ]; then \
echo "Your cpython clone at $(CPYTHON_PATH) is not clean."; \
.PHONY: venv echo "In order to avoid breaking things, please clean it first."; \
venv: exit 1; \
echo "Setup venv in $(VENV)" fi
if [ ! -d $(VENV) ]; then $(PYTHON) -m venv --prompt python-docs-fr $(VENV); fi @if ! (blurb help >/dev/null 2>&1 && sphinx-build --version >/dev/null 2>&1); then \
$(VENV)/bin/python -m pip install -q -r requirements.txt 2> $(VENV)/pip-install.log echo "You're missing dependencies, please enable a venv and install:"; \
if grep -q 'pip install --upgrade pip' $(VENV)/pip-install.log; then \ echo ""; \
$(VENV)/bin/pip install -q --upgrade pip; \ echo " python -m pip install -r requirements.txt -r $(CPYTHON_PATH)/Doc/requirements.txt"; \
exit 1; \
fi fi
.PHONY: serve .PHONY: serve
serve: serve:
$(MAKE) -C $(WORKTREE)/Doc/ serve $(MAKE) -C $(CPYTHON_PATH)/Doc/ serve
.PHONY: progress .PHONY: progress
progress: progress:
$(PYTHON) -c 'import sys; print("{:.1%}".format(int(sys.argv[1]) / int(sys.argv[2])))' \ @$(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 | msgattrib --translated | grep -c '^msgid') \
$(shell msgcat *.po */*.po | grep -c '^msgid') $(shell msgcat *.po */*.po | grep -c '^msgid')
.PHONY: todo .PHONY: todo
todo: venv todo: ensure_prerequisites
$(VENV)/bin/potodo --exclude $(VENV) $(EXCLUDED) potodo --exclude venv .venv $(EXCLUDED)
.PHONY: wrap .PHONY: wrap
wrap: venv wrap: ensure_prerequisites
echo "Verify wrapping" @echo "Verify wrapping"
$(VENV)/bin/powrap --check --quiet *.po **/*.po powrap --check --quiet *.po **/*.po
SRCS = $(shell git diff --name-only $(BRANCH) | grep '.po$$') SRCS = $(shell git diff --name-only $(BRANCH) | grep '.po$$')
# foo/bar.po => $(POSPELL_TMP_DIR)/foo/bar.po.out # foo/bar.po => $(POSPELL_TMP_DIR)/foo/bar.po.out
DESTS = $(addprefix $(POSPELL_TMP_DIR)/,$(addsuffix .out,$(SRCS))) DESTS = $(addprefix $(POSPELL_TMP_DIR)/,$(addsuffix .out,$(SRCS)))
.PHONY: spell .PHONY: spell
spell: venv $(DESTS) spell: ensure_prerequisites $(DESTS)
$(POSPELL_TMP_DIR)/%.po.out: %.po dict $(POSPELL_TMP_DIR)/%.po.out: %.po dict
echo "Pospell checking $<..." @echo "Pospell checking $<..."
mkdir -p $(@D) mkdir -p $(@D)
$(VENV)/bin/pospell -p dict -l fr_FR $< && touch $@ pospell -p dict -l fr_FR $< && touch $@
.PHONY: fuzzy .PHONY: fuzzy
fuzzy: venv fuzzy: ensure_prerequisites
$(VENV)/bin/potodo -f --exclude $(VENV) $(EXCLUDED) potodo -f --exclude venv .venv $(EXCLUDED)
.PHONY: verifs .PHONY: verifs
verifs: wrap spell verifs: wrap spell
.PHONY: merge .PHONY: merge
merge: setup merge: ensure_prerequisites
echo "Merge from $(UPSTREAM)" @echo "Merge from $(UPSTREAM)"
git -C $(CPYTHON_PATH) fetch $(UPSTREAM) git -C $(CPYTHON_PATH) checkout $(BRANCH)
rm -fr $(WORKTREES)/$(BRANCH) git -C $(CPYTHON_PATH) pull --ff-only
git -C $(CPYTHON_PATH) worktree prune (cd $(CPYTHON_PATH)/Doc; sphinx-build -Q -b gettext -D gettext_compact=0 . ../pot)
git -C $(CPYTHON_PATH) worktree add $(WORKTREES)/$(BRANCH) $(word 1,$(shell git -C $(CPYTHON_PATH) remote -v | grep python/cpython))/$(BRANCH) find $(CPYTHON_PATH)/pot/ -name '*.pot' |\
$(MAKE) -C $(WORKTREES)/$(BRANCH)/Doc/ VENVDIR=$(WORKTREES)/$(BRANCH)/Doc/venv/ PYTHON=$(PYTHON) venv; while read -r POT; \
(cd $(WORKTREES)/$(BRANCH)/Doc; $(WORKTREES)/$(BRANCH)/Doc/venv/bin/sphinx-build -Q -b gettext -D gettext_compact=0 . ../pot) do \
find $(WORKTREES)/$(BRANCH) -name '*.pot' |\ PO="./$$(echo "$$POT" | sed "s#$(CPYTHON_PATH)/pot/##; s#\.pot\$$#.po#")"; \
while read -r POT;\ mkdir -p "$$(dirname "$$PO")"; \
do\ if [ -f "$$PO" ]; \
PO="./$$(echo "$$POT" | sed "s#$(WORKTREES)/$(BRANCH)/pot/##; s#\.pot\$$#.po#")";\ then \
mkdir -p "$$(dirname "$$PO")";\ msgmerge --backup=off --force-po -U "$$PO" "$$POT"; \
if [ -f "$$PO" ];\ else \
then\ msgcat -o "$$PO" "$$POT"; \
case "$$POT" in\ fi \
*whatsnew*) msgmerge --backup=off --force-po --no-fuzzy-matching -U "$$PO" "$$POT" ;;\
*) msgmerge --backup=off --force-po -U "$$PO" "$$POT" ;;\
esac\
else\
msgcat -o "$$PO" "$$POT";\
fi\
done done
echo "Replacing CPYTHON_CURRENT_COMMIT Makefile by: " $(shell git -C $(WORKTREES)/$(BRANCH) rev-parse HEAD) rm -fr $(CPYTHON_PATH)/pot/
sed -i 's/^CPYTHON_CURRENT_COMMIT :=.*/CPYTHON_CURRENT_COMMIT := $(shell git -C $(WORKTREES)/$(BRANCH) rev-parse HEAD)/' Makefile @echo "Replacing CPYTHON_CURRENT_COMMIT in Makefile by: " $(shell git -C $(CPYTHON_PATH) rev-parse HEAD)
rm -fr $(WORKTREES)/$(BRANCH) sed -i 's/^CPYTHON_CURRENT_COMMIT :=.*/CPYTHON_CURRENT_COMMIT := $(shell git -C $(CPYTHON_PATH) rev-parse HEAD)/' Makefile
git -C $(CPYTHON_PATH) worktree prune
sed -i 's|^#: .*Doc/|#: |' *.po */*.po sed -i 's|^#: .*Doc/|#: |' *.po */*.po
-$(VENV)/bin/powrap -m powrap -m
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' @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'
.PHONY: clean .PHONY: clean
clean: clean:
echo "Cleaning *.mo, $(VENV), and $(POSPELL_TMP_DIR)" @echo "Cleaning *.mo and $(POSPELL_TMP_DIR)"
rm -fr $(VENV) $(POSPELL_TMP_DIR) rm -fr $(POSPELL_TMP_DIR)
find -name '*.mo' -delete find -name '*.mo' -delete

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: Python 3\n" "Project-Id-Version: Python 3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-10-01 16:00+0200\n" "POT-Creation-Date: 2020-10-01 16:00+0200\n"
"PO-Revision-Date: 2018-10-04 12:14+0200\n" "PO-Revision-Date: 2020-12-10 16:23+0100\n"
"Last-Translator: Julien Palard <julien@palard.fr>\n" "Last-Translator: Julien Palard <julien@palard.fr>\n"
"Language-Team: FRENCH <traductions@lists.afpy.org>\n" "Language-Team: FRENCH <traductions@lists.afpy.org>\n"
"Language: fr\n" "Language: fr\n"
@ -688,7 +688,7 @@ msgstr "``n`` (:class:`int`) [``Py_ssize_t``]"
#: c-api/arg.rst:292 #: c-api/arg.rst:292
msgid "Convert a Python integer to a C :c:type:`Py_ssize_t`." msgid "Convert a Python integer to a C :c:type:`Py_ssize_t`."
msgstr "Convertit un entier Python en un :c:type:`short int` C." msgstr "Convertit un entier Python en un :c:type:`Py_ssize_t`."
#: c-api/arg.rst:299 #: c-api/arg.rst:299
msgid "``c`` (:class:`bytes` or :class:`bytearray` of length 1) [char]" msgid "``c`` (:class:`bytes` or :class:`bytearray` of length 1) [char]"