1# $NetBSD: bsd.lua.mk,v 1.7 2014/07/19 18:38:34 lneto Exp $ 2# 3# Build rules and definitions for Lua modules 4 5# 6# Variables used 7# 8# LUA_VERSION currently installed version of Lua 9# LUA_LIBDIR ${LIBDIR}/lua/${LUA_VERSION} 10# 11# LUA_MODULES list of Lua modules to build/installi 12# LUA_DPLIBS shared library dependencies as per LIBDPLIBS 13# 14# LUA_SRCS.mod sources for each module (by default: "${mod:S/./_/g}.lua") 15# 16# DPADD additional dependencies for building modules 17# DPADD.mod additional dependencies for a specific module 18# 19# 20# HAVE_LUAC if defined, .lua source files will be compiled with ${LUAC} 21# and installed as precompiled chunks for faster loading. Note 22# that the luac file format is not yet standardised and may be 23# subject to change. 24# 25# LUAC the luac compiler (by default: /usr/bin/luac) 26# 27# 28# Notes: 29# 30# currently make(depend) and make(tags) do not support .lua sources; We 31# add Lua sources to DPSRCS when HAVE_LUAC is defined and other language 32# sources to SRCS for <bsd.dep.mk>. 33# 34# other language support for other than C is incomplete 35# 36# C language sources are passed though lint, when MKLINT != "no" 37# 38# The Lua binary searches /usr/share/lua/5.1/ at this time and we could 39# install .lua modules there which would mean slightly less duplication 40# in compat builds. However, MKSHARE=no would prevent such modules from 41# being installed so we just install everything under /usr/lib/lua/5.1/ 42# 43 44.if !defined(_BSD_LUA_MK_) 45_BSD_LUA_MK_=1 46 47.include <bsd.init.mk> 48.include <bsd.shlib.mk> 49.include <bsd.gcc.mk> 50 51#__MINIX: Not always included 52.include <bsd.own.mk> 53.if defined(__MINIX) && ${USE_BITCODE:Uno} == "yes" 54LDFLAGS+= -L${DESTDIR}/usr/lib 55.endif # defined(__MINIX) && ${USE_BITCODE:Uno} == "yes" 56 57## 58##### Basic targets 59realinstall: .PHONY lua-install 60realall: .PHONY lua-all 61lint: .PHONY lua-lint 62 63lua-install: .PHONY 64 65lua-all: .PHONY 66 67lua-lint: .PHONY 68 69CLEANFILES+= a.out [Ee]rrs mklog core *.core 70 71## 72##### Global variables 73LUA_VERSION?= 5.3 74LUA_LIBDIR?= ${LIBDIR}/lua/${LUA_VERSION} 75LUAC?= /usr/bin/luac 76 77## 78##### Build rules 79 80# XX should these always be on? 81CFLAGS+= -fPIC 82 83.SUFFIXES: .lua .luac 84.lua.luac: 85 ${_MKTARGET_COMPILE} 86 ${LUAC} -o ${.TARGET} ${.IMPSRC} 87 88## 89##### Libraries that modules may depend upon. 90.for _lib _dir in ${LUA_DPLIBS} 91.if !defined(LIBDO.${_lib}) 92LIBDO.${_lib}!= cd "${_dir}" && ${PRINTOBJDIR} 93.MAKEOVERRIDES+=LIBDO.${_lib} 94.endif 95LDADD+=-L${LIBDO.${_lib}} -l${_lib} 96DPADD+=${LIBDO.${_lib}}/lib${_lib}.so 97.endfor 98 99## 100##### Lua Modules 101.for _M in ${LUA_MODULES} 102LUA_SRCS.${_M}?=${_M:S/./_/g}.lua 103LUA_DEST.${_M}=${LUA_LIBDIR}${_M:S/./\//g:S/^/\//:H} 104 105.if !empty(LUA_SRCS.${_M}:M*.lua) 106.if ${LUA_SRCS.${_M}:[\#]} > 1 107.error Module "${_M}" has too many source files 108.endif 109.if defined(HAVE_LUAC) 110## 111## The module has Lua source and needs to be compiled 112LUA_TARG.${_M}=${_M:S/./_/g}.luac 113LUA_NAME.${_M}=${_M:S/./\//g:T}.luac 114CLEANFILES+=${LUA_TARG.${_M}} 115DPSRCS+=${LUA_SRCS.${_M}} 116 117.NOPATH: ${LUA_TARG.${_M}} 118lua-all: ${LUA_TARG.${_M}} 119${LUA_TARG.${_M}}: ${LUA_SRCS.${_M}} ${DPADD} ${DPADD.${_M}} 120.else 121## 122## The module has Lua source and can be installed directly 123LUA_TARG.${_M}=${LUA_SRCS.${_M}} 124LUA_NAME.${_M}=${_M:S/./\//g:T}.lua 125.endif 126.else 127## 128## The module has other language source and we must build ${_M}.so 129LUA_OBJS.${_M}=${LUA_SRCS.${_M}:N*.lua:R:S/$/.o/g} 130LUA_LOBJ.${_M}=${LUA_SRCS.${_M}:M*.c:.c=.ln} 131LUA_TARG.${_M}=${_M:S/./_/g}.so 132LUA_NAME.${_M}=${_M:S/./\//g:T}.so 133CLEANFILES+=${LUA_OBJS.${_M}} ${LUA_LOBJ.${_M}} ${LUA_TARG.${_M}} 134DPSRCS+=${LUA_SRCS.${_M}} 135SRCS+=${LUA_SRCS.${_M}} 136 137.NOPATH: ${LUA_OBJS.${_M}} ${LUA_LOBJ.${_M}} ${LUA_TARG.${_M}} 138.if ${MKLINT} != "no" 139${LUA_TARG.${_M}}: ${LUA_LOBJ.${_M}} 140.endif 141lua-lint: ${LUA_LOBJ.${_M}} 142lua-all: ${LUA_TARG.${_M}} 143${LUA_TARG.${_M}}: ${LUA_OBJS.${_M}} ${DPADD} ${DPADD.${_M}} 144 ${_MKTARGET_BUILD} 145 rm -f ${.TARGET} 146 ${CC} -Wl,--warn-shared-textrel \ 147 -Wl,-x -shared ${LUA_OBJS.${_M}} \ 148 -Wl,-soname,${LUA_NAME.${_M}} -o ${.TARGET} \ 149 ${LDADD} ${LDADD.${_M}} ${LDFLAGS} ${LDFLAGS.${_M}} 150 151.endif 152 153DPADD+= ${LIBLUA} 154LDADD+= -llua 155 156## 157## module install rules 158lua-install: ${DESTDIR}${LUA_DEST.${_M}}/${LUA_NAME.${_M}} 159${DESTDIR}${LUA_DEST.${_M}}/${LUA_NAME.${_M}}! ${LUA_TARG.${_M}} 160 ${_MKTARGET_INSTALL} 161 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 162 ${.ALLSRC} ${.TARGET} 163 164.endfor 165## 166##### end of modules 167 168.include <bsd.clean.mk> 169.include <bsd.dep.mk> 170.include <bsd.inc.mk> 171.include <bsd.obj.mk> 172.include <bsd.sys.mk> 173.endif # ! defined(_BSD_LUA_MK_) 174