Эта глава описывает статус библиотек Lua в дереве портов и их интеграцию в систему портов.
Существует множество версий библиотек Lua и соответствующих интерпретаторов, конфликтующих между собой (устанавливают файлы под тем же именем). В дереве портов эта проблема решена путем установки каждой версии в собственное место с использованием номера версии в качестве суффикса.
Очевидным недостатком этого является необходимость изменения каждого приложения для нахождения искомой версии. Но это решается добавлением некоторых дополнительных флагов для компилятора и компоновщика.
Для того, чтобы заставить ваш порт использовать конкретную версию Lua, существует две доступные для определения переменные (если определена только одна, то вторая примет значение по умолчанию):
Переменная | Описание | Значение по умолчанию |
---|---|---|
USE_LUA | Перечень версий, которые порт может использовать | Все доступные версии |
USE_LUA_NOT | Перечень версий, которые порт не может использовать | Пусто |
Перечень доступных версий Lua и соответствующих портов в дереве:
Переменные из Таблица 6.35, <<Переменные для выбора версии 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.41, <<Типы зависимости 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.35, <<Переменные для выбора версии 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
.
Этот, и другие документы, могут быть скачаны с https://download.freebsd.org/ftp/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.