[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/python-doc-ja/python-docs-pt-br/3.10/Makefile [Back]  [Original]

#
# Makefile for Brazilian Portuguese Python Documentation
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
#  based on: https://github.com/python/python-docs-fr/blob/3.8/Makefile
#

#################
# Configuration

# Main translation branch; please make sure it matches 'python-newest'
# project's version in 'python-docs' organization in Transifex
BRANCH              := $(shell git branch --show-current)

# Branches representing docs for older Python versions, which current
# translations should be merged into. Here some details:
#  - STABLEBRANCH and OLDSTABLEBRANCHES differ in that STABLEBRANCH
#      still gets its translated strings overwritten.
#  - Not-yet-translated strings will still be merged on both variables
#  - Leave STABLEBRANCH empty if Python stable branch is same as BRANCH.
#  - Never use same version as in BRANCH
#  - Check Python Docs versions still being built and published in:
#    https://github.com/python/docsbuild-scripts/blob/master/build_docs.py
STABLEBRANCH        := 3.9
OLDSTABLEBRANCHES   := 3.8 3.7 3.6 2.7

# Name of language team; should be python-docs-LANG, where LANG is the
# IETF language tag for your language; see Language Tag section in PEP 545
LANGUAGE_TEAM       := python-docs-pt-br

# Language code in ISO 639; see Language Tag section in PEP 545, and
# Sphinx configuration's supported languages
LANGUAGE            := pt_BR

# Paths and URLs
UPSTREAM            := https://github.com/python/cpython
PYTHON              := $(shell which python3)
CPYTHON_PATH        := $(shell realpath ../cpython)
POSPELL_TMP_DIR     := .pospell
VENV                := $(shell realpath ./venv)
WORKDIRS            := $(VENV)/workdirs
CPYTHON_WORKDIR     := $(WORKDIRS)/cpython
LOCALE_DIR          := $(WORKDIRS)/locale

# Settings for 'build' target
JOBS                := auto
SPHINXERRORHANDLING := "-W"

#
#################

.PHONY: help
help:
	@echo "Please use 'make ' where  is one of:"
	@echo " build        Build an local version in html, with warnings as errors"
	@echo " push         Update translations and Transifex config in the repository"
	@echo " pull         Download translations from Transifex; calls 'venv'"
	@echo " tx-config    Recreate an up-to-date project .tx/config; calls 'pot'"
	@echo " pot          Create/Update POT files from source files"
	@echo " serve        Serve a built documentation on http://localhost:8000"
	@echo " spell        Check spelling, storing output in $(POSPELL_TMP_DIR)"
	@echo " merge        Merge $(BRANCH) branch's .po files into the following"
	@echo "                older branches: $(STABLEBRANCH) $(OLDSTABLEBRANCHES)"
	@echo ""


# build: build the documentation using the translation files currently available
#        at the moment. For most up-to-date docs, run "tx-config" and "pull"
#        before this. If passing SPHINXERRORHANDLING='', warnings will not be
#        treated as errors, which is good to skip simple Sphinx syntax mistakes.
.PHONY: build
build: setup
	@echo "Building Python $(BRANCH) Documentation ..."
	@$(MAKE) -C $(CPYTHON_WORKDIR)/Doc/              \
		VENVDIR=$(CPYTHON_WORKDIR)/Doc/venv         \
		PYTHON=$(PYTHON)                            \
		SPHINXERRORHANDLING=$(SPHINXERRORHANDLING)  \
		SPHINXOPTS='-q --keep-going -j$(JOBS)       \
			-D locale_dirs=$(LOCALE_DIR)            \
			-D language=$(LANGUAGE)                 \
			-D gettext_compact=0                    \
			-D latex_engine=xelatex                 \
			-D latex_elements.inputenc=             \
			-D latex_elements.fontenc='             \
		html
		
	@echo "Success! Open file://$(CPYTHON_WORKDIR)/Doc/build/html/index.html, " \
	      "or run 'make serve' to see them in http://localhost:8000";


# push: push changed translation files and Transifex config file to repository.
#       Do nothing if there is no file changes. If GITHUB_TOKEN is set, then
#       assumes we are in GitHub Actions, requiring different push args.
.PHONY: push
push:
	@if ! git status -s | egrep '\.po|\.tx/config'; then                    \
		echo "Nothing to commit";                                           \
		exit 0;                                                             \
	else                                                                    \
		git add *.po **/*.po .tx/config;                                    \
		git commit -m 'Update translations from Transifex';                 \
		if [ $(GITHUB_TOKEN) != "" ]; then                                  \
			header="$(echo -n token:"$(GITHUB_TOKEN)" | base64)";           \
			git -c http.extraheader="AUTHORIZATION: basic $(header)" push;  \
		else                                                                \
			git push;                                                       \
		fi;                                                                 \
	fi


# pull: Download translations files from Transifex, and apply line wrapping.
#       For downloading new translation files, first run "tx-config" target
#       to update the translation file mapping.
.PHONY: pull
pull: venv
	@$(VENV)/bin/tx pull --force --language=$(LANGUAGE) --parallel
	@$(VENV)/bin/powrap --quiet *.po **/*.po


# tx-config: After running "pot", create a new Transifex config file by
#            reading pot files generated, then tweak it to LANGUAGE.
.PHONY: tx-config
tx-config: TRANSIFEX_PROJECT := python-newest
tx-config: pot
	@cd $(CPYTHON_WORKDIR)/Doc/locales;                 \
	rm -rf .tx;                                         \
	$(VENV)/bin/sphinx-intl create-txconfig;            \
	$(VENV)/bin/sphinx-intl update-txconfig-resources   \
	    --transifex-project-name=$(TRANSIFEX_PROJECT)   \
	    --locale-dir .                                  \
	    --pot-dir pot;
	
	@mkdir -p .tx
	@sed $(CPYTHON_WORKDIR)/Doc/locales/.tx/config    \
	    -e '/^source_file/d'                          \
	    -e 's|/LC_MESSAGES/||'                  \
	    -e "s|^file_filter|trans.$(LANGUAGE)|"        \
	    > .tx/config


# pot: After running "setup" target, run a cpython Makefile's target
#      to generate .pot files under $(CPYTHON_WORKDIR)/Doc/locales/pot.
.PHONY: pot
pot: setup
	@$(MAKE) -C $(CPYTHON_WORKDIR)/Doc/         \
		VENVDIR=$(CPYTHON_WORKDIR)/Doc/venv     \
		PYTHON=$(PYTHON)                        \
		ALLSPHINXOPTS='-E -b gettext            \
			-D gettext_compact=0                \
			-d build/.doctrees .                \
			locales/pot'                        \
		build


# setup: After running "venv" target, prepare that virtual environment with
#        a local clone of cpython repository and the translation files.
#        If the directories exists, only update the cpython repository and
#        the translation files copy which could have new/updated files.
.PHONY: setup
setup: venv
	@if [ -z $(BRANCH) ]; then                                               \
		echo "BRANCH is empty, should have git-branch. Unable to continue."; \
		exit 1;                                                              \
	fi
	
	@if ! [ -d $(CPYTHON_PATH) ]; then                                      \
		echo "CPython repo not found; cloning ...";                         \
		git clone --depth 1 --no-single-branch $(UPSTREAM) $(CPYTHON_PATH); \
		git -C $(CPYTHON_PATH) checkout $(BRANCH);                          \
	else                                                                    \
		echo "CPython repo found; updating ...";                            \
		git -C $(CPYTHON_PATH) checkout $(BRANCH);                          \
		git -C $(CPYTHON_PATH) pull --rebase;                               \
	fi
	
	@if ! [ -d $(CPYTHON_WORKDIR) ]; then                                   \
		echo "Setting up CPython repo in workdir ...";                      \
		rm -fr $(WORKDIRS);                                                 \
		mkdir -p $(WORKDIRS);                                               \
		git clone $(CPYTHON_PATH) $(CPYTHON_WORKDIR);                       \
		$(MAKE) -C $(CPYTHON_WORKDIR)/Doc                                   \
			VENVDIR=$(CPYTHON_WORKDIR)/Doc/venv                             \
			PYTHON=$(PYTHON) venv;                                          \
	else                                                                    \
		echo "CPython repo already ready in workdir";                       \
	fi
	
	@echo "Setting up translation files in workdir ..."
	@if ! [ -d $(LOCALE_DIR)/$(LANGUAGE)/LC_MESSAGES/ ]; then               \
		mkdir -p $(LOCALE_DIR)/$(LANGUAGE)/LC_MESSAGES/;                    \
	fi
	@cp --parents *.po **/*.po $(LOCALE_DIR)/$(LANGUAGE)/LC_MESSAGES/


# venv: create a virtual environment which will be used by almost every
#       other target of this script.
.PHONY: venv
venv:
	@if [ ! -d $(VENV) ]; then                                         \
	    echo "Setting up $(LANGUAGE_TEAM)'s virtual environment ...";  \
	    $(PYTHON) -m venv --prompt $(LANGUAGE_TEAM) $(VENV);           \
	    $(VENV)/bin/python -m pip install --upgrade pip;               \
	fi
	@$(VENV)/bin/pip install --upgrade --requirement requirements.txt


# serve: serve the documentation in a simple local web server, using cpython
#        Makefile's "serve" target. Run "build" before using this target.
.PHONY: serve
serve:
	@$(MAKE) -C $(CPYTHON_WORKDIR)/Doc serve


# spell: run spell checking tool in all po files listed in SRCS variable,
#        storing the output in text files DESTS for proofreading.  The
#        DESTS target run the spellchecking, while the typos.txt target
#        gather all reported issues in one file, sorted without redundancy.
.PHONY: spell

SRCS := $(wildcard *.po **/*.po)
DESTS = $(addprefix $(POSPELL_TMP_DIR)/out/,$(patsubst %.po,%.txt,$(SRCS)))

