Зависимости#

Приложение должно содержать всё, что нужно программе для работы, но не дублировать то, что уже даёт среда выполнения. aft-app разбирает зависимости пакета, сравнивает их с составом среды и переносит в приложение только недостающее. Этим поведением можно управлять вручную.

Разбор и сравнение со средой выполнения#

Для пакета из репозитория, локального deb и deb по ссылке зависимости разбираются автоматически и сравниваются с составом указанной среды выполнения: то, что среда уже даёт, в приложение не попадает. Для остальных источников (архив, перенос из системы, сборка из исходников) автоматический разбор не выполняется - состав задаётся источником и дополнительными пакетами.

Разбор можно отключить полностью полем манифеста dependencies.analyze: тогда в приложение попадёт только сам пакет и то, что добавлено вручную.

По умолчанию учитываются только обязательные зависимости. Рекомендуемые и предлагаемые пакеты включаются полями манифеста dependencies.includeRecommends и dependencies.includeSuggests (см. Манифест приложения). Флагов командной строки для них нет: сборка по флагам всегда берёт только обязательные зависимости.

Предварительный анализ#

Посмотреть результат разбора, не запуская сборку, позволяет команда analyze. Она показывает не только покрытие зависимостей средой, но и подбирает саму среду и предлагает разрешения песочницы. Подробно - в блоке Предварительный анализ.

aft-app analyze --package myapp --runtime org.astralinux.Platform

Ручное управление составом#

Состав приложения можно дополнить или подправить:

  • --dep <пакет> - доложить пакет с его зависимостями. То, что уже есть в среде выполнения, не дублируется. В манифесте - dependencies.additional.

  • --force-dep <пакет> - включить пакет всегда, даже если он есть в среде (dependencies.force).

  • --exclude-dep <пакет> - не включать указанный пакет (dependencies.exclude).

Все три флага повторяемы и работают для любого источника. В отличие от сборочных зависимостей, эти пакеты попадают в готовое приложение - это его библиотеки времени выполнения.

Сборочные зависимости#

При сборке из исходников в SDK может не хватать заголовков или библиотек. Их подключают только на время сборки; в готовое приложение они не попадают.

  • --build-dep <пакет> - пакет из репозитория.

  • --build-dep-deb <файл> - локальный deb.

  • --build-dep-url <ссылка> - deb по ссылке.

  • --build-dep-tar <архив> - tar-архив с зависимостями.

  • --build-env KEY=VALUE - дополнительная переменная окружения для сборки.

Все флаги повторяемы. Сборочные зависимости распаковываются во временный каталог, подключаемый к песочнице сборки, и инструмент сам настраивает окружение, чтобы компилятор, CMake и pkg-config нашли заголовки и библиотеки. Своими переменными окружения (--build-env) можно дополнить настройку. В манифесте всё это - секция source.sourcedir (поля buildDeps и buildEnv, см. Манифест приложения).

sudo aft-app package --source-dir /path/to/src \
    --build-dep nlohmann-json3-dev \
    --build-dep-tar /opt/extra-libs.tar.xz \
    --build-env "CC=gcc" \
    --build-cmd "cmake -S . -B /tmp/b -DCMAKE_INSTALL_PREFIX=/app && cmake --build /tmp/b -j && cmake --install /tmp/b" \
    --id org.astra.MyApp --name MyApp --command myapp \
    --runtime org.astra.Platform --runtime-version 1.8