2
2
#
3
3
# Here is what you can do:
4
4
#
5
- # - make # Automatically build an html local version
5
+ # - make # Automatically build an HTML local version
6
6
# - make todo # To list remaining tasks
7
7
# - make verifs # To check for correctness: wrapping, spelling
8
8
# - make wrap # To check for wrapping
@@ -33,12 +33,10 @@ EXCLUDED := whatsnew/ c-api/
33
33
# Internal variables
34
34
35
35
UPSTREAM := https://github.com/python/cpython
36
- VENV := $( shell pwd) /venv/
36
+
37
37
PYTHON := $(shell which python3)
38
38
MODE := html
39
39
POSPELL_TMP_DIR := .pospell/
40
- WORKTREES := $(VENV ) /worktrees/
41
- WORKTREE := $(WORKTREES ) /$(CPYTHON_CURRENT_COMMIT ) /
42
40
JOBS := auto
43
41
44
42
# Detect OS
@@ -59,132 +57,117 @@ else
59
57
endif
60
58
61
59
.PHONY : all
62
- all : setup
63
- mkdir -p $(WORKTREE ) /locales/$(LANGUAGE ) /LC_MESSAGES/
64
- $(CP_CMD ) -uv --parents * .po * /* .po $(WORKTREE ) /locales/$(LANGUAGE ) /LC_MESSAGES/ | cut -d" '" -f2
65
- $(MAKE ) -C $(WORKTREE ) /Doc/ VENVDIR=$(WORKTREE ) /Doc/venv/ PYTHON=$(PYTHON ) \
66
- SPHINXOPTS=' -qW -j$(JOBS) \
67
- -D locale_dirs=../locales \
68
- -D language=$(LANGUAGE ) \
69
- -D gettext_compact=0 \
70
- -D latex_engine=xelatex \
71
- -D latex_elements.inputenc= \
72
- -D latex_elements.fontenc=' \
73
- $(MODE ) && echo " Build success, open file://$( WORKTREE) /Doc/build/html/index.html or run 'make serve' to see them."
74
-
75
-
76
- .PHONY : setup
77
- setup : venv
78
- echo " Setup the main clone"
79
- if ! [ -d $( CPYTHON_PATH) ]; then \
80
- git clone --depth 16 --branch $(BRANCH ) $(UPSTREAM ) $(CPYTHON_PATH ) ; \
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; \
81
82
fi
82
-
83
- echo "Setup the current worktree"
84
- if ! [ -d $(WORKTREE) ]; then \
85
- rm -fr $(WORKTREES); \
86
- git -C $(CPYTHON_PATH) worktree prune; \
87
- mkdir -p $(WORKTREES); \
88
- if [ -n "$(CPYTHON_CURRENT_COMMIT)" ]; \
89
- then \
90
- depth=32; \
91
- while ! git -C $(CPYTHON_PATH) cat-file -e $(CPYTHON_CURRENT_COMMIT); \
92
- do \
93
- depth=$$((depth * 2)); \
94
- git -C $(CPYTHON_PATH) fetch --depth $$depth $(UPSTREAM) $(BRANCH); \
95
- done \
96
- else \
97
- git -C $(CPYTHON_PATH) fetch --depth 1 $(UPSTREAM); \
98
- fi; \
99
- git -C $(CPYTHON_PATH) worktree add $(WORKTREE)/ $(CPYTHON_CURRENT_COMMIT); \
100
- $(MAKE) -C $(WORKTREE)/Doc/ VENVDIR=$(WORKTREE)/Doc/venv/ PYTHON=$(PYTHON) venv; \
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; \
101
91
fi
102
-
103
-
104
- .PHONY : venv
105
- venv :
106
- echo " Setup venv in $( VENV) "
107
- if [ ! -d $( VENV) ]; then $( PYTHON) -m venv --prompt python-docs-fr $( VENV) ; fi
108
- $(VENV ) /bin/python -m pip install -q -r requirements.txt 2> $(VENV ) /pip-install.log
109
- if grep -q ' pip install --upgrade pip' $( VENV) /pip-install.log; then \
110
- $(VENV ) /bin/pip install -q --upgrade pip; \
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 ! (blurb help > /dev/null 2>&1 && sphinx-build --version > /dev/null 2>&1 ); then \
98
+ echo " You're missing dependencies, please enable a venv and install:" ; \
99
+ echo " " ; \
100
+ echo " python -m pip install -r requirements.txt -r $( CPYTHON_PATH) /Doc/requirements.txt" ; \
101
+ exit 1; \
111
102
fi
112
-
113
103
114
104
.PHONY : serve
115
105
serve :
116
- $(MAKE ) -C $(WORKTREE ) /Doc/ serve
106
+ $(MAKE ) -C $(CPYTHON_PATH ) /Doc/ serve
117
107
118
108
119
109
.PHONY : progress
120
110
progress :
121
- $(PYTHON ) -c ' import sys; print("{:.1%}".format(int(sys.argv[1]) / int(sys.argv[2])))' \
111
+ @ $(PYTHON ) -c ' import sys; print("{:.1%}".format(int(sys.argv[1]) / int(sys.argv[2])))' \
122
112
$(shell msgcat * .po * /* .po | msgattrib --translated | grep -c '^msgid') \
123
113
$(shell msgcat * .po * /* .po | grep -c '^msgid')
124
114
125
115
126
116
.PHONY : todo
127
- todo : venv
128
- $( VENV ) /bin/ potodo --exclude $( VENV ) $(EXCLUDED )
117
+ todo : ensure_prerequisites
118
+ potodo --exclude venv .venv $(EXCLUDED )
129
119
130
120
.PHONY : wrap
131
- wrap : venv
132
- echo " Verify wrapping"
133
- $( VENV ) /bin/ powrap --check --quiet * .po ** /* .po
121
+ wrap : ensure_prerequisites
122
+ @ echo " Verify wrapping"
123
+ powrap --check --quiet * .po ** /* .po
134
124
135
125
SRCS = $(shell git diff --name-only $(BRANCH ) | grep '.po$$')
136
126
# foo/bar.po => $(POSPELL_TMP_DIR)/foo/bar.po.out
137
127
DESTS = $(addprefix $(POSPELL_TMP_DIR ) /,$(addsuffix .out,$(SRCS ) ) )
138
128
139
129
.PHONY : spell
140
- spell : venv $(DESTS )
130
+ spell : ensure_prerequisites $(DESTS )
141
131
142
132
$(POSPELL_TMP_DIR ) /% .po.out : % .po dict
143
- echo " Pospell checking $<..."
133
+ @ echo " Pospell checking $<..."
144
134
mkdir -p $(@D )
145
- $( VENV ) /bin/ pospell -p dict -l fr_FR $< && touch $@
135
+ pospell -p dict -l fr_FR $< && touch $@
146
136
147
137
.PHONY : fuzzy
148
- fuzzy : venv
149
- $( VENV ) /bin/ potodo -f --exclude $( VENV ) $(EXCLUDED )
138
+ fuzzy : ensure_prerequisites
139
+ potodo -f --exclude venv .venv $(EXCLUDED )
150
140
151
141
.PHONY : verifs
152
142
verifs : wrap spell
153
143
154
144
.PHONY : merge
155
- merge : setup
156
- echo " Merge from $( UPSTREAM) "
157
- git -C $(CPYTHON_PATH ) fetch $(UPSTREAM )
158
- rm -fr $(WORKTREES ) /$(BRANCH )
159
- git -C $(CPYTHON_PATH ) worktree prune
160
- git -C $(CPYTHON_PATH ) worktree add $(WORKTREES ) /$(BRANCH ) $(word 1,$(shell git -C $(CPYTHON_PATH ) remote -v | grep python/cpython) ) /$(BRANCH )
161
- $(MAKE ) -C $(WORKTREES ) /$(BRANCH ) /Doc/ VENVDIR=$(WORKTREES ) /$(BRANCH ) /Doc/venv/ PYTHON=$(PYTHON ) venv;
162
- (cd $( WORKTREES) /$( BRANCH) /Doc; $( WORKTREES) /$( BRANCH) /Doc/venv/bin/sphinx-build -Q -b gettext -D gettext_compact=0 . ../pot)
163
- find $(WORKTREES ) /$(BRANCH ) -name ' *.pot' | \
164
- while read -r POT; \
165
- do\
166
- PO=" ./$$ (echo " $$ POT" | sed " s#$(WORKTREES ) /$(BRANCH ) /pot/# #; s#\.pot\$$#.po#")";\
167
- mkdir -p " $$ (dirname " $$ PO" )" ; \
168
- if [ -f " $$ PO" ]; \
169
- then\
170
- case " $$ POT" in\
171
- * whatsnew* ) msgmerge --backup=off --force-po --no-fuzzy-matching -U " $$ PO" " $$ POT" ;; \
172
- * ) msgmerge --backup=off --force-po -U " $$ PO" " $$ POT" ;; \
173
- esac\
174
- else\
175
- msgcat -o " $$ PO" " $$ POT" ; \
176
- fi\
145
+ merge : ensure_prerequisites
146
+ @echo " Merge from $( UPSTREAM) "
147
+ git -C $(CPYTHON_PATH ) checkout $(BRANCH )
148
+ git -C $(CPYTHON_PATH ) pull --ff-only
149
+ (cd $( CPYTHON_PATH) /Doc; sphinx-build -Q -b gettext -D gettext_compact=0 . ../pot)
150
+ find $(CPYTHON_PATH ) /pot/ -name ' *.pot' | \
151
+ while read -r POT; \
152
+ do \
153
+ PO=" ./$$ (echo " $$ POT" | sed " s#$(CPYTHON_PATH ) /pot/# #; s#\.pot\$$#.po#")"; \
154
+ mkdir -p " $$ (dirname " $$ PO" )" ; \
155
+ if [ -f " $$ PO" ]; \
156
+ then \
157
+ msgmerge --backup=off --force-po -U " $$ PO" " $$ POT" ; \
158
+ else \
159
+ msgcat -o " $$ PO" " $$ POT" ; \
160
+ fi \
177
161
done
178
- echo " Replacing CPYTHON_CURRENT_COMMIT Makefile by: " $(shell git -C $(WORKTREES ) /$(BRANCH ) rev-parse HEAD)
179
- sed -i ' s/^CPYTHON_CURRENT_COMMIT :=.*/CPYTHON_CURRENT_COMMIT := $(shell git -C $(WORKTREES)/$(BRANCH) rev-parse HEAD)/' Makefile
180
- rm -fr $(WORKTREES ) /$(BRANCH )
181
- git -C $(CPYTHON_PATH ) worktree prune
162
+ rm -fr $(CPYTHON_PATH ) /pot/
163
+ @echo " Replacing CPYTHON_CURRENT_COMMIT in Makefile by: " $(shell git -C $(CPYTHON_PATH ) rev-parse HEAD)
164
+ sed -i ' s/^CPYTHON_CURRENT_COMMIT :=.*/CPYTHON_CURRENT_COMMIT := $(shell git -C $(CPYTHON_PATH) rev-parse HEAD)/' Makefile
182
165
sed -i ' s|^#: .*Doc/|#: |' * .po * /* .po
183
- - $( VENV ) /bin/ powrap -m
184
- 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'
166
+ powrap -m
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'
185
168
186
169
.PHONY : clean
187
170
clean :
188
- echo " Cleaning *.mo, $( VENV ) , and $( POSPELL_TMP_DIR) "
189
- rm -fr $(VENV ) $( POSPELL_TMP_DIR )
171
+ @ echo " Cleaning *.mo and $( POSPELL_TMP_DIR) "
172
+ rm -fr $(POSPELL_TMP_DIR )
190
173
find -name ' *.mo' -delete
0 commit comments