Merge pull request #330634 from r-ryantm/auto-update/circumflex
[NixPkgs.git] / pkgs / servers / gerbera / default.nix
blobd83022930ad04bb6d374b1d3a36295cfe77eaf55
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , fetchpatch
5 , cmake
6 , pkg-config
7 , nixosTests
8   # required
9 , libiconv
10 , libupnp
11 , libuuid
12 , pugixml
13 , spdlog
14 , sqlite
15 , zlib
16   # options
17 , enableMysql ? false
18 , libmysqlclient
19 , enableDuktape ? true
20 , duktape
21 , enableCurl ? true
22 , curl
23 , enableTaglib ? true
24 , taglib
25 , enableLibmagic ? true
26 , file
27 , enableLibmatroska ? true
28 , libmatroska
29 , libebml
30 , enableAvcodec ? false
31 , ffmpeg
32 , enableLibexif ? true
33 , libexif
34 , enableExiv2 ? false
35 , exiv2
36 , enableFFmpegThumbnailer ? false
37 , ffmpegthumbnailer
38 , enableInotifyTools ? true
39 , inotify-tools
42 let
43   libupnp' = libupnp.overrideAttrs (super: rec {
44     cmakeFlags = super.cmakeFlags or [ ] ++ [
45       "-Dblocking_tcp_connections=OFF"
46       "-Dreuseaddr=ON"
47     ];
48   });
50   options = [
51     { name = "AVCODEC"; enable = enableAvcodec; packages = [ ffmpeg ]; }
52     { name = "CURL"; enable = enableCurl; packages = [ curl ]; }
53     { name = "EXIF"; enable = enableLibexif; packages = [ libexif ]; }
54     { name = "EXIV2"; enable = enableExiv2; packages = [ exiv2 ]; }
55     { name = "FFMPEGTHUMBNAILER"; enable = enableFFmpegThumbnailer; packages = [ ffmpegthumbnailer ]; }
56     { name = "INOTIFY"; enable = enableInotifyTools; packages = [ inotify-tools ]; }
57     { name = "JS"; enable = enableDuktape; packages = [ duktape ]; }
58     { name = "MAGIC"; enable = enableLibmagic; packages = [ file ]; }
59     { name = "MATROSKA"; enable = enableLibmatroska; packages = [ libmatroska libebml ]; }
60     { name = "MYSQL"; enable = enableMysql; packages = [ libmysqlclient ]; }
61     { name = "TAGLIB"; enable = enableTaglib; packages = [ taglib ]; }
62   ];
64   inherit (lib) flatten optionals;
67 stdenv.mkDerivation rec {
68   pname = "gerbera";
69   version = "1.12.1";
71   src = fetchFromGitHub {
72     repo = "gerbera";
73     owner = "gerbera";
74     rev = "v${version}";
75     sha256 = "sha256-j5J0u0zIjHY2kP5P8IzN2h+QQSCwsel/iTspad6V48s=";
76   };
78   patches = [
79     # Can be removed on the next bump, see:
80     # https://github.com/gerbera/gerbera/pull/2840.
81     (fetchpatch {
82       name = "gerbera-fmt10.patch";
83       url = "https://github.com/gerbera/gerbera/commit/37957aac0aea776e6f843af2358916f81056a405.patch";
84       hash = "sha256-U7dyFGEbelVZeHYX/4fLOC0k+9pUKZ8qP/LIVXWCMcU=";
85     })
86   ];
88   postPatch = lib.optionalString enableMysql ''
89     substituteInPlace cmake/FindMySQL.cmake \
90       --replace /usr/include/mysql ${lib.getDev libmysqlclient}/include/mariadb \
91       --replace /usr/lib/mysql     ${lib.getLib libmysqlclient}/lib/mariadb
92   '';
94   cmakeFlags = [
95     # systemd service will be generated alongside the service
96     "-DWITH_SYSTEMD=OFF"
97   ] ++ map (e: "-DWITH_${e.name}=${if e.enable then "ON" else "OFF"}") options;
99   nativeBuildInputs = [ cmake pkg-config ];
101   buildInputs = [
102     libiconv
103     libupnp'
104     libuuid
105     pugixml
106     spdlog
107     sqlite
108     zlib
109   ] ++ flatten (builtins.catAttrs "packages" (builtins.filter (e: e.enable) options));
111   passthru.tests = { inherit (nixosTests) mediatomb; };
113   meta = with lib; {
114     homepage = "https://docs.gerbera.io/";
115     description = "UPnP Media Server for 2020";
116     longDescription = ''
117       Gerbera is a Mediatomb fork.
118       It allows to stream your digital media through your home network and consume it on all kinds
119       of UPnP supporting devices.
120     '';
121     license = licenses.gpl2Only;
122     maintainers = with maintainers; [ ardumont ];
123     platforms = platforms.linux;
124     mainProgram = "gerbera";
125   };