spell: venv $(DESTS) $(POSPELL_TMP_DIR)/typos.txt

$(POSPELL_TMP_DIR)/out/%.txt: %.po dict
	@echo "Checking $< ..."
	@mkdir -p $(@D)
	@$(VENV)/bin/pospell -l $(LANGUAGE) -p dict $< > $@ || true

$(POSPELL_TMP_DIR)/typos.txt:
	@echo "Gathering all typos in $(POSPELL_TMP_DIR)/typos.txt ..."
	@cut -d: -f3- $(DESTS) | sort -u > $@


# merge: merge translations from BRANCH (Python version currently aim of
#        translation) into each branch listed by STABLEBRANCH and
#        OLDSTABLEBRANCHES (branches of older Python versions) so that older
#        versions of the Python Docs make at least some use the latest
#        translations, if possible. OLDSTABLEBRANCHES has '--no-overwrite'
#        flag so it does not overwrite translated strings, preserving history.
#        After merging, git-push merged files (if any) to the target branch.
.PHONY: merge
merge: venv $(STABLEBRANCH) $(OLDSTABLEBRANCHES)

$(OLDSTABLEBRANCHES):  OVERWRITEFLAG = --no-overwrite
$(STABLEBRANCH) $(OLDSTABLEBRANCHES):
	@if [ $@ == $(BRANCH) ]; then                                       \
		echo "Ignoring attempt to pomerge '$(BRANCH)' into itself";     \
	else                                                                \
		echo "Merging translations from $(BRANCH) branch into $@ ...";  \
		$(VENV)/bin/pomerge --from-files *.po **/*.po;                  \
		git checkout $@;                                                \
		$(VENV)/bin/pomerge $(OVERWRITEFLAG) --to-files *.po **/*.po;   \
		$(VENV)/bin/powrap --modified *.po **/*.po;                     \
		if git status -s | egrep '\.po'; then                           \
			git add *.po **/*.po;                                       \
			git commit -m "pomerge from $(BRANCH) branch into $@";      \
			git push;                                                   \
		fi;                                                             \
		git checkout $(BRANCH);                                         \
	fi


# clean: remove all .mo files and the venv directory that may exist and could
#        have been created by the actions in other targets of this script.
.PHONY: clean
clean:
	rm -rf $(VENV)
	rm -rf $(POSPELL_TMP_DIR)
	find -name '*.mo' -delete

Web Proxy Viewer  |  New URL  |  Original Page