commit:     219f791f4599cf5ca3668cbbd9f5c95b20dac98c
Author:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
AuthorDate: Tue Mar  1 08:01:28 2022 +0000
Commit:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
CommitDate: Tue Mar  1 08:01:59 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=219f791f

games-emulation/mgba: Revbump to fix compilation against ffmpeg-5

Closes: https://bugs.gentoo.org/834374
Signed-off-by: Lars Wendler <polynomial-c <AT> gentoo.org>

 .../mgba/files/mgba-0.9.3-ffmpeg5.patch            | 117 ++++++++++++++++++
 games-emulation/mgba/mgba-0.9.3-r1.ebuild          | 132 +++++++++++++++++++++
 2 files changed, 249 insertions(+)

diff --git a/games-emulation/mgba/files/mgba-0.9.3-ffmpeg5.patch 
b/games-emulation/mgba/files/mgba-0.9.3-ffmpeg5.patch
new file mode 100644
index 000000000000..cf4f6f56a2d4
--- /dev/null
+++ b/games-emulation/mgba/files/mgba-0.9.3-ffmpeg5.patch
@@ -0,0 +1,117 @@
+From cdc753516798882a805db1d2042dbce8313382bf Mon Sep 17 00:00:00 2001
+From: Ryan Tandy <r...@nardis.ca>
+Date: Thu, 3 Feb 2022 19:02:52 -0800
+Subject: [PATCH] FFmpeg: Support FFmpeg 5.0
+
+---
+ src/feature/ffmpeg/ffmpeg-decoder.c |  3 ++-
+ src/feature/ffmpeg/ffmpeg-encoder.c | 25 ++++++++++++++-----------
+ 2 files changed, 16 insertions(+), 12 deletions(-)
+
+diff --git a/src/feature/ffmpeg/ffmpeg-decoder.c 
b/src/feature/ffmpeg/ffmpeg-decoder.c
+index c3bb6d1c5c..daa47fbf2c 100644
+--- a/src/feature/ffmpeg/ffmpeg-decoder.c
++++ b/src/feature/ffmpeg/ffmpeg-decoder.c
+@@ -5,6 +5,7 @@
+  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ #include "ffmpeg-decoder.h"
+ 
++#include <libavcodec/avcodec.h>
+ #include <libswscale/swscale.h>
+ 
+ void FFmpegDecoderInit(struct FFmpegDecoder* decoder) {
+@@ -38,7 +39,7 @@ bool FFmpegDecoderOpen(struct FFmpegDecoder* decoder, const 
char* infile) {
+ #else
+               enum AVMediaType type = 
decoder->context->streams[i]->codec->codec_type;
+ #endif
+-              struct AVCodec* codec;
++              const struct AVCodec* codec;
+               struct AVCodecContext* context = NULL;
+               if (type == AVMEDIA_TYPE_VIDEO && decoder->videoStream < 0) {
+                       decoder->video = avcodec_alloc_context3(NULL);
+diff --git a/src/feature/ffmpeg/ffmpeg-encoder.c 
b/src/feature/ffmpeg/ffmpeg-encoder.c
+index ad76ca57b2..be6bd3af5e 100644
+--- a/src/feature/ffmpeg/ffmpeg-encoder.c
++++ b/src/feature/ffmpeg/ffmpeg-encoder.c
+@@ -12,6 +12,9 @@
+ 
+ #include <libavcodec/version.h>
+ #include <libavcodec/avcodec.h>
++#if LIBAVCODEC_VERSION_MAJOR >= 58
++#include <libavcodec/bsf.h>
++#endif
+ 
+ #include <libavfilter/buffersink.h>
+ #include <libavfilter/buffersrc.h>
+@@ -121,7 +124,7 @@ bool FFmpegEncoderSetAudio(struct FFmpegEncoder* encoder, 
const char* acodec, un
+               return true;
+       }
+ 
+-      AVCodec* codec = avcodec_find_encoder_by_name(acodec);
++      const AVCodec* codec = avcodec_find_encoder_by_name(acodec);
+       if (!codec) {
+               return false;
+       }
+@@ -193,7 +196,7 @@ bool FFmpegEncoderSetVideo(struct FFmpegEncoder* encoder, 
const char* vcodec, in
+               return true;
+       }
+ 
+-      AVCodec* codec = avcodec_find_encoder_by_name(vcodec);
++      const AVCodec* codec = avcodec_find_encoder_by_name(vcodec);
+       if (!codec) {
+               return false;
+       }
+@@ -213,7 +216,7 @@ bool FFmpegEncoderSetVideo(struct FFmpegEncoder* encoder, 
const char* vcodec, in
+       if (encoder->pixFormat == AV_PIX_FMT_NONE) {
+               return false;
+       }
+-      if (vbr < 0 && !av_opt_find(&codec->priv_class, "crf", NULL, 0, 0)) {
++      if (vbr < 0 && !av_opt_find((void*) &codec->priv_class, "crf", NULL, 0, 
0)) {
+               return false;
+       }
+       encoder->videoCodec = vcodec;
+@@ -223,7 +226,7 @@ bool FFmpegEncoderSetVideo(struct FFmpegEncoder* encoder, 
const char* vcodec, in
+ }
+ 
+ bool FFmpegEncoderSetContainer(struct FFmpegEncoder* encoder, const char* 
container) {
+-      AVOutputFormat* oformat = av_guess_format(container, 0, 0);
++      const AVOutputFormat* oformat = av_guess_format(container, 0, 0);
+       if (!oformat) {
+               return false;
+       }
+@@ -241,9 +244,9 @@ void FFmpegEncoderSetLooping(struct FFmpegEncoder* 
encoder, bool loop) {
+ }
+ 
+ bool FFmpegEncoderVerifyContainer(struct FFmpegEncoder* encoder) {
+-      AVOutputFormat* oformat = av_guess_format(encoder->containerFormat, 0, 
0);
+-      AVCodec* acodec = avcodec_find_encoder_by_name(encoder->audioCodec);
+-      AVCodec* vcodec = avcodec_find_encoder_by_name(encoder->videoCodec);
++      const AVOutputFormat* oformat = 
av_guess_format(encoder->containerFormat, 0, 0);
++      const AVCodec* acodec = 
avcodec_find_encoder_by_name(encoder->audioCodec);
++      const AVCodec* vcodec = 
avcodec_find_encoder_by_name(encoder->videoCodec);
+       if ((encoder->audioCodec && !acodec) || (encoder->videoCodec && 
!vcodec) || !oformat || (!acodec && !vcodec)) {
+               return false;
+       }
+@@ -257,8 +260,8 @@ bool FFmpegEncoderVerifyContainer(struct FFmpegEncoder* 
encoder) {
+ }
+ 
+ bool FFmpegEncoderOpen(struct FFmpegEncoder* encoder, const char* outfile) {
+-      AVCodec* acodec = avcodec_find_encoder_by_name(encoder->audioCodec);
+-      AVCodec* vcodec = avcodec_find_encoder_by_name(encoder->videoCodec);
++      const AVCodec* acodec = 
avcodec_find_encoder_by_name(encoder->audioCodec);
++      const AVCodec* vcodec = 
avcodec_find_encoder_by_name(encoder->videoCodec);
+       if ((encoder->audioCodec && !acodec) || (encoder->videoCodec && 
!vcodec) || !FFmpegEncoderVerifyContainer(encoder)) {
+               return false;
+       }
+@@ -272,9 +275,9 @@ bool FFmpegEncoderOpen(struct FFmpegEncoder* encoder, 
const char* outfile) {
+       encoder->currentVideoFrame = 0;
+       encoder->skipResidue = 0;
+ 
+-      AVOutputFormat* oformat = av_guess_format(encoder->containerFormat, 0, 
0);
++      const AVOutputFormat* oformat = 
av_guess_format(encoder->containerFormat, 0, 0);
+ #ifndef USE_LIBAV
+-      avformat_alloc_output_context2(&encoder->context, oformat, 0, outfile);
++      avformat_alloc_output_context2(&encoder->context, (AVOutputFormat*) 
oformat, 0, outfile);
+ #else
+       encoder->context = avformat_alloc_context();
+       strncpy(encoder->context->filename, outfile, 
sizeof(encoder->context->filename) - 1);

diff --git a/games-emulation/mgba/mgba-0.9.3-r1.ebuild 
b/games-emulation/mgba/mgba-0.9.3-r1.ebuild
new file mode 100644
index 000000000000..f2e1ddb6dd3b
--- /dev/null
+++ b/games-emulation/mgba/mgba-0.9.3-r1.ebuild
@@ -0,0 +1,132 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake desktop xdg
+
+DESCRIPTION="Game Boy Advance emulator written in C"
+HOMEPAGE="https://mgba.io";
+if [[ "${PV}" == 9999 ]] ; then
+       inherit git-r3
+       EGIT_REPO_URI="https://github.com/mgba-emu/mgba.git";
+else
+       MY_PV="${PV/_beta/-b}"
+       SRC_URI="https://github.com/${PN}-emu/${PN}/archive/${MY_PV}.tar.gz -> 
${P}.tar.gz"
+       [[ "${PV}" == *_beta* ]] || \
+       KEYWORDS="~amd64 ~arm64 ~x86"
+       S="${WORKDIR}/${PN}-${MY_PV}"
+fi
+LICENSE="MPL-2.0"
+SLOT="0"
+IUSE="debug discord elf ffmpeg gles2 gles3 opengl qt5 +sdl sqlite"
+REQUIRED_USE="|| ( qt5 sdl )
+               qt5? ( opengl )"
+
+RDEPEND="
+       media-libs/libpng:0=
+       sys-libs/zlib[minizip]
+       debug? ( dev-libs/libedit )
+       elf? ( dev-libs/elfutils )
+       ffmpeg? ( media-video/ffmpeg:= )
+       opengl? ( media-libs/libglvnd )
+       qt5? (
+               dev-qt/qtcore:5
+               dev-qt/qtgui:5
+               dev-qt/qtmultimedia:5
+               dev-qt/qtwidgets:5
+               opengl? ( dev-qt/qtopengl:5 )
+       )
+       sdl? ( media-libs/libsdl2[X,sound,joystick,video,opengl?] )
+       sqlite? ( dev-db/sqlite:3 )
+"
+DEPEND="${RDEPEND}
+       gles2? ( media-libs/libglvnd )
+       gles3? ( media-libs/libglvnd )
+"
+
+PATCHES=(
+       "${FILESDIR}/${P}-ffmpeg5.patch" #834374
+)
+
+src_prepare() {
+       xdg_environment_reset
+       cmake_src_prepare
+
+       # Get rid of any bundled stuff we don't want
+       local pkg
+       for pkg in libpng lzma sqlite3 zlib ; do
+               rm -r src/third-party/${pkg} || die
+       done
+}
+
+src_configure() {
+       local mycmakeargs=(
+               -DCMAKE_SKIP_RPATH=ON
+               -DBUILD_GL="$(usex opengl)"
+               -DBUILD_GLES2="$(usex gles2)"
+               -DBUILD_GLES3="$(usex gles3)"
+               -DBUILD_PYTHON=OFF
+               -DBUILD_QT="$(usex qt5)"
+               -DBUILD_SDL="$(usex sdl)"
+               -DBUILD_SHARED=ON
+               # test suite fails to build (>=0.6.0)
+               -DBUILD_SUITE=OFF
+               -DBUILD_TEST=OFF
+               -DM_CORE_GB=ON
+               -DM_CORE_GBA=ON
+               -DUSE_DEBUGGERS="$(usex debug)"
+               -DUSE_DISCORD_RPC="$(usex discord)"
+               -DUSE_EDITLINE="$(usex debug)"
+               -DUSE_ELF="$(usex elf)"
+               -DUSE_EPOXY=OFF
+               -DUSE_FFMPEG="$(usex ffmpeg)"
+               -DUSE_GDB_STUB="$(usex debug)"
+               -DUSE_LIBZIP=OFF
+               -DUSE_LZMA=OFF
+               -DUSE_MINIZIP=ON
+               -DUSE_PNG=ON
+               -DUSE_SQLITE3="$(usex sqlite)"
+               -DUSE_ZLIB=ON
+       )
+       cmake_src_configure
+}
+
+src_compile() {
+       cmake_src_compile
+}
+
+src_install() {
+       if use qt5 ; then
+               dobin ${BUILD_DIR}/qt/${PN}-qt
+               doman doc/${PN}-qt.6
+               domenu res/${PN}-qt.desktop
+               for size in 16 24 32 48 64 96 128 256 ; do
+                       newicon -s ${size} res/${PN}-${size}.png ${PN}.png
+               done
+       fi
+       if use sdl ; then
+               doman doc/${PN}.6
+               newbin ${BUILD_DIR}/sdl/${PN} ${PN}-sdl
+       fi
+
+       dolib.so ${BUILD_DIR}/lib${PN}.so*
+}
+
+pkg_preinst() {
+       if use qt5 ; then
+               xdg_pkg_preinst
+       fi
+}
+
+pkg_postinst() {
+       if use qt5 ; then
+               xdg_pkg_postinst
+       fi
+}
+
+pkg_postrm() {
+       if use qt5 ; then
+               xdg_pkg_postrm
+       fi
+}

Reply via email to