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