Руководство FreeBSD по созданию портов
Пред. | Глава 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 могут иметь комбинации из одного или нескольких значений, разделенных пробелом:

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

Пред. | Начало | След.
Использование wxWidgets | Уровень выше | Использование Xfce

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