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.0 lang/lua4
5.0 lang/lua50
5.1 lang/lua

Переменные из Табл. 6-34 могут иметь комбинации из одного или нескольких значений, разделенных пробелом:

Таблица 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 Привязка к Ruby 4.0-5.0

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

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

Таблица 6-39. Доступные типы зависимости Lua

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

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

Таблица 6-40. Типы зависимости Lua, используемые по умолчанию

Компонент Тип зависимости
lua lib для 4.0-5.0 (динамическая) и build для 5.1 (статическая)
tolua build (статическая)
ruby lib (динамическая)

Пример 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).

Таблица 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.

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