commit:     5768e02999c920ec004b58b73912afadd6dfc025
Author:     Alfred Wingate <parona <AT> protonmail <DOT> com>
AuthorDate: Mon Mar  3 02:47:50 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue May  6 18:39:53 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5768e029

media-video/handbrake: add 1.9.2

* Set tools explicitly for ffmpeg. bug #946831
* Take this as a chance to remove potential footguns with complicated seds.

Closes: https://bugs.gentoo.org/946831
Signed-off-by: Alfred Wingate <parona <AT> protonmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/41950
Signed-off-by: Sam James <sam <AT> gentoo.org>

 media-video/handbrake/Manifest                     |   1 +
 ...rake-1.9.2-allow-overriding-tools-via-env.patch |  24 +++
 ...ake-1.9.2-set-ffmpeg-toolchain-explicitly.patch |  36 ++++
 media-video/handbrake/handbrake-1.9.2.ebuild       | 205 +++++++++++++++++++++
 4 files changed, 266 insertions(+)

diff --git a/media-video/handbrake/Manifest b/media-video/handbrake/Manifest
index c413f78e38d3..8be319fc2958 100644
--- a/media-video/handbrake/Manifest
+++ b/media-video/handbrake/Manifest
@@ -1,3 +1,4 @@
 DIST handbrake-1.9.0.tar.bz2 9427823 BLAKE2B 
5e7c4aa054957dc61582956b7e2b9916f6746fac164e0f4a0ed85f863fe3b2aa2fd485761b1381e17ab39d9d3ed42de28266b2f664dad2b8dd0cd7d961886d5e
 SHA512 
6d09a8fea8505dce665fa2d1b03ca2b21c9e0dc4cbb5f8e0b736d6eae39017b13ee48cd4bea172a6a3b8be9bb5deb6467584dadf9c15ce81e7b7a96d3322a179
+DIST handbrake-1.9.2.tar.bz2 9431665 BLAKE2B 
33591a9b576ba64ca0d8aabe4a14f7ef25b657a1b1553f8ffc18dc7a6a708b0b79443f018f6633c2ec437d25a7b0e4d803c2b46c672d57cb970eab75df48f239
 SHA512 
3c01b516aa7926c432773f37a311284e215ec6947b74b5c47306c7b3ac5e986e791c4d0adb4f6e614b4bb6bebecb57ac9a59644bdb535d485321e3be65dcc820
 DIST handbrake-ffmpeg-7.1.tar.bz2 13260188 BLAKE2B 
32466fbefdeb30796a329869bf6fe547a0d3285ae8d9505758e5bff5103f5edf1bebd2dd8595822d0cd25e3754929ed47878ab42c420e248fb2d6ea51747145a
 SHA512 
3f28af9a0c0779b4a7f4e5fbfd94616eb83265856ef060a8bb8afbb9f1b899885a218f15b7ac2c48f724d961dd2742ef6544b237118cb94563ecf49fbd740e3b
 DIST handbrake-x265_4.1.tar.gz 1722231 BLAKE2B 
5950cc5361da88a8db5403b2837081347980cd31848ce77802e8a29cfb70f6b321d14ffa08c20270e80435076e36428c7de8293c3db9b6b2e8837aa512300126
 SHA512 
72798265423b605b0ca5f5541f3cc39f62dae7560a5a4023f8d38f6977ded80b1911ef8154c485fbe62ef97a051d938412934c9a00f3df010f11d83ffc650e7e

diff --git 
a/media-video/handbrake/files/handbrake-1.9.2-allow-overriding-tools-via-env.patch
 
b/media-video/handbrake/files/handbrake-1.9.2-allow-overriding-tools-via-env.patch
new file mode 100644
index 000000000000..8053c70b8aad
--- /dev/null
+++ 
b/media-video/handbrake/files/handbrake-1.9.2-allow-overriding-tools-via-env.patch
@@ -0,0 +1,24 @@
+From 32f63e103413661268452b482f61f0d22b2f359d Mon Sep 17 00:00:00 2001
+From: Alfred Wingate <[email protected]>
+Date: Wed, 25 Dec 2024 20:21:51 +0200
+Subject: [PATCH] Allow prepending tool option via env
+
+* GCC untouched due to incompatible assumptions.
+
+Signed-off-by: Alfred Wingate <[email protected]>
+--- a/make/configure.py
++++ b/make/configure.py
+@@ -1025,6 +1025,10 @@ class ToolProbe( Action ):
+         self.option = option
+         self.names  = []
+         self.kwargs = kwargs
++        if var.endswith('.exe'):
++            env = os.environ.get( var.removesuffix('.exe') )
++            if env is not None:
++                self.names.append( env )
+         for name in names:
+             try:
+                 name = str(name)
+-- 
+2.47.1
+

diff --git 
a/media-video/handbrake/files/handbrake-1.9.2-set-ffmpeg-toolchain-explicitly.patch
 
