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

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

6.19.1. Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

USE_LUA= 5.0-5.1 WANT_LUA_VER= 5.0

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

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

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

Примечание:

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

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

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

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

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

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

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

USE_LUA= 4.0 LUA_COMPS= lua ruby

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

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

Пример 6.12. Обнаружение установленных версий и компонентов 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.19.5. Переменные для определения

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

Таблица 6.41. Переменные, определенные для портов, использующих 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.13. Указание для порта, где искать Lua

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

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

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

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

Важно:

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

Пример 6.14. Использование переменных 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>.