# Makefile for Trellis documentation created with Sphinx

# use bash for pushd/popd, and to fail quickly. virtualenv's activate
# has undefined variables, so no -u
SHELL = bash -e -o pipefail

# You can set these variables from the command line.
SPHINXOPTS   ?=
SPHINXBUILD  ?= sphinx-build
SOURCEDIR    ?= .
BUILDDIR     ?= _build

# Put it first so that "make" without argument is like "make help".
help: doc_venv
	source ./doc_venv/bin/activate ;\
	$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

.PHONY: help lint reload Makefile test

# Create the virtualenv with all the tools installed
doc_venv:
	virtualenv -p python3 doc_venv ;\
	source ./doc_venv/bin/activate ;\
	pip install livereload ;\
	pip install -r requirements.txt

# automatically reload changes in browser as they're made
reload: doc_venv
	source ./doc_venv/bin/activate ;\
	set -u ;\
	sphinx-reload $(SOURCEDIR)

# lint and link verification. linkcheck is built into sphinx
test: lint linkcheck

lint: rst-lint

rst-lint: doc_venv
	source ./doc_venv/bin/activate ;\
	set -u ;\
	rstcheck -r $$(find . -name \*.rst ! -path "*doc_venv*")

# clean up
clean:
	rm -rf $(BUILDDIR)

clean-all: clean
	rm -rf doc_venv

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile doc_venv | $(OTHER_REPO_DOCS)
	source ./doc_venv/bin/activate ;\
	set -u ;\
	$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