b/media-video/handbrake/files/handbrake-1.9.2-set-ffmpeg-toolchain-explicitly.patch
new file mode 100644
index 000000000000..18409625c7d6
--- /dev/null
+++ 
b/media-video/handbrake/files/handbrake-1.9.2-set-ffmpeg-toolchain-explicitly.patch
@@ -0,0 +1,36 @@
+From 7e670380373eb5be0c977f467c102eb1210951b5 Mon Sep 17 00:00:00 2001
+From: Alfred Wingate <[email protected]>
+Date: Wed, 25 Dec 2024 19:49:40 +0200
+Subject: [PATCH 1/2] Set toolchain explicitly for ffmpeg
+
+Signed-off-by: Alfred Wingate <[email protected]>
+--- a/contrib/ffmpeg/module.defs
++++ b/contrib/ffmpeg/module.defs
+@@ -76,7 +76,13 @@ FFMPEG.CONFIGURE.extra = \
+     --enable-filter=hwdownload \
+     --enable-filter=hwmap \
+     --enable-filter=hwupload \
+-    --cc="$(FFMPEG.GCC.gcc)"
++    --cc="$(FFMPEG.GCC.gcc)" \
++    --cxx="$(FFMPEG.GCC.gxx)" \
++    --ar="$(AR.exe)" \
++    --nm="$(NM.exe)" \
++    --strip="$(STRIP.exe)" \
++    --ranlib="$(RANLIB.exe)" \
++    --pkg-config="$(PKGCONFIG.exe)"
+ 
+ ifeq (size-aggressive,$(GCC.O))
+ FFMPEG.CONFIGURE.extra += \
+--- a/make/configure.py
++++ b/make/configure.py
+@@ -1665,6 +1665,7 @@ try:
+         strip      = ToolProbe( 'STRIP.exe',      'strip',      'strip', 
abort=True )
+         tar        = ToolProbe( 'TAR.exe',        'tar',        'gtar', 
'tar', abort=True )
+         python     = ToolProbe( 'PYTHON.exe',     'python',     
os.path.basename(sys.executable), abort=True )
++        nm         = ToolProbe( 'NM.exe',         'nm',         'nm', 
abort=True )
+ 
+         gcc_tools  = ['GCC.gcc',
+                       'cc',
+-- 
+2.47.1
+

diff --git a/media-video/handbrake/handbrake-1.9.2.ebuild 
b/media-video/handbrake/handbrake-1.9.2.ebuild
new file mode 100644
index 000000000000..95c6c604707c
--- /dev/null
+++ b/media-video/handbrake/handbrake-1.9.2.ebuild
@@ -0,0 +1,205 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{11..13} )
+
+inherit edo flag-o-matic multiprocessing python-any-r1 toolchain-funcs xdg
+
+DESCRIPTION="Open-source, GPL-licensed, multiplatform, multithreaded video 
transcoder"
+HOMEPAGE="https://handbrake.fr/ https://github.com/HandBrake/HandBrake";
+
+if [[ ${PV} == *9999* ]]; then
+       EGIT_REPO_URI="https://github.com/HandBrake/HandBrake.git";
+       inherit git-r3
+else
+       MY_P="HandBrake-${PV}"
+       
SRC_URI="https://github.com/HandBrake/HandBrake/releases/download/${PV}/${MY_P}-source.tar.bz2
 -> ${P}.tar.bz2"
