# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

ASCIIDOC       ?= asciidoc
ASCIIDOC_EXTRA ?=
SVN            ?= svn
PUB_ROOT       ?= https://gerrit.googlecode.com/svn/documentation

all: html

clean:
	rm -f *.html
	rm -rf $(LOCAL_ROOT)

ifeq ($(origin VERSION), undefined)
  VERSION := $(shell ./GEN-DOC-VERSION 2>/dev/null)
endif

DOC_HTML      := $(patsubst %.txt,%.html,$(wildcard *.txt))
LOCAL_ROOT    := .published
SCRIPTSDIR    := $(shell pwd)/javascript
COMMIT        := $(shell git describe HEAD | sed s/^v//)
PUB_DIR       := $(PUB_ROOT)/$(VERSION)
PRIOR          = PRIOR

ifeq ($(VERSION),)
  REVISION = $(COMMIT)
else
  ifeq ($(VERSION),$(COMMIT))
    REVISION := $(VERSION)
  else
    REVISION := $(VERSION) (from v$(COMMIT))
  endif
endif

html: $(DOC_HTML)

update: html
ifeq ($(VERSION),)
	./GEN-DOC-VERSION
endif
	@-rm -rf $(LOCAL_ROOT)
	@echo "Checking out current $(VERSION)"
	@if ! $(SVN) checkout $(PUB_DIR) $(LOCAL_ROOT) 2>/dev/null ; then \
		echo "Copying $(PRIOR) to $(VERSION) ..." && \
		$(SVN) cp -m "Create $(VERSION) documentation" $(PUB_ROOT)/$(PRIOR) $(PUB_DIR) && \
		$(SVN) checkout $(PUB_DIR) $(LOCAL_ROOT) ; \
	fi
	@rm -f $(LOCAL_ROOT)/*.html
	@cp *.html $(LOCAL_ROOT)
	@cd $(LOCAL_ROOT) && \
	  r=`$(SVN) status | perl -ne 'print if s/^!  *//' ` && \
	  if [ -n "$$r" ]; then $(SVN) rm $$r; fi && \
	  a=`$(SVN) status | perl -ne 'print if s/^\?  *//' ` && \
	  if [ -n "$$a" ]; then \
	    $(SVN) add $$a && \
	    $(SVN) propset svn:mime-type text/html $$a ; \
	    fi && \
	  echo "Committing $(VERSION) at v$(COMMIT)" && \
	  $(SVN) commit -m "Updated $(VERSION) documentation to v$(COMMIT)"
	@-rm -rf $(LOCAL_ROOT)

$(DOC_HTML): %.html : %.txt $(SCRIPTSDIR)/toc.js
	@echo "FORMAT $@"
	@rm -f $@+ $@
	@$(ASCIIDOC) --unsafe \
		-a toc \
		-a 'revision=$(REVISION)' \
		-a 'scriptsdir=$(SCRIPTSDIR)' \
		-b xhtml11 -f asciidoc.conf \
		$(ASCIIDOC_EXTRA) -o $@+ $<
	@mv $@+ $@
