summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wendler <polynomial-c@gentoo.org>2022-03-01 09:01:28 +0100
committerLars Wendler <polynomial-c@gentoo.org>2022-03-01 09:01:59 +0100
commit219f791f4599cf5ca3668cbbd9f5c95b20dac98c (patch)
treee5f1f7c0c327a839340ca21f1fbdac7da9291b46 /games-emulation/mgba
parentapp-admin/consul: Bump to version 1.11.4 (diff)
downloadgentoo-219f791f4599cf5ca3668cbbd9f5c95b20dac98c.tar.gz
gentoo-219f791f4599cf5ca3668cbbd9f5c95b20dac98c.tar.bz2
gentoo-219f791f4599cf5ca3668cbbd9f5c95b20dac98c.zip
games-emulation/mgba: Revbump to fix compilation against ffmpeg-5
Closes: https://bugs.gentoo.org/834374 Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
Diffstat (limited to 'games-emulation/mgba')
-rw-r--r--games-emulation/mgba/files/mgba-0.9.3-ffmpeg5.patch117
-rw-r--r--games-emulation/mgba/mgba-0.9.3-r1.ebuild132
2 files changed, 249 insertions, 0 deletions
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 <ryan@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
+}