# 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

go: pyx_treap_node.so py_treap_node.py pyx_duptreap_node.so py_duptreap_node.py treap.py duptreap.py
	./treaptest.py
	./duptreaptest.py
	./treapperftest.py
	./nesttest.py

go3:
	./compare-to-dict

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

treap.py: treap.m4
	m4 -Dm4uniq=1 < treap.m4 > treap.py
	
duptreap.py: treap.m4
	m4 -Dm4dup=1 < treap.m4 > duptreap.py
	
pyx_treap_node.pyx: treap_node.m4
	m4 -Dpyx=1 -Dm4uniq=1 < treap_node.m4 > pyx_treap_node.pyx

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

py_treap_node.py: treap_node.m4
	m4 -Dpy=1 -Dm4uniq=1 < treap_node.m4 > py_treap_node.py

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

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

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 treap.py duptreap.py

veryclean: clean
	rm -f *.c 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