From 46d30ae22f741e58c24d14755c76a337c88c9404 Mon Sep 17 00:00:00 2001
From: codyopel <codyopel@gmail.com>
Date: Mon, 11 May 2015 06:20:12 -0400
Subject: [PATCH] mkvtoolnix: 7.8.0 -> 7.9.0

---
 .../applications/video/mkvtoolnix/default.nix | 81 ++++++++++++-------
 pkgs/top-level/all-packages.nix               |  2 +
 2 files changed, 55 insertions(+), 28 deletions(-)

diff --git a/pkgs/applications/video/mkvtoolnix/default.nix b/pkgs/applications/video/mkvtoolnix/default.nix
index 01d96542c2e..0dbf4271383 100644
--- a/pkgs/applications/video/mkvtoolnix/default.nix
+++ b/pkgs/applications/video/mkvtoolnix/default.nix
@@ -1,49 +1,74 @@
-{ stdenv, fetchurl
-, libmatroska
-, flac
-, libvorbis
-, file
-, boost
-, xdg_utils
-, expat
-, withGUI ? true
-, wxGTK
-, zlib
-, ruby
-, gettext
-, pkgconfig
-, curl
+{ stdenv, fetchurl, gettext, pkgconfig, ruby
+, boost, expat, file, flac, libebml, libmatroska, libogg, libvorbis, xdg_utils, zlib
+# pugixml (not packaged)
+, buildConfig ? "all"
+, withGUI ? false, qt5 ? null # Disabled for now until upstream issues are resolved
+, legacyGUI ? true, wxGTK ? null
+# For now both qt5 and wxwidgets gui's are enabled, if wxwidgets is disabled the
+# build system doesn't install desktop entries, icons, etc...
 }:
 
-assert withGUI -> wxGTK != null;
+let
+  inherit (stdenv.lib) enableFeature optional;
+in
+
+assert withGUI -> qt5 != null;
+assert legacyGUI -> wxGTK != null;
 
 stdenv.mkDerivation rec {
-  version = "7.8.0";
   name = "mkvtoolnix-${version}";
+  version = "7.9.0";
 
   src = fetchurl {
     url = "http://www.bunkus.org/videotools/mkvtoolnix/sources/${name}.tar.xz";
-    sha256 = "0m7y9115bkfsm95hv2nq0hnd9w73jymsm071jm798w11vdskm8af";
+    sha256 = "0jmsgfkxrnplpmwlzynqdb4xf3x1z3dminz97gmddswwgnjqyy1r";
   };
 
-  buildInputs = [
-    libmatroska flac libvorbis file boost xdg_utils
-    expat zlib ruby gettext pkgconfig curl
-    ] ++ stdenv.lib.optional withGUI wxGTK;
+  patchPhase = ''
+    patchShebangs ./rake.d/
+    patchShebangs ./Rakefile
+    # Force ruby encoding to use UTF-8 or else when enabling qt5 the Rakefile may
+    # fail with `invalid byte sequence in US-ASCII' due to UTF-8 characters
+    # This workaround replaces an arbitrary comment in the drake file
+    sed -e 's,#--,Encoding.default_external = Encoding::UTF_8,' -i ./drake
+  '';
+
+  configureFlags = [
+    "--with-boost-libdir=${boost.lib}/lib"
+    "--without-curl"
+  ] ++ (
+    if (withGUI || legacyGUI) then [
+      "--with-mkvtoolnix-gui"
+      "--enable-gui"
+      (enableFeature withGUI "qt")
+      (enableFeature legacyGUI "wxwidgets")
+    ] else [
+      "--disable-gui"
+    ]
+  );
+
+  nativeBuildInputs = [ gettext pkgconfig ruby ];
+
+  buildInputs = [
+    boost expat file flac libebml libmatroska libogg libvorbis xdg_utils zlib
+  ] ++ optional withGUI qt5
+    ++ optional legacyGUI wxGTK;
+
+  enableParallelBuilding = true;
 
-  configureFlags = "--with-boost-libdir=${boost.lib}/lib";
   buildPhase = ''
-    ruby ./drake
+    ./drake
   '';
 
   installPhase = ''
-    ruby ./drake install
+    ./drake install
   '';
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "Cross-platform tools for Matroska";
     homepage = http://www.bunkus.org/videotools/mkvtoolnix/;
-    license = stdenv.lib.licenses.gpl2;
-    maintainers = with stdenv.lib.maintainers; [ fuuzetsu ];
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ codyopel fuuzetsu ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 716349d6074..9ac1bd592e3 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -7144,6 +7144,8 @@ let
 
   mkvtoolnix-cli = mkvtoolnix.override {
     withGUI = false;
+    qt5 = null;
+    legacyGUI = false;
     wxGTK = null;
   };