Пакет для сборки проектов - astra-cmake-build#

О странице#

astra-cmake-build - пакет для сборки проектов, базирующихся на CMake, за основу был взят функционал в flybuild.

Примечание

flybuild - пакет для сборки проектов, базирующихся на QMake, считается устаревшим.

При разработке astra-cmake-build, некоторые части стали не поддерживаемые, так как есть современные аналоги в CMake и KDE.

Данная страница будет интересна для разработчиков Astra Linux, которые разрабатывают проекты на CMake, а так же разработчикам, которые занимаются перестроением legacy-проектной базы с QMake на CMake.

Примечание

Для использования любого предоставленного функционала на данной странице, нужно установить пакет astra-cmake-build.

Пакеты для сборки#

В debian/contol можно подключать так:

Build-Depends: astra-cmake-build,
...

Примечание

При подключении пакета astra-cmake-build, можно не подключать пакеты cdbs и debhelper, так как они записаны в зависимостях у пакета astra-cmake-build.

Подключение в debian/rules#

В debian/rules можно подключать так:

#!/usr/bin/make -f

include /usr/share/astra-cmake-build/fly.mk

Или так:

#!/usr/bin/make -f

include /usr/share/astra-cmake-build/astra.mk

В последнем случае не будут загружены переменные для Fly.

Переменные для Astra#

В astra-cmake-build есть следующие переменные:

  1. ASTRA_VARS_OS_BASE - базирующийся выпуск Debian для ОС Astra Linux. Аналог переменной FLY_OS_BASE, из flybuild. Принимает следующие значения:

    • stretch

    • buster

    • bookworm

  2. ASTRA_VARS_OS_GENERATION - номер поколения для ОС ||AL||. Аналог переменной FLY_OS_GENERATION, из flybuild. Принимает следующие значения:

    • 6

    • 7

    • 8

  3. ASTRA_VARS_OS_EDITION - версия ОС Astra Linux: Common Edition или Special Edition. Аналог переменной FLY_OS_EDITION, из flybuild. Принимает следующие значения:

    • CE

    • SE

Подключить переменные можно:

find_package(Astra COMPONENTS Vars REQUIRED)

Для примера использования данных переменных, можно посмотреть подпроект astra-cmake-variables-sample, в проекте astra-cmake-samples.

Переменные для Fly#

В astra-cmake-build были портированы переменные fly из flybuild:

Переменная в astra-cmake-build

Переменная из flybuild

Стандартный путь

FLY_VARS_INSTALL_PREFIX

FLY_INSTALL_PREFIX

/usr

FLY_VARS_INSTALL_FULL_BINDIR

FLY_INSTALL_BINS

/usr/bin

FLY_VARS_INSTALL_FULL_LIBDIR

FLY_INSTALL_LIBS

/usr/lib

Не поддерживается

FLY_INSTALL_PLUGINS

Не поддерживается

FLY_VARS_INSTALL_FULL_INCLUDEDIR

FLY_INSTALL_HEADERS

/usr/include/fly

FLY_VARS_INSTALL_FULL_ICONSDIR

FLY_INSTALL_ICONS

/usr/share/icons

FLY_VARS_INSTALL_FULL_FLYDATADIR

FLY_INSTALL_DATA

/usr/share/fly/data

FLY_VARS_INSTALL_FULL_TRANSLATIONSDIR

FLY_INSTALL_TRANSLATIONS

/usr/share/fly/translations

FLY_VARS_INSTALL_FULL_DESKTOP_APP_FILESDIR

FLY_INSTALL_DESKTOP_FILES

/usr/share/applications

FLY_VARS_INSTALL_FULL_HELP_DOCSDIR

FLY_INSTALL_DOCS

/usr/share/doc/fly/qthelp

Подключить переменные можно:

find_package(Fly COMPONENTS Vars REQUIRED)

Для примера использования данных переменных, можно посмотреть подпроект astra-cmake-variables-sample, в проекте astra-cmake-samples.

Генерация иконок из SVG в PNG#

Примечание

Для работы данного функционала, может понадобится вручную подключать пакет librsvg2-bin, в которой находится утилита rsvg-convert.

