6.19. Использование Lua
Пред. | Глава 6. Особые соглашения | След.

## 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, «Переменные для выбора версии 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` | Привязка к Ruby | 4.0-5.0

### Примечание:

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

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

Таблица 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, «Переменные для выбора версии 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`.

Пред. | Наверх | След.
6.18. Использование wxWidgets | Начало | 6.20. Использование Xfce

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

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