Patchwork gnu: Add Handbrake.

login
register
mail settings
Submitter Eric Bavier
Date Oct. 31, 2016, 3:08 a.m.
Message ID <20161031030822.10785-1-bavier@member.fsf.org>
Download mbox | patch
Permalink /patch/17029/
State New
Headers show

Comments

Eric Bavier - Oct. 31, 2016, 3:08 a.m.
* gnu/packages/video.scm (handbrake): New variable.
* gnu/packages/patches/handbrake-pkg-config-path.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Add it.
---
 gnu/local.mk                                       |   1 +
 .../patches/handbrake-pkg-config-path.patch        |  13 +++
 gnu/packages/video.scm                             | 114 +++++++++++++++++++++
 3 files changed, 128 insertions(+)
 create mode 100644 gnu/packages/patches/handbrake-pkg-config-path.patch
Efraim Flashner - Oct. 31, 2016, 8:09 a.m.
On Sun, Oct 30, 2016 at 10:08:22PM -0500, Eric Bavier wrote:
> * gnu/packages/video.scm (handbrake): New variable.
> * gnu/packages/patches/handbrake-pkg-config-path.patch: New patch.
> * gnu/local.mk (dist_patch_DATA): Add it.
> ---
>  gnu/local.mk                                       |   1 +
>  .../patches/handbrake-pkg-config-path.patch        |  13 +++
>  gnu/packages/video.scm                             | 114 +++++++++++++++++++++
>  3 files changed, 128 insertions(+)
>  create mode 100644 gnu/packages/patches/handbrake-pkg-config-path.patch
> 
> diff --git a/gnu/local.mk b/gnu/local.mk
> index a64b7ec..1cdcf42 100644
> --- a/gnu/local.mk
> +++ b/gnu/local.mk
> @@ -589,6 +589,7 @@ dist_patch_DATA =						\
>    %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch	\
>    %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
>    %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
> +  %D%/packages/patches/handbrake-pkg-config-path.patch		\
>    %D%/packages/patches/hdf4-architectures.patch 		\
>    %D%/packages/patches/hdf4-reproducibility.patch 		\
>    %D%/packages/patches/hdf4-shared-fortran.patch 		\
> diff --git a/gnu/packages/patches/handbrake-pkg-config-path.patch b/gnu/packages/patches/handbrake-pkg-config-path.patch
> new file mode 100644
> index 0000000..fafdb99
> --- /dev/null
> +++ b/gnu/packages/patches/handbrake-pkg-config-path.patch
> @@ -0,0 +1,13 @@
> +Do not clobber PKG_CONFIG_PATH during configure.
> +
> +--- HandBrake-0.10.5/gtk/module.rules.orig	2016-02-11 14:14:05.000000000 -0600
> ++++ HandBrake-0.10.5/gtk/module.rules	2016-10-29 22:27:50.550960848 -0500
> +@@ -15,7 +15,7 @@
> + 	set -e; cd $(GTK.src/); NOCONFIGURE=1 ./autogen.sh
> + 	set -e; cd $(GTK.build/); $(call fn.ABSOLUTE,$(GTK.src/))configure \
> + 		$(GTK.CONFIGURE.extra) \
> +-		PKG_CONFIG_PATH=$(BUILD/)contrib/lib/pkgconfig \
> ++		PKG_CONFIG_PATH=$(BUILD/)contrib/lib/pkgconfig$(if $(PKG_CONFIG_PATH),:)$(PKG_CONFIG_PATH) \
> + 	    CFLAGS="$(call fn.ARGS,GTK.GCC,.g .O *D ?extra)" \
> + 	    LDFLAGS="$(call fn.ARGS,GTK.GCC,?strip .g .O ?extra.exe)" \
> + 	    --prefix=$(PREFIX) \
> diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
> index e9e419c..c7cc27a 100644
> --- a/gnu/packages/video.scm
> +++ b/gnu/packages/video.scm
> @@ -11,6 +11,7 @@
>  ;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
>  ;;; Copyright © 2016 Dmitry Nikolaev <cameltheman@gmail.com>
>  ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
> +;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -42,6 +43,7 @@
>    #:use-module (guix build-system glib-or-gtk)
>    #:use-module (guix build-system python)
>    #:use-module (guix build-system waf)
> +  #:use-module (guix build-system glib-or-gtk)

