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

# 6.7. Использование X11

## 6.7.1. Компоненты X.Org

X.Org является реализацией X11, доступной в Коллекции Портов. Если ваше приложение зависит от компонентов X, установите в переменную `USE_XORG` в перечень требуемых компонентов. К настоящему времени доступными компонентами являются:

`bigreqsproto compositeproto damageproto dmx dmxproto dri2proto evieproto fixesproto fontcacheproto fontenc fontsproto fontutil glproto ice inputproto kbproto libfs oldx pciaccess pixman printproto randrproto recordproto renderproto resourceproto scrnsaverproto sm trapproto videoproto x11 xau xaw xaw6 xaw7 xbitmaps xcmiscproto xcomposite xcursor xdamage xdmcp xevie xext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86rushproto xf86vidmodeproto xfixes xfont xfontcache xft xi xinerama xineramaproto xkbfile xkbui xmu xmuu xorg-server xp xpm xprintapputil xprintutil xproto xproxymngproto xrandr xrender xres xscrnsaver xt xtrans xtrap xtst xv xvmc xxf86dga xxf86misc xxf86vm`.

Всегда актуальный перечень можно найти в `/usr/ports/Mk/bsd.xorg.mk`.

Проект Mesa является попыткой обеспечить свободную реализацию OpenGL. Вы можете указать зависимость от различных компонентов этого проекта при помощи переменной `USE_GL`. Действительные опции: `glut, glu, glw, glew, gl` и `linux`. Для обратной совместимости значение `yes` соответствует `glu`.

Пример 6-2. Пример для USE_XORG

    USE_XORG=   xrender xft xkbfile xt xaw
    USE_GL=     glu

Некоторые порты определяют `USE_XLIB`, которая делает порт зависимым ото всех 50 или около того библиотек. Эта переменная существует для обратной совместимости, т.к. предшествует модульному X.Org, и не должна использоваться в новых портах.

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

`USE_XLIB` | Порт использует библиотеки X. Является устаревшим - используйте вместо этого список компонентов X.Org в переменной `USE_XORG`.
`USE_IMAKE` | Порт использует `imake`.
`XMKMF` | Задаётся маршрут до `xmkmf`, если он отсутствует в переменной окружения `PATH`. По умолчанию это `xmkmf -a`.

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

`X_IMAKE_PORT` | Порт, предоставляющий `imake` и несколько других утилит, используемых при построении X11.
`X_LIBRARIES_PORT` | Порт, предоставляющий библиотеки X11.
`X_CLIENTS_PORT` | Порт, предоставляющий клиентов X.
`X_SERVER_PORT` | Порт, предоставляющий сервер X.
`X_FONTSERVER_PORT` | Порт, предоставляющий сервер шрифтов.
`X_PRINTSERVER_PORT` | Порт, предоставляющий сервер печати.
`X_VFBSERVER_PORT` | Порт, предоставляющий сервер виртуального фреймбуфера.
`X_NESTSERVER_PORT` | Порт, предоставляющий вложенный сервер X.
`X_FONTS_ENCODINGS_PORT` | Порт, предоставляющий кодировки для шрифтов.
`X_FONTS_MISC_PORT` | Порт, предоставляющий прочие растровые шрифты.
`X_FONTS_100DPI_PORT` | Порт, предоставляющий 100dpi растровые шрифты.
`X_FONTS_75DPI_PORT` | Порт, предоставляющий 75dpi растровые шрифты.
`X_FONTS_CYRILLIC_PORT` | Порт, предоставляющий кириллические растровые шрифты.
`X_FONTS_TTF_PORT` | Порт, предоставляющий шрифты TrueType®.
`X_FONTS_TYPE1_PORT` | Порт, предоставляющий шрифты Type1.
`X_MANUALS_PORT` | Порт, предоставляющий страницы справочника, предназначенные для разработчиков.

Пример 6-3. Использование переменных X11 в порте

    # Use some X11 libraries and depend on
    # font server as well as cyrillic fonts.
    RUN_DEPENDS=   ${LOCALBASE}/bin/xfs:${X_FONTSERVER_PORT} \
                   ${LOCALBASE}/lib/X11/fonts/cyrillic/crox1c.pcf.gz:${X_FONTS_CYRILLIC_PORT}

    USE_XORG=      x11 xpm