В astra-cmake-build доступны CMake макросы:

  1. astra_icons_convert_svg2png - конвертирует SVG файл в PNG файлы, список сгенерированных PNG файлов сохраняет в указанную переменную, так же вместо переменной можно указать target;

  2. astra_install_svg2png_icons - конвертирует SVG файл в PNG файлы и устанавливает PNG файлы;

  3. astra_install_svg2png_dir - сканирует файлы в директории, конвертирует найденные SVG файлы в PNG файлы, устанавливает PNG файлы;

Стандартная директория для установки PNG иконок: /usr/share/icons/hicolor/hicolor/.

Для смены директории для установки PNG иконок, то можно задать CMake переменную: ASTRA_INSTALL_SVG2PNG_FULL_ICONSDIR.

Подключить макросы можно:

find_package(Astra COMPONENTS Icons REQUIRED)

Для примера использования данных макросов, можно посмотреть подпроект astra-icons-sample, в проекте astra-cmake-samples.

Подключение к Astra библиотекам#

libpdp#

Примечание

Для работы данного функционала, нужно вручную подключать пакет libpdp-dev.

Подключить библиотеку можно:

find_package(Astra COMPONENTS PDP REQUIRED)

...

target_link_libraries(libpdp-sample
    ...
    Astra::PDP
)

Для примера подключения к библиотеки, можно посмотреть подпроект libpdp-sample, в проекте astra-cmake-samples.

Подключение к Fly библиотекам#

libflycore#

Примечание

Для работы данного функционала, нужно вручную подключать пакет libflycore-dev.

Подключить библиотеку можно:

find_package(Fly COMPONENTS Core REQUIRED)

...

target_link_libraries(libflycore-sample
    ...
    Fly::Core
)

Для примера подключения к библиотеки, можно посмотреть подпроект libflycore-sample, в проекте astra-cmake-samples.

libflyintegration#

Примечание

Для работы данного функционала, нужно вручную подключать пакет libflyintegration-dev.

Подключить библиотеку можно:

find_package(Fly COMPONENTS Integration REQUIRED)

...

target_link_libraries(fly-integration-sample
    ...
    Fly::Integration
)

Для примера подключения к библиотеки, можно посмотреть подпроект fly-integration-sample, в проекте astra-cmake-samples.

libflyuiaux#

Примечание

Для работы данного функционала, нужно вручную подключать пакет libflyui-dev.

Подключить библиотеку можно:

find_package(Fly COMPONENTS UIAux REQUIRED)

...

target_link_libraries(libuiaux-sample
    ...
    Fly::UIAux
)

Для примера подключения к библиотеки, можно посмотреть подпроект libuiaux-sample, в проекте astra-cmake-samples.

libflyuiextra#

Примечание

Для работы данного функционала, нужно вручную подключать пакет libflyui-dev.

Подключить библиотеку можно:

find_package(Fly COMPONENTS UIExtra REQUIRED)

...

target_link_libraries(libuiextra-sample
    ...
    Fly::UIExtra
)

Для примера подключения к библиотеки, можно посмотреть подпроект libuiextra-sample, в проекте astra-cmake-samples.

libflyuinet#

Примечание

Для работы данного функционала, нужно вручную подключать пакет libflyui-dev.

Подключить библиотеку можно:

find_package(Fly COMPONENTS UINet REQUIRED)

...

target_link_libraries(libuinet-sample
    ...
    Fly::UINet
)

Для примера подключения к библиотеки, можно посмотреть подпроект libuinet-sample, в проекте astra-cmake-samples.

Подключение к библиотеке QtSingleApplication#

Примечание

Для работы данного функционала, нужно вручную подключать пакет libqtsingleapplication-dev.

Подключить библиотеку можно:

find_package(Qt5 COMPONENTS SingleApplication REQUIRED)

...

target_link_libraries(qt-single-application-sample
    ...
    Qt5::SingleApplication
)

Для примера подключения к библиотеки, можно посмотреть подпроект qt-single-application-sample, в проекте astra-cmake-samples.

Подключение к библиотеке QtSingleCoreApplication#

Примечание

Для работы данного функционала, нужно вручную подключать пакет libqtsingleapplication-dev.

