Руководство FreeBSD по созданию портов

The FreeBSD Documentation Project


Содержание
1. Введение
2. Как самому сделать новый порт
3. Быстрое портирование
3.1. Создание файла Makefile
3.2. Создание информационных файлов
3.2.1. pkg-descr
3.2.2. pkg-plist
3.3. Создание файла с контрольной суммой
3.4. Тестирование порта
3.5. Проверка вашего порта утилитой portlint
3.6. Посылка нового порта
4. Медленное портирование
4.1. Как всё это работает
4.2. Получение исходного кода
4.3. Модификация порта
4.4. Создание патчей
4.5. Конфигурирование
4.6. Обработка пользовательского ввода
5. Настройка файла Makefile
5.1. Оригинальные исходный код
5.2. Именование
5.2.1. PORTNAME и PORTVERSION
5.2.2. PORTREVISION и PORTEPOCH
5.2.3. Переменные PKGNAMEPREFIX и PKGNAMESUFFIX
5.2.4. LATEST_LINK
5.2.5. Соглашения по именованию пакетов
5.3. Разделение по категориям
5.3.1. CATEGORIES
5.3.2. Текущий список категорий
5.3.3. Выбор правильной категории
5.3.4. Предложение новой категории
5.3.5. Предложение реорганизации всех категорий
5.4. Дистрибутивные файлы
5.4.1. DISTVERSION/DISTNAME
5.4.2. MASTER_SITES
5.4.3. EXTRACT_SUFX
5.4.4. DISTFILES
5.4.5. EXTRACT_ONLY
5.4.6. PATCHFILES
5.4.7. Несколько дистрибутивных файлов или патчей с различных серверов и подкаталогов (MASTER_SITES:n)
5.4.8. DIST_SUBDIR
5.4.9. ALWAYS_KEEP_DISTFILES
5.5. MAINTAINER
5.6. COMMENT
5.7. Зависимости
5.7.1. LIB_DEPENDS
5.7.2. RUN_DEPENDS
5.7.3. BUILD_DEPENDS
5.7.4. FETCH_DEPENDS
5.7.5. EXTRACT_DEPENDS
5.7.6. PATCH_DEPENDS
5.7.7. USE_*
5.7.8. Минимальная версия зависимости
5.7.9. Замечания касательно зависимостей
5.7.10. Зацикленные зависимости фатальны
5.7.11. Автоматические зависимости и проблемы, которые они вызывают
5.7.12. USE_ и WANT_
5.8. MASTERDIR
5.9. Страницы Справочника
5.10. Файлы в формате info
5.11. Опции для Makefile
5.11.1. Knobs
5.11.2. OPTIONS
5.11.3. Функция автоматической активации
5.12. Задание рабочего каталога
5.12.1. WRKSRC
5.12.2. NO_WRKSUBDIR
5.13. Разрешение конфликтов
5.13.1. CONFLICTS_INSTALL
5.13.2. CONFLICTS_BUILD
5.13.3. CONFLICTS
5.14. Установка файлов
5.14.1. Макросы INSTALL_*
5.14.2. Удаление отладочной информации в бинарных файлах и динамических библиотеках
5.14.3. Установка целого дерева файлов
5.14.4. Установка дополнительной документации
5.14.5. Подкаталоги внутри PREFIX
6. Особые соглашения
6.1. Динамические библиотеки
6.2. Порты с ограничениями на распространение
6.2.1. NO_PACKAGE
6.2.2. NO_CDROM
6.2.3. NOFETCHFILES
6.2.4. RESTRICTED
6.2.5. RESTRICTED_FILES
6.2.6. Примеры использования
6.3. Механизмы построения
6.3.1. Параллельное построение портов
6.3.2. make, gmake и imake
6.3.3. Сценарий configure
6.3.4. Использование scons
6.4. Использование GNU autotools
6.4.1. Введение
6.4.2. libtool
6.4.3. libltdl
6.4.4. autoconf и autoheader
6.4.5. automake и aclocal
6.5. Использование GNU gettext
6.5.1. Простой вариант использования
6.5.2. Оптимальное использование
6.5.3. Управление каталогами сообщений
6.6. Использование Perl
6.7. Использование X11
6.7.1. Компоненты X.Org
6.7.2. Порты, которым требуется Motif
6.7.3. Шрифты для X11
6.7.4. Получение поддельного DISPLAY, используя Xvfb
6.7.5. Элементы рабочего стола
6.8. Использование GNOME
6.9. Использование Qt
6.9.1. Порты, для которых требуется Qt
6.9.2. Выбор компонентов (только для Qt 4.x)
6.9.3. Прочие соображения
6.10. Использование KDE
6.10.1. Задание переменных (только для KDE 3.x)
6.10.2. Задание переменных KDE 4
6.11. Использование Java
6.11.1. Задание переменных
6.11.2. Построение с Ant
6.11.3. Практические рекомендации
6.12. Веб-приложения, Apache и PHP
6.12.1. Apache
6.12.2. Веб-приложения
6.12.3. PHP
6.12.4. Модули PEAR
6.13. Использование Python
6.14. Использование Tcl/Tk
6.15. Использование Emacs
6.16. Использование Ruby
6.17. Использование SDL
6.18. Использование wxWidgets
6.18.1. Введение
6.18.2. Выбор версии
6.18.3. Выбор компонентов
6.18.4. Unicode
6.18.5. Обнаружение установленных версий
6.18.6. Переменные для определения
6.18.7. Обработка в bsd.port.pre.mk
6.18.8. Дополнительные параметры configure
6.19. Использование Lua
6.19.1. Введение
6.19.2. Выбор версии
6.19.3. Выбор компонентов
6.19.4. Обнаружение установленных версий
6.19.5. Переменные для определения
6.19.6. Обработка в bsd.port.pre.mk
6.20. Использование Xfce
6.21. Использование Mozilla
6.22. Использование баз данных
6.23. Запуск и остановка служб (сценарии rc)
6.23.1. Остановка служб при удалении
6.23.2. Контрольный список перед внесением изменений
6.24. Добавление пользователей и групп
6.25. Порты, требующие наличия исходных текстов ядра
7. Продвинутые практики pkg-plist
7.1. Изменение содержимого pkg-plist в зависимости от make-переменных
7.2. Пустые каталоги
7.2.1. Очистка пустых каталогов
7.2.2. Создание пустых каталогов
7.3. Конфигурационные файлы
7.4. Динамический или статический список упаковки
7.5. Автоматическое создание списка упаковки
8. Файлы pkg-*
8.1. pkg-message
8.2. pkg-install
8.3. pkg-deinstall
8.4. pkg-req
8.5. Изменение имён файлов pkg-*
8.6. Использование SUB_FILES и SUB_LIST
9. Тестирование вашего порта
9.1. Запуск make describe
9.2. Portlint
9.3. Port Tools
9.4. PREFIX и DESTDIR
9.5. Tinderbox
10. Обновление отдельного порта
10.1. Использование SVN для создания патчей
10.2. Файлы UPDATING и MOVED
11. Безопасность портов
11.1. Почему безопасность так важна
11.2. Исправление уязвимостей безопасности
11.3. Обеспечение сообщества информацией
11.3.1. База данных VuXML
11.3.2. Короткое вступление в VuXML
11.3.3. Тестирование ваших изменений в базе данных VuXML
12. Что делать нужно, и что делать нельзя
12.1. Введение
12.2. WRKDIR
12.3. WRKDIRPREFIX
12.4. Различение операционных систем и версий ОС
12.5. Значения __FreeBSD_version
12.6. Написание чего-либо после bsd.port.mk
12.7. Использование выражения exec в сценариях обёртках
12.8. Поступайте разумно
12.9. Работа как с CC, так и CXX
12.10. Использование CFLAGS
12.11. Библиотеки потоков
12.12. Пожелания
12.13. README.html
12.14. Пометка неустанавливаемого порта как BROKEN, FORBIDDEN или IGNORE
12.14.1. Переменные
12.14.2. Замечания по реализации
12.15. Пометка порта на удаление с DEPRECATED или EXPIRATION_DATE
12.16. Избегайте использования конструкции .error
12.17. Использование sysctl
12.18. Меняющиеся дистрибутивные файлы
12.19. Избегание линуксизмов
12.20. Разное
13. Примерный Makefile
14. Актуализация
14.1. FreshPorts
14.2. Web-интерфейс к хранилищу исходных текстов
14.3. Список рассылки FreeBSD, посвящённый портам
14.4. Кластер построения портов FreeBSD на pointyhat.FreeBSD.org
14.5. Portscout: сканер дистрибутивных файлов портов FreeBSD
14.6. Система мониторинга портов FreeBSD
Список таблиц
5-1. Популярные магические макросы для MASTER_SITES
5-2. Переменные USE_*
5-3. Основные переменные WITH_* и WITHOUT_*
6-1. Переменные для портов, использующих gmake
6-2. Переменные для портов, использующих configure
6-3. Переменные для портов, использующих scons
6-4. Переменные для портов, использующих Perl
6-5. Переменные для портов, использующих X
6-6. Переменные, определяющие зависимости от отдельных частей X11
6-7. Переменные для портов, использующих Qt
6-8. Дополнительные переменные для портов, использующих Qt 4.x
6-9. Доступные библиотечные компоненты Qt 4
6-10. Доступные компоненты инструментов Qt 4
6-11. Доступные компоненты плагинов Qt 4
6-12. Переменные для портов, использующих KDE 3.x
6-13. Доступные компоненты KDE 4
6-14. Переменные, которые которые могут задаваться портами, использующими Java
6-15. Переменные, доступные в портах, использующих Java
6-16. Константы, определённые для портов, использующих Java
6-17. Переменные для портов, использующих Apache
6-18. Используемые переменные при портировании модулей Apache
6-19. Переменные для портов, использующих PHP
6-20. Переменные для портов, которые используют Python
6-21. Наиболее востребованные переменные для портов, которые используют Tcl/Tk
6-22. Полезные переменные для портов, использующих Ruby
6-23. Отобранные переменные только для чтения для портов, использующих Ruby
6-24. Переменные для выбора версии wxWidgets
6-25. Доступные версии wxWidgets
6-26. Определение версии для wxWidgets
6-27. Переменные для выбора предпочитаемых версий wxWidgets
6-28. Доступные компоненты wxWidgets
6-29. Доступные типы зависимости wxWidgets
6-30. Типы зависимости wxWidgets, используемые по умолчанию
6-31. Переменные для выбора версии wxWidgets с Unicode
6-32. Переменные, определенные для портов, использующих wxWidgets
6-33. Допустимые значения WX_CONF_ARGS
6-34. Переменные для выбора версии Lua
6-35. Доступные версии Lua
6-36. Определение версии Lua
6-37. Переменные для выбора предпочитаемых версий Lua
6-38. Доступные компоненты Lua
6-39. Доступные типы зависимости Lua
6-40. Типы зависимости Lua, используемые по умолчанию
6-41. Переменные, определенные для портов, использующих Lua
6-42. Переменные для портов, использующих Mozilla
6-43. Переменные для портов, использующих базы данных
10-1. Префиксы файлов для SVN update
12-1. Значения __FreeBSD_version
Список примеров
5-1. Упрощённое использование MASTER_SITES:n с 1 файлом на каждом сайте
5-2. Упрощённое использование MASTER_SITES:n с более чем 1 файлом на каждом сервере
5-3. Подробное использование MASTER_SITES:n в MASTER_SITE_SUBDIR
5-4. Подробное использование MASTER_SITES:n с запятыми, несколькими файлами, несколькими серверами и несколькими подкаталогами
5-5. Подробное использование MASTER_SITES:n с MASTER_SITE_SOURCEFORGE
5-6. Упрощённое использование MASTER_SITES:n с PATCH_SITES.
5-7. Использование ALWAYS_KEEP_DISTFILES.
5-8. Некорректное объявление необязательной зависимости
5-9. Корректное объявление необязательной зависимости
5-10. Простое использование OPTIONS
5-11. Пример реального использования OPTIONS
5-12. Использование OPTIONS в старом стиле
5-13. Неправильное управление опцией
5-14. Правильное управление опцией
6-1. Пример зависимости Perl
6-2. Пример для USE_XORG
6-3. Использование переменных X11 в порте
6-4. Выбор компонентов Qt 4
6-5. Пример USE_KDE4
6-6. Пример Makefile для классов PEAR
6-7. Выбор компонентов wxWidgets
6-8. Обнаружение установленных версий и компонентов wxWidgets
6-9. Использование переменных wxWidgets в командах
6-10. Выбор версии Lua
6-11. Выбор компонентов Lua
6-12. Обнаружение установленных версий и компонентов Lua
6-13. Указание для порта, где искать Lua
6-14. Использование переменных Lua в командах
12-1. Как избегать использование .error
По вопросам связанным с системой портов для FreeBSD, пишите по адресу <ports@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите по адресу <doc@FreeBSD.org>.