this one is extra, it's there 3 lines up :)

>    #:use-module (gnu packages)
>    #:use-module (gnu packages algebra)
>    #:use-module (gnu packages audio)
> @@ -50,6 +52,7 @@
>    #:use-module (gnu packages base)
>    #:use-module (gnu packages bison)
>    #:use-module (gnu packages cdrom)
> +  #:use-module (gnu packages cmake)
>    #:use-module (gnu packages compression)
>    #:use-module (gnu packages curl)
>    #:use-module (gnu packages databases)
> @@ -63,11 +66,14 @@
>    #:use-module (gnu packages gl)
>    #:use-module (gnu packages glib)
>    #:use-module (gnu packages guile)
> +  #:use-module (gnu packages gnome)
>    #:use-module (gnu packages gnupg)
> +  #:use-module (gnu packages gstreamer)
>    #:use-module (gnu packages gtk)
>    #:use-module (gnu packages image)
>    #:use-module (gnu packages linux)
>    #:use-module (gnu packages lua)
> +  #:use-module (gnu packages m4)
>    #:use-module (gnu packages mp3)
>    #:use-module (gnu packages ncurses)
>    #:use-module (gnu packages ocr)
> @@ -84,6 +90,7 @@
>    #:use-module (gnu packages tls)
>    #:use-module (gnu packages version-control)
>    #:use-module (gnu packages web)
> +  #:use-module (gnu packages webkit)
>    #:use-module (gnu packages xdisorg)
>    #:use-module (gnu packages xiph)
>    #:use-module (gnu packages xml)
> @@ -1684,3 +1691,110 @@ specifications.")
>      (description "libaacs is a library which implements the Advanced Access
>  Content System specification.")
>      (license license:lgpl2.1+)))
> +
> +(define-public handbrake
> +  (package
> +    (name "handbrake")
> +    (version "0.10.5")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (string-append "https://handbrake.fr/rotation.php?file="
> +                                  "HandBrake-" version ".tar.bz2"))
> +              (file-name (string-append "handbrake-" version ".tar.bz2"))
> +              (sha256
> +               (base32
> +                "1w720y3bplkz187wgvy4a4xm0vpppg45mlni55l6yi8v2bfk14pv"))
> +              (patches (search-patches "handbrake-pkg-config-path.patch"))
> +              (modules '((guix build utils)))
> +              (snippet
> +               ;; Remove bundled libraries and source not necessary for
> +               ;; running under a GNU environment.
> +               '(for-each delete-file-recursively '("contrib" "macosx" "win")))))
> +    (build-system  glib-or-gtk-build-system)
> +    (native-inputs
> +     `(("automake" ,automake)           ;gui subpackage must be bootstrapped
> +       ("autoconf" ,autoconf)
> +       ("curl" ,curl)                   ;not actually used, but tested for
> +       ("intltool" ,intltool)
> +       ("libtool" ,libtool)
> +       ("pkg-config" ,pkg-config)
> +       ("python" ,python-2)             ;for configuration
> +       ("yasm" ,yasm)))
> +    (inputs
> +     `(("bzip2" ,bzip2)
> +       ("dbus-glib" ,dbus-glib)
> +       ("ffmpeg" ,ffmpeg)
> +       ("fontconfig" ,fontconfig)
> +       ("freetype" ,freetype)
> +       ("glib" ,glib)
> +       ("gstreamer" ,gstreamer)
> +       ("gst-plugins-base" ,gst-plugins-base)
> +       ("gtk+" ,gtk+)
> +       ("lame" ,lame)
> +       ("libass" ,libass)
> +       ("libbluray" ,libbluray)
> +       ("libdvdnav" ,libdvdnav)
> +       ("libdvdread" ,libdvdread)
> +       ("libgudev" ,libgudev)
> +       ("libmpeg2" ,libmpeg2)
> +       ("libnotify" ,libnotify)
> +       ("libogg" ,libogg)
> +       ("libsamplerate" ,libsamplerate)
> +       ("libtheora" ,libtheora)
> +       ("libvorbis" ,libvorbis)
> +       ("libvpx" ,libvpx)
> +       ("libxml2" ,libxml2)
> +       ("libx264" ,libx264)
> +       ("libx265" ,x265)
> +       ("zlib" ,zlib)))
> +    (arguments
> +     `(#:tests? #f             ;tests require Ruby and claim to be unsupported
> +       #:configure-flags '("--enable-gtk")

 I looked to see if there was the --ignore-options-i-dont-understand
 flag and I didn't see it. Do we need any of the other flags?
 --disable-gtk-update-checks
 --enable-qsv (intel quick sync, if we support it)
 --enable-hwd
 --enable-x265

 would --fetch=wget eliminate the need for curl in native-inputs?

> +       #:phases
> +       (modify-phases %standard-phases
> +         (add-before 'patch-source-shebangs 'bootstrap-gtk
> +           ;; Run bootstrap ahead of time so that shebangs get patched.
> +           (lambda _
> +             (setenv "CONFIG_SHELL" (which "sh"))
> +             (and
> +              (begin
> +                (setenv "NOCONFIGURE" "1")
> +                (zero? (system* "sh" "./gtk/autogen.sh")))
> +              ;; Patch the Makefile so that it doesn't bootstrap again.
> +              (begin
> +                (substitute* "gtk/module.rules"
> +                  ((".*autogen\\.sh.*") ""))
> +                #t))))
> +         (add-before 'configure 'disable-contrib
> +           (lambda _
> +             (substitute* "make/include/main.defs"
> +               ;; Disable unconditional inclusion of some "contrib"
> +               ;; libraries (ffmpeg, libvpx, libdvdread, libdvdnav,
> +               ;; and libbluray), which would lead to fetching and
> +               ;; building of these libraries.  Use our own instead.
> +               (("MODULES \\+= contrib") "# MODULES += contrib"))
> +             #t))
> +         (add-before 'configure 'fix-x265-linking
> +           (lambda _
> +             (substitute* "test/module.defs"
> +               ;; Fix missing library during linking error
> +               (("TEST.GCC.l =") "TEST.GCC.l = x265"))
> +             #t))
> +         (replace 'configure
> +           (lambda* (#:key outputs configure-flags #:allow-other-keys)
> +             ;; 'configure' is not an autoconf-generated script, and
> +             ;; errors on unrecognized arguments,
> +             ;; e.g. --enable-fast-install
> +             (let ((out (assoc-ref outputs "out")))
> +               (zero? (apply system* "./configure"
> +                             (string-append "--prefix=" out)
> +                             (or configure-flags '()))))))
> +         (add-after 'configure 'chdir-build
> +           (lambda _ (chdir "./build") #t)))))
> +    (home-page "https://handbrake.fr")
> +    (synopsis "Video transcoder")
> +    (description
> +     "HandBrake is a tool for converting video from any format to a selection
> +of modern, widely supported codecs.")
> +    ;; Most under GPL version 2, and portions under BSD 3 Clause
> +    (license (list license:gpl2 license:bsd-3))))
> --
> 2.10.0
> 
>
Efraim Flashner - Oct. 31, 2016, 8:46 a.m.
On Mon, Oct 31, 2016 at 10:09:26AM +0200, Efraim Flashner wrote:
> On Sun, Oct 30, 2016 at 10:08:22PM -0500, Eric Bavier wrote:
> > * gnu/packages/video.scm (handbrake): New variable.
> > * gnu/packages/patches/handbrake-pkg-config-path.patch: New patch.
> > * gnu/local.mk (dist_patch_DATA): Add it.
...
> >    #:use-module (gnu packages base)
> >    #:use-module (gnu packages bison)
> >    #:use-module (gnu packages cdrom)
> > +  #:use-module (gnu packages cmake)

I'm not sure you need this one

> >    #:use-module (gnu packages compression)
> >    #:use-module (gnu packages curl)
> >    #:use-module (gnu packages databases)
...
> > +       ("libx264" ,libx264)
> > +       ("libx265" ,x265)
> > +       ("zlib" ,zlib)))
> > +    (arguments
> > +     `(#:tests? #f             ;tests require Ruby and claim to be unsupported
> > +       #:configure-flags '("--enable-gtk")
> 
>  I looked to see if there was the --ignore-options-i-dont-understand
>  flag and I didn't see it. Do we need any of the other flags?
>  --disable-gtk-update-checks
>  --enable-qsv (intel quick sync, if we support it)
>  --enable-hwd
>  --enable-x265
> 
>  would --fetch=wget eliminate the need for curl in native-inputs?
> 

to answer some of my own questions, wget isn't natively there, using
'--fetch=wget' with curl and no wget fails configuring.

qsv: not packaged
hwd: also breaks configure
adding '--enable-x265' doesn't remove the need for the 'fix-x265-linking
issue

> > +       #:phases
> > +       (modify-phases %standard-phases
> > +         (add-before 'patch-source-shebangs 'bootstrap-gtk
> > +           ;; Run bootstrap ahead of time so that shebangs get patched.
> > +           (lambda _
> > +             (setenv "CONFIG_SHELL" (which "sh"))
> > +             (and
> > +              (begin
> > +                (setenv "NOCONFIGURE" "1")
> > +                (zero? (system* "sh" "./gtk/autogen.sh")))
> > +              ;; Patch the Makefile so that it doesn't bootstrap again.
> > +              (begin
> > +                (substitute* "gtk/module.rules"
> > +                  ((".*autogen\\.sh.*") ""))
> > +                #t))))

I commented the autogen part out by accident and it didn't seem to be
needed afterall.

> > +         (add-before 'configure 'disable-contrib
> > +           (lambda _
> > +             (substitute* "make/include/main.defs"
> > +               ;; Disable unconditional inclusion of some "contrib"
> > +               ;; libraries (ffmpeg, libvpx, libdvdread, libdvdnav,
> > +               ;; and libbluray), which would lead to fetching and
> > +               ;; building of these libraries.  Use our own instead.
> > +               (("MODULES \\+= contrib") "# MODULES += contrib"))
> > +             #t))
> > +         (add-before 'configure 'fix-x265-linking
> > +           (lambda _
> > +             (substitute* "test/module.defs"
> > +               ;; Fix missing library during linking error
> > +               (("TEST.GCC.l =") "TEST.GCC.l = x265"))
> > +             #t))
> > +         (replace 'configure
> > +           (lambda* (#:key outputs configure-flags #:allow-other-keys)
> > +             ;; 'configure' is not an autoconf-generated script, and
> > +             ;; errors on unrecognized arguments,
> > +             ;; e.g. --enable-fast-install
> > +             (let ((out (assoc-ref outputs "out")))
> > +               (zero? (apply system* "./configure"
> > +                             (string-append "--prefix=" out)
> > +                             (or configure-flags '()))))))
> > +         (add-after 'configure 'chdir-build
> > +           (lambda _ (chdir "./build") #t)))))
> > +    (home-page "https://handbrake.fr")
> > +    (synopsis "Video transcoder")
> > +    (description
> > +     "HandBrake is a tool for converting video from any format to a selection
> > +of modern, widely supported codecs.")
> > +    ;; Most under GPL version 2, and portions under BSD 3 Clause
> > +    (license (list license:gpl2 license:bsd-3))))
> > --
> > 2.10.0
> > 
> >
Ricardo Wurmus - Oct. 31, 2016, 9:30 a.m.
Eric Bavier <bavier@member.fsf.org> writes:

> * gnu/packages/video.scm (handbrake): New variable.
> * gnu/packages/patches/handbrake-pkg-config-path.patch: New patch.
> * gnu/local.mk (dist_patch_DATA): Add it.

Yay, thanks for the patch!

>  gnu/local.mk                                       |   1 +
>  .../patches/handbrake-pkg-config-path.patch        |  13 +++
>  gnu/packages/video.scm                             | 114 +++++++++++++++++++++
>  3 files changed, 128 insertions(+)
>  create mode 100644 gnu/packages/patches/handbrake-pkg-config-path.patch
>
> diff --git a/gnu/local.mk b/gnu/local.mk
> index a64b7ec..1cdcf42 100644
> --- a/gnu/local.mk
> +++ b/gnu/local.mk
> @@ -589,6 +589,7 @@ dist_patch_DATA =						\
>    %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch	\
>    %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
>    %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
> +  %D%/packages/patches/handbrake-pkg-config-path.patch		\
>    %D%/packages/patches/hdf4-architectures.patch 		\
>    %D%/packages/patches/hdf4-reproducibility.patch 		\
>    %D%/packages/patches/hdf4-shared-fortran.patch 		\
> diff --git a/gnu/packages/patches/handbrake-pkg-config-path.patch b/gnu/packages/patches/handbrake-pkg-config-path.patch
> new file mode 100644
> index 0000000..fafdb99
> --- /dev/null
> +++ b/gnu/packages/patches/handbrake-pkg-config-path.patch
> @@ -0,0 +1,13 @@
> +Do not clobber PKG_CONFIG_PATH during configure.
> +
> +--- HandBrake-0.10.5/gtk/module.rules.orig	2016-02-11 14:14:05.000000000 -0600
> ++++ HandBrake-0.10.5/gtk/module.rules	2016-10-29 22:27:50.550960848 -0500
> +@@ -15,7 +15,7 @@
> + 	set -e; cd $(GTK.src/); NOCONFIGURE=1 ./autogen.sh
> + 	set -e; cd $(GTK.build/); $(call fn.ABSOLUTE,$(GTK.src/))configure \
> + 		$(GTK.CONFIGURE.extra) \
> +-		PKG_CONFIG_PATH=$(BUILD/)contrib/lib/pkgconfig \
> ++		PKG_CONFIG_PATH=$(BUILD/)contrib/lib/pkgconfig$(if $(PKG_CONFIG_PATH),:)$(PKG_CONFIG_PATH) \
> + 	    CFLAGS="$(call fn.ARGS,GTK.GCC,.g .O *D ?extra)" \
> + 	    LDFLAGS="$(call fn.ARGS,GTK.GCC,?strip .g .O ?extra.exe)" \
> + 	    --prefix=$(PREFIX) \
> diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
> index e9e419c..c7cc27a 100644
> --- a/gnu/packages/video.scm
> +++ b/gnu/packages/video.scm
> @@ -11,6 +11,7 @@
>  ;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
>  ;;; Copyright © 2016 Dmitry Nikolaev <cameltheman@gmail.com>
>  ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
> +;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -42,6 +43,7 @@
>    #:use-module (guix build-system glib-or-gtk)
>    #:use-module (guix build-system python)
>    #:use-module (guix build-system waf)
> +  #:use-module (guix build-system glib-or-gtk)

This line is not needed (it’s a duplicate of what’s three lines above).

>    #:use-module (gnu packages)
>    #:use-module (gnu packages algebra)
>    #:use-module (gnu packages audio)
> @@ -50,6 +52,7 @@
>    #:use-module (gnu packages base)
>    #:use-module (gnu packages bison)
>    #:use-module (gnu packages cdrom)
> +  #:use-module (gnu packages cmake)
>    #:use-module (gnu packages compression)
>    #:use-module (gnu packages curl)
>    #:use-module (gnu packages databases)
> @@ -63,11 +66,14 @@
>    #:use-module (gnu packages gl)
>    #:use-module (gnu packages glib)
>    #:use-module (gnu packages guile)
> +  #:use-module (gnu packages gnome)
>    #:use-module (gnu packages gnupg)
> +  #:use-module (gnu packages gstreamer)
>    #:use-module (gnu packages gtk)
>    #:use-module (gnu packages image)
>    #:use-module (gnu packages linux)
>    #:use-module (gnu packages lua)
> +  #:use-module (gnu packages m4)
>    #:use-module (gnu packages mp3)
>    #:use-module (gnu packages ncurses)
>    #:use-module (gnu packages ocr)
> @@ -84,6 +90,7 @@
>    #:use-module (gnu packages tls)
>    #:use-module (gnu packages version-control)
>    #:use-module (gnu packages web)
> +  #:use-module (gnu packages webkit)
>    #:use-module (gnu packages xdisorg)
>    #:use-module (gnu packages xiph)
>    #:use-module (gnu packages xml)
> @@ -1684,3 +1691,110 @@ specifications.")
>      (description "libaacs is a library which implements the Advanced Access
>  Content System specification.")
>      (license license:lgpl2.1+)))
> +
> +(define-public handbrake
> +  (package
> +    (name "handbrake")
> +    (version "0.10.5")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (string-append "https://handbrake.fr/rotation.php?file="
> +                                  "HandBrake-" version ".tar.bz2"))
> +              (file-name (string-append "handbrake-" version ".tar.bz2"))
> +              (sha256
> +               (base32
> +                "1w720y3bplkz187wgvy4a4xm0vpppg45mlni55l6yi8v2bfk14pv"))
> +              (patches (search-patches "handbrake-pkg-config-path.patch"))
> +              (modules '((guix build utils)))
> +              (snippet
> +               ;; Remove bundled libraries and source not necessary for
> +               ;; running under a GNU environment.
> +               '(for-each delete-file-recursively '("contrib" "macosx" "win")))))

Please use '(begin … #t) here.

> +    (build-system  glib-or-gtk-build-system)
> +    (native-inputs
> +     `(("automake" ,automake)           ;gui subpackage must be bootstrapped
> +       ("autoconf" ,autoconf)
> +       ("curl" ,curl)                   ;not actually used, but tested for
> +       ("intltool" ,intltool)
> +       ("libtool" ,libtool)
> +       ("pkg-config" ,pkg-config)
> +       ("python" ,python-2)             ;for configuration
> +       ("yasm" ,yasm)))
> +    (inputs
> +     `(("bzip2" ,bzip2)
> +       ("dbus-glib" ,dbus-glib)
> +       ("ffmpeg" ,ffmpeg)
> +       ("fontconfig" ,fontconfig)
> +       ("freetype" ,freetype)
> +       ("glib" ,glib)
> +       ("gstreamer" ,gstreamer)
> +       ("gst-plugins-base" ,gst-plugins-base)
> +       ("gtk+" ,gtk+)
> +       ("lame" ,lame)
> +       ("libass" ,libass)
> +       ("libbluray" ,libbluray)
> +       ("libdvdnav" ,libdvdnav)
> +       ("libdvdread" ,libdvdread)
> +       ("libgudev" ,libgudev)
> +       ("libmpeg2" ,libmpeg2)
> +       ("libnotify" ,libnotify)
> +       ("libogg" ,libogg)
> +       ("libsamplerate" ,libsamplerate)
> +       ("libtheora" ,libtheora)
> +       ("libvorbis" ,libvorbis)
> +       ("libvpx" ,libvpx)
> +       ("libxml2" ,libxml2)
> +       ("libx264" ,libx264)
> +       ("libx265" ,x265)
> +       ("zlib" ,zlib)))
> +    (arguments
> +     `(#:tests? #f             ;tests require Ruby and claim to be unsupported
> +       #:configure-flags '("--enable-gtk")
> +       #:phases
> +       (modify-phases %standard-phases
> +         (add-before 'patch-source-shebangs 'bootstrap-gtk
> +           ;; Run bootstrap ahead of time so that shebangs get patched.
> +           (lambda _
> +             (setenv "CONFIG_SHELL" (which "sh"))
> +             (and
> +              (begin
> +                (setenv "NOCONFIGURE" "1")
> +                (zero? (system* "sh" "./gtk/autogen.sh")))

I don’t think “setenv” is limited to the “begin” block as it has a
side-effect.  You could pull the “setenv” outside of the “and” expression.

> +              ;; Patch the Makefile so that it doesn't bootstrap again.
> +              (begin
> +                (substitute* "gtk/module.rules"
> +                  ((".*autogen\\.sh.*") ""))
> +                #t))))
> +         (add-before 'configure 'disable-contrib
> +           (lambda _
> +             (substitute* "make/include/main.defs"
> +               ;; Disable unconditional inclusion of some "contrib"
> +               ;; libraries (ffmpeg, libvpx, libdvdread, libdvdnav,
> +               ;; and libbluray), which would lead to fetching and
> +               ;; building of these libraries.  Use our own instead.
> +               (("MODULES \\+= contrib") "# MODULES += contrib"))
> +             #t))
> +         (add-before 'configure 'fix-x265-linking
> +           (lambda _
> +             (substitute* "test/module.defs"
> +               ;; Fix missing library during linking error
> +               (("TEST.GCC.l =") "TEST.GCC.l = x265"))
> +             #t))
> +         (replace 'configure
> +           (lambda* (#:key outputs configure-flags #:allow-other-keys)
> +             ;; 'configure' is not an autoconf-generated script, and
> +             ;; errors on unrecognized arguments,
> +             ;; e.g. --enable-fast-install
> +             (let ((out (assoc-ref outputs "out")))
> +               (zero? (apply system* "./configure"
> +                             (string-append "--prefix=" out)
> +                             (or configure-flags '()))))))
> +         (add-after 'configure 'chdir-build
> +           (lambda _ (chdir "./build") #t)))))
> +    (home-page "https://handbrake.fr")
> +    (synopsis "Video transcoder")
> +    (description
> +     "HandBrake is a tool for converting video from any format to a selection
> +of modern, widely supported codecs.")
> +    ;; Most under GPL version 2, and portions under BSD 3 Clause
> +    (license (list license:gpl2 license:bsd-3))))

Okay!

~~ Ricardo

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index a64b7ec..1cdcf42 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -589,6 +589,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch	\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
   %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
+  %D%/packages/patches/handbrake-pkg-config-path.patch		\
   %D%/packages/patches/hdf4-architectures.patch 		\
   %D%/packages/patches/hdf4-reproducibility.patch 		\
   %D%/packages/patches/hdf4-shared-fortran.patch 		\
diff --git a/gnu/packages/patches/handbrake-pkg-config-path.patch b/gnu/packages/patches/handbrake-pkg-config-path.patch
new file mode 100644
index 0000000..fafdb99
--- /dev/null
+++ b/gnu/packages/patches/handbrake-pkg-config-path.patch
@@ -0,0 +1,13 @@ 
+Do not clobber PKG_CONFIG_PATH during configure.
+
+--- HandBrake-0.10.5/gtk/module.rules.orig	2016-02-11 14:14:05.000000000 -0600
++++ HandBrake-0.10.5/gtk/module.rules	2016-10-29 22:27:50.550960848 -0500
+@@ -15,7 +15,7 @@
+ 	set -e; cd $(GTK.src/); NOCONFIGURE=1 ./autogen.sh
+ 	set -e; cd $(GTK.build/); $(call fn.ABSOLUTE,$(GTK.src/))configure \
+ 		$(GTK.CONFIGURE.extra) \
+-		PKG_CONFIG_PATH=$(BUILD/)contrib/lib/pkgconfig \
++		PKG_CONFIG_PATH=$(BUILD/)contrib/lib/pkgconfig$(if $(PKG_CONFIG_PATH),:)$(PKG_CONFIG_PATH) \
+ 	    CFLAGS="$(call fn.ARGS,GTK.GCC,.g .O *D ?extra)" \
+ 	    LDFLAGS="$(call fn.ARGS,GTK.GCC,?strip .g .O ?extra.exe)" \
+ 	    --prefix=$(PREFIX) \
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index e9e419c..c7cc27a 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -11,6 +11,7 @@ 
 ;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
 ;;; Copyright © 2016 Dmitry Nikolaev <cameltheman@gmail.com>
 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
+;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +43,7 @@ 
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system python)
   #:use-module (guix build-system waf)
+  #:use-module (guix build-system glib-or-gtk)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages audio)
@@ -50,6 +52,7 @@ 
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages cdrom)
+  #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
@@ -63,11 +66,14 @@ 
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages guile)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
+  #:use-module (gnu packages m4)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages ocr)
@@ -84,6 +90,7 @@ 
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages webkit)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
@@ -1684,3 +1691,110 @@  specifications.")
     (description "libaacs is a library which implements the Advanced Access
 Content System specification.")
     (license license:lgpl2.1+)))
+
+(define-public handbrake
+  (package
+    (name "handbrake")
+    (version "0.10.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://handbrake.fr/rotation.php?file="
+                                  "HandBrake-" version ".tar.bz2"))
+              (file-name (string-append "handbrake-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1w720y3bplkz187wgvy4a4xm0vpppg45mlni55l6yi8v2bfk14pv"))
+              (patches (search-patches "handbrake-pkg-config-path.patch"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; Remove bundled libraries and source not necessary for
+               ;; running under a GNU environment.
+               '(for-each delete-file-recursively '("contrib" "macosx" "win")))))
+    (build-system  glib-or-gtk-build-system)
+    (native-inputs
+     `(("automake" ,automake)           ;gui subpackage must be bootstrapped
+       ("autoconf" ,autoconf)
+       ("curl" ,curl)                   ;not actually used, but tested for
+       ("intltool" ,intltool)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-2)             ;for configuration
+       ("yasm" ,yasm)))
+    (inputs
+     `(("bzip2" ,bzip2)
+       ("dbus-glib" ,dbus-glib)
+       ("ffmpeg" ,ffmpeg)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("glib" ,glib)
+       ("gstreamer" ,gstreamer)
+       ("gst-plugins-base" ,gst-plugins-base)
+       ("gtk+" ,gtk+)
+       ("lame" ,lame)
+       ("libass" ,libass)
+       ("libbluray" ,libbluray)
+       ("libdvdnav" ,libdvdnav)
+       ("libdvdread" ,libdvdread)
+       ("libgudev" ,libgudev)
+       ("libmpeg2" ,libmpeg2)
+       ("libnotify" ,libnotify)
+       ("libogg" ,libogg)
+       ("libsamplerate" ,libsamplerate)
+       ("libtheora" ,libtheora)
+       ("libvorbis" ,libvorbis)
+       ("libvpx" ,libvpx)
+       ("libxml2" ,libxml2)
+       ("libx264" ,libx264)
+       ("libx265" ,x265)
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:tests? #f             ;tests require Ruby and claim to be unsupported
+       #:configure-flags '("--enable-gtk")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'patch-source-shebangs 'bootstrap-gtk
+           ;; Run bootstrap ahead of time so that shebangs get patched.
+           (lambda _
+             (setenv "CONFIG_SHELL" (which "sh"))
+             (and
+              (begin
+                (setenv "NOCONFIGURE" "1")
+                (zero? (system* "sh" "./gtk/autogen.sh")))
+              ;; Patch the Makefile so that it doesn't bootstrap again.
+              (begin
+                (substitute* "gtk/module.rules"
+                  ((".*autogen\\.sh.*") ""))
+                #t))))
+         (add-before 'configure 'disable-contrib
+           (lambda _
+             (substitute* "make/include/main.defs"
+               ;; Disable unconditional inclusion of some "contrib"
+               ;; libraries (ffmpeg, libvpx, libdvdread, libdvdnav,
+               ;; and libbluray), which would lead to fetching and
+               ;; building of these libraries.  Use our own instead.
+               (("MODULES \\+= contrib") "# MODULES += contrib"))
+             #t))
+         (add-before 'configure 'fix-x265-linking
+           (lambda _
+             (substitute* "test/module.defs"
+               ;; Fix missing library during linking error
+               (("TEST.GCC.l =") "TEST.GCC.l = x265"))
+             #t))
+         (replace 'configure
+           (lambda* (#:key outputs configure-flags #:allow-other-keys)
+             ;; 'configure' is not an autoconf-generated script, and
+             ;; errors on unrecognized arguments,
+             ;; e.g. --enable-fast-install
+             (let ((out (assoc-ref outputs "out")))
+               (zero? (apply system* "./configure"
+                             (string-append "--prefix=" out)
+                             (or configure-flags '()))))))
+         (add-after 'configure 'chdir-build
+           (lambda _ (chdir "./build") #t)))))
+    (home-page "https://handbrake.fr")
+    (synopsis "Video transcoder")
+    (description
+     "HandBrake is a tool for converting video from any format to a selection
+of modern, widely supported codecs.")
+    ;; Most under GPL version 2, and portions under BSD 3 Clause
+    (license (list license:gpl2 license:bsd-3))))