# Minimal makefile for Sphinx documentation
#

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

# Put it first so that "make" without argument is like "make all".
all: html

# param 1: The url of the git repo.
# param 2: The branch to clone.
# param 3: The directory to clone into.
define git_clone_raw
	git clone --depth 1 --single-branch $(1) --branch $(2) $(3)
endef

# param 1: The url of the git repo.
# param 2: The branch to clone.
# param 3: The directory to clone into.
define git_clone
	if [ ! -d "$(3)" ]; then $(call git_clone_raw,$(1),$(2),$(3)); fi
endef

define mkdir
	if [ ! -d "$(1)" ]; then mkdir $(1); fi
endef

# param 1: The url of the git repo.
# param 2: The branch to clone.
# param 3: The directory to clone into.
# param 4: The name of the directory under third_party to copy the docs.
# param 5: The directory under Documentation/ that contains the docs to copy.
define fetch_kernel_docs
	$(call git_clone,$(1),$(2),$(3))
	make -C $(3) htmldocs SPHINXDIRS=$(5)
	mkdir -p $(BUILDDIR)/html/third_party/$(4)
	$(call mkdir,$(BUILDDIR)/html/third_party/$(4)/LICENSES/)
	cp -r $(3)/LICENSES/* $(BUILDDIR)/html/third_party/$(4)/LICENSES/
	$(call mkdir,$(BUILDDIR)/html/third_party/$(4)/docs/)
	cp -r $(3)/Documentation/output/$(5)/* $(BUILDDIR)/html/third_party/$(4)/docs/
endef

fetch_stable_docs:
	$(call fetch_kernel_docs,https://kunit.googlesource.com/linux,kunit/alpha/master,$(BUILDDIR)/stable_kunit,stable_kernel,test)

fetch_upstream_docs:
	$(call fetch_kernel_docs,https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/,master,$(BUILDDIR)/upstream_kunit,kernel,dev-tools/kunit)

download_deps: fetch_stable_docs fetch_upstream_docs

copy_statics:
	cp LICENSE $(BUILDDIR)/html/
	cp CONTRIBUTING.md $(BUILDDIR)/html/
	cp statics/CNAME $(BUILDDIR)/html/
	cp statics/.nojekyll $(BUILDDIR)/html/
	cp statics/README.md $(BUILDDIR)/html/

clean:
	rm -rf $(BUILDDIR)

.PHONY: all fetch_stable_docs fetch_upstream_docs download_deps clean html copy_statics

html: Makefile download_deps copy_statics
	@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
