diff options
Diffstat (limited to 'media-video/handbrake/handbrake-9999.ebuild')
-rw-r--r-- | media-video/handbrake/handbrake-9999.ebuild | 179 |
1 files changed, 114 insertions, 65 deletions
diff --git a/media-video/handbrake/handbrake-9999.ebuild b/media-video/handbrake/handbrake-9999.ebuild index d12123f0bf5e..87d75de6700c 100644 --- a/media-video/handbrake/handbrake-9999.ebuild +++ b/media-video/handbrake/handbrake-9999.ebuild @@ -3,9 +3,12 @@ EAPI=8 -PYTHON_COMPAT=( python3_{10..12} ) +PYTHON_COMPAT=( python3_{10..13} ) -inherit autotools edo python-any-r1 toolchain-funcs xdg +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" @@ -17,27 +20,49 @@ else KEYWORDS="~amd64 ~arm64 ~x86" fi -DESCRIPTION="Open-source, GPL-licensed, multiplatform, multithreaded video transcoder" -HOMEPAGE="https://handbrake.fr/ https://github.com/HandBrake/HandBrake" +# 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="+fdk gstreamer gtk numa nvenc x265" # TODO: qsv vce +IUSE="amf +fdk gui libdovi numa nvenc qsv x265" REQUIRED_USE="numa? ( x265 )" -RDEPEND=" +COMMON_DEPEND=" + app-arch/bzip2 >=app-arch/xz-utils-5.2.6 dev-libs/jansson:= - >=dev-libs/libxml2-2.10.3 - media-libs/a52dec >=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/libsamplerate media-libs/libtheora media-libs/libvorbis >=media-libs/libvpx-1.12.0:= @@ -47,95 +72,119 @@ RDEPEND=" >=media-libs/x264-0.0.20220222:= >=media-libs/zimg-3.0.4 media-sound/lame - >=media-video/ffmpeg-5.1.2:=[postproc,fdk?] sys-libs/zlib fdk? ( media-libs/fdk-aac:= ) - gstreamer? ( - media-libs/gstreamer:1.0 - media-libs/gst-plugins-base:1.0 - media-libs/gst-plugins-good:1.0 - media-libs/gst-plugins-bad:1.0 - media-libs/gst-plugins-ugly:1.0 - media-plugins/gst-plugins-a52dec:1.0 - media-plugins/gst-plugins-libav:1.0 - media-plugins/gst-plugins-x264:1.0 - media-plugins/gst-plugins-gdkpixbuf:1.0 - ) - gtk? ( - >=x11-libs/gtk+-3.10 - dev-libs/dbus-glib + libdovi? ( media-libs/libdovi:= ) + gui? ( + >=gui-libs/gtk-4.4:4[gstreamer] dev-libs/glib:2 - dev-libs/libgudev:= - x11-libs/cairo + >=dev-libs/libxml2-2.10.3 x11-libs/gdk-pixbuf:2 - x11-libs/libnotify x11-libs/pango ) - nvenc? ( - media-libs/nv-codec-headers - media-video/ffmpeg[nvenc] + numa? ( sys-process/numactl ) + nvenc? ( media-libs/nv-codec-headers ) + qsv? ( + media-libs/libva:= + media-libs/libvpl:= ) - x265? ( >=media-libs/x265-3.5-r2:=[10bit,12bit,numa?] ) " -DEPEND="${RDEPEND}" +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=( - # Remove libdvdnav duplication and call it on the original instead. - # It may work this way; if not, we should try to mimic the duplication. - "${FILESDIR}/${PN}-9999-remove-dvdnav-dup.patch" + "${FILESDIR}"/handbrake-1.9.0-link-libdovi-properly.patch + "${FILESDIR}"/handbrake-1.9.0-include-vpl-properly.patch +) - # Detect system tools - bug 738110 - "${FILESDIR}/${PN}-9999-system-tools.patch" +src_unpack() { + if [[ ${PV} == 9999 ]]; then + git-r3_src_unpack + else + unpack ${P}.tar.bz2 + fi +} - # Use whichever python is set by portage - "${FILESDIR}/${PN}-9999-dont-search-for-python.patch" +src_prepare() { + 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 + + # noop strip + sed -i \ + -e "s/\(strip\s*= ToolProbe( 'STRIP.exe',\s*'strip',\s*\)'strip'/\1'true'/" \ + make/configure.py || die - # Fix x265 linkage... again again #730034 - "${FILESDIR}/${PN}-1.3.3-x265-link.patch" -) + # Use whichever python is set by portage + sed -i -e "s/for p in .*/for p in ${EPYTHON}/" configure || die -src_prepare() { - # Get rid of leftover bundled library build definitions, - sed -i 's:.*\(/contrib\|contrib/\).*::g' \ - "${S}"/make/include/main.defs \ - || die "Contrib removal failed." + for tool in ar ranlib libtool; do + # Detect system tools - bug 738110 + sed -i \ + -e "s/\(${tool}\s*= ToolProbe( '${tool^^}.exe',\s*'${tool}',\s*\)'${tool}'/\1os.environ.get('${tool^^}', '${tool}')/" \ + make/configure.py || die + done default - - cd "${S}/gtk" || die - eautoreconf } src_configure() { - tc-export AR RANLIB STRIP + tc-export AR RANLIB + + # ODR violations, lto-type-mismatches + # bug #878899 + filter-lto - # Libav was replaced in 1.2 with ffmpeg by default - # but I've elected to not make people change their use flags for AAC - # as its the same code anyway local myconfargs=( --force --verbose + --disable-df-fetch + --disable-df-verify + --launch-jobs=$(get_makeopts_jobs) --prefix="${EPREFIX}/usr" --disable-flatpak - $(usex !gtk --disable-gtk) - --disable-gtk4 - $(usex !gstreamer --disable-gst) - $(use_enable x265) - $(use_enable numa) + --no-harden #bug #890279 + $(use_enable amf vce) $(use_enable fdk fdk-aac) - --enable-ffmpeg-aac # Forced on + $(use_enable gui gtk) + $(use_enable libdovi) + $(use_enable numa) $(use_enable nvenc) - # TODO: $(use_enable qsv) - # TODO: $(use_enable vce) + $(use_enable x265) + $(use_enable qsv) ) - edo ./configure "${myconfargs[@]}" + edo ./configure ${myconfargs[@]} } src_compile() { @@ -155,8 +204,8 @@ pkg_postinst() { einfo "report bugs to Gentoo's bugzilla or Multimedia forum instead." einfo "For the CLI version of HandBrake, you can use \`HandBrakeCLI\`." - if use gtk ; then - einfo "For the GTK+ version of HandBrake, you can run \`ghb\`." + if use gui ; then + einfo "For the GUI version of HandBrake, you can run \`ghb\`." fi xdg_pkg_postinst |