## 6.7.2. Порты, которым требуется Motif

Если вашему порту требуется Motif, задайте переменную `USE_MOTIF` в файле `Makefile`. Реализация Motif, используемая по умолчанию, находится в `x11-toolkits/open-motif`. Пользователи вместо этого могут выбрать `x11-toolkits/lesstif` через установку переменной `WANT_LESSTIF`.

Переменная `MOTIFLIB` будет установлена в `bsd.port.mk`, чтобы ссылаться на соответствующую библиотеку Motif. Пожалуйста, измените исходные тексты вашего порта на использование `${MOTIFLIB}` везде, где упоминается библиотека Motif, в первоначальном `Makefile` или `Imakefile`.

Существует два общих случая:

- Если порт обращается к библиотеке Motif как `-lXm` в своих файлах `Makefile` или `Imakefile`, просто подставьте вместо этих обращений `${MOTIFLIB}`.

- Если порт использует `XmClientLibs` в своем файле `Imakefile`, измените это обращение на `${MOTIFLIB} ${XTOOLLIB} ${XLIB}`.

Заметьте, что переменная `MOTIFLIB` (как правило) раскрывается в `-L/usr/local/lib -lXm` или `/usr/local/lib/libXm.a`, так что нет нужды впереди добавлять `-L` или `-l`.

## 6.7.3. Шрифты для X11

Если ваш порт устанавливает шрифты для X Window System, поместите их в каталог ``LOCALBASE`/lib/X11/fonts/local`.

## 6.7.4. Получение поддельного `DISPLAY`, используя Xvfb

Некоторые приложения для успешной компиляции требуют наличие работающего дисплея X11. Это создает проблему для машин, которые работают в режиме headless. При использовании следующего канонического хака инфраструктура построения запустит сервер X в виртуальном фреймбуфере. Затем переменная работающего `DISPLAY` передается при построении.

    USE_DISPLAY=  yes

## 6.7.5. Элементы рабочего стола

Элементы рабочего стола (стандарта Freedesktop) предоставляют способ автоматической настройки функций рабочего стола при установке новой программы, не требуя вмешательства пользователя. Например, новые программы автоматически отображаются в меню приложений совместимых окружений рабочего стола. Элементы рабочего стола изначально появились в окружении рабочего стола GNOME, но в настоящее время являются стандартом и также работают с KDE и Xfce. Такая небольшая автоматизация предоставляет реальное удобство для пользователя, и посему элементы рабочего стола приветствуются в приложениях, которые можно использовать в окружении рабочего стола.

### 6.7.5.1. Использование предопределенных файлов `.desktop`

Порты, включающие предопределенные файлы `*.desktop`, должны включать эти файлы в `pkg-plist` и устанавливать их в каталог ``$LOCALBASE`/share/applications`. Для установки этих файлов используется макрос `INSTALL_DATA`.

### 6.7.5.2. Создание элементов рабочего стола с использованием `DESKTOP_ENTRIES`

Элементы рабочего стола можно легко создавать для приложений, используя переменную `DESKTOP_ENTRIES`. Будет автоматически создан, установлен и добавлен в `pkg-plist` файл с названием ``name`.desktop`. Синтаксис:

    DESKTOP_ENTRIES=  "NAME" "COMMENT" "ICON" "COMMAND" "CATEGORY" StartupNotify

Перечень возможных категорий доступен на вебсайте Freedesktop. `StartupNotify` отобразит, поддерживает ли приложение уведомления о запуске. Как правило, это графический индикатор часы вместо указателя мыши, меню или панель, которые уведомляют пользователя о загрузке программы. Программа, поддерживающая уведомления о запуске, очистит этот индикатор после запуска. Программы, несовместимые с уведомлениями о запуске, не будут очищать индикатор (возможно, вызывая путаницу и приводя пользователей в бешенство), и поэтому должны иметь `StartupNotify` в выключенном состоянии `false`; тогда индикатор не будет отображаться совсем.

Пример:

    DESKTOP_ENTRIES=  "ToME" "Roguelike game based on JRR Tolkien's work" \
                      "${DATADIR}/xtra/graf/tome-128.png" \
                      "tome -v -g" "Application;Game;RolePlaying;" \
                      false

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

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