Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
186 changes: 169 additions & 17 deletions pkgs/development/libraries/gstreamer/bad/default.nix
Original file line number Diff line number Diff line change
@@ -1,10 +1,43 @@
{ stdenv, fetchurl, fetchpatch, meson, ninja, gettext
, config
, pkgconfig, python3, gst-plugins-base, orc
, gobject-introspection
, 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
, darwin
, directfb
, fdk_aac
, flite
, gsm
, libaom
, libdc1394
, libde265
, libdrm
, libdvdnav
, libdvdread
, libgudev
, libofa
, libsndfile
, libusb1
, neon
, openal
, opencv3
, openexr
, openh264
, pango
, rtmpdump
, sbc
, soundtouch
, spandsp
, srtp
, zbar
, wayland-protocols
, wildmidi, fluidsynth, libvdpau, wayland
, libwebp, xvidcore, gnutls, mjpegtools
, libGLU_combined, libintl, libgme
Expand All @@ -15,11 +48,11 @@
assert faacSupport -> faac != null;

let
inherit (stdenv.lib) optional;
inherit (stdenv.lib) optional optionals;
in
stdenv.mkDerivation rec {
name = "gst-plugins-bad-${version}";
version = "1.14.4";
version = "1.16.0";

meta = with stdenv.lib; {
description = "Gstreamer Bad Plugins";
Expand All @@ -40,50 +73,169 @@ stdenv.mkDerivation rec {
'';

patches = [
./fix_pkgconfig_includedir.patch
# Remove when https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/merge_requests/312 is merged and available to us
(fetchpatch {
url = "https://bug794856.bugzilla-attachments.gnome.org/attachment.cgi?id=370409";
sha256 = "0hy0rcn35alq65yqwri4fqjz2hf3nyyg5c7rnndk51msmqjxpprk";
url = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/commit/99790eaad9083cce5ab2b1646489e1a1c0faad1e.patch";
sha256 = "11bqy4sl05qq5mj4bx5s09rq106s3j0vnpjl4np058im32j69lr3";
})
./fix_pkgconfig_includedir.patch
# Enable bs2b compilation
# https://bugzilla.gnome.org/show_bug.cgi?id=794346
(fetchurl {
url = https://bugzilla.gnome.org/attachment.cgi?id=369724;
sha256 = "1716mp0h2866ab33w607isvfhv1zwyj71qb4jrkx5v0h276v1pwr";
# Remove when https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/merge_requests/312 is merged and available to us
(fetchpatch {
url = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/commit/1872da81c48d3a719bd39955fd97deac7d037d74.patch";
sha256 = "11zwrr5ggflmvr0qfssj7dmhgd3ybiadmy79b4zh24022zgw3xpz";
})
];

src = fetchurl {
url = "${meta.homepage}/src/gst-plugins-bad/${name}.tar.xz";
sha256 = "1r8dma3x127rbx42yab7kwq7q1bhkmvz2ykn0rnqnzl95q74w2wi";
sha256 = "019b0yqjrcg6jmfd4cc336h1bz5p4wxl58yz1c4sdb96avirs4r2";
};

outputs = [ "out" "dev" ];

nativeBuildInputs = [ meson ninja pkgconfig python3 gettext ];
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
webrtc-audio-processing # webrtc
libbs2b
ladspaH librdf # ladspa plug-in
lilv lv2 serd sord sratom # lv2 plug-in
ladspaH # ladspa plug-in
libmodplug mpeg2dec
openjpeg libopus librsvg
curl.dev
fdk_aac
gsm
libaom
libdc1394
libde265
libdvdnav
libdvdread
libsndfile
libusb1
mjpegtools
neon
openal
opencv3
openexr
openh264
rtmpdump
pango
soundtouch
srtp
zbar
fluidsynth libvdpau
libwebp xvidcore gnutls libGLU_combined
libgme openssl x265 libxml2
libintl
srt
]
++ optional faacSupport faac
++ optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
# For unknown reasons the order is important, e.g. if
# VideoToolbox is last, we get:
# fatal error: 'VideoToolbox/VideoToolbox.h' file not found
VideoToolbox
AudioToolbox
AVFoundation
CoreMedia
CoreVideo
Foundation
MediaToolbox
])
# These currently do not evaluate on darwin
++ optionals (!stdenv.isDarwin) [
bluez
chromaprint
directfb
flite
flite
libdrm
libgudev
libnice
libofa
librdf
lilv lv2 serd sord sratom # lv2 plug-in
sbc
spandsp
]
++ optional stdenv.isLinux wayland
# wildmidi requires apple's OpenAL
# TODO: package apple's OpenAL, fix wildmidi, include on Darwin
++ optional (!stdenv.isDarwin) wildmidi
# TODO: mjpegtools uint64_t is not compatible with guint64 on Darwin
++ optional (!stdenv.isDarwin) mjpegtools;
;

mesonFlags = [
# Enables all features, so that we know when new dependencies are necessary.
"-Dauto_features=enabled"

"-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"
"-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"
]
++ optionals stdenv.isDarwin [
"-Dbluez=disabled"
"-Dchromaprint=disabled"
"-Ddirectfb=disabled"
"-Dflite=disabled"
"-Dkms=disabled" # renders to libdrm output
"-Dofa=disabled"
"-Dlv2=disabled"
"-Dsbc=disabled"
"-Dspandsp=disabled"
"-Ddvb=disabled"
"-Dfbdev=disabled"
"-Duvch264=disabled" # requires gudev
"-Dladspa=disabled" # requires lrdf
"-Dwebrtc=disabled" # requires libnice, which as of writing doesn't work on Darwin in nixpkgs
"-Dwildmidi=disabled" # see dependencies above
]
++ optional (!gst-plugins-base.glEnabled) "-Dgl=disabled"
++ optional (!gst-plugins-base.waylandEnabled) "-Dwayland=disabled"
# `applemedia/videotexturecache.h` requires `gst/gl/gl.h`,
# but its meson build system does not declare the dependency.
++ optional (!gst-plugins-base.glEnabled) "-Dapplemedia=disabled"
;

# This package has some `_("string literal")` string formats
# that trip up clang with format security enabled.
hardeningDisable = [ "format" ];

enableParallelBuilding = true;

Expand Down
96 changes: 75 additions & 21 deletions pkgs/development/libraries/gstreamer/base/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,26 @@
, pkgconfig, meson, ninja, gettext, gobject-introspection
, python3, gstreamer, orc, pango, libtheora
, libintl, libopus
, isocodes
, libjpeg
, libpng
, libvisual
, tremor # provides 'virbisidec'
, gtk-doc, docbook_xsl, docbook_xml_dtd_412
, enableX11 ? stdenv.isLinux, libXv
, enableWayland ? stdenv.isLinux, wayland
, enableAlsa ? stdenv.isLinux, alsaLib
, enableCocoa ? false, darwin
# Enabling Cocoa seems to currently not work, giving compile
# errors. Suspected is that a newer version than clang
# is needed than 5.0 but it is not clear.
, enableCocoa ? false
, darwin
, enableGl ? (enableX11 || enableWayland || enableCocoa)
, enableCdparanoia ? (!stdenv.isDarwin), cdparanoia }:

stdenv.mkDerivation rec {
name = "gst-plugins-base-${version}";
version = "1.14.4";
version = "1.16.0";

meta = with lib; {
description = "Base plugins and helper libraries";
Expand All @@ -22,30 +33,56 @@ stdenv.mkDerivation rec {

src = fetchurl {
url = "${meta.homepage}/src/gst-plugins-base/${name}.tar.xz";
sha256 = "0qbllw4kphchwhy4p7ivdysigx69i97gyw6q0rvkx1j81r4kjqfa";
sha256 = "1bmmdwbyy89ayb85xc48y217f6wdmpz96f30zm6v53z2a5xsm4s0";
};

outputs = [ "out" "dev" ];

nativeBuildInputs = [ pkgconfig python3 gettext gobject-introspection ]

# Broken meson with Darwin. Should hopefully be fixed soon. Tracking
# in https://bugzilla.gnome.org/show_bug.cgi?id=781148.
++ lib.optionals (!stdenv.isDarwin) [ meson ninja ];
nativeBuildInputs = [
pkgconfig python3 gettext gobject-introspection
meson
ninja
gtk-doc
# Without these, enabling the 'gtk_doc' gives us `FAILED: meson-install`
docbook_xsl docbook_xml_dtd_412
];

# TODO How to pass these to Meson?
configureFlags = [
"--enable-x11=${if enableX11 then "yes" else "no"}"
"--enable-wayland=${if enableWayland then "yes" else "no"}"
"--enable-cocoa=${if enableCocoa then "yes" else "no"}"
mesonFlags = [
# Enables all features, so that we know when new dependencies are necessary.
"-Dauto_features=enabled"
"-Dexamples=disabled" # requires many dependencies and probably not useful for our users
"-Dgl-graphene=disabled" # not packaged in nixpkgs as of writing
"-Dgl_platform=[${lib.optionalString (enableX11 || enableWayland || enableCocoa) "auto"}]"
# See https://github.com/GStreamer/gst-plugins-base/blob/d64a4b7a69c3462851ff4dcfa97cc6f94cd64aef/meson_options.txt#L15 for a list of choices
"-Dgl_winsys=[${lib.concatStringsSep "," (lib.optional enableX11 "x11" ++ lib.optional enableWayland "wayland" ++ lib.optional enableCocoa "cocoa")}]"
# We must currently disable gtk_doc API docs generation,
# because it is not compatible with some features being disabled.
# See for example
# https://gitlab.gnome.org/GNOME/gnome-build-meta/issues/38
# for it failing because some Wayland symbols are missing.
# This problem appeared between 1.15.1 and 1.16.0.
"-Dgtk_doc=disabled"
]
++ lib.optional (!enableX11) "-Dx11=disabled"
# TODO How to disable Wayland?
++ lib.optional (!enableGl) "-Dgl=disabled"
++ lib.optional (!enableAlsa) "-Dalsa=disabled"
++ lib.optional (!enableCdparanoia) "-Dcdparanoia=disabled"
++ lib.optionals stdenv.isDarwin [
"-Dlibvisual=disabled"
]
;

# Introspection fails on my MacBook currently
++ lib.optional stdenv.isDarwin "--disable-introspection";

buildInputs = [ orc libtheora libintl libopus ]
buildInputs = [ orc libtheora libintl libopus isocodes libjpeg libpng tremor ]
++ lib.optional enableAlsa alsaLib
++ lib.optionals (!stdenv.isDarwin) [
libvisual
]
++ lib.optionals enableX11 [ libXv pango ]
++ lib.optionals stdenv.isDarwin [
pango
darwin.apple_sdk.frameworks.OpenGL
]
++ lib.optional enableWayland wayland
++ lib.optional enableCocoa darwin.apple_sdk.frameworks.Cocoa
++ lib.optional enableCdparanoia cdparanoia;
Expand All @@ -56,15 +93,32 @@ stdenv.mkDerivation rec {
patchShebangs .
'';

# This package has some `_("string literal")` string formats
# that trip up clang with format security enabled.
hardeningDisable = [ "format" ];

enableParallelBuilding = true;

doCheck = false; # fails, wants DRI access for OpenGL

patches = [
(fetchpatch {
url = "https://bug794856.bugzilla-attachments.gnome.org/attachment.cgi?id=370414";
sha256 = "07x43xis0sr0hfchf36ap0cibx0lkfpqyszb3r3w9dzz301fk04z";
})
./fix_pkgconfig_includedir.patch
];

passthru = {
# Downstream `gst-*` packages depending on `gst-plugins-base`
# have meson build options like 'gl' etc. that depend
# on these features being built in `-base`.
# If they are not built here, then the downstream builds
# will fail, as they, too, use `-Dauto_features=enabled`
# which would enable these options unconditionally.
# That means we must communicate to these downstream packages
# if the `-base` enabled these options or not, so that
# the can enable/disable those features accordingly.
# The naming `*Enabled` vs `enable*` is intentional to
# distinguish inputs from outputs (what is to be built
# vs what was built) and to make them easier to search for.
glEnabled = enableGl;
waylandEnabled = enableWayland;
};
}
Loading