From 4828444d1b20eae0024707a06f69ff5beac1db7c Mon Sep 17 00:00:00 2001 From: qubitnano <146656568+qubitnano@users.noreply.github.com> Date: Fri, 16 Aug 2024 21:50:25 -0400 Subject: [PATCH 1/4] handbrake: 1.8.1 -> 1.8.2 --- pkgs/applications/video/handbrake/default.nix | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/video/handbrake/default.nix b/pkgs/applications/video/handbrake/default.nix index 610f5af8046e..1075d6034bdb 100644 --- a/pkgs/applications/video/handbrake/default.nix +++ b/pkgs/applications/video/handbrake/default.nix @@ -90,14 +90,14 @@ }: let - version = "1.8.1"; + version = "1.8.2"; src = fetchFromGitHub { owner = "HandBrake"; repo = "HandBrake"; # uses version commit for logic in version.txt - rev = "e9ff2bdf1ac670eb9c6d6170e27c999c05535127"; - hash = "sha256-grbT+oRIyLnyJowhdqw7qGRg11HzWGIU9yTwUQhCWtg="; + rev = "77f199ab02ff2e3bca4ca653e922e9fef67dec43"; + hash = "sha256-vxvmyo03NcO2Nbjg76JLZqmYw7RiK4FehiB+iE3CgOw="; }; # Handbrake maintains a set of ffmpeg patches. In particular, these @@ -105,10 +105,10 @@ let # https://github.com/HandBrake/HandBrake/issues/4029 # base ffmpeg version is specified in: # https://github.com/HandBrake/HandBrake/blob/master/contrib/ffmpeg/module.defs - ffmpeg-version = "7.0.1"; + ffmpeg-version = "7.0.2"; ffmpeg-hb = (ffmpeg_7-full.override { version = ffmpeg-version; - hash = "sha256-HiCT6bvLx4zmJ6ffutoimdz5ENQ55CRF64WBT3HeXMA="; + hash = "sha256-6bcTxMt0rH/Nso3X7zhrFNkkmWYtxsbUqVQKh25R1Fs="; }).overrideAttrs (old: { patches = (old.patches or [ ]) ++ [ "${src}/contrib/ffmpeg/A01-mov-read-name-track-tag-written-by-movenc.patch" @@ -133,7 +133,6 @@ let "${src}/contrib/ffmpeg/A16-amfenc-HDR-metadata.patch" "${src}/contrib/ffmpeg/A17-av1dec-dovi-rpu.patch" "${src}/contrib/ffmpeg/A18-avformat-mov-add-support-audio-fallback-track-ref.patch" - "${src}/contrib/ffmpeg/A19-fix-qsv-on-gcc-14.patch" ]; }); From 3e77643f29d443e5f3c60a4f0e82885abbb9451c Mon Sep 17 00:00:00 2001 From: qubitnano <146656568+qubitnano@users.noreply.github.com> Date: Sat, 24 Aug 2024 08:52:23 -0400 Subject: [PATCH 2/4] handbrake: migrate to pkgs/by-name --- .../default.nix => by-name/ha/handbrake/package.nix} | 7 +++---- pkgs/top-level/all-packages.nix | 5 ----- 2 files changed, 3 insertions(+), 9 deletions(-) rename pkgs/{applications/video/handbrake/default.nix => by-name/ha/handbrake/package.nix} (98%) diff --git a/pkgs/applications/video/handbrake/default.nix b/pkgs/by-name/ha/handbrake/package.nix similarity index 98% rename from pkgs/applications/video/handbrake/default.nix rename to pkgs/by-name/ha/handbrake/package.nix index 1075d6034bdb..261d38e8ea7a 100644 --- a/pkgs/applications/video/handbrake/default.nix +++ b/pkgs/by-name/ha/handbrake/package.nix @@ -59,10 +59,7 @@ , libdvdcss , libbluray # Darwin-specific -, AudioToolbox -, Foundation -, libobjc -, VideoToolbox +, darwin # GTK # NOTE: 2019-07-19: The gtk3 package has a transitive dependency on dbus, # which in turn depends on systemd. systemd is not supported on Darwin, so @@ -90,6 +87,8 @@ }: let + inherit (darwin.apple_sdk.frameworks) AudioToolbox Foundation VideoToolbox; + inherit (darwin) libobjc; version = "1.8.2"; src = fetchFromGitHub { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ff352964cc01..30ded5b9130e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -31639,11 +31639,6 @@ with pkgs; lxdvdrip = callPackage ../applications/video/lxdvdrip { }; - handbrake = callPackage ../applications/video/handbrake { - inherit (darwin.apple_sdk.frameworks) AudioToolbox Foundation VideoToolbox; - inherit (darwin) libobjc; - }; - handlr = callPackage ../tools/misc/handlr { }; jftui = callPackage ../applications/video/jftui { }; From 8d3cebf982ece97806c85a99fd6f0246d1e01162 Mon Sep 17 00:00:00 2001 From: qubitnano <146656568+qubitnano@users.noreply.github.com> Date: Sat, 24 Aug 2024 08:57:40 -0400 Subject: [PATCH 3/4] handbrake: add mainProgram --- pkgs/by-name/ha/handbrake/package.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/by-name/ha/handbrake/package.nix b/pkgs/by-name/ha/handbrake/package.nix index 261d38e8ea7a..3f9cb86d505b 100644 --- a/pkgs/by-name/ha/handbrake/package.nix +++ b/pkgs/by-name/ha/handbrake/package.nix @@ -324,6 +324,7 @@ let ''; license = licenses.gpl2Only; maintainers = with maintainers; [ Anton-Latukha wmertens ]; + mainProgram = "HandBrakeCLI"; platforms = with platforms; unix; broken = stdenv.isDarwin; # https://github.com/NixOS/nixpkgs/pull/297984#issuecomment-2016503434 }; From 6fc2556b6961c069b0022c6a7114f0e73fef41af Mon Sep 17 00:00:00 2001 From: qubitnano <146656568+qubitnano@users.noreply.github.com> Date: Sat, 24 Aug 2024 08:58:42 -0400 Subject: [PATCH 4/4] handbrake: format with nixfmt-rfc-style --- pkgs/by-name/ha/handbrake/package.nix | 449 ++++++++++++++------------ 1 file changed, 243 insertions(+), 206 deletions(-) diff --git a/pkgs/by-name/ha/handbrake/package.nix b/pkgs/by-name/ha/handbrake/package.nix index 3f9cb86d505b..95faf9ffbc59 100644 --- a/pkgs/by-name/ha/handbrake/package.nix +++ b/pkgs/by-name/ha/handbrake/package.nix @@ -7,87 +7,92 @@ # be nice to add the native GUI (and/or the GTK GUI) as an option too, but that # requires invoking the Xcode build system, which is non-trivial for now. -{ stdenv -, lib -, fetchFromGitHub -, fetchpatch +{ + stdenv, + lib, + fetchFromGitHub, + fetchpatch, # For tests -, testers -, runCommand -, fetchurl + testers, + runCommand, + fetchurl, # Main build tools -, pkg-config -, autoconf -, automake -, libtool -, m4 -, xz -, python3 -, numactl -, writeText + pkg-config, + autoconf, + automake, + libtool, + m4, + xz, + python3, + numactl, + writeText, # Processing, video codecs, containers -, ffmpeg_7-full -, nv-codec-headers -, libogg -, x264 -, x265 -, libvpx -, libtheora -, dav1d -, zimg -, svt-av1 + ffmpeg_7-full, + nv-codec-headers, + libogg, + x264, + x265, + libvpx, + libtheora, + dav1d, + zimg, + svt-av1, # Codecs, audio -, libopus -, lame -, libvorbis -, a52dec -, speex -, libsamplerate + libopus, + lame, + libvorbis, + a52dec, + speex, + libsamplerate, # Text processing -, libiconv -, fribidi -, fontconfig -, freetype -, libass -, jansson -, libxml2 -, harfbuzz -, libjpeg_turbo + libiconv, + fribidi, + fontconfig, + freetype, + libass, + jansson, + libxml2, + harfbuzz, + libjpeg_turbo, # Optical media -, libdvdread -, libdvdnav -, libdvdcss -, libbluray + libdvdread, + libdvdnav, + libdvdcss, + libbluray, # Darwin-specific -, darwin + darwin, # GTK # NOTE: 2019-07-19: The gtk3 package has a transitive dependency on dbus, # which in turn depends on systemd. systemd is not supported on Darwin, so # for now we disable GTK GUI support on Darwin. (It may be possible to remove # this restriction later.) -, useGtk ? !stdenv.isDarwin -, appstream -, desktop-file-utils -, meson -, ninja -, wrapGAppsHook4 -, intltool -, glib -, gtk4 -, libappindicator-gtk3 -, libnotify -, gst_all_1 -, dbus-glib -, udev -, libgudev -, hicolor-icon-theme + useGtk ? !stdenv.isDarwin, + appstream, + desktop-file-utils, + meson, + ninja, + wrapGAppsHook4, + intltool, + glib, + gtk4, + libappindicator-gtk3, + libnotify, + gst_all_1, + dbus-glib, + udev, + libgudev, + hicolor-icon-theme, # FDK -, useFdk ? false -, fdk_aac + useFdk ? false, + fdk_aac, }: let - inherit (darwin.apple_sdk.frameworks) AudioToolbox Foundation VideoToolbox; + inherit (darwin.apple_sdk.frameworks) + AudioToolbox + Foundation + VideoToolbox + ; inherit (darwin) libobjc; version = "1.8.2"; @@ -105,50 +110,54 @@ let # base ffmpeg version is specified in: # https://github.com/HandBrake/HandBrake/blob/master/contrib/ffmpeg/module.defs ffmpeg-version = "7.0.2"; - ffmpeg-hb = (ffmpeg_7-full.override { - version = ffmpeg-version; - hash = "sha256-6bcTxMt0rH/Nso3X7zhrFNkkmWYtxsbUqVQKh25R1Fs="; - }).overrideAttrs (old: { - patches = (old.patches or [ ]) ++ [ - "${src}/contrib/ffmpeg/A01-mov-read-name-track-tag-written-by-movenc.patch" - "${src}/contrib/ffmpeg/A02-movenc-write-3gpp-track-titl-tag.patch" - "${src}/contrib/ffmpeg/A03-mov-read-3gpp-udta-tags.patch" - "${src}/contrib/ffmpeg/A04-movenc-write-3gpp-track-names-tags-for-all-available.patch" - "${src}/contrib/ffmpeg/A05-dvdsubdec-fix-processing-of-partial-packets.patch" - "${src}/contrib/ffmpeg/A06-dvdsubdec-return-number-of-bytes-used.patch" - "${src}/contrib/ffmpeg/A07-dvdsubdec-use-pts-of-initial-packet.patch" - "${src}/contrib/ffmpeg/A08-dvdsubdec-do-not-discard-zero-sized-rects.patch" - "${src}/contrib/ffmpeg/A09-ccaption_dec-fix-pts-in-real_time-mode.patch" - "${src}/contrib/ffmpeg/A10-matroskaenc-aac-extradata-updated.patch" - "${src}/contrib/ffmpeg/A11-videotoolbox-disable-H.264-10-bit-on-Intel-macOS.patch" + ffmpeg-hb = + (ffmpeg_7-full.override { + version = ffmpeg-version; + hash = "sha256-6bcTxMt0rH/Nso3X7zhrFNkkmWYtxsbUqVQKh25R1Fs="; + }).overrideAttrs + (old: { + patches = (old.patches or [ ]) ++ [ + "${src}/contrib/ffmpeg/A01-mov-read-name-track-tag-written-by-movenc.patch" + "${src}/contrib/ffmpeg/A02-movenc-write-3gpp-track-titl-tag.patch" + "${src}/contrib/ffmpeg/A03-mov-read-3gpp-udta-tags.patch" + "${src}/contrib/ffmpeg/A04-movenc-write-3gpp-track-names-tags-for-all-available.patch" + "${src}/contrib/ffmpeg/A05-dvdsubdec-fix-processing-of-partial-packets.patch" + "${src}/contrib/ffmpeg/A06-dvdsubdec-return-number-of-bytes-used.patch" + "${src}/contrib/ffmpeg/A07-dvdsubdec-use-pts-of-initial-packet.patch" + "${src}/contrib/ffmpeg/A08-dvdsubdec-do-not-discard-zero-sized-rects.patch" + "${src}/contrib/ffmpeg/A09-ccaption_dec-fix-pts-in-real_time-mode.patch" + "${src}/contrib/ffmpeg/A10-matroskaenc-aac-extradata-updated.patch" + "${src}/contrib/ffmpeg/A11-videotoolbox-disable-H.264-10-bit-on-Intel-macOS.patch" - # patch to fix - # commented out because it causes ffmpeg's filter-pixdesc-p010le test to fail. - # "${src}/contrib/ffmpeg/A12-libswscale-fix-yuv420p-to-p01xle-color-conversion-bu.patch" + # patch to fix + # commented out because it causes ffmpeg's filter-pixdesc-p010le test to fail. + # "${src}/contrib/ffmpeg/A12-libswscale-fix-yuv420p-to-p01xle-color-conversion-bu.patch" - "${src}/contrib/ffmpeg/A13-qsv-fix-decode-10bit-hdr.patch" - "${src}/contrib/ffmpeg/A14-amfenc-Add-support-for-pict_type-field.patch" - "${src}/contrib/ffmpeg/A15-amfenc-Fixes-the-color-information-in-the-ou.patch" - "${src}/contrib/ffmpeg/A16-amfenc-HDR-metadata.patch" - "${src}/contrib/ffmpeg/A17-av1dec-dovi-rpu.patch" - "${src}/contrib/ffmpeg/A18-avformat-mov-add-support-audio-fallback-track-ref.patch" - ]; - }); + "${src}/contrib/ffmpeg/A13-qsv-fix-decode-10bit-hdr.patch" + "${src}/contrib/ffmpeg/A14-amfenc-Add-support-for-pict_type-field.patch" + "${src}/contrib/ffmpeg/A15-amfenc-Fixes-the-color-information-in-the-ou.patch" + "${src}/contrib/ffmpeg/A16-amfenc-HDR-metadata.patch" + "${src}/contrib/ffmpeg/A17-av1dec-dovi-rpu.patch" + "${src}/contrib/ffmpeg/A18-avformat-mov-add-support-audio-fallback-track-ref.patch" + ]; + }); x265-hb = x265.overrideAttrs (old: { # nixpkgs' x265 sourceRoot is x265-.../source whereas handbrake's x265 patches # are written with respect to the parent directory instead of that source directory. # patches which don't cleanly apply are commented out. - postPatch = (old.postPatch or "") + '' - pushd .. - patch -p1 < ${src}/contrib/x265/A01-threads-priority.patch - patch -p1 < ${src}/contrib/x265/A02-threads-pool-adjustments.patch - patch -p1 < ${src}/contrib/x265/A03-sei-length-crash-fix.patch - patch -p1 < ${src}/contrib/x265/A04-ambient-viewing-enviroment-sei.patch - # patch -p1 < ${src}/contrib/x265/A05-memory-leaks.patch - # patch -p1 < ${src}/contrib/x265/A06-crosscompile-fix.patch - popd - ''; + postPatch = + (old.postPatch or "") + + '' + pushd .. + patch -p1 < ${src}/contrib/x265/A01-threads-priority.patch + patch -p1 < ${src}/contrib/x265/A02-threads-pool-adjustments.patch + patch -p1 < ${src}/contrib/x265/A03-sei-length-crash-fix.patch + patch -p1 < ${src}/contrib/x265/A04-ambient-viewing-enviroment-sei.patch + # patch -p1 < ${src}/contrib/x265/A05-memory-leaks.patch + # patch -p1 < ${src}/contrib/x265/A06-crosscompile-fix.patch + popd + ''; }); versionFile = writeText "version.txt" '' @@ -163,118 +172,140 @@ let DATE=1970-01-01 00:00:01 +0000 ''; - inherit (lib) optional optionals optionalString versions; - + inherit (lib) + optional + optionals + optionalString + versions + ; self = stdenv.mkDerivation rec { pname = "handbrake"; inherit version src; - postPatch = '' - install -Dm444 ${versionFile} ${versionFile.name} + postPatch = + '' + install -Dm444 ${versionFile} ${versionFile.name} - patchShebangs scripts - patchShebangs gtk/data/ + patchShebangs scripts + patchShebangs gtk/data/ - substituteInPlace libhb/hb.c \ - --replace-fail 'return hb_version;' 'return "${version}";' + substituteInPlace libhb/hb.c \ + --replace-fail 'return hb_version;' 'return "${version}";' - # Force using nixpkgs dependencies - sed -i '/MODULES += contrib/d' make/include/main.defs - sed -e 's/^[[:space:]]*\(meson\|ninja\|nasm\)[[:space:]]*= ToolProbe.*$//g' \ - -e '/ ## Additional library and tool checks/,/ ## MinGW specific library and tool checks/d' \ - -i make/configure.py - '' + optionalString stdenv.isDarwin '' - # Prevent the configure script from failing if xcodebuild isn't available, - # which it isn't in the Nix context. (The actual build goes fine without - # xcodebuild.) - sed -e '/xcodebuild = ToolProbe/s/abort=.\+)/abort=False)/' -i make/configure.py - '' + optionalString useGtk '' - substituteInPlace gtk/module.rules \ - --replace-fail '$(MESON.exe)' 'meson' \ - --replace-fail '$(NINJA.exe)' 'ninja' \ - # Force using nixpkgs dependencies - substituteInPlace gtk/meson.build \ - --replace-fail \ - "hb_incdirs = include_directories(hb_dir / 'libhb', hb_dir / 'contrib/include')" \ - "hb_incdirs = include_directories(hb_dir / 'libhb')" - substituteInPlace gtk/ghb.spec \ - --replace-fail "gtk-update-icon-cache" "gtk4-update-icon-cache" - substituteInPlace gtk/data/post_install.py \ - --replace-fail "gtk-update-icon-cache" "gtk4-update-icon-cache" - ''; + # Force using nixpkgs dependencies + sed -i '/MODULES += contrib/d' make/include/main.defs + sed -e 's/^[[:space:]]*\(meson\|ninja\|nasm\)[[:space:]]*= ToolProbe.*$//g' \ + -e '/ ## Additional library and tool checks/,/ ## MinGW specific library and tool checks/d' \ + -i make/configure.py + '' + + optionalString stdenv.isDarwin '' + # Prevent the configure script from failing if xcodebuild isn't available, + # which it isn't in the Nix context. (The actual build goes fine without + # xcodebuild.) + sed -e '/xcodebuild = ToolProbe/s/abort=.\+)/abort=False)/' -i make/configure.py + '' + + optionalString useGtk '' + substituteInPlace gtk/module.rules \ + --replace-fail '$(MESON.exe)' 'meson' \ + --replace-fail '$(NINJA.exe)' 'ninja' \ + # Force using nixpkgs dependencies + substituteInPlace gtk/meson.build \ + --replace-fail \ + "hb_incdirs = include_directories(hb_dir / 'libhb', hb_dir / 'contrib/include')" \ + "hb_incdirs = include_directories(hb_dir / 'libhb')" + substituteInPlace gtk/ghb.spec \ + --replace-fail "gtk-update-icon-cache" "gtk4-update-icon-cache" + substituteInPlace gtk/data/post_install.py \ + --replace-fail "gtk-update-icon-cache" "gtk4-update-icon-cache" + ''; - nativeBuildInputs = [ - autoconf - automake - libtool - m4 - pkg-config - python3 - ] - ++ optionals useGtk [ appstream desktop-file-utils intltool meson ninja wrapGAppsHook4 ]; + nativeBuildInputs = + [ + autoconf + automake + libtool + m4 + pkg-config + python3 + ] + ++ optionals useGtk [ + appstream + desktop-file-utils + intltool + meson + ninja + wrapGAppsHook4 + ]; - buildInputs = [ - a52dec - dav1d - ffmpeg-hb - fontconfig - freetype - fribidi - harfbuzz - jansson - lame - libass - libbluray - libdvdcss - libdvdnav - libdvdread - libiconv - libjpeg_turbo - libogg - libopus - libsamplerate - libtheora - libvorbis - libvpx - libxml2 - speex - svt-av1 - x264 - x265-hb - xz - zimg - ] - ++ optional (!stdenv.isDarwin) numactl - ++ optionals useGtk [ - dbus-glib - glib - gst_all_1.gst-libav - gst_all_1.gst-plugins-bad - gst_all_1.gst-plugins-base - gst_all_1.gst-plugins-good - gst_all_1.gstreamer - gtk4 - hicolor-icon-theme - libappindicator-gtk3 - libgudev - libnotify - udev - ] - ++ optional useFdk fdk_aac - ++ optionals stdenv.isDarwin [ AudioToolbox Foundation libobjc VideoToolbox ] - # NOTE: 2018-12-27: Handbrake supports nv-codec-headers for Linux only, - # look at ./make/configure.py search "enable_nvenc" - ++ optional stdenv.isLinux nv-codec-headers; + buildInputs = + [ + a52dec + dav1d + ffmpeg-hb + fontconfig + freetype + fribidi + harfbuzz + jansson + lame + libass + libbluray + libdvdcss + libdvdnav + libdvdread + libiconv + libjpeg_turbo + libogg + libopus + libsamplerate + libtheora + libvorbis + libvpx + libxml2 + speex + svt-av1 + x264 + x265-hb + xz + zimg + ] + ++ optional (!stdenv.isDarwin) numactl + ++ optionals useGtk [ + dbus-glib + glib + gst_all_1.gst-libav + gst_all_1.gst-plugins-bad + gst_all_1.gst-plugins-base + gst_all_1.gst-plugins-good + gst_all_1.gstreamer + gtk4 + hicolor-icon-theme + libappindicator-gtk3 + libgudev + libnotify + udev + ] + ++ optional useFdk fdk_aac + ++ optionals stdenv.isDarwin [ + AudioToolbox + Foundation + libobjc + VideoToolbox + ] + # NOTE: 2018-12-27: Handbrake supports nv-codec-headers for Linux only, + # look at ./make/configure.py search "enable_nvenc" + ++ optional stdenv.isLinux nv-codec-headers; - configureFlags = [ - "--disable-df-fetch" - "--disable-df-verify" - ] - ++ optional (!useGtk) "--disable-gtk" - ++ optional useFdk "--enable-fdk-aac" - ++ optional stdenv.isDarwin "--disable-xcode" - ++ optional stdenv.hostPlatform.isx86 "--harden"; + configureFlags = + [ + "--disable-df-fetch" + "--disable-df-verify" + ] + ++ optional (!useGtk) "--disable-gtk" + ++ optional useFdk "--enable-fdk-aac" + ++ optional stdenv.isDarwin "--disable-xcode" + ++ optional stdenv.hostPlatform.isx86 "--harden"; # NOTE: 2018-12-27: Check NixOS HandBrake test if changing NIX_LDFLAGS = [ "-lx265" ]; @@ -308,7 +339,10 @@ let test -e test.mkv ''; - tests.version = testers.testVersion { package = self; command = "HandBrakeCLI --version"; }; + tests.version = testers.testVersion { + package = self; + command = "HandBrakeCLI --version"; + }; }; meta = with lib; { @@ -323,10 +357,13 @@ let GTK GUI - `ghb` ''; license = licenses.gpl2Only; - maintainers = with maintainers; [ Anton-Latukha wmertens ]; + maintainers = with maintainers; [ + Anton-Latukha + wmertens + ]; mainProgram = "HandBrakeCLI"; platforms = with platforms; unix; - broken = stdenv.isDarwin; # https://github.com/NixOS/nixpkgs/pull/297984#issuecomment-2016503434 + broken = stdenv.isDarwin; # https://github.com/NixOS/nixpkgs/pull/297984#issuecomment-2016503434 }; }; in