diff --git a/pkgs/by-name/gp/gpac/package.nix b/pkgs/by-name/gp/gpac/package.nix index ea9f1df7280d..5603ae754edf 100644 --- a/pkgs/by-name/gp/gpac/package.nix +++ b/pkgs/by-name/gp/gpac/package.nix @@ -2,12 +2,14 @@ lib, stdenv, fetchFromGitHub, + gitUpdater, + unstableGitUpdater, cctools, pkg-config, zlib, - ffmpeg, + ffmpeg-headless, freetype, - libjpeg, + libjpeg_turbo, libpng, libmad, faad2, @@ -18,7 +20,6 @@ nghttp2, openjpeg, libcaca, - libXv, mesa, mesa_glu, xvidcore, @@ -28,42 +29,67 @@ pulseaudio, SDL2, curl, + xorg, withFullDeps ? false, withFfmpeg ? withFullDeps, releaseChannel ? "stable", }: -stdenv.mkDerivation rec { +let + stable = rec { + version = "2.4.0"; # See below TODO. + src = fetchFromGitHub { + owner = "gpac"; + repo = "gpac"; + rev = "v${version}"; + hash = "sha256-RADDqc5RxNV2EfRTzJP/yz66p0riyn81zvwU3r9xncM="; + }; + updateScript = gitUpdater { + odd-unstable = true; + rev-prefix = "v"; + ignoredVersions = "^(abi|test)"; + }; + } + // { + # ffmpeg 7.0.2 works, but 7.1.1 (which is packaged in nixpkgs) doesn't + # because v2.4.0 of this package relies on internal private ffmpeg fields. + # TODO: remove this, and switch to simply using ffmpeg-headless, + # when updating stable to 2.6 + ffmpeg-headless = ffmpeg-headless.override { + version = "7.0.2"; + hash = "sha256-6bcTxMt0rH/Nso3X7zhrFNkkmWYtxsbUqVQKh25R1Fs="; + }; + }; + unstable = { + version = "2.4-unstable-2025-10-26"; + src = fetchFromGitHub { + owner = "gpac"; + repo = "gpac"; + rev = "e1a54e81b3befba2b0bffd1d4c1cf50da516c5f3"; + hash = "sha256-jSMBPuWPmTDCebImdmAcCZl0hEQpJK4QMNGcEXgs3A4="; + }; + updateScript = unstableGitUpdater { + tagFormat = "v*"; + tagPrefix = "v"; + }; + inherit ffmpeg-headless; + }; + channelToUse = if releaseChannel == "unstable" then unstable else stable; +in +stdenv.mkDerivation (finalAttrs: { pname = "gpac"; - version = if releaseChannel == "nightly" then "2.4-unstable-2025-10-26" else "2.4.0"; + inherit (channelToUse) version src; - src = - if releaseChannel == "nightly" then - fetchFromGitHub { - owner = "gpac"; - repo = "gpac"; - rev = "e1a54e81b3befba2b0bffd1d4c1cf50da516c5f3"; - hash = "sha256-jSMBPuWPmTDCebImdmAcCZl0hEQpJK4QMNGcEXgs3A4="; - } - else - fetchFromGitHub { - owner = "gpac"; - repo = "gpac"; - rev = "v${version}"; - hash = "sha256-RADDqc5RxNV2EfRTzJP/yz66p0riyn81zvwU3r9xncM="; - }; - - nativeBuildInputs = - [ - pkg-config - ] - ++ lib.optionals stdenv.hostPlatform.isDarwin [ - cctools - ] - ++ lib.optionals withFfmpeg [ - ffmpeg - ]; + nativeBuildInputs = [ + pkg-config + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + cctools + ] + ++ lib.optionals withFfmpeg [ + channelToUse.ffmpeg-headless + ]; # ref: https://wiki.gpac.io/Build/build/GPAC-Build-Guide-for-Linux/#gpac-easy-build-recommended-for-most-users buildInputs = [ @@ -71,7 +97,7 @@ stdenv.mkDerivation rec { ] ++ lib.optionals withFullDeps [ freetype - libjpeg + libjpeg_turbo libpng libmad faad2 @@ -82,7 +108,9 @@ stdenv.mkDerivation rec { nghttp2 openjpeg libcaca - libXv + xorg.libX11 + xorg.libXv + xorg.xorgproto mesa mesa_glu xvidcore @@ -96,6 +124,8 @@ stdenv.mkDerivation rec { enableParallelBuilding = true; + passthru.updateScript = channelToUse.updateScript; + meta = { description = "Open Source multimedia framework for research and academic purposes"; longDescription = '' @@ -118,4 +148,4 @@ stdenv.mkDerivation rec { ]; platforms = lib.platforms.unix; }; -} +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index aaa4994a3284..1f983ac7f56a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14540,16 +14540,7 @@ with pkgs; php = php83; # https://github.com/tchapi/davis/issues/195 }; - gpac = callPackage ../by-name/gp/gpac/package.nix { - ffmpeg = ffmpeg.override { - version = "7.0.2"; - hash = "sha256-6bcTxMt0rH/Nso3X7zhrFNkkmWYtxsbUqVQKh25R1Fs="; - ffmpegVariant = "headless"; - }; - }; - - gpac_nightly = callPackage ../by-name/gp/gpac/package.nix { - ffmpeg = ffmpeg-headless; - releaseChannel = "nightly"; + gpac-unstable = callPackage ../by-name/gp/gpac/package.nix { + releaseChannel = "unstable"; }; }