+       S="${WORKDIR}/${MY_P}"
+       KEYWORDS="~amd64 ~arm64 ~x86"
+fi
+
+# contrib/<project>/module.defs
+declare -A BUNDLED=(
+       # Heavily patched in an incompatible way.
+       # Issues related to using system ffmpeg historically.
+       # See bug #829595 and #922828
+       
[ffmpeg]="https://github.com/HandBrake/HandBrake-contribs/releases/download/contribs2/ffmpeg-7.1.tar.bz2;";
+       # Patched in an incompatible way
+       
[x265]="https://github.com/HandBrake/HandBrake-contribs/releases/download/contribs2/x265_4.1.tar.gz;x265";
+       
[x265_8bit]="https://github.com/HandBrake/HandBrake-contribs/releases/download/contribs2/x265_4.1.tar.gz;x265";
+       
[x265_10bit]="https://github.com/HandBrake/HandBrake-contribs/releases/download/contribs2/x265_4.1.tar.gz;x265";
+       
[x265_12bit]="https://github.com/HandBrake/HandBrake-contribs/releases/download/contribs2/x265_4.1.tar.gz;x265";
+)
+
+bundle_src_uri() {
+       for name in "${!BUNDLED[@]}"; do
+               IFS=$';' read -r uri use <<< ${BUNDLED[${name}]}
+               local tarball=${uri##*/}
+               if [[ -n ${use} ]]; then
+                       SRC_URI+=" ${use}? ( ${uri} -> handbrake-${tarball} )"
+               else
+                       SRC_URI+=" ${uri} -> handbrake-${tarball}"
+               fi
+       done
+}
+
+bundle_src_uri
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="amf +fdk gui libdovi numa nvenc qsv x265"
+
+REQUIRED_USE="numa? ( x265 )"
+
+COMMON_DEPEND="
+       app-arch/bzip2
+       >=app-arch/xz-utils-5.2.6
+       dev-libs/jansson:=
+       >=media-libs/dav1d-1.0.0:=
+       >=media-libs/libjpeg-turbo-2.1.4:=
+       >=media-libs/libass-0.16.0:=
+       >=media-libs/libbluray-1.3.4:=
+       media-libs/libdvdnav
+       >=media-libs/libdvdread-6.1.3:=
+       media-libs/libtheora
+       media-libs/libvorbis
+       >=media-libs/libvpx-1.12.0:=
+       media-libs/opus
+       >=media-libs/speex-1.2.1
+       >=media-libs/svt-av1-1.4.1:=
+       >=media-libs/x264-0.0.20220222:=
+       >=media-libs/zimg-3.0.4
+       media-sound/lame
+       sys-libs/zlib
+       fdk? ( media-libs/fdk-aac:= )
+       libdovi? ( media-libs/libdovi:= )
+       gui? (
+               >=gui-libs/gtk-4.4:4[gstreamer]
+               dev-libs/glib:2
+               >=dev-libs/libxml2-2.10.3:=
+               x11-libs/gdk-pixbuf:2
+               x11-libs/pango
+       )
+       numa? ( sys-process/numactl )
+       nvenc? ( media-libs/nv-codec-headers )
+       qsv? (
+               media-libs/libva:=
+               media-libs/libvpl:=
+       )
+"
+RDEPEND="
+       ${COMMON_DEPEND}
+       amf? ( media-video/amdgpu-pro-amf )
+"
+DEPEND="
+       ${COMMON_DEPEND}
+       amf? ( media-libs/amf-headers )
+"
+# cmake needed for custom script: bug #852701
+BDEPEND="
+       ${PYTHON_DEPS}
+       dev-build/cmake
+       dev-lang/nasm
+       gui? (
+               dev-build/meson
+               sys-devel/gettext
+       )
+"
+
+PATCHES=(
+       "${FILESDIR}"/handbrake-1.9.0-link-libdovi-properly.patch
+       "${FILESDIR}"/handbrake-1.9.0-include-vpl-properly.patch
+       "${FILESDIR}"/handbrake-1.9.2-set-ffmpeg-toolchain-explicitly.patch
+       "${FILESDIR}"/handbrake-1.9.2-allow-overriding-tools-via-env.patch
+)
+
+src_unpack() {
+       if [[ ${PV} == 9999 ]]; then
+               git-r3_src_unpack
+       else
+               unpack ${P}.tar.bz2
+       fi
+}
+
+src_prepare() {
+       default
+
+       mkdir download || die
+       for name in "${!BUNDLED[@]}"; do
+               IFS=$';' read -r uri use <<< ${BUNDLED[${name}]}
+               local tarball="${uri##*/}"
+               if [[ -n ${use} ]]; then
+                       use ${use} || continue
+               fi
+               cp "${DISTDIR}/handbrake-${tarball}" download/${tarball} || die
+       done
+
+       # Get rid of leftover bundled library build definitions
+       sed -i -E \
+               -e "/MODULES \+= contrib\// { /($(IFS=$'|'; echo 
"${!BUNDLED[*]}"))$/! d }" \
+               "${S}"/make/include/main.defs || die
+
+       # noop fetching
+       sed -i -e '/DF..*.exe/ { s/= .*/= true/ }' make/include/tool.defs || die
+
+       # Use whichever python is set by portage
+       sed -i -e "s/for p in .*/for p in ${EPYTHON}/" configure || die
+}
+
+src_configure() {
+       tc-export CC CXX AR RANLIB NM
+
+       # noop strip
+       local -x STRIP="true"
+
+       # ODR violations, lto-type-mismatches
+       # bug #878899
+       filter-lto
+
+       local myconfargs=(
+               --force
+               --verbose
+               --disable-df-fetch
+               --disable-df-verify
+               --launch-jobs=$(get_makeopts_jobs)
+               --prefix="${EPREFIX}/usr"
+               --disable-flatpak
+               --no-harden #bug #890279
+               $(use_enable amf vce)
+               $(use_enable fdk fdk-aac)
+               $(use_enable gui gtk)
+               $(use_enable libdovi)
+               $(use_enable numa)
+               $(use_enable nvenc)
+               $(use_enable x265)
+               $(use_enable qsv)
+       )
+
+       edo ./configure ${myconfargs[@]}
+}
+
+src_compile() {
+       emake -C build
+}
+
+src_install() {
+       emake -C build DESTDIR="${D}" install
+       dodoc README.markdown AUTHORS.markdown NEWS.markdown THANKS.markdown
+}
+
+pkg_postinst() {
+       einfo "Gentoo builds of HandBrake are NOT SUPPORTED by upstream as they"
+       einfo "do not use the bundled (and often patched) upstream libraries."
+       einfo ""
+       einfo "Please do not raise bugs with upstream because of these ebuilds,"
+       einfo "report bugs to Gentoo's bugzilla or Multimedia forum instead."
+
+       einfo "For the CLI version of HandBrake, you can use \`HandBrakeCLI\`."
+       if use gui ; then
+               einfo "For the GUI version of HandBrake, you can run \`ghb\`."
+       fi
+
+       xdg_pkg_postinst
+}

Reply via email to