#
# This contains targets to build the website and add the documentation generated from the Cassandra source.
#
# The add-doc command build the document from the cassandra sources pointed by the CASSANDRA_DIR environment variable
# and copy it in doc/<version>/. The add-latest-doc does the same but also create/modify the doc/latest symlink so it
# points to the doc it just created (so to use to replace the "current" documentation).
#
# Note that the add-doc and add-latest-doc are not called automatically from other targets and needs to be called
# manually. That's because there is many cases where you want to just update the website, without reconstructing the
# documentation. Note however that the doc target do rebuild the website.
#

CASSANDRA_DOC_DIR="$(CASSANDRA_DIR)/doc"

.check-env:
ifndef CASSANDRA_DIR
	$(error You should set the CASSANDRA_DIR environment variable to the git source dir, checkout on the proper branch)
endif

.build-doc: .check-env
# Not declaring DOC_VERSION at top-level cause it calls ant and that's stupidly slow
	$(eval DOC_VERSION=$(shell echo `cd $(CASSANDRA_DOC_DIR)/..; ant echo-base-version | grep '\[echo\]' | awk '{print $$2}'`))
	$(eval DOC_DIR="doc/$(DOC_VERSION)")
	# Nodetool docs are autogenerated, but that needs nodetool to be built
	@cd $(CASSANDRA_DIR); ant jar
	@cd $(CASSANDRA_DOC_DIR); make website
	@if [ -d $(DOC_DIR) ]; then rm -rf $(DOC_DIR); fi
	@cp -r $(CASSANDRA_DOC_DIR)/build/html $(DOC_DIR)

.latest-doc-link:
	@ln -s -f -T $(DOC_VERSION) "doc/latest"

build:
	@bundle exec jekyll build

clean:
	@bundle exec jekyll clean

serve:
	@bundle exec jekyll serve

add-doc: .build-doc build

add-latest-doc: .build-doc .latest-doc-link build
