# Change this to use a different Python interpreter,
# or use, e.g. make PYTHON=my-python
PYTHON?=python

# Change this to 1 to rebuild the documentation.
UPDATE_DOCS?=0

# This makefile is a mess, but never mind.

VERSION=0.1

MODULES=src/*.py src/*/*.py src/cpython/*.pyx src/cpython/*.c
DOCUMENTED=$(MODULES)
ifeq ($(UPDATE_DOCS), 1)
DOCS=doc/auto/index.html doc/tutorial.html doc/types.html
else
DOCS=
endif

DIST=dist/sizer-$(VERSION).tar.gz

all: modules doc
doc: $(DOCS)
dist: $(DIST)

install: all
	$(PYTHON) setup.py install

modules: build
build: $(MODULES)
	$(PYTHON) setup.py build
	$(PYTHON) setup.py build_ext

# Should change this to something sensible eventually...
DOC_PATH1=home/nick/sizer
DOC_PATH=/$(DOC_PATH1)
# Produce the current directory without a / at the beginning
PWD1:=$(shell echo $(PWD)|sed "s/\///")
QUOTED_DOC=$(subst /,\/,$(DOC_PATH1))
QUOTED_PWD=$(subst /,\/,$(PWD1))

doc/auto/index.html: $(DOCUMENTED)
	happydoc -d doc/auto $(DOCUMENTED)
	mkdir -p doc/auto/$(DOC_PATH1)
	cp -r doc/auto/$(PWD1)/* doc/auto/$(DOC_PATH1)
	mv doc/auto/index.html doc/auto/index.2
	sed "s/$(QUOTED_PWD)/$(QUOTED_DOC)/g" doc/auto/index.2>doc/auto/index.html
	rm doc/auto/index.2
	rm -r doc/auto/$(PWD1)

#
# This is ugly sed nonsense to semi-automatically put links in doc/*.in.
#

# Replace <auto>x.y</auto> with a link to y in module x
# or <auto>x</auto> with a link to module x
# <auto target>link</auto> will also work.
# Links can be module, module.func, module.Class or module.Class.func.
tutorial: doc/tutorial.html
MODULE_PATTERN = <auto \([^\.>]*\)>\([^<]*\)<\/auto>
MODULE_REPLACE = <a href=\"auto\/$(QUOTED_DOC)\/doc\/auto\/\1.html\">\2<\/a>

FUNC_PATTERN = <auto \([^\.>]*\)\.\([a-z][^\.>]*\)>\([^<]*\)<\/auto>
FUNC_REPLACE = <a href=\"auto\/$(QUOTED_DOC)\/doc\/auto\/\1.html\#\2\">\3<\/a>

CLASS_PATTERN = <auto \([^\.>]*\)\.\([A-Z][^\.>]*\)>\([^<]*\)<\/auto>
CLASS_REPLACE = <a href=\"auto\/$(QUOTED_DOC)\/doc\/auto\/\1\/\2.html\">\3<\/a>

METHOD_PATTERN = <auto \([^\.>]*\)\.\([A-Z][^\.>]*\)\.\([a-z][^\.>]*\)>\([^<]*\)<\/auto>
METHOD_REPLACE = <a href=\"auto\/$(QUOTED_DOC)\/doc\/auto\/\1\/\2.html\#\3\">\4<\/a>

# Replace <auto>foo</auto> with <auto foo>foo</auto>
EXPAND_PATTERN = <auto>\([^<]*\)<\/auto>
EXPAND_REPLACE = <auto \1>\1<\/auto>

doc/tutorial.html: doc/tutorial.html.in Makefile
	sed "s/$(EXPAND_PATTERN)/$(EXPAND_REPLACE)/g" < doc/tutorial.html.in | \
	sed "s/$(MODULE_PATTERN)/$(MODULE_REPLACE)/g" | \
	sed "s/$(FUNC_PATTERN)/$(FUNC_REPLACE)/g" | \
	sed "s/$(CLASS_PATTERN)/$(CLASS_REPLACE)/g" | \
	sed "s/$(METHOD_PATTERN)/$(METHOD_REPLACE)/g" > doc/tutorial.html

# Put links to Python CVS in HTML files.
PYTHON_ROOT=http:\/\/cvs.sf.net\/viewcvs.py\/python\/python\/dist\/src
%: %.cvs.in Makefile
	sed "s/link(\([^):]*\))/<a href=\"$(PYTHON_ROOT)\/\1?view=markup\">\1<\/a>/g" < $(<) > $(@)

clean: doc/tutorial.html.in
	rm -f doc/tutorial.html doc/types.html
	rm -f `find doc/auto -name "*.html"`
	rm -rf build
	$(PYTHON) setup.py clean

cleanall: clean
	rm -f `find . -name "*~" -or -name "*.pyc" -or -name "*.pyo"`

doc/internals.dvi: FORCE
	cd doc && latex -shell-escape internals.tex
FORCE:

doc/internals.ps: doc/internals.dvi
	cd doc && dvips internals.dvi

doc/internals.pdf: doc/internals.dvi
	cd doc && dvipdf internals.dvi

$(DIST): FORCE doc doc/internals.ps
	rm -f $(DIST)
	$(PYTHON) setup.py sdist --formats=gztar
