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