Сборка v4l-utils. Система сборки meson

Недавно для популярного пакета для работы с мультимедиа устройствами (в основном, с камерами) появилась возможность сборки через meson. В данной статье мы рассмотрим как это осуществить. Собирать будем в Ubuntu 22, но подойдёт и любой другой популярный современный дистрибутив.

Создадим базовый каталог v4l-utilsFromGit, который будет содержать в себе три подкаталога: каталог v4l-utils с исходными кодами, каталог build с промежуточными результатами сборки и каталог build_artifacts с результатами сборки (исполняемыми файлами).

mkdir ~/v4l-utilsFromGit && cd ~/v4l-utilsFromGit  mkdir build build_artifacts  git clone https://git.linuxtv.org/v4l-utils.git v4l-utils

Проведем инициализацию. Во время этого шага meson проверит конфигурацию нашей системы, удостоверится что для сборки есть необходимые средства (компилятор и т.п.)
meson setup build/ v4l-utils/

Вывод meson setup на Ubuntu 22 server

$ meson setup build/ v4l-utils/
The Meson build system
Version: 0.63.2
Source dir: /home/q/v4l-utilsFromGit/v4l-utils
Build dir: /home/q/v4l-utilsFromGit/build
Build type: native build
Project name: v4l-utils
Project version: 1.25.0
C compiler for the host machine: cc (gcc 12.2.0 «cc (Ubuntu 12.2.0-3ubuntu1) 12.2.0»)
C linker for the host machine: cc ld.bfd 2.39
C++ compiler for the host machine: c++ (gcc 12.2.0 «c++ (Ubuntu 12.2.0-3ubuntu1) 12.2.0»)
C++ linker for the host machine: c++ ld.bfd 2.39
Host machine cpu family: x86_64
Host machine cpu: x86_64
Compiler for C supports link arguments -m32: NO
Compiler for C supports arguments -fvisibility=hidden: YES
Compiler for C supports function attribute visibility:default: YES
Program bash found: YES (/usr/bin/bash)
Program clang found: NO
Program doxygen found: NO
Program grep found: YES (/usr/bin/grep)
Program perl found: YES (/usr/bin/perl)
Did not find pkg-config by name ‘pkg-config’
Found Pkg-config: NO
Did not find CMake ‘cmake’
Found CMake: NO
Run-time dependency alsa found: NO (tried pkgconfig and cmake)
Run-time dependency gl found: NO (tried pkgconfig and system)
Run-time dependency glu found: NO (tried pkgconfig and cmake)
Run-time dependency json-c found: NO (tried pkgconfig and cmake)
Library dl found: YES
Library elf found: NO
Library m found: YES
Library rt found: YES
qmake found: NO need [‘>= 5’, ‘< 6’]
Run-time dependency qt5 (modules: Core, Gui, OpenGL, Widgets) found: NO (tried pkgconfig and config-tool)
Run-time dependency libbpf found: NO (tried pkgconfig and cmake)
sdl2-config found: NO
Run-time dependency sdl2 found: NO (tried pkgconfig and config-tool)
Has header «SDL2/SDL.h» : NO
Run-time dependency sdl2_image found: NO (tried pkgconfig and cmake)
Has header «SDL2/SDL_image.h» : NO
Run-time dependency threads found: YES
Run-time dependency x11 found: NO (tried pkgconfig and cmake)
Run-time dependency xmlrpc found: NO (tried pkgconfig and cmake)
Checking for function «fork» : YES
Has header «linux/i2c-dev.h» : YES
Checking for function «klogctl» : YES
Checking for function «secure_getenv» : YES
Checking for function «__secure_getenv» : NO
Has header «sys/klog.h» : YES
Header «execinfo.h» has symbol «backtrace» : YES
Checking for function «argp_parse» : YES
Checking for function «strerrorname_np» : YES
Run-time dependency iconv found: YES
Has header «gconv.h» : YES
Library JIS found: YES
Library JISX0213 found: YES
Run-time dependency libjpeg found: NO (tried pkgconfig and cmake)
Run-time dependency systemd found: NO (tried pkgconfig and cmake)
Run-time dependency libudev found: NO (tried pkgconfig and cmake)
Run-time dependency udev found: NO (tried pkgconfig and cmake)
Program git found: YES (/usr/bin/git)
Program msgfmt found: NO
v4l-utils/libdvbv5-po/meson.build:2: WARNING: Gettext not found, all translation (po) targets will be ignored.
v4l-utils/v4l-utils-po/meson.build:2: WARNING: Gettext not found, all translation (po) targets will be ignored.
Configuring cec-gen-dummy.stamp with command
Configuring config.h using configuration
Configuring cec-ctl.1 using configuration
Configuring cec-follower.1 using configuration
Configuring ir-ctl.1 using configuration
Configuring ir-keytable.1 using configuration
Configuring rc_keymap.5 using configuration
Configuring v4l2-ctl.1 using configuration
Configuring cec-compliance.1 using configuration
Configuring v4l2-compliance.1 using configuration
Configuring v4l-utils.spec using configuration
Build targets in project: 42
NOTICE: Future-deprecated features used:

  • 0.60.0: {‘install_subdir with empty directory’}

v4l-utils 1.25.0

Dependencies
ALSA : NO
GL : NO
GLU : NO
JSON-C : NO
Qt5 : NO
without QtGL
SDL : NO
X11 : NO
gconv : YES
iconv : YES
libjpeg : NO
libudev : NO
threads : YES

Directories
udevdir : /lib/udev

Libraries
libdvbv5 : NO
v4l-plugins : YES
v4l-wrappers : YES

Applications
BPF IR decoders : NO
qv4l2 : NO
qvidcap : NO
v4l-utils : YES
v4l2-compliance : YES
with libv4l
v4l2-compliance-32: NO
v4l2-ctl : YES
with libv4l
v4l2-ctl-32 : NO
v4l2-tracer : NO

Found ninja-1.11.0 at /usr/bin/ninja

Посмотрим на текущую конфигурацию (какие настройки доступны и какие из них применены)
meson configure build/

Далее зададим некоторые опции. Если оставить shared как подразумевает оригинальный INSTALL.md, то при попытке запуска собранного приложения вылетит ошибка
v4l2-ctl: error while loading shared libraries: libv4l2.so.0: cannot open shared object file: No such file or directory
Напишите в комментариях как собрать работающее приложение с опцией shared.

А пока что переключим на static чтобы всё работало.
meson configure build/ -Ddefault_library=static

Вновь посмотрим на текущую конфигурацию, проверим изменение shared на static.
meson configure build/

Далее запустим сборку. Результат сборки будет помещён по пути destdir.
meson install --destdir ../build_artifacts/ -C build/

Можно проверить, что утилита запускается
~/v4l-utilsFromGit/build_artifacts/usr/local/bin/v4l2-ctl --help

Результат вывода

Результат вывода


ссылка на оригинал статьи https://habr.com/ru/post/724818/

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *