SWIG_SOURCE   = pycodcif.c
SWIG_WRAPPER  = ${SWIG_SOURCE:%.c=%_wrap.c}
SWIG_MODULE	  = ${SWIG_SOURCE:%.c=%.py}
SWIG_INP_FILE = ${SWIG_SOURCE:%.c=%.i}

OBJ 			 = ${SWIG_SOURCE:%.c=%.o}
SWIG_WRAPPER_OBJ = ${SWIG_WRAPPER:%.c=%.o}
SWIG_SO_FILE 	 = ${SWIG_SOURCE:%.c=_%.so}

CIF_PARSER_C_DIR = ../codcif
EXTERNALS_C_DIR  = ../../externals
CEXCEPTIONS_DIR  = ${EXTERNALS_C_DIR}/cexceptions

LIBRARIES = ${CIF_PARSER_C_DIR}/lib/libcodcif.a \
            ${CEXCEPTIONS_DIR}/lib/libcexceptions.a

OBJS = ${OBJ} ${SWIG_WRAPPER_OBJ}

PYTHON_VERSION = 2.7

# Attempting to use python2.6 if python2.7 does not exist:
ifeq ("$(shell which python2.7)", "")
    PYTHON_VERSION = 2.6
endif

.PHONY: all

all: ${SWIG_MODULE} ${SWIG_SO_FILE}

${SWIG_SO_FILE}: ${OBJS} ${LIBRARIES}
	gcc -shared ${OBJS} -lcodcif -lcexceptions \
		-L${CIF_PARSER_C_DIR}/lib -L${CEXCEPTIONS_DIR}/lib -o $@

${OBJ} ${SWIG_WRAPPER_OBJ}: ${SWIG_SOURCE} ${SWIG_WRAPPER}
	gcc -Wall -Wno-unused-value \
		-I/usr/local/include \
		-I/usr/include/python${PYTHON_VERSION} -lpython${PYTHON_VERSION} \
		-I${CIF_PARSER_C_DIR} \
		-I${CEXCEPTIONS_DIR} -c \
		-O2 -fPIC \
		$+

${SWIG_WRAPPER} ${SWIG_MODULE}: ${SWIG_INP_FILE} ${SWIG_SOURCE}
	swig -python $<

%.a:
	${MAKE} -C ${dir $(@D)}

.PHONY: install

CCIFPARSER_DIR=${PREFIX}/lib/python${PYTHON_VERSION}/dist-packages/pycodcif

install: ${SWIG_MODULE} ${SWIG_SO_FILE}
	mkdir -p ${CCIFPARSER_DIR}
	install ${SWIG_SO_FILE} ${CCIFPARSER_DIR}
	install --mode 644 ${SWIG_MODULE} __init__.py ${CCIFPARSER_DIR}

.PHONY: clean cleanAll distclean try

clean:
	rm -f ${SWIG_WRAPPER} ${OBJ} ${SWIG_WRAPPER_OBJ} *~

cleanAll distclean: clean
	rm -f ${SWIG_SO_FILE} ${SWIG_MODULE}

try: ${SWIG_MODULE}
	-python -c 'import pycodcif;print pycodcif.parse( "../../../tests/inputs/1000000.cif" )'
