178 lines
3.7 KiB
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";
|
|
};
|
|
}
|