depot/third_party/nixpkgs/pkgs/by-name/ge/gerbera/package.nix

178 lines
3.7 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
fetchpatch,
cmake,
pkg-config,
nixosTests,
# required
libiconv,
libupnp,
libuuid,
pugixml,
spdlog,
sqlite,
zlib,
# options
enableMysql ? false,
libmysqlclient,
enableDuktape ? true,
duktape,
enableCurl ? true,
curl,
enableTaglib ? true,
taglib,
enableLibmagic ? true,
file,
enableLibmatroska ? true,
libmatroska,
libebml,
enableAvcodec ? false,
ffmpeg,
enableLibexif ? true,
libexif,
enableExiv2 ? false,
exiv2,
enableFFmpegThumbnailer ? false,
ffmpegthumbnailer,
enableInotifyTools ? true,
inotify-tools,
}:
let
libupnp' = libupnp.overrideAttrs (super: rec {
cmakeFlags = super.cmakeFlags or [ ] ++ [
"-Dblocking_tcp_connections=OFF"
"-Dreuseaddr=ON"
];
});
options = [
{
name = "AVCODEC";
enable = enableAvcodec;
packages = [ ffmpeg ];
}
{
name = "CURL";
enable = enableCurl;
packages = [ curl ];
}
{
name = "EXIF";
enable = enableLibexif;
packages = [ libexif ];
}
{
name = "EXIV2";
enable = enableExiv2;
packages = [ exiv2 ];
}
{
name = "FFMPEGTHUMBNAILER";
enable = enableFFmpegThumbnailer;
packages = [ ffmpegthumbnailer ];
}
{
name = "INOTIFY";
enable = enableInotifyTools;
packages = [ inotify-tools ];
}
{
name = "JS";
enable = enableDuktape;
packages = [ duktape ];
}
{
name = "MAGIC";
enable = enableLibmagic;
packages = [ file ];
}
{
name = "MATROSKA";
enable = enableLibmatroska;
packages = [
libmatroska
libebml
];
}
{
name = "MYSQL";
enable = enableMysql;
packages = [ libmysqlclient ];
}
{
name = "TAGLIB";
enable = enableTaglib;
packages = [ taglib ];
}
];
inherit (lib) flatten optionals;
in
stdenv.mkDerivation rec {
pname = "gerbera";
version = "1.12.1";
src = fetchFromGitHub {
repo = "gerbera";
owner = "gerbera";
rev = "v${version}";
sha256 = "sha256-j5J0u0zIjHY2kP5P8IzN2h+QQSCwsel/iTspad6V48s=";
};
patches = [
# Can be removed on the next bump, see:
# https://github.com/gerbera/gerbera/pull/2840.
(fetchpatch {
name = "gerbera-fmt10.patch";
url = "https://github.com/gerbera/gerbera/commit/37957aac0aea776e6f843af2358916f81056a405.patch";
hash = "sha256-U7dyFGEbelVZeHYX/4fLOC0k+9pUKZ8qP/LIVXWCMcU=";
})
];
postPatch = lib.optionalString enableMysql ''
substituteInPlace cmake/FindMySQL.cmake \
--replace /usr/include/mysql ${lib.getDev libmysqlclient}/include/mariadb \
--replace /usr/lib/mysql ${lib.getLib libmysqlclient}/lib/mariadb
'';
cmakeFlags = [
# systemd service will be generated alongside the service
"-DWITH_SYSTEMD=OFF"
] ++ map (e: "-DWITH_${e.name}=${if e.enable then "ON" else "OFF"}") options;
nativeBuildInputs = [
cmake
pkg-config
];
buildInputs = [
libiconv
libupnp'
libuuid
pugixml
spdlog
sqlite
zlib
] ++ flatten (builtins.catAttrs "packages" (builtins.filter (e: e.enable) options));
passthru.tests = { inherit (nixosTests) mediatomb; };
meta = with lib; {
homepage = "https://docs.gerbera.io/";
changelog = "https://github.com/gerbera/gerbera/releases/tag/v${version}";
description = "UPnP Media Server for 2020";
longDescription = ''
Gerbera is a Mediatomb fork.
It allows to stream your digital media through your home network and consume it on all kinds
of UPnP supporting devices.
'';
license = licenses.gpl2Only;
maintainers = with maintainers; [ ardumont ];
platforms = platforms.linux;
mainProgram = "gerbera";
};
}