This section describes the status of the Lua libraries in the ports tree and its integration with the ports system.
There are many versions of the Lua libraries and corresponding interpreters, which conflict between them (install files under the same name). In the ports tree this problem has been solved by installing each version under a different name using version number suffixes.
The obvious disadvantage of this is that each application has to be modified to find the expected version. But it can be solved by adding some additional flags to the compiler and linker.
To make your port use a specific version of Lua there are two variables available for defining (if only one is defined the other will be set to a default value):
Table 6-35. Variables to Select Lua Versions
Variable | Description | Default value |
---|---|---|
USE_LUA | List of versions the port can use | All available versions |
USE_LUA_NOT | List of versions the port can not use | None |
The following is a list of available Lua versions and the corresponding ports in the tree:
The variables in Table 6-35 can be set to one or more of the following combinations separated by spaces:
Table 6-37. Lua Version Specifications
Description | Example |
---|---|
Single version | 4.0 |
Ascending range | 5.0+ |
Descending range | 5.0- |
Full range (must be ascending) | 5.0-5.1 |
There are also some variables to select the preferred versions from the available ones. They can be set to a list of versions, the first ones will have higher priority.
There are other applications that, while not being Lua libraries, are related to them. These applications can be specified in the LUA_COMPS variable. The following components are available:
Table 6-39. Available Lua Components
Name | Description | Version restriction |
---|---|---|
lua | main library | none |
tolua | Library for accessing C/C++ code | 4.0-5.0 |
ruby | Ruby bindings | 4.0-5.0 |
Note: There are more components but they are modules for the interpreter, not used by applications (only by other modules).
The dependency type can be selected for each component by adding a suffix separated by a semicolon. If not present then a default type will be used (see Table 6-41). The following types are available:
Table 6-40. Available Lua Dependency Types
Name | Description |
---|---|
build | Component is required for building, equivalent to BUILD_DEPENDS |
run | Component is required for running, equivalent to RUN_DEPENDS |
lib | Component is required for building and running, equivalent to LIB_DEPENDS |
The default values for the components are detailed in the following table:
To detect an installed version you have to define WANT_LUA. If you do not set it to a specific version then the components will have a version suffix. The HAVE_LUA variable will be filled after detection.
Example 6-12. Detecting Installed Lua Versions and Components
The following fragment can be used in a port that uses Lua if it is installed, or an option is selected.
WANT_LUA= yes .include <bsd.port.pre.mk> .if defined(WITH_LUA5) || !empty(PORT_OPTIONS:MLUA5) || !empty(HAVE_LUA:Mlua-5.[01]) USE_LUA= 5.0-5.1 CONFIGURE_ARGS+= --enable-lua5 .endif
The following fragment can be used in a port that enables tolua support if it is installed or if an option is selected, in addition to Lua, both version 4.0.
USE_LUA= 4.0 LUA_COMPS= lua WANT_LUA= 4.0 .include <bsd.port.pre.mk> .if defined(WITH_TOLUA) || !empty(PORT_OPTIONS:MTOLUA) || !empty(HAVE_LUA:Mtolua) LUA_COMPS+= tolua CONFIGURE_ARGS+= --enable-tolua .endif
The following variables are available in the port (after defining one from Table 6-35).
Table 6-42. Variables Defined for Ports That Use Lua
Name | Description |
---|---|
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 ${PREFIX}/bin, ${PREFIX}/share and ${PREFIX}/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 module libraries (.so) are installed |
LUA_MODSHAREDIR | The directory where Lua modules (.lua) are installed |
LUA_PKGNAMEPREFIX | The package name prefix used by Lua modules |
LUA_CMD | The path to the Lua interpreter |
LUAC_CMD | The path to the Lua compiler |
TOLUA_CMD | The path to the tolua program |
If you need to use the variables for running commands right after including bsd.port.pre.mk you need to define LUA_PREMK.
Important: If you define LUA_PREMK, then the version, dependencies, components and defined variables will not change if you modify the Lua port variables after including bsd.port.pre.mk.
Example 6-14. Using Lua Variables in Commands
The following fragment illustrates the use of LUA_PREMK by running the Lua interpreter to obtain the full version string, assign it to a variable and pass it to the program.
USE_LUA= 5.0 LUA_PREMK= yes .include <bsd.port.pre.mk> .if exists(${LUA_CMD}) VER_STR!= ${LUA_CMD} -v CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}" .endif
Note: The Lua variables can be safely used in commands when they are inside targets without the need of LUA_PREMK.