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

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

6.19.1. Введение

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

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

6.19.2. Выбор версии

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

Таблица 6.25. Переменные для выбора версии wxWidgets
ПеременнаяОписаниеЗначение по умолчанию
USE_WXПеречень версий, которые порт может использоватьВсе доступные версии
USE_WX_NOTПеречень версий, которые порт не может использоватьНет

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

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

Примечание:

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

Переменные в Таблица 6.25, <<Переменные для выбора версии wxWidgets>> можно установить в одну или более следующих комбинаций, разделенных пробелами:

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

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

Таблица 6.28. Переменные для выбора предпочитаемых версий wxWidgets
НазваниеПредназначение
WANT_WX_VERпорт
WITH_WX_VERпользователь

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

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

Таблица 6.29. Доступные компоненты wxWidgets
НазваниеОписаниеОграничение версии
wxосновная библиотеканет
contribсторонние библиотекинет
pythonwxPython (привязки к Python)2.4-2.6
mozillawxMozilla2.4
svgwxSVG2.6

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

Таблица 6.30. Доступные типы зависимости wxWidgets
НазваниеОписание
buildКомпонент требуется для построения, эквивалентен BUILD_DEPENDS
runКомпонент требуется для запуска, эквивалентен RUN_DEPENDS
libКомпонент требуется для построения и запуска, эквивалентен LIB_DEPENDS

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

Таблица 6.31. Типы зависимости wxWidgets, используемые по умолчанию
КомпонентТип зависимости
wxlib
contriblib
pythonrun
mozillalib
svglib

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

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

USE_WX=		2.4
WX_COMPS=	wx contrib

6.19.4. Unicode

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

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

Предупреждение:

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

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

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

Пример 6.9. Обнаружение установленных версий и компонентов 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.19.6. Переменные для определения

Следующие переменные доступны в порту (после определения одной из переменных из Таблица 6.25, <<Переменные для выбора версии wxWidgets>>).

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

6.19.7. Обработка в bsd.port.pre.mk

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

Важно:

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

Пример 6.10. Использование переменных 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.19.8. Дополнительные параметры configure

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

Таблица 6.34. Допустимые значения WX_CONF_ARGS
Возможное значениеПолучаемый параметр
absolute--with-wx-config=${WX_CONFIG}
relative--with-wx=${LOCALBASE} --with-wx-config=${WX_CONFIG:T}

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

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

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