summaryrefslogtreecommitdiff
path: root/Mk/bsd.lua.mk
diff options
context:
space:
mode:
authorMark Linimon <linimon@FreeBSD.org>2006-09-15 06:57:07 +0000
committerMark Linimon <linimon@FreeBSD.org>2006-09-15 06:57:07 +0000
commit3f6d652468df218fb7d3dee2135605e402d6f5a0 (patch)
tree26a8752fecc2cb77e2f3f62feb03cfc23db60234 /Mk/bsd.lua.mk
parentChange RUN_DEPENDS with USE_LINUX (diff)
* Add PKGVERSION to bsd.port.mk [1]
* Add bsd.lua.mk to support for lua-based ports [2] * Remove DESTDIR from bsd.scons.mk [3] * Add some quotes in 'missing' target to improve handling of duplicate origins [4] PR: 98565 [1], 101612 [2], 101952 [3], 102100 [4] Submitted by: ahze [1], alepulver [2], alexbl [3], shaun [4]
Notes
Notes: svn path=/head/; revision=173096
Diffstat (limited to 'Mk/bsd.lua.mk')
-rw-r--r--Mk/bsd.lua.mk420
1 files changed, 420 insertions, 0 deletions
diff --git a/Mk/bsd.lua.mk b/Mk/bsd.lua.mk
new file mode 100644
index 000000000000..84697199df01
--- /dev/null
+++ b/Mk/bsd.lua.mk
@@ -0,0 +1,420 @@
+#-*- mode: makefile; tab-width: 4; -*-
+# ex:ts=4
+#
+# $FreeBSD$
+#
+# bsd.lua.mk - Support for Lua based ports.
+#
+# Created by: Alejandro Pulver <alepulver@FreeBSD.org>
+#
+# Please view me with 4 column tabs!
+#
+# The following variables can be defined in a port that uses the Lua library,
+# tolua, Ruby bindings or related components like .lua modules (with run
+# and/or build dependencies). It can be used after and/or before
+# bsd.port.pre.mk, but Ruby components will only work if Ruby variables (e.g.
+# USE_RUBY) are defined before it (this is a bsd.ruby.mk limitation), at least
+# it is manually included.
+# USE_LUA - Set to the list of Lua versions that can be used by the
+# port. The syntax allows the following elements:
+# - Single version (e.g. "4.0").
+# - Range of versions (e.g. "5.0-5.1"). Must be ascending.
+# - Partial range: single version and upper (e.g. "5.0+").
+# - Partial range: single version and lower (e.g. "5.1-").
+# Multiple elements can be specified separated by spaces.
+# USE_LUA_NOT - Set to the list of Lua versions that can't be used by the
+# port. In other words, it removes some versions from USE_LUA.
+# If the latter is not defined, it will have the value of all
+# the possible versions. The syntax is like USE_LUA.
+# LUA_COMPS - Set to the list of Lua components the port uses. Several
+# components can be specified separated by spaces. By default
+# it will have the value of "lua". Suffixes in the form ":xxx"
+# may be added to the components to determine the dependency
+# type.
+# The available components are:
+# lua - The Lua library.
+# tolua - The tolua library (vers 4.0-5.0).
+# ruby - The Ruby bindings for Lua (vers 4.0-5.0).
+# app, compat51, dfui, filename, gettext, posix, pty and
+# socket - Modules for Lua 5.0.
+# The available dependency types are:
+# build - Requires component for building.
+# lib - Requires component for building and running.
+# run - Requires component for running.
+# If no suffix is present then "lib" will be used for "lua"
+# 4.0-5.0 and "ruby", "build" for lua 5.1 and "tolua" (they
+# are static), all others default to "run".
+# LUA_PREMK - Define to determine version and define variables after
+# <bsd.port.pre.mk> (in case the port needs to manually run
+# the Lua program or the like).
+# WANT_LUA - Set to "yes" or a valid single version (no ranges, etc).
+# In both cases it will detect the installed Lua components
+# and add them to the variable HAVE_LUA. If a version is
+# selected, HAVE_LUA will contain a list of components in the
+# other case it will contain a list of "component-version"
+# pairs (e.g. lua-4.0, tolua-5.1, etc).
+# It has to be used before bsd.port.pre.mk.
+# WANT_LUA_VER - Set to the prefered Lua version for the port. It must be
+# present in USE_LUA or missing in USE_LUA_NOT. This is
+# overriden by the user variable WITH_LUA_VER if set. It can
+# contain multiple versions in order of preference (last ones
+# are tried first).
+#
+# The following variables are intended for the user and can be defined in
+# make.conf.
+# WITH_LUA_VER - Define to the list of prefered versions in reverse order.
+#
+# The following variables are defined by this file, to be read from the port.
+# HAVE_LUA - The list of Lua components installed, if WANT_LUA was
+# defined. The components will have version suffix if it was
+# set to "yes".
+# LUA_VER - The Lua version that is going to be used (e.g. "5.1").
+# LUA_VER_SH - The Lua shared library major version (e.g. "1").
+# LUA_VER_STR - The Lua version without the dots (e.g. "51").
+# LUA_PREFIX - The prefix where Lua (and components) is installed.
+# LUA_SUBDIR - The directory under bin/share/lib where Lua is installed.
+# LUA_INCDIR - The directory where Lua and tolua header files are installed.
+# LUA_LIBDIR - The directory where Lua and tolua libraries are installed.
+# LUA_MODLIBDIR - The directory where Lua modules (.lua) are installed.
+# LUA_MODSHAREDIR - The directory where Lua module libraries (.so) are
+# installed.
+# LUA_PKGNAMEPREFIX - The package name prefix used by Lua modules.
+#
+# Examples:
+# - A port that needs Lua 4.0 and tolua (also 4.0) libraries (lua for building
+# and running and tolua for building).
+# USE_LUA= 4.0
+# LUA_COMPS= lua tolua
+# - A port that needs Ruby bindings for Lua 5.0 for building and running.
+# USE_LUA= 5.0
+# LUA_COMPS= ruby
+# - A port that needs tolua 5.0 or 5.1 for building.
+# USE_LUA= 5.0 5.1
+# LUA_COMPS= tolua
+# - A port that needs Lua version 5.0 or higher for building and running.
+# USE_LUA= 5.0+
+# - A port that needs Lua of any version other than 5.1 for building and
+# running.
+# USE_LUA_NOT=5.1
+#
+
+LUA_Include_MAINTAINER= alepulver@FreeBSD.org
+
+#
+# Global definitions.
+#
+
+.if !defined(_LUA_Definitions_Done)
+_LUA_Definitions_Done= yes
+
+# Common variables:
+# _LUA_COMPS_ALL - List of valid components.
+# _LUA_DEP_TYPES_ALL - List of valid dependency types.
+# _LUA_VERS_ALL - List of available Lua versions.
+# _LUA_VERS_LISTS= - Reverse lists preference order.
+# _LUA_PLIST_ALL - List of variables to be added to PLIST_SUB.
+# _LUA_PLIST_DIR_ALL - List of path variables (relative to ${LUA_PREFIX})
+# to be added to PLIST_SUB.
+#
+
+_LUA_COMPS_ALL= lua tolua ruby \
+ app compat51 dfui filename gettext posix pty socket
+_LUA_DEP_TYPES_ALL= build lib run
+_LUA_VERS_ALL= 4.0 5.0 5.1
+_LUA_PLIST_ALL= LUA_VER LUA_VER_SH LUA_VER_STR LUA_PREFIX LUA_SUBDIR
+_LUA_PLIST_DIR_ALL= LUA_BINDIR LUA_INCDIR LUA_LIBDIR \
+ LUA_MODLIBDIR LUA_MODSHAREDIR
+_LUA_VERS_LISTS= WANT_LUA_VER WITH_LUA_VER
+
+#
+# Variables used to determine what is needed.
+# _LUA_PORT_comp_ver - Port directory.
+# _LUA_LIB_comp_ver - Name of the shared library (optional).
+# _LUA_SHVER_comp_ver - Shared library version (optional).
+# _LUA_FILE_comp_ver - File installed by that component.
+# _LUA_DEPTYPE_comp_ver - Default dependency type.
+#
+
+_LUA_PORT_lua_4.0= lang/lua4
+_LUA_DEPTYPE_lua_4.0= lib
+_LUA_PORT_tolua_4.0= lang/tolua4
+_LUA_PORT_ruby_4.0= lang/ruby-lua4
+
+_LUA_PORT_lua_5.0= lang/lua50
+_LUA_DEPTYPE_lua_5.0= lib
+_LUA_PORT_tolua_5.0= lang/tolua
+_LUA_PORT_ruby_5.0= lang/ruby-lua
+
+_LUA_PORT_app_5.0= devel/lua50-app
+_LUA_PORT_compat51_5.0= devel/lua50-compat51
+_LUA_FILE_compat51_5.0= ${LUA_MODSHAREDIR}/compat-5.1.lua
+_LUA_PORT_dfui_5.0= devel/lua50-dfui
+_LUA_PORT_filename_5.0= devel/lua50-filename
+_LUA_PORT_gettext_5.0= devel/lua50-gettext
+_LUA_PORT_posix_5.0= devel/lua50-posix
+_LUA_PORT_pty_5.0= devel/lua50-pty
+_LUA_PORT_socket_5.0= net/luasocket
+
+_LUA_PORT_lua_5.1= lang/lua
+_LUA_DEPTYPE_lua_5.1= build
+
+.for comp in ${_LUA_COMPS_ALL}
+_LUA_COMP= ${comp}
+. for ver in ${_LUA_VERS_ALL}
+. if ${_LUA_COMP} == "lua"
+_LUA_LIB_${comp}_${ver}= lua-${LUA_VER}.${LUA_VER_SH}
+_LUA_SHVER_${comp}_${ver}= ${LUA_VER_SH}
+_LUA_FILE_${comp}_${ver}= ${LUA_LIBDIR}/liblua.a
+. elif ${_LUA_COMP} == "tolua"
+_LUA_FILE_${comp}_${ver}= ${LUA_LIBDIR}/libtolua.a
+_LUA_DEPTYPE_${comp}_${ver}=build
+. elif ${_LUA_COMP} == "ruby"
+_LUA_FILE_${comp}_${ver}= ${RUBY_SITEARCHLIBDIR}/lua-${LUA_VER}.so
+_LUA_DEPTYPE_${comp}_${ver}=lib
+. else
+. if !defined(_LUA_FILE_${comp}_${ver})
+_LUA_FILE_${comp}_${ver}= ${LUA_MODSHAREDIR}/${comp}.lua
+. endif
+_LUA_DEPTYPE_${comp}_${ver}=run
+. endif
+. endfor
+.endfor
+
+.endif
+
+#
+# Check for present components.
+#
+
+.if defined(WANT_LUA) && defined(BEFOREPORTMK)
+. for __WANT_LUA in ${WANT_LUA}
+# Check if WANT_LUA contains more than one word.
+. if defined(HAVE_LUA)
+IGNORE?= selected multiple values for WANT_LUA: ${WANT_LUA}
+. endif
+HAVE_LUA= #
+# Check for all versions.
+. if ${WANT_LUA:L} == "yes"
+. for comp in ${_LUA_COMPS_ALL}
+. for ver in ${_LUA_VERS_ALL}
+_LUA_COMP= _LUA_FILE_${comp}_${ver}
+. if defined(${_LUA_COMP}) && exists(${${_LUA_COMP}})
+HAVE_LUA+= ${comp}-${ver}
+. endif
+. endfor
+. endfor
+# Check for a specific version.
+. elif ${_LUA_VERS_ALL:M${__WANT_LUA}} != ""
+. for comp in ${_LUA_COMPS_ALL}
+. if exists(${_LUA_FILE_${comp}_${__WANT_LUA}})
+HAVE_LUA+= ${comp}
+. endif
+. endfor
+. else
+IGNORE?= selected an invalid value for WANT_LUA: ${__WANT_LUA}
+. endif
+. endfor
+.endif # WANT_LUA && BEFOREPORTMK
+
+#
+# Select Lua version.
+#
+
+.if !defined(_LUA_Version_Done) && (defined(_POSTMKINCLUDED) || \
+ (defined(LUA_PREMK) && defined(BEFOREPORTMK) && \
+ (defined(USE_LUA) || defined(USE_LUA_NOT))))
+_LUA_Version_Done= yes
+
+# Set defaults (if one isn't present).
+
+USE_LUA?= ${_LUA_VERS_ALL}
+USE_LUA_NOT?= #
+
+#
+# Make lists of valid and invalid versions.
+#
+# The following variables are used:
+# _LUA_VER_CHECK - If the version is a single one, express in a range.
+# _LUA_VER_MIN - Lower version of the range.
+# _LUA_VER_MAX - Higher version of the range.
+# _LUA_VER_LIST - List of requested versions.
+# _LUA_VER_NOT_LIST - List of disallowed versions.
+# _LUA_VER_FINAL - List of requested version without disallowed ones.
+#
+
+.for list in VER VER_NOT
+_LUA_${list}_LIST= #
+. for ver in ${USE_LUA${list:C/VER//}}
+_LUA_VER_CHECK:= ${ver:C/^([[:digit:]]+(\.[[:digit:]]+)*)$/\1-\1/}
+_LUA_VER_MIN:= ${_LUA_VER_CHECK:C/([[:digit:]]+(\.[[:digit:]]+)*)[-+].*/\1/}
+_LUA_VER_MAX:= ${_LUA_VER_CHECK:C/.*-([[:digit:]]+(\.[[:digit:]]+)*)/\1/}
+# Minimum version not specified.
+. if ${_LUA_VER_MIN} == ${_LUA_VER_CHECK}
+. undef _LUA_VER_MIN
+. for v in ${_LUA_VERS_ALL}
+_LUA_VER_MIN?= ${v}
+. endfor
+. endif
+# Maximum version not specified.
+. if ${_LUA_VER_MAX} == ${_LUA_VER_CHECK}
+. for v in ${_LUA_VERS_ALL}
+_LUA_VER_MAX= ${v}
+. endfor
+. endif
+# Expand versions and add valid ones to each list.
+. for v in ${_LUA_VERS_ALL}
+. if ${_LUA_VER_MIN} <= ${v} && ${_LUA_VER_MAX} >= ${v} && \
+ ${_LUA_${list}_LIST:M${v}} == ""
+_LUA_${list}_LIST+= ${v}
+. endif
+. endfor
+. endfor
+.endfor
+
+# Merge the lists into a single list of valid versions.
+
+_LUA_VER_FINAL= #
+.for ver in ${_LUA_VER_LIST}
+. if ${_LUA_VER_NOT_LIST:M${ver}} == ""
+_LUA_VER_FINAL+= ${ver}
+. endif
+.endfor
+
+# Check for a null version.
+
+.if empty(_LUA_VER_FINAL)
+IGNORE?= selected a null or invalid Lua version
+.endif
+
+#
+# Choose final version.
+#
+
+#
+# Check for the following (in order):
+# 1) WITH_LUA_VER - User preference.
+# 2) WANT_LUA_VER - Port preference.
+# 3) _LUA_VER_FINAL - Available versions.
+#
+
+.for list in _LUA_VER_FINAL ${_LUA_LISTS_ORDER}
+. if defined(${list})
+. for ver in ${${list}}
+. if ${_LUA_VER_FINAL:M${ver}} != ""
+_LUA_VER= ${ver}
+. endif
+. endfor
+. endif
+.endfor
+
+#
+# Set variables.
+#
+
+# Version.
+LUA_VER= ${_LUA_VER}
+LUA_VER_SH?= ${LUA_VER:C/[[:digit:]]\.([[:digit:]])/\1/}
+LUA_VER_STR?= ${LUA_VER:S/.//g}
+
+# Paths.
+LUA_PREFIX?= ${LOCALBASE}
+LUA_SUBDIR?= lua${LUA_VER_STR}
+LUA_BINDIR?= ${LUA_PREFIX}/bin/${LUA_SUBDIR}
+LUA_INCDIR?= ${LUA_PREFIX}/include/${LUA_SUBDIR}
+LUA_LIBDIR?= ${LUA_PREFIX}/lib/${LUA_SUBDIR}
+LUA_MODLIBDIR?= ${LUA_PREFIX}/lib/lua/${LUA_VER}
+LUA_MODSHAREDIR?= ${LUA_PREFIX}/share/lua/${LUA_VER}
+
+# Package name.
+LUA_PKGNAMEPREFIX?= lua${LUA_VER_STR}-
+
+.endif # !_LUA_Version_Done && (_POSTMKINCLUDED || \
+# (LUA_PREMK && BEFOREPORTMK && (USE_LUA || USE_LUA_NOT)))
+
+#
+# Process components list and add dependencies, variables, etc.
+#
+
+.if defined(_POSTMKINCLUDED)
+
+#
+# Component parsing.
+#
+# The variables used are:
+# _LUA_COMP - Component part.
+# _LUA_DEP_TYPE - Dependency type part.
+# _LUA_COMP_NEW - Component + dependency type.
+# _LUA_COMPS_FINAL - Final list of components with dependency types.
+#
+
+# Default components.
+
+LUA_COMPS?= lua
+
+# Detect invalid and duplicated components.
+
+_LUA_COMPS_FINAL= #
+.for comp in ${LUA_COMPS}
+_LUA_COMP= ${comp:C/:([[:alpha:]]+)$//}
+. if ${_LUA_COMP} == ${comp}
+_LUA_DEP_TYPE= ${_LUA_DEPTYPE_${comp}_${_LUA_VER}}
+. else
+_LUA_DEP_TYPE= ${comp:C/.+:([[:alpha:]]+)$/\1/}
+. endif
+_LUA_COMP_NEW= ${_LUA_COMP}_${_LUA_DEP_TYPE}
+. for __LUA_COMP in ${_LUA_COMP}
+. if ${_LUA_COMPS_ALL:M${__LUA_COMP}} == ""
+IGNORE?= selected an invalid Lua component: ${__LUA_COMP}
+. endif
+. endfor
+. for __LUA_DEP_TYPE in ${_LUA_DEP_TYPE}
+. if ${_LUA_DEP_TYPES_ALL:M${__LUA_DEP_TYPE}} == ""
+IGNORE?= selected an invalid Lua dependency type: ${__LUA_DEP_TYPE}
+. endif
+. endfor
+. if !defined(_LUA_PORT_${_LUA_COMP}_${_LUA_VER})
+IGNORE?= selected a Lua component (${_LUA_COMP}) which is not available for the selected version (${_LUA_VER})
+. endif
+. for newcomp in ${_LUA_COMP_NEW}
+. if ${_LUA_COMPS_FINAL:M${newcomp}} == ""
+_LUA_COMPS_FINAL+= ${newcomp}
+. endif
+. endfor
+.endfor
+
+# Add dependencies.
+#
+# The variable used are:
+# _LUA_COMP - - Component part.
+# _LUA_DEP_TYPE - Dependency type part.
+
+.for comp in ${_LUA_COMPS_FINAL}
+_LUA_DEP_TYPE= ${comp:C/.+_([[:alpha:]]+)$/\1/}
+_LUA_COMP= ${comp:C/_([[:alpha:]]+)$//}
+# XXX Need a .for loop here so the variable is expanded before the assignment.
+. for comp_part in ${_LUA_COMP}
+. if ${_LUA_DEP_TYPE} == "lib"
+. if defined(_LUA_LIB_${comp_part}_${_LUA_VER})
+LIB_DEPENDS+= ${_LUA_LIB_${comp_part}_${_LUA_VER}}:${PORTSDIR}/${_LUA_PORT_${comp_part}_${_LUA_VER}}
+. else
+BUILD_DEPENDS+= ${_LUA_FILE_${comp_part}_${_LUA_VER}}:${PORTSDIR}/${_LUA_PORT_${comp_part}_${_LUA_VER}}
+RUN_DEPENDS+= ${_LUA_FILE_${comp_part}_${_LUA_VER}}:${PORTSDIR}/${_LUA_PORT_${comp_part}_${_LUA_VER}}
+. endif
+. else
+${_LUA_DEP_TYPE:U}_DEPENDS+= ${_LUA_FILE_${comp_part}_${_LUA_VER}}:${PORTSDIR}/${_LUA_PORT_${comp_part}_${_LUA_VER}}
+. endif
+. endfor
+.endfor
+
+# Packaging list variables.
+.for var in ${_LUA_PLIST_ALL}
+PLIST_SUB+= ${var}="${${var}}"
+.endfor
+.for var in ${_LUA_PLIST_DIR_ALL}
+PLIST_SUB+= ${var}="${${var}:S/${LUA_PREFIX}\///}"
+.endfor
+.for var in ${_LUA_PLIST_ALL} ${_LUA_PLIST_DIR_ALL}
+MAKE_ENV+= ${var}="${${var}}"
+.endfor
+
+.endif # _POSTMKINCLUDED