todiff: remove
[NixPkgs.git] / pkgs / development / libraries / gstreamer / base / default.nix
blob11bf17aea7a6077b4b8dbe364bb487de44b49e65
1 { stdenv
2 , fetchurl
3 , lib
4 , pkg-config
5 , meson
6 , ninja
7 , gettext
8 , python3
9 , gstreamer
10 , graphene
11 , orc
12 , pango
13 , libtheora
14 , libintl
15 , libopus
16 , isocodes
17 , libjpeg
18 , libpng
19 , libvisual
20 , tremor # provides 'virbisidec'
21 , libGL
22 , withIntrospection ? lib.meta.availableOn stdenv.hostPlatform gobject-introspection && stdenv.hostPlatform.emulatorAvailable buildPackages
23 , buildPackages
24 , gobject-introspection
25 , enableX11 ? stdenv.hostPlatform.isLinux
26 , libXext
27 , libXi
28 , libXv
29 , libdrm
30 , enableWayland ? stdenv.hostPlatform.isLinux
31 , wayland-scanner
32 , wayland
33 , wayland-protocols
34 , enableAlsa ? stdenv.hostPlatform.isLinux
35 , alsa-lib
36 # TODO: fix once x86_64-darwin sdk updated
37 , enableCocoa ? (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64)
38 , Cocoa
39 , OpenGL
40 , enableGl ? (enableX11 || enableWayland || enableCocoa)
41 , enableCdparanoia ? (!stdenv.hostPlatform.isDarwin)
42 , cdparanoia
43 , glib
44 , testers
45 # Checks meson.is_cross_build(), so even canExecute isn't enough.
46 , enableDocumentation ? stdenv.hostPlatform == stdenv.buildPlatform
47 , hotdoc
50 stdenv.mkDerivation (finalAttrs: {
51   pname = "gst-plugins-base";
52   version = "1.24.10";
54   outputs = [ "out" "dev" ];
56   separateDebugInfo = true;
58   src = let
59     inherit (finalAttrs) pname version;
60   in fetchurl {
61     url = "https://gstreamer.freedesktop.org/src/${pname}/${pname}-${version}.tar.xz";
62     hash = "sha256-69V7G+kkxuJPMn3VW6udj7quvl4dyPynhBgqsrEtI+s=";
63   };
65   strictDeps = true;
66   depsBuildBuild = [
67     pkg-config
68   ];
69   nativeBuildInputs = [
70     meson
71     ninja
72     pkg-config
73     python3
74     gettext
75     orc
76     glib
77     gstreamer
78   ] ++ lib.optionals withIntrospection [
79     gobject-introspection
80   ] ++ lib.optionals enableDocumentation [
81     hotdoc
82   ] ++ lib.optionals enableWayland [
83     wayland-scanner
84   ];
86   buildInputs = [
87     graphene
88     orc
89     libtheora
90     libintl
91     libopus
92     isocodes
93     libpng
94     libjpeg
95     tremor
96     pango
97   ] ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
98     libdrm
99     libGL
100     libvisual
101   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
102     OpenGL
103   ] ++ lib.optionals enableAlsa [
104     alsa-lib
105   ] ++ lib.optionals enableX11 [
106     libXext
107     libXi
108     libXv
109   ] ++ lib.optionals enableWayland [
110     wayland
111     wayland-protocols
112   ] ++ lib.optional enableCocoa Cocoa
113     ++ lib.optional enableCdparanoia cdparanoia;
115   propagatedBuildInputs = [
116     gstreamer
117   ] ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
118     libdrm
119   ];
121   mesonFlags = [
122     "-Dexamples=disabled" # requires many dependencies and probably not useful for our users
123     # See https://github.com/GStreamer/gst-plugins-base/blob/d64a4b7a69c3462851ff4dcfa97cc6f94cd64aef/meson_options.txt#L15 for a list of choices
124     "-Dgl_winsys=${lib.concatStringsSep "," (lib.optional enableX11 "x11" ++ lib.optional enableWayland "wayland" ++ lib.optional enableCocoa "cocoa")}"
125     (lib.mesonEnable "introspection" withIntrospection)
126     (lib.mesonEnable "doc" enableDocumentation)
127   ] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
128     "-Dtests=disabled"
129   ]
130   ++ lib.optional (!enableX11) "-Dx11=disabled"
131   # TODO How to disable Wayland?
132   ++ lib.optional (!enableGl) "-Dgl=disabled"
133   ++ lib.optional (!enableAlsa) "-Dalsa=disabled"
134   ++ lib.optional (!enableCdparanoia) "-Dcdparanoia=disabled"
135   ++ lib.optionals stdenv.hostPlatform.isDarwin [
136     "-Ddrm=disabled"
137     "-Dlibvisual=disabled"
138   ];
140   postPatch = ''
141     patchShebangs \
142       scripts/meson-pkg-config-file-fixup.py \
143       scripts/extract-release-date-from-doap-file.py
144   '';
146   # This package has some `_("string literal")` string formats
147   # that trip up clang with format security enabled.
148   hardeningDisable = [ "format" ];
150   doCheck = false; # fails, wants DRI access for OpenGL
152   passthru = {
153     # Downstream `gst-*` packages depending on `gst-plugins-base`
154     # have meson build options like 'gl' etc. that depend
155     # on these features being built in `-base`.
156     # If they are not built here, then the downstream builds
157     # will fail, as they, too, use `-Dauto_features=enabled`
158     # which would enable these options unconditionally.
159     # That means we must communicate to these downstream packages
160     # if the `-base` enabled these options or not, so that
161     # the can enable/disable those features accordingly.
162     # The naming `*Enabled` vs `enable*` is intentional to
163     # distinguish inputs from outputs (what is to be built
164     # vs what was built) and to make them easier to search for.
165     glEnabled = enableGl;
166     waylandEnabled = enableWayland;
167   };
169   passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
171   meta = with lib; {
172     description = "Base GStreamer plug-ins and helper libraries";
173     homepage = "https://gstreamer.freedesktop.org";
174     license = licenses.lgpl2Plus;
175     pkgConfigModules = [
176       "gstreamer-audio-1.0"
177       "gstreamer-base-1.0"
178       "gstreamer-net-1.0"
179       "gstreamer-video-1.0"
180     ];
181     platforms = platforms.unix;
182     maintainers = with maintainers; [ matthewbauer ];
183   };