Как создать взаимоисключающий порт FreeBSD?

Вопрос или проблема

Я создал множество портов FreeBSD для программы, которая поддерживает различные базы данных (например, PostgreSQL, MariaDB и т.д.). Эта часть работает прекрасно.

Теперь я хочу создать зависимость от всех различных портов программы-базы данных, но должна быть выбрана только одна. Я знаю, как добавить зависимости к порту с помощью BUILD_DEPENDS и RUN_DEPENDS, но не знаю, как сделать список взаимно исключительным?

Ответ или решение

Для создания взаимно исключительных портов FreeBSD, вам нужно использовать систему конфигураций, предоставляемую в конфигурационных файлах порта. Основная идея заключается в использовании механизма опций, который позволяет выбирать только один из нескольких взаимозависимых вариантов. Рассмотрим все шаги более подробно.

Шаг 1: Определение опций порта

В вашем порте (например, в Makefile) необходимо указать опции для выбора между различными зависимости, такими как PostgreSQL, MariaDB и т.д. Для этого используйте секцию OPTIONS_DEFINE и секцию OPTIONS_PARALLELABLE.

Пример:

OPTIONS_DEFINE=     POSTGRESQL MARIADB
OPTIONS_DEFAULT=    POSTGRESQL

POSTGRESQL_DESC=    Use PostgreSQL as database
MARIADB_DESC=       Use MariaDB as database

.include <bsd.options.mk>

Шаг 2: Условное добавление зависимостей

В зависимости от выбора пользователя, вы можете добавлять зависимости только для одной из опций. Это делается с помощью условных выражений в Makefile. Используйте директивы .if и .else для включения зависимостей в зависимости от выбранной опции.

Пример:

.if ${PORT_OPTIONS:MPOSTGRESQL}
BUILD_DEPENDS+=     postgresql-client>=9.6:databases/postgresql96-client
RUN_DEPENDS+=       postgresql-server>=9.6:databases/postgresql96-server
.elseif ${PORT_OPTIONS:MMARIADB}
BUILD_DEPENDS+=     mariadb-client>=10.3:databases/mariadb103-client
RUN_DEPENDS+=       mariadb-server>=10.3:databases/mariadb103-server
.else
IGNORE=             At least one database option must be selected
.endif

Шаг 3: Обработка конфигурации

Чтобы пользователю было проще выбирать опции, добавьте инструкцию в конец вашего Makefile, чтобы указать, что необходимо выбрать один из вариантов.

# Make sure only one database option is selected
.  for opt in POSTGRESQL MARIADB; .if ${PORT_OPTIONS:${opt}} && ${PORT_OPTIONS:${:M${:S/^/!/}}}
IGNORE= "Only one database type can be selected at a time: choose either PostgreSQL or MariaDB."
.endif; .endfor

Шаг 4: Тестирование

После внесения всех изменений, соберите ваш порт и проверьте его поведение. Убедитесь, что:

  • Пользователи могут выбрать только одну базу данных.
  • При попытке выбрать несколько баз данных появляется сообщение об ошибке.
  • Все зависимости корректно устанавливаются в зависимости от выбора опции.

Заключение

Создание взаимно исключительных портов FreeBSD требует четкой настройки опций и условий в Makefile. Использование системы опций позволяет пользователям выбирать необходимую конфигурацию без конфликтов. Выполнив вышеописанные шаги, вы сможете успешно реализовать требуемую функциональность для вашего порта.

Оцените материал
Добавить комментарий

Капча загружается...