Руководство FreeBSD по созданию портов
Пред. | Глава 6. Особые соглашения | След.

# 6.18. Использование wxWidgets

Эта глава описывает статус библиотек wxWidgets в дереве портов и их интеграцию с системой портов.

## 6.18.1. Введение

Существует множество версий библиотек wxWidgets, конфликтующих между собой (устанавливают файлы под тем же именем). В дереве портов эта проблема решена путем установки каждой версии под собственным названием с использованием номера версии в качестве суффикса.

Очевидным недостатком этого является необходимость изменения каждого приложения для нахождения искомой версии. К счастью, большинство приложений для определения нужного компилятора и флагов компоновки вызывают сценарий `wx-config`. Для каждой доступной версии этот сценарий имеет своё имя. Большинство приложений учитывают переменную окружения или принимают аргумент configure для указания, какой сценарий `wx-config` следует вызывать. На все остальные приходится накладывать патч.

## 6.18.2. Выбор версии

Для того, чтобы заставить ваш порт использовать конкретную версию wxWidgets, существует две доступные для определения переменные (если определена только одна, то вторая примет значение по умолчанию):

Таблица 6-24. Переменные для выбора версии wxWidgets

Переменная | Описание | Значение по умолчанию
--- | --- | ---
`USE_WX` | Перечень версий, которые порт может использовать | Все доступные версии
`USE_WX_NOT` | Перечень версий, которые порт не может использовать | Нет

Перечень доступных версий wxWidgets и соответствующих им портов в дереве:

Таблица 6-25. Доступные версии wxWidgets

Версия | Порт
--- | ---
`2.4` | `x11-toolkits/wxgtk24`
`2.6` | `x11-toolkits/wxgtk26`
`2.8` | `x11-toolkits/wxgtk28`

> Замечание: Версии начиная с `2.5` также поставляются с Unicode и устанавливается подчиненным портом с названием как как у обычного, но с суффиксом `-unicode`, но этим можно управлять при помощи переменных (смотрите Разд. 6.18.4).

Переменные в Табл. 6-24 можно установить в одну или более следующих комбинаций, разделенных пробелами:

Таблица 6-26. Определение версии для wxWidgets

Описание | Пример
--- | ---
Единичная версия | `2.4`
Восходящий диапазон | `2.4+`
Нисходящий диапазон | `2.6-`
Полный диапазон (обязан быть восходящим) | `2.4-2.6`

Кроме того, существует несколько переменных для выбора предпочитаемых версий из перечня доступных. Они могут быть установлены в несколько версий, первая из которых будет иметь наибольший приоритет.

Таблица 6-27. Переменные для выбора предпочитаемых версий wxWidgets

Название | Предназначение
--- | ---
`WANT_WX_VER` | порт
`WITH_WX_VER` | пользователь

## 6.18.3. Выбор компонентов

Существуют другие приложения, которые, хотя и не являются библиотеками wxWidgets, но в тоже время относятся к ним. Эти приложения можно указать в переменной `WX_COMPS`. Доступны следующие компоненты:

Таблица 6-28. Доступные компоненты wxWidgets

Название | Описание | Ограничение версии
--- | --- | ---
`wx` | основная библиотека | нет
`contrib` | сторонние библиотеки | `нет`
`python` | wxPython (привязки к Python) | `2.4-2.6`
`mozilla` | wxMozilla | `2.4`
`svg` | wxSVG | `2.6`

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

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

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

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

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

Компонент | Тип зависимости
--- | ---
`wx` | `lib`
`contrib` | `lib`
`python` | `run`
`mozilla` | `lib`
`svg` | `lib`

Пример 6-7. Выбор компонентов wxWidgets

Следующий фрагмент относится к порту, в котором используется wxWidgets версии 2.4 с его сторонними библиотеками.

    USE_WX=       2.4
    WX_COMPS=     wx contrib

## 6.18.4. Unicode

Библиотека wxWidgets поддерживает Unicode начиная с версии `2.5`. В дереве портов доступны обе версии и могут быть выбраны с использованием следующих переменных:

Таблица 6-31. Переменные для выбора версии wxWidgets с Unicode

