| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 | # -*- coding: utf-8; mode: makefile-gmake -*-export DOCS_FOLDER DOCS_BUILD DOCS_DIST BOOKS_FOLDER BOOKS_DIST# You can set these variables from the command line.SPHINXOPTS  ?=SPHINXBUILD ?= $(PY_ENV_BIN)/sphinx-buildSPHINX_CONF ?= conf.pyDOCS_FOLDER = ./docsDOCS_BUILD  = ./$(LXC_ENV_FOLDER)build/docsDOCS_DIST   = ./$(LXC_ENV_FOLDER)dist/docsGH_PAGES    ?= build/gh-pagesBOOKS_FOLDER = ./docsBOOKS_DIST   = ./$(LXC_ENV_FOLDER)dist/booksifeq ($(KBUILD_VERBOSE),1)  SPHINX_VERBOSE = "-v"else  SPHINX_VERBOSE =endifdocs-help:	@echo  'makefile.sphinx:'	@echo  '  docs-clean	- clean intermediate doc objects'	@echo  '  $(GH_PAGES)	- create & upload github pages'	@echo  '  sphinx-pdf    - run sphinx latex & pdf targets'	@echo  ''	@echo  '  books/{name}.html : build only the HTML of document {name}'	@echo  '  valid values for books/{name}.html are:'	@echo  '    $(BOOKS_HTML)' | $(FMT)	@echo  '  books/{name}.pdf : build only the PDF of document {name}'	@echo  '  valid values for books/{name}.pdf are:'	@echo  '    $(BOOKS_PDF) ' | $(FMT)# ------------------------------------------------------------------------------# requirements# ------------------------------------------------------------------------------PHONY += msg-texlive texliveifeq ($(shell which xelatex >/dev/null 2>&1; echo $$?), 1)texlive: msg-TeXLive	$(error The 'xelatex' command was not found)elsetexlive:	@:endifmsg-texlive:	$(Q)echo "\n\The TeX/PDF output and the *math* extension require TexLive and latexmk:\n\n\  Make sure you have a updated TeXLive with XeTeX engine installed, grab it\n\  it from https://www.tug.org/texlive or install it from your package manager.\n\n\  Install latexmk from your package manager or visit https://ctan.org/pkg/latexmk\n\n\  Sphinx-doc produce (Xe)LaTeX files which might use additional TeX-packages\n\  and fonts. To process these LaTeX files, a TexLive installation with the\n\  additional packages is required. On debian based OS these requirements\n\  are installed by::\n\n\    sudo -H apt-get install\n\         latexmk\n\         texlive-base texlive-xetex texlive-latex-recommended\n\         texlive-extra-utils dvipng ttf-dejavu\n"# ------------------------------------------------------------------------------# commands# ------------------------------------------------------------------------------# $2 sphinx builder e.g. "html"# $3 path where configuration file (conf.py) is located# $4 sourcedir# $5 dest subfolder e.g. "man" for man pages at $(DOCS_DIST)/manquiet_cmd_sphinx = SPHINX    $@ --> file://$(abspath $(DOCS_DIST)/$5)      cmd_sphinx = SPHINX_CONF=$(abspath $4/$(SPHINX_CONF))\	$(SPHINXBUILD) $(SPHINX_VERBOSE) $(SPHINXOPTS)\	-b $2 -c $3 -d $(DOCS_BUILD)/.doctrees $4 $(DOCS_DIST)/$5quiet_cmd_sphinx_autobuild = SPHINX    $@ --> file://$(abspath $(DOCS_DIST)/$5)      cmd_sphinx_autobuild = PATH="$(PY_ENV_BIN):$(PATH)" $(PY_ENV_BIN)/sphinx-autobuild  $(SPHINX_VERBOSE) --open-browser --host 0.0.0.0 $(SPHINXOPTS)\	-b $2 -c $3 -d $(DOCS_BUILD)/.doctrees $4 $(DOCS_DIST)/$5quiet_cmd_sphinx_clean = CLEAN     $@      cmd_sphinx_clean = rm -rf $(DOCS_BUILD) $(DOCS_DIST) $(GH_PAGES)/* $(GH_PAGES)/.buildinfo# ------------------------------------------------------------------------------# targets# ------------------------------------------------------------------------------# build PDF of whole documentation in: $(DOCS_DIST)/pdfPHONY += sphinx-pdfsphinx-pdf: sphinx-latex	$(Q)cd $(DOCS_BUILD)/latex/; make all-pdf	$(Q)mkdir -p $(DOCS_DIST)/pdf	$(Q)cp $(DOCS_BUILD)/latex/*.pdf $(DOCS_DIST)/pdf	@echo "SPHINX    *.pdf --> file://$(abspath $(DOCS_DIST)/pdf)"PHONY += sphinx-latexsphinx-latex: pyenvinstall texlive	$(SPHINXBUILD) $(SPHINX_VERBOSE) $(SPHINXOPTS)\	  -b latex \	  -c $(DOCS_FOLDER) \	  -d $(DOCS_BUILD)/.doctrees \	  $(DOCS_FOLDER) \	  $(DOCS_BUILD)/latex# Sphinx projects, we call them *books* (what is more common).  Books are# folders under $(BOOKS_FOLDER) containing a conf.py file. The HTML output goes# to folder $(BOOKS_DIST)/<name> while PDF is placed (BOOKS_DIST)/<name>/pdfBOOKS=$(patsubst $(BOOKS_FOLDER)/%/conf.py,books/%,$(wildcard $(BOOKS_FOLDER)/*/conf.py))# fine grained targetsBOOKS_HTML  = $(patsubst %,%.html,$(BOOKS))BOOKS_CLEAN = $(patsubst %,%.clean,$(BOOKS))BOOKS_LATEX = $(patsubst %,%.latex,$(BOOKS))BOOKS_PDF   = $(patsubst %,%.pdf,$(BOOKS))BOOKS_LIVE  = $(patsubst %,%.live,$(BOOKS))$(BOOKS_DIST):	mkdir -p $(BOOKS_DIST)PHONY += $(BOOKS_HTML)$(BOOKS_HTML): pyenvinstall | $(BOOKS_DIST)	SPHINX_CONF=$(patsubst books/%.html,%,$@)/conf.py \	$(SPHINXBUILD) $(SPHINX_VERBOSE) $(SPHINXOPTS)\	  -b html \	  -c $(DOCS_FOLDER) \	  -d $(DOCS_BUILD)/books/$(patsubst books/%.html,%,$@)/.doctrees \	  $(BOOKS_FOLDER)/$(patsubst books/%.html,%,$@) \	  $(BOOKS_DIST)/$(patsubst books/%.html,%,$@)	@echo "SPHINX    $@ --> file://$(abspath $(BOOKS_DIST)/$(patsubst books/%.html,%,$@))"PHONY += $(BOOKS_HTML)$(BOOKS_LIVE): pyenvinstall | $(BOOKS_DIST)	PATH="$(PY_ENV_BIN):$(PATH)" \	SPHINX_CONF=$(patsubst books/%.live,%,$@)/conf.py \	$(PY_ENV_BIN)/sphinx-autobuild --poll -B --host 0.0.0.0 --port 8080 $(SPHINX_VERBOSE) $(SPHINXOPTS)\	  -b html \	  -c $(DOCS_FOLDER) \	  -d $(DOCS_BUILD)/books/$(patsubst books/%.live,%,$@)/.doctrees \	  $(BOOKS_FOLDER)/$(patsubst books/%.live,%,$@) \	  $(BOOKS_DIST)/$(patsubst books/%.live,%,$@)$(BOOKS_PDF): %.pdf : %.latex	$(Q)cd $(DOCS_BUILD)/latex/$(patsubst books/%.pdf,%,$@); make all-pdf	$(Q)mkdir -p $(BOOKS_DIST)/$(patsubst books/%.pdf,%,$@)/pdf	$(Q)cp -v $(DOCS_BUILD)/latex/$(patsubst books/%.pdf,%,$@)/*.pdf $(BOOKS_DIST)/$(patsubst books/%.pdf,%,$@)/pdf	@echo "SPHINX    $@ --> file://$(abspath $(BOOKS_DIST)/$(patsubst books/%.pdf,%,$@))/pdf"PHONY += $(BOOKS_LATEX)$(BOOKS_LATEX): pyenvinstall | $(BOOKS_DIST)	SPHINX_CONF=$(patsubst books/%.latex,%,$@)/conf.py \	$(SPHINXBUILD) $(SPHINX_VERBOSE) $(SPHINXOPTS)\	  -b latex \	  -c $(DOCS_FOLDER) \	  -d $(DOCS_BUILD)/books/$(patsubst books/%.latex,%,$@)/.doctrees \	  $(BOOKS_FOLDER)/$(patsubst books/%.latex,%,$@) \	  $(DOCS_BUILD)/latex/$(patsubst books/%.latex,%,$@)	@echo "SPHINX    $@ --> file://$(abspath $(DOCS_BUILD)/latex/$(patsubst books/%.latex,%,$@))"$(BOOKS_CLEAN):	$(Q)rm -rf $(BOOKS_DIST)/$(patsubst books/%.clean,%,$@) \	       $(DOCS_BUILD)/books/$(patsubst books/%.clean,%,$@) \	       $(DOCS_BUILD)/latex/$(patsubst books/%.clean,%,$@)# github pagesPHONY += prepare-gh-pagesprepare-gh-pages:	cp -r $(DOCS_DIST)/* $(GH_PAGES)/	touch $(GH_PAGES)/.nojekyll	echo "<html><head><META http-equiv='refresh' content='0;URL=index.html'></head></html>" > $(GH_PAGES)/404.htmlPHONY += gh-pagesgh-pages: docs-clean docs	- git worktree remove -f $(GH_PAGES) || exit 0	- git branch -D gh-pages || exit 0	git worktree add --no-checkout $(GH_PAGES) master	cd $(GH_PAGES); git checkout --orphan gh-pages && git rm -rfq .	$(MAKE) prepare-gh-pages	cd $(GH_PAGES);\		git add --all . ;\		git commit -q -m "make gh-pages: from $(shell git config --get remote.origin.url)@$(shell git rev-parse HEAD)" ;\		git push -f origin gh-pagesPHONY += ci-gh-pagesci-gh-pages: docs-clean docs	rm -Rf $(GH_PAGES)	mkdir -p $(GH_PAGES)	$(MAKE) prepare-gh-pagesPHONY += docs-cleandocs-clean: $(BOOKS_CLEAN)	$(call cmd,sphinx_clean).PHONY: $(PHONY)
 |