# Makefile for Sphinx documentation

.PHONY: help html publish

srcdir        ?= .
SPHINXBUILD    = python3 -m sphinx
PAPER         ?= letter
BUILDDIR      ?= _build
JAVA          ?= java
PLANTUML_JAR  ?= $(HOME)/bin/plantuml.jar
PLANTUML_ARGS ?=
REALPATH       = $(if $(WINDIR), cygpath --absolute --windows, realpath)

SBUILD = $(SPHINXBUILD) ${PAPEROPT_letter}
PLANTUML = $(JAVA) -jar $(PLANTUML_JAR) $(PLANTUML_ARGS)
IMAGEDIR = $(srcdir)/pix
BUILD_IMAGEDIR = $(BUILDDIR)/html/_images
UMLDIR = $(srcdir)/uml
SWOC_VERSION   ?= $(shell grep 'release =' conf.py | sed -e 's/release = //' | sed -e 's/"//g')

$(IMAGEDIR)/%.svg : $(UMLDIR)/%.uml
	$(PLANTUML) $< -tsvg -o $(shell $(REALPATH) $(IMAGEDIR))

help:
	@echo "Please use \`make <target>' where <target> is one of"
	@echo "  html       to make standalone HTML files."
	@echo "  publish    to build the documentation clean, ready to publish."

uml:
	@if [ ! -d uml ] ; then mkdir uml; fi

static:
	@if [ ! -d static ] ; then mkdir static; fi

html: static uml ext/local-config.py reference
	$(SBUILD) -d $(BUILDDIR)/doctrees -b html $(srcdir) $(BUILDDIR)/html
	@echo
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."

clean:
	-rm -rf html warn.log
	-rm -rf $(BUILDDIR)/doctrees $(BUILDDIR)/html $(BUILDDIR)/dirhtml $(BUILDDIR)/singlehtml
	-rm -rf doxygen

publish: clean doxygen html
	if [ -z $(SWOC_VERSION) ] ; then echo "Could not find version to publish" ; exit 1 ; fi
	( cd _build/html ; tar cfh /tmp/libswoc-doc.tar * )
	scp /tmp/libswoc-doc.tar aws-swoc-1:/tmp

ext/local-config.py : MakeDocFile
	@echo "plantuml = '$(JAVA) -jar $(PLANTUML_JAR)'" > ext/local-config.py
	@echo "plantuml_output_format = 'svg'" >> ext/local-config.py

doxygen:
	doxygen

reference: doxygen
	@if [ ! -d _build/html ] ; then mkdir -p _build/html ; fi
	@if [ ! -d _build/html/reference ] ; then ln -s ../../doxygen/html _build/html/reference ; fi

