python312Packages.log-symbols: refactor (#369856)
[NixPkgs.git] / pkgs / development / libraries / gstreamer / good / default.nix
blobf9da5f6ba128ae3fd5a8519d641d589fd9df10b0
1 { lib, stdenv
2 , fetchurl
3 , substituteAll
4 , meson
5 , nasm
6 , ninja
7 , pkg-config
8 , python3
9 , gst-plugins-base
10 , orc
11 , bzip2
12 , gettext
13 , libGL
14 , libv4l
15 , libdv
16 , libavc1394
17 , libiec61883
18 , libvpx
19 , libdrm
20 , speex
21 , opencore-amr
22 , flac
23 , taglib
24 , libshout
25 , cairo
26 , gdk-pixbuf
27 , aalib
28 , libcaca
29 , libsoup_3
30 , libpulseaudio
31 , libintl
32 , libxml2
33 , Cocoa
34 , lame
35 , mpg123
36 , twolame
37 , gtkSupport ? false, gtk3
38 , qt5Support ? false, qt5
39 , qt6Support ? false, qt6
40 , raspiCameraSupport ? false, libraspberrypi
41 , enableJack ? true, libjack2
42 , enableX11 ? stdenv.hostPlatform.isLinux, xorg
43 , ncurses
44 , enableWayland ? stdenv.hostPlatform.isLinux
45 , wayland
46 , wayland-protocols
47 , libgudev
48 , wavpack
49 , glib
50 , openssl
51 # Checks meson.is_cross_build(), so even canExecute isn't enough.
52 , enableDocumentation ? stdenv.hostPlatform == stdenv.buildPlatform, hotdoc
55 # MMAL is not supported on aarch64, see:
56 # https://github.com/raspberrypi/userland/issues/688
57 assert raspiCameraSupport -> (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch32);
59 stdenv.mkDerivation rec {
60   pname = "gst-plugins-good";
61   version = "1.24.10";
63   outputs = [ "out" "dev" ];
65   src = fetchurl {
66     url = "https://gstreamer.freedesktop.org/src/${pname}/${pname}-${version}.tar.xz";
67     hash = "sha256-/OdI+mbXqO4fsmFInlnQHj+nh2I9bVw1BoQW/nzQrLM=";
68   };
70   patches = [
71     # Reenable dynamic loading of libsoup on Darwin and use a different approach to do it.
72     ./souploader-darwin.diff
73     # dlopen libsoup_3 with an absolute path
74     (substituteAll {
75       src = ./souploader.diff;
76       nixLibSoup3Path = "${lib.getLib libsoup_3}/lib";
77     })
78   ];
80   strictDeps = true;
82   depsBuildBuild = [ pkg-config ];
84   nativeBuildInputs = [
85     pkg-config
86     python3
87     meson
88     ninja
89     gettext
90     nasm
91     orc
92     libshout
93     glib
94   ] ++ lib.optionals enableDocumentation [
95     hotdoc
96   ] ++ lib.optionals qt5Support (with qt5; [
97     qtbase
98     qttools
99   ]) ++ lib.optionals qt6Support (with qt6; [
100     qtbase
101     qttools
102   ]) ++ lib.optionals enableWayland [
103     wayland-protocols
104   ];
106   buildInputs = [
107     gst-plugins-base
108     orc
109     bzip2
110     libdv
111     libvpx
112     speex
113     opencore-amr
114     flac
115     taglib
116     cairo
117     gdk-pixbuf
118     aalib
119     libcaca
120     libsoup_3
121     libshout
122     libxml2
123     lame
124     mpg123
125     twolame
126     libintl
127     ncurses
128     wavpack
129     openssl
130   ] ++ lib.optionals raspiCameraSupport [
131     libraspberrypi
132   ] ++ lib.optionals enableX11 [
133     xorg.libXext
134     xorg.libXfixes
135     xorg.libXdamage
136     xorg.libXtst
137     xorg.libXi
138   ] ++ lib.optionals gtkSupport [
139     # for gtksink
140     gtk3
141   ] ++ lib.optionals qt5Support (with qt5; [
142     qtbase
143     qtdeclarative
144     qtwayland
145     qtx11extras
146   ]) ++ lib.optionals qt6Support (with qt6; [
147     qtbase
148     qtdeclarative
149     qtwayland
150   ]) ++ lib.optionals stdenv.hostPlatform.isDarwin [
151     Cocoa
152   ] ++ lib.optionals stdenv.hostPlatform.isLinux [
153     libdrm
154     libGL
155     libv4l
156     libpulseaudio
157     libavc1394
158     libiec61883
159     libgudev
160   ] ++ lib.optionals enableWayland [
161     wayland
162   ] ++ lib.optionals enableJack [
163     libjack2
164   ];
166   mesonFlags = [
167     "-Dexamples=disabled" # requires many dependencies and probably not useful for our users
168     "-Dglib-asserts=disabled" # asserts should be disabled on stable releases
169     (lib.mesonEnable "doc" enableDocumentation)
170   ] ++ lib.optionals (!qt5Support) [
171     "-Dqt5=disabled"
172   ] ++ lib.optionals (!qt6Support) [
173     "-Dqt6=disabled"
174   ] ++ lib.optionals (!gtkSupport) [
175     "-Dgtk3=disabled"
176   ] ++ lib.optionals (!enableX11) [
177     "-Dximagesrc=disabled" # Linux-only
178   ] ++ lib.optionals (!enableJack) [
179     "-Djack=disabled"
180   ] ++ lib.optionals (!stdenv.hostPlatform.isLinux) [
181     "-Ddv1394=disabled" # Linux only
182     "-Doss4=disabled" # Linux only
183     "-Doss=disabled" # Linux only
184     "-Dpulse=disabled" # TODO check if we can keep this enabled
185     "-Dv4l2-gudev=disabled" # Linux-only
186     "-Dv4l2=disabled" # Linux-only
187   ] ++ (if raspiCameraSupport then [
188     "-Drpi-lib-dir=${libraspberrypi}/lib"
189   ] else [
190     "-Drpicamsrc=disabled"
191   ]);
193   postPatch = ''
194     patchShebangs \
195       scripts/extract-release-date-from-doap-file.py
196   '';
198   NIX_LDFLAGS = [
199     # linking error on Darwin
200     # https://github.com/NixOS/nixpkgs/pull/70690#issuecomment-553694896
201     "-lncurses"
202   ];
204   # fails 1 tests with "Unexpected critical/warning: g_object_set_is_valid_property: object class 'GstRtpStorage' has no property named ''"
205   doCheck = false;
207   # must be explicitly set since 5590e365
208   dontWrapQtApps = true;
210   meta = with lib; {
211     description = "GStreamer Good Plugins";
212     homepage = "https://gstreamer.freedesktop.org";
213     longDescription = ''
214       a set of plug-ins that we consider to have good quality code,
215       correct functionality, our preferred license (LGPL for the plug-in
216       code, LGPL or LGPL-compatible for the supporting library).
217     '';
218     license = licenses.lgpl2Plus;
219     platforms = platforms.linux ++ platforms.darwin;
220     maintainers = with maintainers; [ matthewbauer ];
221   };