# To change from pyx to py for treap_node, make veryclean and change the
# treap_node definition immediately below

#treap_node=py_treap_node.py
treap_node=pyx_treap_node.so

python_version=2.6

#install_dir=/usr/local/unladen-2009Q4/lib/python2.6/site-packages
install_dir=/usr/local/lib/python2.6/dist-packages

go: \
	pyx_treap_node.so \
	py_treap_node.py \
	pyx_duptreap_node.so \
	py_duptreap_node.py \
	pyx_treap.py \
	py_treap.py \
	pyx_duptreap.py \
	py_duptreap.py
	./this-pylint py_treap.py py_treap_node.py
	./treaptest.py
	./duptreaptest.py
	./treapperftest.py
	./nesttest.py

go3:
	./compare-to-dict

go2:
	./demo --decreasing --increasing --random

py_treap.py: m4_treap.m4
	m4 -Dm4uniq=1 < m4_treap.m4 > py_treap.py
	
pyx_treap.py: m4_treap.m4
	m4 -Dpyx=1 -Dm4uniq=1 < m4_treap.m4 > pyx_treap.py
	
py_duptreap.py: m4_treap.m4
	m4 -Dm4dup=1 < m4_treap.m4 > py_duptreap.py
	
pyx_duptreap.py: m4_treap.m4
	m4 -Dpyx=1 -Dm4dup=1 < m4_treap.m4 > pyx_duptreap.py
	
py_treap_node.py: m4_treap_node.m4
	m4 -Dpy=1 -Dm4uniq=1 < m4_treap_node.m4 > py_treap_node.py

py_duptreap_node.py: m4_treap_node.m4
	m4 -Dpy=1 -Dm4dup=1 < m4_treap_node.m4 > py_duptreap_node.py

pyx_treap_node.pyx: m4_treap_node.m4
	m4 -Dpyx=1 -Dm4uniq=1 < m4_treap_node.m4 > pyx_treap_node.pyx

pyx_duptreap_node.pyx: m4_treap_node.m4
	m4 -Dpyx=1 -Dm4dup=1 < m4_treap_node.m4 > pyx_duptreap_node.pyx

pyx_treap_node.so: pyx_treap_node.o
	gcc -shared pyx_treap_node.o -o pyx_treap_node.so

pyx_duptreap_node.so: pyx_duptreap_node.o
	gcc -shared pyx_duptreap_node.o -o pyx_duptreap_node.so

pyx_treap_node.o: pyx_treap_node.c
	gcc -c -fPIC -I /usr/include/python$(python_version) pyx_treap_node.c

pyx_duptreap_node.o: pyx_duptreap_node.c
	gcc -c -fPIC -I /usr/include/python$(python_version) pyx_duptreap_node.c

pyx_treap_node.c: pyx_treap_node.pyx
	cython pyx_treap_node.pyx

pyx_duptreap_node.c: pyx_duptreap_node.pyx
	cython pyx_duptreap_node.pyx

pyx_treap.so: pyx_treap.o
	gcc -shared pyx_treap.o -o pyx_treap.so

pyx_duptreap.so: pyx_duptreap.o
	gcc -shared pyx_duptreap.o -o pyx_duptreap.so

pyx_treap.o: pyx_treap.c
	gcc -c -fPIC -I /usr/include/python$(python_version) pyx_treap.c

pyx_duptreap.o: pyx_duptreap.c
	gcc -c -fPIC -I /usr/include/python$(python_version) pyx_duptreap.c

install:
	python setup.py install

make-install:
	install -d $(install_dir)
	install -m 644 treap.py $(install_dir)
	[ -f pyx_treap_node.so ] && install -m 644 pyx_treap_node.so $(install_dir) || true
	[ -f py_treap_node.py ] && install -m 644 py_treap_node.py $(install_dir) || true
	install -m 644 duptreap.py $(install_dir)
	[ -f pyx_duptreap_node.so ] && install -m 644 pyx_duptreap_node.so $(install_dir) || true
	[ -f py_duptreap_node.py ] && install -m 644 py_duptreap_node.py $(install_dir) || true
	install -m 644 nest.py $(install_dir)

clean:
	rm -f *.pyc *.so *.o core py_treap.py py_duptreap.py
	rm -rf build
	rm -rf __pycache__

veryclean: clean
	rm -f *.c pyx_treap.py pyx_duptreap.py pyx_treap_node.pyx py_treap_node.py pyx_duptreap_node.pyx py_duptreap_node.py

publish: veryclean py_treap_node.py pyx_treap_node.pyx py_duptreap_node.py pyx_duptreap_node.pyx
	tar czflS ~/public_html/treap/treap.tar.gz *
	python setup.py sdist upload