Эта глава описывает статус библиотек Lua в дереве портов и их интеграцию в систему портов.
Существует множество версий библиотек Lua и соответствующих интерпретаторов, конфликтующих между собой (устанавливают файлы под тем же именем). В дереве портов эта проблема решена путем установки каждой версии в собственное место с использованием номера версии в качестве суффикса.
Очевидным недостатком этого является необходимость изменения каждого приложения для нахождения искомой версии. Но это решается добавлением некоторых дополнительных флагов для компилятора и компоновщика.
Для того, чтобы заставить ваш порт использовать конкретную версию Lua, существует две доступные для определения переменные (если определена только одна, то вторая примет значение по умолчанию):
| Переменная | Описание | Значение по умолчанию |
|---|---|---|
USE_LUA | Перечень версий, которые порт может использовать | Все доступные версии |
USE_LUA_NOT | Перечень версий, которые порт не может использовать | Пусто |
Перечень доступных версий Lua и соответствующих портов в дереве:
Переменные из Таблица 6.33, «Переменные для выбора версии Lua» могут иметь комбинации из одного или нескольких значений, разделенных пробелом:
| Описание | Пример |
|---|---|
| Единичная версия | 4.0 |
| Восходящий диапазон | 5.0+ |
| Нисходящий диапазон | 5.0- |
| Полный диапазон (обязан быть восходящим) | 5.0-5.1 |
Кроме того, существует несколько переменных для выбора предпочитаемых версий из перечня доступных. Они могут быть установлены в несколько версий, первая из которых будет иметь наибольший приоритет.
| Название | Предназначение |
|---|---|
WANT_LUA_VER | порт |
WITH_LUA_VER | пользователь |
Следующий фрагмент взят из порта, который использует
Lua версий 5.0
или 5.1, по умолчанию 5.0.
Значение может быть переопределено пользователем с использованием
переменной WITH_LUA_VER.
USE_LUA= 5.0-5.1 WANT_LUA_VER= 5.0
Существуют другие приложения, которые хотя и не являются
библиотеками Lua, но относятся к ним.
Эти приложения можно указать в переменной
LUA_COMPS. Доступны следующие компоненты:
| Название | Описание | Ограничение версии |
|---|---|---|
lua | Основная библиотека | нет |
tolua | Библиотека доступа к коду C/C++ | 4.0-5.0 |
ruby | Привязка к Ruby | 4.0-5.0 |
Есть и другие компоненты, но они относятся к модулям для интерпретатора и не используются приложениями (только другими модулями).
Тип зависимости можно выбрать для каждого компонента через добавление суффикса, отделенного точкой с запятой. В случае отсутствия будет использован тип по умолчанию (смотрите Таблица 6.39, «Типы зависимости Lua, используемые по умолчанию»). Доступные следующие типы:
| Название | Описание |
|---|---|
build | Компонент требуется для построения, эквивалентен
BUILD_DEPENDS |
run | Компонент требуется для запуска, эквивалентен
RUN_DEPENDS |
lib | Компонент требуется для построения и запуска,
эквивалентен LIB_DEPENDS |
Значения по умолчанию для компонентов подробно рассматриваются в следующей таблице:
| Компонент | Тип зависимости |
|---|---|
lua | lib для 4.0-5.0
(динамическая) и build для
5.1 (статическая) |
tolua | build (статическая) |
ruby | lib (динамическая) |
Следующий фрагмент соответствует порту, использующему
Lua версии 4.0
и привязку к Ruby.
USE_LUA= 4.0 LUA_COMPS= lua ruby
Для обнаружения установленной версии вам необходимо задать
переменную WANT_LUA. Если вы не присвоите ей
определенную версию, то компоненты получат суффикс версии.
Переменная HAVE_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.33, «Переменные для выбора версии 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 |
Следующий фрагмент показывает, как сообщить порту, который использует сценарий configure, где расположены заголовочные файлы и библиотеки Lua.
USE_LUA= 4.0
GNU_CONFIGURE= yes
CONFIGURE_ENV= CPPFLAGS="-I${LUA_INCDIR}" LDFLAGS="-L${LUA_LIBDIR}"Если вам нужно использовать переменные для запуска команд сразу
после подключения bsd.port.pre.mk, для этого
вам нужно определить переменную LUA_PREMK.
Если вы задаете LUA_PREMK, то версия,
зависимости, компоненты и уже заданные переменные не будут
изменены, в случае если вы изменили переменные порта
Lua после
подключения bsd.port.pre.mk.
Следующий фрагмент иллюстрирует использование
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>.