From 765cd8c2edb8c3406b49f772bb37eaa271c4b2b2 Mon Sep 17 00:00:00 2001 From: Benjamin Esham Date: Fri, 19 Jul 2019 13:16:11 -0400 Subject: handbrake: fix Darwin build by turning off GUI support This involved several pieces: - Always disable GTK GUI support under Darwin. The gtk3 package depends transitively on dbus, which depends transitively on systemd, which is not currently supported on Darwin. (I gather that it may be possible to work around this in the future.) - Also disable the native GUI support under Darwin (using the --disable-xcode flag). Building this GUI would require using the Xcode build system, which I was not able to figure out how to do; for now, all builds on Darwin are command-line-only. - Add the lzma package as a dependency on all platforms. - Add dependencies on the AudioToolbox, Foundation, libobjc, and VideoToolbox packages on Darwin. --- pkgs/applications/video/handbrake/default.nix | 52 +++++++++++++++++++-------- 1 file changed, 37 insertions(+), 15 deletions(-) (limited to 'pkgs/applications/video/handbrake/default.nix') diff --git a/pkgs/applications/video/handbrake/default.nix b/pkgs/applications/video/handbrake/default.nix index aa2407134f383..7155d63b8dcc2 100644 --- a/pkgs/applications/video/handbrake/default.nix +++ b/pkgs/applications/video/handbrake/default.nix @@ -2,10 +2,14 @@ # # Derivation patches HandBrake to use Nix closure dependencies. # +# NOTE: 2019-07-19: This derivation does not currently support the native macOS +# GUI--it produces the "HandbrakeCLI" CLI version only. In the future it would +# 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, fetchurl, # Main build tools - python2, pkgconfig, autoconf, automake, cmake, nasm, libtool, m4, + python2, pkgconfig, autoconf, automake, cmake, nasm, libtool, m4, lzma, # Processing, video codecs, containers ffmpeg-full, nv-codec-headers, libogg, x264, x265, libvpx, libtheora, # Codecs, audio @@ -14,20 +18,34 @@ libiconv, fribidi, fontconfig, freetype, libass, jansson, libxml2, harfbuzz, # Optical media libdvdread, libdvdnav, libdvdcss, libbluray, - useGtk ? true, wrapGAppsHook ? null, - intltool ? null, - glib ? null, - gtk3 ? null, - libappindicator-gtk3 ? null, - libnotify ? null, - gst_all_1 ? null, - dbus-glib ? null, - udev ? null, - libgudev ? null, - hicolor-icon-theme ? null, + # Darwin-specific + AudioToolbox ? null, + Foundation ? null, + libobjc ? null, + VideoToolbox ? null, + # 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, wrapGAppsHook ? null, + intltool ? null, + glib ? null, + gtk3 ? null, + libappindicator-gtk3 ? null, + libnotify ? null, + gst_all_1 ? null, + dbus-glib ? null, + udev ? null, + libgudev ? null, + hicolor-icon-theme ? null, + # FDK useFdk ? false, fdk_aac ? null }: +assert stdenv.isDarwin -> AudioToolbox != null && Foundation != null + && libobjc != null && VideoToolbox != null; + stdenv.mkDerivation rec { pname = "handbrake"; version = "1.2.2"; @@ -45,12 +63,13 @@ stdenv.mkDerivation rec { ffmpeg-full libogg libtheora x264 x265 libvpx libopus lame libvorbis a52dec speex libsamplerate libiconv fribidi fontconfig freetype libass jansson libxml2 harfbuzz - libdvdread libdvdnav libdvdcss libbluray + libdvdread libdvdnav libdvdcss libbluray lzma ] ++ lib.optionals useGtk [ glib gtk3 libappindicator-gtk3 libnotify gst_all_1.gstreamer gst_all_1.gst-plugins-base dbus-glib udev libgudev hicolor-icon-theme ] ++ lib.optional useFdk fdk_aac + ++ lib.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" ++ lib.optional stdenv.isLinux nv-codec-headers; @@ -66,6 +85,8 @@ stdenv.mkDerivation rec { substituteInPlace libhb/module.defs \ --replace /usr/include/libxml2 ${libxml2.dev}/include/libxml2 + substituteInPlace libhb/module.defs \ + --replace '$(CONTRIB.build/)include/libxml2' ${libxml2.dev}/include/libxml2 # Force using nixpkgs dependencies sed -i '/MODULES += contrib/d' make/include/main.defs @@ -75,8 +96,9 @@ stdenv.mkDerivation rec { configureFlags = [ "--disable-df-fetch" "--disable-df-verify" - (if useGtk then "--disable-gtk-update-checks" else "--disable-gtk") - (if useFdk then "--enable-fdk-aac" else "") + (if useGtk then "--disable-gtk-update-checks" else "--disable-gtk") + (if useFdk then "--enable-fdk-aac" else "") + (if stdenv.isDarwin then "--disable-xcode" else "") ]; # NOTE: 2018-12-27: Check NixOS HandBrake test if changing -- cgit 1.4.1 From aaf3881a80b4d41466d5e2cd8d36d36e89698186 Mon Sep 17 00:00:00 2001 From: Vladimír Čunát Date: Mon, 16 Sep 2019 08:26:51 +0200 Subject: handbrake: enableParallelBuilding = false It doesn't build too long anyway, so let's prefer reliability. --- pkgs/applications/video/handbrake/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'pkgs/applications/video/handbrake/default.nix') diff --git a/pkgs/applications/video/handbrake/default.nix b/pkgs/applications/video/handbrake/default.nix index 7155d63b8dcc2..f4d75ba1e5f64 100644 --- a/pkgs/applications/video/handbrake/default.nix +++ b/pkgs/applications/video/handbrake/default.nix @@ -78,7 +78,8 @@ stdenv.mkDerivation rec { # (default distribution bundles&builds 3rd party libs), # don't trigger cmake build dontUseCmakeConfigure = true; - enableParallelBuilding = true; + # cp: cannot create regular file './internal_defaults.json': File exists + enableParallelBuilding = false; preConfigure = '' patchShebangs scripts -- cgit 1.4.1