6.20. Использование Lua

Эта глава описывает статус библиотек Lua в дереве портов и их интеграцию в систему портов.

6.20.1. Введение

Существует множество версий библиотек Lua и соответствующих интерпретаторов, конфликтующих между собой (устанавливают файлы под тем же именем). В дереве портов эта проблема решена путем установки каждой версии в собственное место с использованием номера версии в качестве суффикса.

Очевидным недостатком этого является необходимость изменения каждого приложения для нахождения искомой версии. Но это решается добавлением некоторых дополнительных флагов для компилятора и компоновщика.

6.20.2. Выбор версии

Для того, чтобы заставить ваш порт использовать конкретную версию Lua, существует две доступные для определения переменные (если определена только одна, то вторая примет значение по умолчанию):

Таблица 6.35. Переменные для выбора версии Lua
ПеременнаяОписаниеЗначение по умолчанию
USE_LUAПеречень версий, которые порт может использоватьВсе доступные версии
USE_LUA_NOTПеречень версий, которые порт не может использоватьПусто

Перечень доступных версий Lua и соответствующих портов в дереве:

Таблица 6.36. Доступные версии Lua
ВерсияПорт
4.0lang/lua4
5.0lang/lua50
5.1lang/lua

Переменные из Таблица 6.35, <<Переменные для выбора версии Lua>> могут иметь комбинации из одного или нескольких значений, разделенных пробелом:

Таблица 6.37. Определение версии Lua
ОписаниеПример
Единичная версия4.0
Восходящий диапазон5.0+
Нисходящий диапазон5.0-
Полный диапазон (обязан быть восходящим)5.0-5.1

Кроме того, существует несколько переменных для выбора предпочитаемых версий из перечня доступных. Они могут быть установлены в несколько версий, первая из которых будет иметь наибольший приоритет.

Таблица 6.38. Переменные для выбора предпочитаемых версий Lua
НазваниеПредназначение
WANT_LUA_VERпорт
WITH_LUA_VERпользователь

Пример 6.11. Выбор версии Lua

Следующий фрагмент взят из порта, который использует Lua версий 5.0 или 5.1, по умолчанию 5.0. Значение может быть переопределено пользователем с использованием переменной WITH_LUA_VER.

USE_LUA=	5.0-5.1
WANT_LUA_VER=	5.0

6.20.3. Выбор компонентов

Существуют другие приложения, которые хотя и не являются библиотеками Lua, но относятся к ним. Эти приложения можно указать в переменной LUA_COMPS. Доступны следующие компоненты:

Таблица 6.39. Доступные компоненты Lua
НазваниеОписаниеОграничение версии
luaОсновная библиотеканет
toluaБиблиотека доступа к коду C/C++4.0-5.0
rubyПривязка к Ruby4.0-5.0

Примечание:

Есть и другие компоненты, но они относятся к модулям для интерпретатора и не используются приложениями (только другими модулями).

Тип зависимости можно выбрать для каждого компонента через добавление суффикса, отделенного точкой с запятой. В случае отсутствия будет использован тип по умолчанию (смотрите Таблица 6.41, <<Типы зависимости Lua, используемые по умолчанию>>). Доступные следующие типы:

Таблица 6.40. Доступные типы зависимости Lua
НазваниеОписание
buildКомпонент требуется для построения, эквивалентен BUILD_DEPENDS
runКомпонент требуется для запуска, эквивалентен RUN_DEPENDS
libКомпонент требуется для построения и запуска, эквивалентен LIB_DEPENDS

Значения по умолчанию для компонентов подробно рассматриваются в следующей таблице:

Таблица 6.41. Типы зависимости Lua, используемые по умолчанию
КомпонентТип зависимости
lualib для 4.0-5.0 (динамическая) и build для 5.1 (статическая)
toluabuild (статическая)
rubylib (динамическая)

Пример 6.12. Выбор компонентов Lua

Следующий фрагмент соответствует порту, использующему Lua версии 4.0 и привязку к Ruby.

USE_LUA=	4.0
LUA_COMPS=	lua ruby

6.20.4. Обнаружение установленных версий

Для обнаружения установленной версии вам необходимо задать переменную WANT_LUA. Если вы не присвоите ей определенную версию, то компоненты получат суффикс версии. Переменная HAVE_LUA будет заполнена после обнаружения.

Пример 6.13. Обнаружение установленных версий и компонентов Lua

Следующий фрагмент можно использовать для порта, использующего Lua, если она установлена, или был выбран соответствующий параметр.

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

Следующий фрагмент можно использовать для порта, который включает поддержку tolua, если такой компонент установлен, или был выбран соответствующий параметр в дополнение к Lua, оба имеют версию 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

6.20.5. Переменные для определения

Следующие переменные доступны в порту (после определения одной из переменных из Таблица 6.35, <<Переменные для выбора версии Lua>>).

Таблица 6.42. Переменные, определенные для портов, использующих Lua
НазваниеОписание
LUA_VERВерсия Lua, которая будет использоваться (например, 5.1)
LUA_VER_SHСтарший номер версии динамической библиотеки Lua (например, 1)
LUA_VER_STRВерсия Lua без точки (например, 51)
LUA_PREFIXПрефикс, в который установлена Lua (и компоненты)
LUA_SUBDIRКаталог под ${PREFIX}/bin, ${PREFIX}/share и ${PREFIX}/lib, в который установлена Lua
LUA_INCDIRКаталог, в который установлены заголовочные файлы Lua и tolua
LUA_LIBDIRКаталог, в который установлены библиотеки Lua и tolua
LUA_MODLIBDIRКаталог, в который установлены модули библиотеки Lua (.so)
LUA_MODSHAREDIRКаталог, в который установлены модули Lua (.lua)
LUA_PKGNAMEPREFIXПрефикс с именем пакета, используемый модулями Lua
LUA_CMDПуть к интерпретатору Lua
LUAC_CMDПуть к компилятору Lua
TOLUA_CMDПуть к программе tolua

Пример 6.14. Указание для порта, где искать Lua

Следующий фрагмент показывает, как сообщить порту, который использует сценарий configure, где расположены заголовочные файлы и библиотеки Lua.

USE_LUA=	4.0
GNU_CONFIGURE=	yes
CONFIGURE_ENV=	CPPFLAGS="-I${LUA_INCDIR}" LDFLAGS="-L${LUA_LIBDIR}"

6.20.6. Обработка в bsd.port.pre.mk

Если вам нужно использовать переменные для запуска команд сразу после подключения bsd.port.pre.mk, для этого вам нужно определить переменную LUA_PREMK.

Важно:

Если вы задаете LUA_PREMK, то версия, зависимости, компоненты и уже заданные переменные не будут изменены, в случае если вы изменили переменные порта Lua после подключения bsd.port.pre.mk.

Пример 6.15. Использование переменных Lua в командах

Следующий фрагмент иллюстрирует использование LUA_PREMK посредством запуска интерпретатора Lua для того, чтобы получить строку с полной версией, сохранить ее в переменную и передать программе.

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

Примечание:

Переменные Lua можно безопасно использовать в командах внутри целей без необходимости в использовании LUA_PREMK.

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.

По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.