Подключить библиотеку можно:

find_package(Qt5 COMPONENTS SingleCoreApplication REQUIRED)

...

target_link_libraries(qt-single-core-application-sample
    ...
    Qt5::SingleCoreApplication
)

Для примера подключения к библиотеки, можно посмотреть подпроект qt-single-core-application-sample, в проекте astra-cmake-samples.

Кэширование QML и JavaScript файлов#

Примечание

Для работы данного функционала, нужно вручную подключать пакет qtdeclarative5-dev-tools.

Для генерации кэшированных QML и JavaScript файлов, можно воспользоваться макросами:

  1. astra_qtquick_compiler_convert - кэширует QML и JavaScript файлы, список сгенерированных файлов сохраняет в указанную переменную, так же вместо переменной можно указать target;

  2. astra_qtquick_compiler_install_package - установка пакета kpackage с кэшированными QML и JavaScript файлами. Аналог CMake функции kpackage_install_package(...), который не кэширует файлы.

Подключить макросы можно:

find_package(Qt5 COMPONENTS AstraQuickCompiler REQUIRED)

Примечание

Принцип кэширования заключается в конвертации формата файлов qml, js, mjs в файлы qmlc, jsc, mjsc, соответственно, а так же установка этих кэшированных файлов, вместо оригинальных qml, js, mjs файлов.

При кэшировании используется утилита qmlcachegen.

Использование кэширование файлов позволяет:

  • Скрывать оригинальный код QML и JavaScript файлов;

  • Увеличивает эффективность интерпретации QML и JavaScript файлов;

Если нужно хранить кэшированные QML и JavaScript файлы в ресурсах, то данный функционал не подходит и нужно использовать стандартные функции СMake из Qt: qtquick_compiler_add_resources(…).

Для примера использования данных макросов, можно посмотреть подпроект kcm-qml, в проекте astra-templates.

Запуск unit тестов при сборке пакета#

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

Не поддерживается, на CMake версиях ниже 3.8.0. То есть не поддерживается для Astra Linux 1.6 и поколений ОС ниже.

В astra-cmake-build, при сборке пакета можно включить выполнение тестов с помощью CTest.

Для того, чтобы тесты запускались нужно:

  1. В файле debin/rules задать переменную ASTRA_CTEST_ENABLE с значением 1:

#!/usr/bin/make -f

ASTRA_CTEST_ENABLE ?= 1

include /usr/share/astra-cmake-build/astra.mk

Примечание

Включение переменной ASTRA_CTEST_ENABLE может активировать другие тесты, при сборке пакетов, так как дополнительно регулируется переменная DEB_BUILD_OPTIONS, а точнее удаляется значение nocheck у переменной DEB_BUILD_OPTIONS.

Рекомендуется учитывать этот момент и отключать сторонние тесты, которые не нужны.

  1. В корневом файле проекта CMakeLists.txt, добавить enable_testing():

...

enable_testing()

...
  1. Сделать проект для теста, например в виде QTest - проекта, пример можно взять из проекта «astra-cmake-samples», подпроект «unit-test». Главное, чтобы была CMake команда add_test(…):

...

add_test(NAME Test1 COMMAND Test1)

...
  1. В случае, если тест выполняется с использованием внутренней библиотеки-проекта, то для теста нужно задать переменную LD_LIBRARY_PATH:

...

set_tests_properties(Test1 PROPERTIES
    ENVIRONMENT "LD_LIBRARY_PATH=${libproject_BINARY_DIR}:${LD_LIBRARY_PATH}"
)

...

, где libproject - название проекта для внутренней библиотеки;

  1. Теперь при сборке пакета, будут выполняться тесты. В случае неудачного прохождения теста, то сборка пакета будет завершаться с ошибкой.

Не перенесённое из flybuild в astra-cmake-build#

KAuth#

Весь функционал из flybuild по работе с KAuth, лучше перевести на оригинальный KAuth.

KConfig#

Весь функционал из flybuild по работе с KConfig, лучше перевести на оригинальный KConfig.

QTranslations#

Весь функционал из flybuild по работе с QTranslations, лучше перевести на KDE i18n.