cython.mk revision 281812
1239310Sdim# RCSid:
2239310Sdim#	$Id: cython.mk,v 1.6 2014/10/15 06:23:51 sjg Exp $
3353358Sdim#
4353358Sdim#	@(#) Copyright (c) 2014, Simon J. Gerraty
5353358Sdim#
6239310Sdim#	This file is provided in the hope that it will
7239310Sdim#	be of use.  There is absolutely NO WARRANTY.
8296417Sdim#	Permission to copy, redistribute or otherwise
9296417Sdim#	use this file is hereby granted provided that 
10239310Sdim#	the above copyright notice and this notice are
11239310Sdim#	left intact. 
12239310Sdim#      
13239310Sdim#	Please send copies of changes and bug-fixes to:
14239310Sdim#	sjg@crufty.net
15239310Sdim#
16321369Sdim
17288943Sdim# this is what we build
18249423SdimCYTHON_MODULE = ${CYTHON_MODULE_NAME}${CYTHON_PYVERSION}.so
19249423Sdim
20249423SdimCYTHON_MODULE_NAME?= it
21249423SdimCYTHON_SRCS?= ${CYTHON_MODULE_NAME}.pyx
22249423Sdim
23249423Sdim# this is where we save generated src
24249423SdimCYTHON_SAVEGENDIR?= ${.CURDIR}/gen
25249423Sdim
26249423Sdim# pyprefix is where python bits are
27288943Sdim# which may not be where we want to put ours (prefix)
28296417Sdim.if exists(/usr/pkg/include)
29321369Sdimpyprefix?= /usr/pkg
30239310Sdim.endif
31288943Sdimpyprefix?= /usr/local
32288943Sdim
33239310SdimPYTHON_VERSION?= 2.7
34239310SdimPYTHON_H?= ${pyprefix}/include/python${PYTHON_VERSION}/Python.h
35288943SdimPYVERSION:= ${PYTHON_VERSION:C,\..*,,}
36296417Sdim
37288943Sdim# set this empty if you don't want to handle multiple versions
38288943Sdim.if !defined(CYTHON_PYVERSION)
39288943SdimCYTHON_PYVERSION:= ${PYVERSION}
40239310Sdim.endif
41288943Sdim
42288943SdimCFLAGS+= -I${PYTHON_H:H}
43288943Sdim
44288943SdimCYTHON_GENSRCS= ${CYTHON_SRCS:R:S,$,${CYTHON_PYVERSION}.c,}
45321369SdimSRCS+= ${CYTHON_GENSRCS}
46288943Sdim
47288943Sdim.SUFFIXES: .pyx .c .So
48288943Sdim
49288943SdimCYTHON?= ${pyprefix}/bin/cython
50288943Sdim
51288943Sdim# if we don't have cython we can use pre-generated srcs
52314564Sdim.if ${type ${CYTHON} 2> /dev/null || echo:L:sh:M/*} == ""
53288943Sdim.PATH: ${CYTHON_SAVEGENDIR}
54288943Sdim.else
55288943Sdim
56288943Sdim.if !empty(CYTHON_PYVERSION)
57239310Sdim.for c in ${CYTHON_SRCS}
58239310Sdim${c:R}${CYTHON_PYVERSION}.${c:E}: $c
59239310Sdim	ln -sf ${.ALLSRC:M*pyx} ${.TARGET}
60296417Sdim.endfor
61296417Sdim.endif
62239310Sdim
63288943Sdim.pyx.c:
64239310Sdim	${CYTHON} ${CYTHON_FLAGS} -${PYVERSION} -o ${.TARGET} ${.IMPSRC}
65321369Sdim
66321369Sdim
67239310Sdimsave-gen: ${CYTHON_GENSRCS}
68296417Sdim	mkdir -p ${CYTHON_SAVEGENDIR}
69239310Sdim	cp -p ${.ALLSRC} ${CYTHON_SAVEGENDIR}
70239310Sdim
71249423Sdim.endif
72296417Sdim
73296417SdimCOMPILE.c?= ${CC} -c ${CFLAGS}
74249423Sdim
75239310Sdim.c.So:
76296417Sdim	${COMPILE.c} ${PICFLAG} ${CC_PIC} ${.IMPSRC} -o ${.TARGET}
77249423Sdim
78239310Sdim${CYTHON_MODULE}: ${SRCS:S,.c,.So,}
79296417Sdim	${CC} ${CC_SHARED:U-shared} -o ${.TARGET} ${.ALLSRC:M*.So} ${LDADD}
80296417Sdim
81249423Sdim# conf.host_target() is limited to uname -m rather than uname -p
82296417Sdim_HOST_MACHINE!= uname -m
83239310Sdim.if ${HOST_TARGET:M*${_HOST_MACHINE}} == ""
84296417SdimPY_HOST_TARGET:= ${HOST_TARGET:S,${_HOST_ARCH:U${uname -p:L:sh}}$,${_HOST_MACHINE},}
85296417Sdim.endif
86296417Sdim
87296417SdimMODULE_BINDIR?= ${.CURDIR:H}/${PY_HOST_TARGET:U${HOST_TARGET}}
88296417Sdim
89296417Sdimbuild-cython-module: ${CYTHON_MODULE}
90239310Sdim
91239310Sdiminstall-cython-module: ${CYTHON_MODULE}
92296417Sdim	test -d ${DESTDIR}${MODULE_BINDIR} || \
93239310Sdim	${INSTALL} -d ${DESTDIR}${MODULE_BINDIR}
94239310Sdim	${INSTALL} -m 755 ${.ALLSRC} ${DESTDIR}${MODULE_BINDIR}
95239310Sdim
96239310SdimCLEANFILES+= *.So ${CYTHON_MODULE}
97296417Sdim