Files
nixpkgs/pkgs/by-name/v4/v4l-utils/package.nix
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

147 lines
3.7 KiB
Nix
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
stdenv,
lib,
fetchurl,
glibc,
clang,
doxygen,
meson,
ninja,
pkg-config,
perl,
argp-standalone,
libjpeg,
json_c,
libbpf,
libelf,
udev,
udevCheckHook,
withUtils ? true,
withGUI ? true,
alsa-lib,
libGLU,
qt6Packages,
linuxHeaders,
buildPackages,
}:
# See libv4l in all-packages.nix for the libs only (overrides alsa, QT)
let
withQt = withUtils && withGUI;
in
# we need to use stdenv.mkDerivation in order not to pollute the libv4ls closure with Qt
stdenv.mkDerivation (finalAttrs: {
pname = "v4l-utils";
version = "1.30.1";
src = fetchurl {
url = "https://linuxtv.org/downloads/v4l-utils/v4l-utils-${finalAttrs.version}.tar.xz";
hash = "sha256-wc9UnC7DzznrXse/FXMTSeYbJqIbXpY5IttCIzO64Zc=";
};
patches = [
# Has been submitted upstream, but can't fetchurl/fetchpatch
# because patch doesn't know how to decode quoted-printable.
# https://lore.kernel.org/all/4dgJekVdP7lLqOQ6JNW05sRHSkRmLLMMQnEn8NGUHPoHDn4SBkaGlHUW89vkJJu3IeFDAh3p6mlplTJJlWJx8V4rr62-hd83quCJ2sIuqoA=@protonmail.com/
./musl.patch
];
outputs = [
"out"
]
++ lib.optional withUtils "lib"
++ [
"doc"
"dev"
];
mesonFlags = [
(lib.mesonBool "v4l-utils" withUtils)
(lib.mesonEnable "gconv" stdenv.hostPlatform.isGnu)
(lib.mesonEnable "qv4l2" withQt)
(lib.mesonEnable "qvidcap" withQt)
(lib.mesonOption "udevdir" "${placeholder "out"}/lib/udev")
]
++ lib.optionals stdenv.hostPlatform.isGnu [
(lib.mesonOption "gconvsysdir" "${glibc.out}/lib/gconv")
]
++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
# BPF support fail to cross compile, unable to find `linux/lirc.h`
(lib.mesonOption "bpf" "disabled")
];
postFixup = ''
# Create symlink for V4l1 compatibility
ln -s "$dev/include/libv4l1-videodev.h" "$dev/include/videodev.h"
'';
nativeBuildInputs = [
clang
doxygen
meson
ninja
pkg-config
perl
udevCheckHook
]
++ lib.optional withQt qt6Packages.wrapQtAppsHook;
buildInputs = [
json_c
libbpf
libelf
udev
]
++ lib.optional (!stdenv.hostPlatform.isGnu) argp-standalone
++ lib.optionals withQt [
alsa-lib
qt6Packages.qt5compat
qt6Packages.qtbase
libGLU
];
hardeningDisable = [ "zerocallusedregs" ];
propagatedBuildInputs = [ libjpeg ];
# these two `substituteInPlace` have been sent upstream as patches
# https://lore.kernel.org/linux-media/867c4d2e-7871-4280-8c89-d4b654597f32@public-files.de/T/
# they might fail and have to be removed once the patches get accepted
postPatch = ''
patchShebangs utils/
substituteInPlace \
lib/libdvbv5/meson.build \
--replace-fail "install_dir: 'include/libdvbv5'" "install_dir: get_option('includedir') / 'libdvbv5'"
substituteInPlace \
meson.build \
--replace-fail "get_option('datadir') / 'locale'" "get_option('localedir')"
'';
# Meson unable to find moc/uic/rcc in case of cross-compilation
# https://github.com/mesonbuild/meson/issues/13018
preConfigure = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
export PATH=${buildPackages.qt6Packages.qtbase}/libexec:$PATH
'';
enableParallelBuilding = true;
doInstallCheck = true;
meta = with lib; {
description = "V4L utils and libv4l, provide common image formats regardless of the v4l device";
homepage = "https://linuxtv.org/projects.php";
changelog = "https://git.linuxtv.org/v4l-utils.git/plain/ChangeLog?h=v4l-utils-${finalAttrs.version}";
license = with licenses; [
lgpl21Plus
gpl2Plus
];
maintainers = with maintainers; [
codyopel
yarny
];
platforms = platforms.linux;
};
})