1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-10-19 19:59:43 +00:00
freebsd-ports/Mk/Uses/lua.mk
Tobias C. Berner aa25396790 framework: cleanup conditional-indentations in Mk/
Run Tools/scripts/indent_make_if.pl on all of Mk.

These white space changes contribute greatly to the readability of those files.
As we have a version control system, finding out the reasons for the changes
prior to these white space changes is still easily possible

Differential Revision:	https://reviews.freebsd.org/D35024
Reviewed by:		portmgr (rene, bapt)
2022-04-24 12:00:20 +02:00

281 lines
8.2 KiB
Makefile

# Provide support for lua
#
# MAINTAINER: ports@FreeBSD.org
# Usage:
#
# USES+= lua[:options,...]
#
# Options:
#
# NN (e.g. 52) - specify an allowed Lua version (can use multiple times)
# NN+ (e.g. 52+) - specify a minimum Lua version (discouraged)
# -NN (e.g. -53) - specify a maximum allowed version
# NN-NN (e.g. 51-53) - specify a range of allowed versions
#
# flavors define FLAVOR / FLAVORS as luaNN from the allowed versions
#
# noflavors don't use flavors
#
# module (implies flavors) specifies that the port is a Lua module
# (i.e. that it installes files in MODLIBDIR etc.)
#
# build add dependency to BUILD_DEPENDS instead of LIB_DEPENDS
# run add dependency to RUN_DEPENDS instead of LIB_DEPENDS
#
# env define only the LUA_* vars and add them to PLIST_SUB and
# MAKE_ENV, do not add dependencies or other global state
#
# core for building Lua itself
#
# If more than one version is allowed, then the LUA_DEFAULT version (as set
# in DEFAULT_VERSIONS) is chosen if it is in the allowed range, otherwise
# the closest allowed version to the default is chosen, preferring the
# larger version in case of a tie.
#
# But if "flavors" was requested, and FLAVOR is set, we use that version
# exactly. (It is an error to specify a flavor that isn't supported, but
# that is checked in bsd.port.mk, not here.)
#
# LUA_FLAVOR is defined to the desired flavor whether or not "flavors" was
# selected; ports should use this to specify the flavor of dependencies
# which are Lua modules or otherwise Lua-flavored.
#
# It's not generally expected that applications that embed Lua, or apps
# written in Lua, would use USES=lua:flavors. Given that Lua is lightweight
# and does not carry around a whole lot of module ecosystem with it, it is
# best that application ports simply specify the Lua version or range of
# versions that they support, and let the default one or the latest one be
# used. However, they should still use LUA_FLAVOR as needed when specifying
# dependencies.
#
# We assume Lua versions can be represented as 2 digits.
#
.if !defined(_INCLUDE_USES_LUA_MK)
_INCLUDE_USES_LUA_MK= yes
# When adding a version, please keep the comment in
# Mk/bsd.default-versions.mk in sync.
_LUA_VALID_VERSIONS:= 54 53 52 51
. if defined(_LUA_EXTRA_VER)
_LUA_VALID_VERSIONS+= ${_LUA_EXTRA_VER}
. endif
_LUA_DEFAULT_VERSION:= ${LUA_DEFAULT:S/.//}
# args
_LUA_ARG_FLAVORS:=
_LUA_ARG_MODULE:=
_LUA_ARG_ENV:=
_LUA_ARG_CORE:=
. if ${lua_ARGS:Mmodule}
_LUA_ARG_FLAVORS:=yes
_LUA_ARG_MODULE:=yes
. endif
. if ${lua_ARGS:Mflavors}
_LUA_ARG_FLAVORS:=yes
. endif
. if ${lua_ARGS:Mnoflavors}
_LUA_ARG_FLAVORS:=
. endif
. if ${lua_ARGS:Menv}
_LUA_ARG_ENV:=yes
. endif
. if ${lua_ARGS:Mcore}
_LUA_ARG_CORE:=yes
_LUA_ARG_ENV:=yes
_LUA_ARG_FLAVORS:=
_LUA_ARG_MODULE:=
. endif
# core is for building Lua itself, so it overrides all version checks
. if ${_LUA_ARG_CORE}
_LUA_WANTED_VERSION:=${lua_ARGS:M[1-9][0-9]:[1]}
. if ${lua_ARGS:M[1-9][0-9]:[#]} != 1
IGNORE= USES=lua:core must also specify exactly one version number
# set to avoid spurious errors below
_LUA_WANTED_VERSION:=${_LUA_DEFAULT_VERSION}
. endif
_LUA_VALID_VERSIONS:=${_LUA_WANTED_VERSION}
_LUA_WANTED_VERSIONS:=${_LUA_WANTED_VERSION}
_LUA_DEFAULT_VERSION:=${_LUA_WANTED_VERSION}
. endif # _LUA_ARG_CORE
. if ! ${_LUA_VALID_VERSIONS:M${_LUA_DEFAULT_VERSION}}
IGNORE= Invalid lua version ${LUA_DEFAULT}
. endif
#
# Parse a ver+ argument
#
. if ${lua_ARGS:M??+}
_LUA_MIN_VERSION:= ${lua_ARGS:M??+:S/+//}
_LUA_MAX_VERSION:= 99
. endif
#
# Parse a -ver argument
#
. if ${lua_ARGS:M-??}
_LUA_MAX_VERSION:= ${lua_ARGS:M-??:S/-//}
_LUA_MIN_VERSION:= 0
. endif
#
# Parse a ver-ver argument
#
. if ${lua_ARGS:M??-??}
_LUA_MIN_VERSION:= ${lua_ARGS:M??-??:C/-.*//}
_LUA_MAX_VERSION:= ${lua_ARGS:M??-??:C/.*-//}
. endif
#
# Parse one or more ver arguments
#
. if ${lua_ARGS:M[1-9][0-9]}
. for _v in ${lua_ARGS:M[1-9][0-9]}
. if ${_LUA_VALID_VERSIONS:M${_v}}
_LUA_WANTED_VERSIONS+=${_v}
. endif
. endfor
. if empty(_LUA_WANTED_VERSIONS)
IGNORE= USES=lua:nn did not find any valid version number
. endif
. endif
#
# Resolve version ranges. Append anything within the range to the list of
# wanted versions.
#
. if defined(_LUA_MIN_VERSION) && defined(_LUA_MAX_VERSION)
. for _v in ${_LUA_VALID_VERSIONS}
. if ${_LUA_MIN_VERSION} <= ${_v} && ${_LUA_MAX_VERSION} >= ${_v}
_LUA_WANTED_VERSIONS+=${_v}
. endif
. endfor
. if empty(_LUA_WANTED_VERSIONS)
IGNORE= USES=lua:xx-yy did not find any valid version
. endif
. endif
#
# If no version was specified with any of the ver or ver+ arguments, allow
# all versions.
#
. if empty(_LUA_WANTED_VERSIONS)
_LUA_WANTED_VERSIONS:= ${_LUA_VALID_VERSIONS}
. endif
# The "preferred" version, which must always exist, is defined as the
# closest value to the default version, preferring higher versions in
# case of ties. We find this by constructing values in sequence:
# VV VV+1 VV-1 VV+2 VV-2 ...
# and then filtering against the allowed versions. The result is the
# final list of "wanted" versions, with the preferred version first.
_LUA_NUM_ASC:= \
${:U:range=99:@_v@${${_v} > ${_LUA_DEFAULT_VERSION}:?${_v}:}@}
_LUA_NUM_DESC:= \
${:U:range=99:[-1..1]:@_v@${${_v} <= ${_LUA_DEFAULT_VERSION}:?${_v}:}@}
_LUA_NUM_ALL:= \
${:U:range=99:@_v@${_LUA_NUM_DESC:[${_v}]} ${_LUA_NUM_ASC:[${_v}]}@}
_LUA_WANTED_VERSIONS:= \
${_LUA_NUM_ALL:@_v@${_LUA_WANTED_VERSIONS:M${_v}}@}
. if ${_LUA_ARG_FLAVORS}
. if empty(FLAVORS)
FLAVORS= ${_LUA_WANTED_VERSIONS:S/^/lua/}
. endif
. if empty(FLAVOR)
FLAVOR= ${FLAVORS:[1]}
. endif
_LUA_WANTED_VERSION:= ${FLAVOR:S/^lua//}
. else
_LUA_WANTED_VERSION:= ${_LUA_WANTED_VERSIONS:[1]}
. endif
# If we're building Lua itself, everything should be in $PREFIX. If
# we're building a module or app, then the stuff we're installing goes
# in $PREFIX but references to Lua itself are in $LOCALBASE.
#
# The assumption is the LUA_MOD* directories are where we're going to
# install (this is common for both modules and apps), and so we also
# define LUA_REFMOD* relative to LOCALBASE for use when specifying
# dependencies and so on.
. if ${_LUA_ARG_CORE}
LUA_BASE=${PREFIX}
. else
LUA_BASE=${LOCALBASE}
. endif
LUA_PREFIX=${PREFIX}
#
# Exported variables
#
LUA_VER_STR= ${_LUA_WANTED_VERSION}
LUA_VER= ${_LUA_WANTED_VERSION:S/^5/5./}
LUA_FLAVOR= ${_LUA_WANTED_VERSION:S/^/lua/}
LUA_CMD= lua${LUA_VER_STR}
LUAC_CMD= luac${LUA_VER_STR}
LUA_PKGNAMEPREFIX= lua${LUA_VER_STR}-
LUA_LIBDIR= ${LUA_BASE}/lib
LUA_INCDIR= ${LUA_BASE}/include/lua${LUA_VER_STR}
LUA_MODLIBDIR= ${LUA_PREFIX}/lib/lua/${LUA_VER}
LUA_MODSHAREDIR= ${LUA_PREFIX}/share/lua/${LUA_VER}
LUA_MODDOCSDIR= ${LUA_PREFIX}/share/doc/lua${LUA_VER_STR}
LUA_MODEXAMPLESDIR= ${LUA_PREFIX}/share/examples/lua${LUA_VER_STR}
LUA_REFMODLIBDIR= ${LUA_BASE}/lib/lua/${LUA_VER}
LUA_REFMODSHAREDIR= ${LUA_BASE}/share/lua/${LUA_VER}
PLIST_SUB+= LUA_MODLIBDIR=${LUA_MODLIBDIR:S,^${LUA_PREFIX}/,,} \
LUA_MODSHAREDIR=${LUA_MODSHAREDIR:S,^${LUA_PREFIX}/,,} \
LUA_MODDOCSDIR=${LUA_MODDOCSDIR:S,^${LUA_PREFIX}/,,} \
LUA_INCDIR=${LUA_INCDIR:S,^${LUA_BASE}/,,} \
LUA_VER=${LUA_VER} \
LUA_VER_STR=${LUA_VER_STR}
MAKE_ENV+= LUA_MODLIBDIR=${LUA_MODLIBDIR} \
LUA_MODSHAREDIR=${LUA_MODSHAREDIR} \
LUA_MODDOCSDIR=${LUA_MODDOCSDIR} \
LUA_INCDIR=${LUA_INCDIR} \
LUA_LIBDIR=${LUA_LIBDIR} \
LUA_VER=${LUA_VER} \
LUA_VER_STR=${LUA_VER_STR}
# if building a module or Lua itself, or if the port defined LUA_DOCSUBDIR,
# then define LUA_DOCSDIR and LUA_EXAMPLESDIR too
. if ${_LUA_ARG_CORE} || ${_LUA_ARG_MODULE}
LUA_DOCSUBDIR?=${PORTNAME}
. endif
. if !empty(LUA_DOCSUBDIR)
LUA_DOCSDIR= ${LUA_MODDOCSDIR}/${LUA_DOCSUBDIR}
LUA_EXAMPLESDIR=${LUA_MODEXAMPLESDIR}/${LUA_DOCSUBDIR}
PLIST_SUB+= LUA_DOCSDIR=${LUA_DOCSDIR:S,^${LUA_PREFIX}/,,}
PLIST_SUB+= LUA_EXAMPLESDIR=${LUA_EXAMPLESDIR:S,^${LUA_PREFIX}/,,}
MAKE_ENV+= LUA_DOCSDIR=${LUA_DOCSDIR}
MAKE_ENV+= LUA_EXAMPLESDIR=${LUA_EXAMPLESDIR}
. endif
. if empty(_LUA_ARG_ENV)
. if ${lua_ARGS:Mbuild}
BUILD_DEPENDS+= ${LUA_CMD}:lang/lua${LUA_VER_STR}
. endif
. if ${lua_ARGS:Mrun}
RUN_DEPENDS+= ${LUA_CMD}:lang/lua${LUA_VER_STR}
. endif
. if !${lua_ARGS:Mbuild} && !${lua_ARGS:Mrun}
LIB_DEPENDS+= liblua-${LUA_VER}.so:lang/lua${LUA_VER_STR}
. endif
. endif
.endif