Переменная | Описание | Предназначение
--- | --- | ---
`WX_UNICODE` | Порт работает только с версией Unicode | порт
`WANT_UNICODE` | Порт работает с обеими версиями, но предпочитает версию с Unicode | порт
`WITH_UNICODE` | Порт будет использовать версию Unicode | пользователь
`WITHOUT_UNICODE` | Порт будет использовать обычную версию, если это поддерживается (когда `WX_UNICODE` не определена) | пользователь

> Внимание: Не используйте `WX_UNICODE` для портов, которые могут использовать обе версии. Если вы хотите, чтобы порт по умолчанию использовал Unicode, определите вместо этого `WANT_UNICODE`.

## 6.18.5. Обнаружение установленных версий

Для обнаружения установленной версии вам необходимо задать переменную `WANT_WX`. Если вы не присвоите ей определенную версию, то компоненты получат суффикс версии. Переменная `HAVE_WX` будет заполнена после обнаружения.

Пример 6-8. Обнаружение установленных версий и компонентов wxWidgets

Следующий фрагмент может быть использован в порту, который использует wxWidgets, в случае если он установлен или выбран соответствующий параметр.

    WANT_WX=        yes

    .include <bsd.port.pre.mk>

    .if defined(WITH_WX) || !empty(PORT_OPTIONS:MWX) || !empty(HAVE_WX:Mwx-2.4)
    USE_WX=         2.4
    CONFIGURE_ARGS+=--enable-wx
    .endif

Следующий фрагмент может быть использован в порту, который задействует поддержку wxPython, в случае если он установлен или выбран соответствующий параметр, в дополнение к wxWidgets, обе версии `2.6`.

    USE_WX=         2.6
    WX_COMPS=       wx
    WANT_WX=        2.6

    .include <bsd.port.pre.mk>

    .if defined(WITH_WXPYTHON) || !empty(PORT_OPTIONS:MWXPYTHON) || !empty(HAVE_WX:Mpython)
    WX_COMPS+=      python
    CONFIGURE_ARGS+=--enable-wxpython
    .endif

## 6.18.6. Переменные для определения

Следующие переменные доступны в порту (после определения одной из переменных из Табл. 6-24).

Таблица 6-32. Переменные, определенные для портов, использующих wxWidgets

Название | Описание
--- | ---
`WX_CONFIG` | Путь к сценарию wxWidgets `wx-config` (с другим именем)
`WXRC_CMD` | Путь к программе wxWidgets `wxrc` (с другим именем)
`WX_VERSION` | Версия wxWidgets, которая будет использоваться (например, `2.6`)
`WX_UNICODE` | Если не определена, но Unicode будет использоваться, то она будет определена

## 6.18.7. Обработка в `bsd.port.pre.mk`

Если вам нужно использовать переменные для запуска команд сразу после подключения `bsd.port.pre.mk`, то вам нужно определить `WX_PREMK`.

> Важно: Если вы определите `WX_PREMK`, то версия, зависимости, компоненты и заданные переменные не изменяться, в случае вы изменили переменные порта wxWidgets после подключения `bsd.port.pre.mk`.

Пример 6-9. Использование переменных wxWidgets в командах

Следующий фрагмент иллюстрирует использование переменной `WX_PREMK` посредством запуска сценария `wx-config` для получения строки с полной версией с присвоением ее переменной и передачей в программу.

    USE_WX=         2.4
    WX_PREMK=       yes

    .include <bsd.port.pre.mk>

    .if exists(${WX_CONFIG})
    VER_STR!=       ${WX_CONFIG} --release

    PLIST_SUB+=     VERSION="${VER_STR}"
    .endif

> Замечание: Переменные wxWidgets можно безопасно использовать в командах внутри целей без необходимости в использовании `WX_PREMK`.

## 6.18.8. Дополнительные параметры `configure`

Некоторые сценарии GNU `configure` не могут найти wxWidgets только с установленной переменной окружения `WX_CONFIG`, требуя дополнительные параметры. Для их передачи можно использовать переменную `WX_CONF_ARGS`.

Таблица 6-33. Допустимые значения `WX_CONF_ARGS`

Возможное значение | Получаемый параметр
--- | ---
`absolute` | `--with-wx-config=${WX_CONFIG}`
`relative` | `--with-wx=${LOCALBASE} --with-wx-config=${WX_CONFIG:T}`

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

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