diff options
Diffstat (limited to 'pkgs/development/libraries/gstreamer/rs/default.nix')
-rw-r--r-- | pkgs/development/libraries/gstreamer/rs/default.nix | 58 |
1 files changed, 32 insertions, 26 deletions
diff --git a/pkgs/development/libraries/gstreamer/rs/default.nix b/pkgs/development/libraries/gstreamer/rs/default.nix index eeef11e9a464d..d4afb8ce7618a 100644 --- a/pkgs/development/libraries/gstreamer/rs/default.nix +++ b/pkgs/development/libraries/gstreamer/rs/default.nix @@ -1,6 +1,7 @@ { lib , stdenv , fetchFromGitLab +, fetchFromGitHub , fetchpatch , rustPlatform , meson @@ -23,10 +24,12 @@ , openssl , pango , Security +, SystemConfiguration , gst-plugins-good , nix-update-script # specifies a limited subset of plugins to build (the default `null` means all plugins supported on the stdenv platform) , plugins ? null +, withGtkPlugins ? true # Checks meson.is_cross_build(), so even canExecute isn't enough. , enableDocumentation ? stdenv.hostPlatform == stdenv.buildPlatform && plugins == null , hotdoc @@ -60,8 +63,8 @@ let raptorq = [ ]; reqwest = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ]; rtp = [ ]; - webrtc = [ gst-plugins-bad openssl ] ++ lib.optionals stdenv.isDarwin [ Security ]; - webrtchttp = [ gst-plugins-bad openssl ] ++ lib.optionals stdenv.isDarwin [ Security ]; + webrtc = [ gst-plugins-bad openssl ] ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration ]; + webrtchttp = [ gst-plugins-bad openssl ] ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration ]; # text textahead = [ ]; @@ -79,7 +82,19 @@ let # video cdg = [ ]; closedcaption = [ pango ]; - dav1d = [ dav1d ]; + dav1d = [ + # Only dav1d < 1.3 is supported for now. + # https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1393 + (dav1d.overrideAttrs rec { + version = "1.2.1"; + src = fetchFromGitHub { + owner = "videolan"; + repo = "dav1d"; + rev = version; + hash = "sha256-RrEim3HXXjx2RUU7K3wPH3QbhNTRN9ZX/oAcyE9aV8I="; + }; + }) + ]; ffv1 = [ ]; gif = [ ]; gtk4 = [ gtk4 ]; @@ -100,7 +115,7 @@ let "reqwest" # tests hang on darwin "threadshare" # tests cannot bind to localhost on darwin "webp" # not supported on darwin (upstream crate issue) - ] ++ lib.optionals (!gst-plugins-base.glEnabled) [ + ] ++ lib.optionals (!gst-plugins-base.glEnabled || !withGtkPlugins) [ # these require gstreamer-gl "gtk4" "livesync" @@ -126,9 +141,9 @@ in assert lib.assertMsg (invalidPlugins == []) "Invalid gst-plugins-rs plugin${lib.optionalString (lib.length invalidPlugins > 1) "s"}: ${lib.concatStringsSep ", " invalidPlugins}"; -stdenv.mkDerivation rec { +stdenv.mkDerivation (finalAttrs: { pname = "gst-plugins-rs"; - version = "0.11.0+fixup"; + version = "0.12.4"; outputs = [ "out" "dev" ]; @@ -136,8 +151,8 @@ stdenv.mkDerivation rec { domain = "gitlab.freedesktop.org"; owner = "gstreamer"; repo = "gst-plugins-rs"; - rev = version; - hash = "sha256-nvDvcY/WyVhcxitcoqgEUT8A1synZqxG2e51ct7Fgss="; + rev = finalAttrs.version; + hash = "sha256-Qnp+e1Vww2kWjDG0x2tcigwDdG67I4xnm8+QrBI+o08="; # TODO: temporary workaround for case-insensitivity problems with color-name crate - https://github.com/annymosse/color-name/pull/2 postFetch = '' sedSearch="$(cat <<\EOF | sed -ze 's/\n/\\n/g' @@ -162,12 +177,12 @@ stdenv.mkDerivation rec { cargoDeps = rustPlatform.importCargoLock { lockFile = ./Cargo.lock; outputHashes = { - "cairo-rs-0.18.1" = "sha256-k+YIAZXxejbxPQqbUU91qbx2AR98gTrseknLHtNZDEE="; + "cairo-rs-0.19.3" = "sha256-TjVXdnlYEfPLbUx1pC84rCC2MlNecECMK2Yo9XKwz9M="; "color-name-1.1.0" = "sha256-RfMStbe2wX5qjPARHIFHlSDKjzx8DwJ+RjzyltM5K7A="; "ffv1-0.0.0" = "sha256-af2VD00tMf/hkfvrtGrHTjVJqbl+VVpLaR0Ry+2niJE="; "flavors-0.2.0" = "sha256-zBa0X75lXnASDBam9Kk6w7K7xuH9fP6rmjWZBUB5hxk="; - "gdk4-0.7.1" = "sha256-UMGmZivVdvmKRAjIGlj6pjDxwfNJyz8/6C0eYH1OOw4="; - "gstreamer-0.21.0" = "sha256-2uilK8wYG8e59fdL3q+kmixc1zw+EBwqvGs/EgfCGhk="; + "gdk4-0.8.1" = "sha256-VPmegFZ/bC8x1vkl3YU208jQ8FCEKLwe6ZDatz4mIvM="; + "gstreamer-0.22.4" = "sha256-r5+wOEhTVztDMEu6t47yJ9HIlbXyjdvswUND4l7kPl8="; }; }; @@ -202,36 +217,26 @@ stdenv.mkDerivation rec { map (plugin: lib.mesonEnable plugin true) selectedPlugins ) ++ [ (lib.mesonOption "sodium-source" "system") + (lib.mesonEnable "tests" finalAttrs.finalPackage.doCheck) (lib.mesonEnable "doc" enableDocumentation) ]; # turn off all auto plugins since we use a list of plugins we generate mesonAutoFeatures = "disabled"; - doCheck = true; + doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform; # csound lib dir must be manually specified for it to build - # webrtc and webrtchttp plugins are the only that need gstreamer-webrtc (from gst-plugins-bad, a heavy set) preConfigure = '' export CARGO_BUILD_JOBS=$NIX_BUILD_CORES patchShebangs dependencies.py '' + lib.optionalString (lib.elem "csound" selectedPlugins) '' export CSOUND_LIB_DIR=${lib.getLib csound}/lib - '' + lib.optionalString (lib.mutuallyExclusive [ "webrtc" "webrtchttp" ] selectedPlugins) '' - sed -i "/\['gstreamer-webrtc-1\.0', 'gst-plugins-bad', 'gstwebrtc_dep', 'gstwebrtc'\]/d" meson.build - '' + lib.optionalString (!gst-plugins-base.glEnabled) '' - sed -i "/\['gstreamer-gl-1\.0', 'gst-plugins-base', 'gst_gl_dep', 'gstgl'\]/d" meson.build ''; - # run tests ourselves to avoid meson timing out by default - checkPhase = '' - runHook preCheck - - meson test --no-rebuild --verbose --timeout-multiplier 12 - - runHook postCheck - ''; + # give meson longer before timing out for tests + mesonCheckFlags = [ "--verbose" "--timeout-multiplier" "12" ]; doInstallCheck = (lib.elem "webp" selectedPlugins) && !stdenv.hostPlatform.isStatic && stdenv.hostPlatform.isElf; @@ -243,6 +248,7 @@ stdenv.mkDerivation rec { passthru.updateScript = nix-update-script { # use numbered releases rather than gstreamer-* releases + # this matches upstream's recommendation: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/470#note_2202772 extraArgs = [ "--version-regex" "([0-9.]+)" ]; }; @@ -254,4 +260,4 @@ stdenv.mkDerivation rec { platforms = platforms.unix; maintainers = with maintainers; [ lilyinstarlight ]; }; -} +}) |