{ stdenv , fetchurl , meson , ninja , gettext , config , pkgconfig , python3 , gst-plugins-base , orc , gobject-introspection , enableZbar ? true , faacSupport ? false , faac ? null , faad2 , libass , libkate , libmms , librdf , ladspaH , libnice , webrtc-audio-processing , lilv , lv2 , serd , sord , sratom , libbs2b , libmodplug , mpeg2dec , openjpeg , libopus , librsvg , bluez , chromaprint , curl , directfb , fdk_aac , flite , gsm , libaom , libdc1394 , libde265 , libdrm , libdvdnav , libdvdread , libgudev , libofa , libsndfile , libusb1 , neon , openal , opencv4 , openexr , openh264 , pango , rtmpdump , sbc , soundtouch , spandsp , srtp , zbar , wayland-protocols , wildmidi , fluidsynth , libvdpau , wayland , libwebp , xvidcore , gnutls , mjpegtools , libGLU_combined , libintl , libgme , openssl , x265 , libxml2 , srt }: assert faacSupport -> faac != null; let inherit (stdenv.lib) optional optionals; in stdenv.mkDerivation rec { pname = "gst-plugins-bad"; version = "1.16.1"; outputs = [ "out" "dev" ]; src = fetchurl { url = "${meta.homepage}/src/${pname}/${pname}-${version}.tar.xz"; sha256 = "1dddqacxgp77f3nl153x5a6139wdphc9phds2fpqb2cv6faiqj2n"; }; patches = [ ./fix_pkgconfig_includedir.patch ]; nativeBuildInputs = [ meson ninja pkgconfig python3 gettext gobject-introspection ] ++ optionals stdenv.isLinux [ wayland-protocols ]; buildInputs = [ gst-plugins-base orc faad2 libass libkate libmms libnice webrtc-audio-processing # webrtc libbs2b ladspaH librdf # ladspa plug-in lilv lv2 serd sord sratom # lv2 plug-in libmodplug mpeg2dec openjpeg libopus librsvg bluez chromaprint curl.dev directfb fdk_aac flite gsm libaom libdc1394 libde265 libdrm libdvdnav libdvdread libgudev libofa libsndfile libusb1 neon openal opencv4 openexr openh264 rtmpdump pango sbc soundtouch spandsp srtp fluidsynth libvdpau libwebp xvidcore gnutls libGLU_combined libgme openssl x265 libxml2 libintl srt ] ++ optionals enableZbar [ zbar ] ++ optionals faacSupport [ faac ] ++ optionals stdenv.isLinux [ wayland ] ++ optionals (!stdenv.isDarwin) [ # wildmidi requires apple's OpenAL # TODO: package apple's OpenAL, fix wildmidi, include on Darwin wildmidi # TODO: mjpegtools uint64_t is not compatible with guint64 on Darwin mjpegtools ]; mesonFlags = [ "-Dexamples=disabled" # requires many dependencies and probably not useful for our users "-Ddts=disabled" # required `libdca` library not packaged in nixpkgs as of writing, and marked as "BIG FAT WARNING: libdca is still in early development" "-Dzbar=${if enableZbar then "enabled" else "disabled"}" "-Dfaac=${if faacSupport then "enabled" else "disabled"}" "-Diqa=disabled" # required `dssim` library not packaging in nixpkgs as of writing "-Dmsdk=disabled" # not packaged in nixpkgs as of writing / no Windows support # As of writing, with `libmpcdec` in `buildInputs` we get # "Could not find libmpcdec header files, but Musepack was enabled via options" # This is likely because nixpkgs has the header in libmpc/mpcdec.h # instead of mpc/mpcdec.h, like Arch does. The situation is not trivial. # There are apparently 2 things called `libmpcdec` from the same author: # * http://svn.musepack.net/libmpcdec/trunk/src/ # * http://svn.musepack.net/libmpc/trunk/include/mpc/ # Fixing it likely requires to first figure out with upstream which one # is needed, and then patching upstream to find it (though it probably # already works on Arch?). "-Dmusepack=disabled" "-Dopenmpt=disabled" # `libopenmpt` not packaged in nixpkgs as of writing "-Dopenni2=disabled" # not packaged in nixpkgs as of writing "-Dopensles=disabled" # not packaged in nixpkgs as of writing "-Dsctp=disabled" # required `usrsctp` library not packaged in nixpkgs as of writing "-Dteletext=disabled" # required `zvbi` library not packaged in nixpkgs as of writing "-Dtinyalsa=disabled" # not packaged in nixpkgs as of writing "-Dvoaacenc=disabled" # required `vo-aacenc` library not packaged in nixpkgs as of writing "-Dvoamrwbenc=disabled" # required `vo-amrwbenc` library not packaged in nixpkgs as of writing "-Dvulkan=disabled" # Linux-only, and we haven't figured out yet which of the vulkan nixpkgs it needs "-Dwasapi=disabled" # not packaged in nixpkgs as of writing / no Windows support "-Dwpe=disabled" # required `wpe-webkit` library not packaged in nixpkgs as of writing # Requires CUDA and we haven't figured out how to make Meson find CUDA yet; # it probably searches via pkgconfig, for which we have no .pc files, # see https://github.com/NixOS/nixpkgs/issues/54395 "-Dnvdec=disabled" "-Dnvenc=disabled" ]; doCheck = false; # fails 20 out of 58 tests, expensive meta = with stdenv.lib; { description = "GStreamer Bad Plugins"; homepage = "https://gstreamer.freedesktop.org"; longDescription = '' a set of plug-ins that aren't up to par compared to the rest. They might be close to being good quality, but they're missing something - be it a good code review, some documentation, a set of tests, a real live maintainer, or some actual wide use. ''; license = licenses.lgpl2Plus; platforms = platforms.linux ++ platforms.darwin; maintainers = with maintainers; [ matthewbauer ]; }; }