git: 2438c611d737 - main - multimedia/ffmpeg3: New port: Legacy branch of ffmpeg 3.*

From: Daniel Engberg <diizzy_at_FreeBSD.org>
Date: Sat, 23 Nov 2024 08:54:26 UTC
The branch main has been updated by diizzy:

URL: https://cgit.FreeBSD.org/ports/commit/?id=2438c611d73764c64186c48b2789036602f7bd21

commit 2438c611d73764c64186c48b2789036602f7bd21
Author:     Kevin Reinholz <kreinholz@gmail.com>
AuthorDate: 2024-11-17 05:16:29 +0000
Commit:     Daniel Engberg <diizzy@FreeBSD.org>
CommitDate: 2024-11-23 08:42:35 +0000

    multimedia/ffmpeg3: New port: Legacy branch of ffmpeg 3.*
    
    To be used exclusively with emulators/ppsspp as newer versions are
    incompatible due to how the hardware in the Sony PSP works.
    FFmpeg is stripped down to avoid incompatbilities with external
    dependencies, only provides static libraries to avoid getting
    pull in unintentionally and is statically linked to PPSSPP.
    
    PR:             282188, 282792
---
 multimedia/Makefile                               |   1 +
 multimedia/ffmpeg3/Makefile                       | 128 ++++++++++++++++++++++
 multimedia/ffmpeg3/distinfo                       |   5 +
 multimedia/ffmpeg3/files/patch-configure          |  17 +++
 multimedia/ffmpeg3/files/patch-libavformat_rtsp.c |  44 ++++++++
 multimedia/ffmpeg3/files/patch-libavutil_common.h |  13 +++
 multimedia/ffmpeg3/override.mk                    |   8 ++
 multimedia/ffmpeg3/pkg-descr                      |   3 +
 multimedia/ffmpeg3/pkg-plist                      |  99 +++++++++++++++++
 9 files changed, 318 insertions(+)

diff --git a/multimedia/Makefile b/multimedia/Makefile
index dc98f7652001..2257a624a998 100644
--- a/multimedia/Makefile
+++ b/multimedia/Makefile
@@ -57,6 +57,7 @@
     SUBDIR += ffaudioconverter
     SUBDIR += ffdec
     SUBDIR += ffmpeg
+    SUBDIR += ffmpeg3
     SUBDIR += ffmpeg4
     SUBDIR += ffmpegthumbnailer
     SUBDIR += ffms2
diff --git a/multimedia/ffmpeg3/Makefile b/multimedia/ffmpeg3/Makefile
new file mode 100644
index 000000000000..5da288bac41c
--- /dev/null
+++ b/multimedia/ffmpeg3/Makefile
@@ -0,0 +1,128 @@
+PORTNAME=	ffmpeg
+DISTVERSION=	3.0.2
+CATEGORIES=	multimedia audio net
+MASTER_SITES=	https://ffmpeg.org/releases/
+PKGNAMESUFFIX=	3
+
+PATCH_SITES=	https://github.com/hrydgard/ppsspp-ffmpeg/commit/
+PATCHFILES=	9c4f84d9d9ad147f4a44cff582829647a0c65420.patch:-p1
+
+MAINTAINER=	kreinholz@gmail.com
+COMMENT=	Realtime audio/video encoder/converter and streaming server (legacy 3.* series)
+WWW=		https://ffmpeg.org/
+
+LICENSE=	GPLv2+ LGPL21+
+LICENSE_COMB=	multi
+
+NOT_FOR_ARCHS=	mips mips64 powerpc powerpc64 powerpcspe
+NOT_FOR_ARCHS_REASON=	emulators/ppsspp only supports little-endian, see \
+		https://github.com/hrydgard/ppsspp/issues/8823
+
+USES=		compiler:c11 cpe gmake localbase:ldflags perl5 pkgconfig \
+		shebangfix tar:xz
+USE_PERL5=	build
+SHEBANG_FILES=	doc/texi2pod.pl
+USE_LDCONFIG=	yes
+
+.ifdef PKGNAMESUFFIX
+PORTSCOUT=	limit:^3\.
+PREFIX=		${LOCALBASE}/${PKGBASE} # avoid conflict with the default
+.endif
+
+HAS_CONFIGURE=	yes
+CONFIGURE_LOG=	ffbuild/config.log
+
+LDFLAGS_aarch64=-Wl,-z,notext
+
+INSTALL_TARGET=	install-libs install-headers
+
+NOPRECIOUSMAKEVARS=	yes
+MAKE_ENV+=	V=1
+
+.if defined(WITH_DEBUG)
+CONFIGURE_ARGS=	--disable-stripping
+.else
+CONFIGURE_ARGS=	--disable-debug
+.endif
+
+CONFIGURE_ARGS+=--prefix="${PREFIX}" \
+		--pkgconfigdir="${PREFIX}/libdata/pkgconfig" \
+		--enable-static \
+		--disable-shared \
+		--enable-pic \
+		--enable-zlib \
+		--disable-everything \
+		--enable-gpl \
+		--cc="${CC}" \
+		--cxx="${CXX}" \
+		--disable-avdevice \
+		--disable-filters \
+		--disable-programs \
+		--disable-network \
+		--disable-avfilter \
+		--disable-postproc \
+		--disable-encoders \
+		--disable-doc \
+		--disable-ffplay \
+		--disable-ffprobe \
+		--disable-ffserver \
+		--disable-ffmpeg \
+		--enable-decoder=h264 \
+		--enable-decoder=mpeg4 \
+		--enable-decoder=h263 \
+		--enable-decoder=h263p \
+		--enable-decoder=mpeg2video \
+		--enable-decoder=mjpeg \
+		--enable-decoder=mjpegb \
+		--enable-decoder=aac \
+		--enable-decoder=aac_latm \
+		--enable-decoder=atrac3 \
+		--enable-decoder=atrac3p \
+		--enable-decoder=mp3 \
+		--enable-decoder=pcm_s16le \
+		--enable-decoder=pcm_s8 \
+		--enable-demuxer=h264 \
+		--enable-demuxer=h263 \
+		--enable-demuxer=m4v \
+		--enable-demuxer=mpegps \
+		--enable-demuxer=mpegvideo \
+		--enable-demuxer=avi \
+		--enable-demuxer=mp3 \
+		--enable-demuxer=aac \
+		--enable-demuxer=pmp \
+		--enable-demuxer=oma \
+		--enable-demuxer=pcm_s16le \
+		--enable-demuxer=pcm_s8 \
+		--enable-demuxer=wav \
+		--enable-encoder=ffv1 \
+		--enable-encoder=huffyuv \
+		--enable-encoder=mpeg4 \
+		--enable-encoder=pcm_s16le \
+		--enable-muxer=avi \
+		--enable-parser=h264 \
+		--enable-parser=mpeg4video \
+		--enable-parser=mpegvideo \
+		--enable-parser=aac \
+		--enable-parser=aac_latm \
+		--enable-parser=mpegaudio \
+		--enable-protocol=file \
+		--disable-sdl \
+		--disable-asm \
+		--disable-iconv \
+		--disable-vaapi \
+		--disable-hwaccels
+
+OPTIONS_DEFINE=		LTO OPTIMIZED_CFLAGS RTCPU
+OPTIONS_DEFAULT=	LTO OPTIMIZED_CFLAGS
+OPTIONS_DEFAULT_amd64=	RTCPU
+OPTIONS_EXCLUDE_aarch64=RTCPU
+
+RTCPU_DESC=		Detect CPU capabilities at runtime
+
+LTO_CONFIGURE_ENABLE=	lto
+
+OPTIMIZED_CFLAGS_CONFIGURE_ENABLE=	optimizations
+
+RTCPU_CONFIGURE_ENABLE=	runtime-cpudetect
+
+.include <bsd.port.mk>
diff --git a/multimedia/ffmpeg3/distinfo b/multimedia/ffmpeg3/distinfo
new file mode 100644
index 000000000000..4707639a5537
--- /dev/null
+++ b/multimedia/ffmpeg3/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1730140299
+SHA256 (ffmpeg-3.0.2.tar.xz) = 82943cc7b0c4d14b612404de0dd7b24cd8ca3511d51e4fd3ae36b2d71bb95223
+SIZE (ffmpeg-3.0.2.tar.xz) = 7461808
+SHA256 (9c4f84d9d9ad147f4a44cff582829647a0c65420.patch) = 120263d3b5a97e98ed9968d3a69da1e6e0770b870f4d0e5cb30e64a8036bdf60
+SIZE (9c4f84d9d9ad147f4a44cff582829647a0c65420.patch) = 1135
diff --git a/multimedia/ffmpeg3/files/patch-configure b/multimedia/ffmpeg3/files/patch-configure
new file mode 100644
index 000000000000..dc52cf1ac148
--- /dev/null
+++ b/multimedia/ffmpeg3/files/patch-configure
@@ -0,0 +1,17 @@
+--- configure.orig	2024-05-15 16:58:49 UTC
++++ configure
+@@ -3024,13 +3024,7 @@ host_os=$target_os_default
+ target_os_default=$(tolower $(uname -s))
+ host_os=$target_os_default
+ 
+-# machine
+-if test "$target_os_default" = aix; then
+-    arch_default=$(uname -p)
+-    strip_default="strip -X32_64"
+-else
+-    arch_default=$(uname -m)
+-fi
++arch_default=$(uname -p)
+ cpu="generic"
+ intrinsics="none"
+ 
diff --git a/multimedia/ffmpeg3/files/patch-libavformat_rtsp.c b/multimedia/ffmpeg3/files/patch-libavformat_rtsp.c
new file mode 100644
index 000000000000..ba9e13d5b3e8
--- /dev/null
+++ b/multimedia/ffmpeg3/files/patch-libavformat_rtsp.c
@@ -0,0 +1,44 @@
+--- libavformat/rtsp.c.orig	2024-05-15 16:46:06 UTC
++++ libavformat/rtsp.c
+@@ -1607,7 +1607,12 @@ int ff_rtsp_make_setup_request(AVFormatContext *s, con
+             }
+             if (ttl > 0)
+                 snprintf(optbuf, sizeof(optbuf), "?ttl=%d", ttl);
+-            getnameinfo((struct sockaddr*) &addr, sizeof(addr),
++            getnameinfo((struct sockaddr*) &addr,
++#if HAVE_STRUCT_SOCKADDR_SA_LEN
++			((struct sockaddr*) &addr)->sa_len,
++#else
++			sizeof(addr),
++#endif
+                         namebuf, sizeof(namebuf), NULL, 0, NI_NUMERICHOST);
+             ff_url_join(url, sizeof(url), "rtp", NULL, namebuf,
+                         port, "%s", optbuf);
+@@ -1815,8 +1820,13 @@ redirect:
+         goto fail;
+     }
+     if (!getpeername(tcp_fd, (struct sockaddr*) &peer, &peer_len)) {
+-        getnameinfo((struct sockaddr*) &peer, peer_len, host, sizeof(host),
+-                    NULL, 0, NI_NUMERICHOST);
++        getnameinfo((struct sockaddr*) &peer,
++#if HAVE_STRUCT_SOCKADDR_SA_LEN
++		    ((struct sockaddr*) &peer)->sa_len,
++#else
++		    peer_len,
++#endif
++                    host, sizeof(host), NULL, 0, NI_NUMERICHOST);
+     }
+ 
+     /* request options supported by the server; this also detects server
+@@ -2295,7 +2305,11 @@ static int sdp_read_header(AVFormatContext *s)
+             AVDictionary *opts = map_to_opts(rt);
+ 
+             err = getnameinfo((struct sockaddr*) &rtsp_st->sdp_ip,
++#if HAVE_STRUCT_SOCKADDR_SA_LEN
++			      ((struct sockaddr*) &rtsp_st->sdp_ip)->sa_len,
++#else
+                               sizeof(rtsp_st->sdp_ip),
++#endif
+                               namebuf, sizeof(namebuf), NULL, 0, NI_NUMERICHOST);
+             if (err) {
+                 av_log(s, AV_LOG_ERROR, "getnameinfo: %s\n", gai_strerror(err));
diff --git a/multimedia/ffmpeg3/files/patch-libavutil_common.h b/multimedia/ffmpeg3/files/patch-libavutil_common.h
new file mode 100644
index 000000000000..d1f70b663a7f
--- /dev/null
+++ b/multimedia/ffmpeg3/files/patch-libavutil_common.h
@@ -0,0 +1,13 @@
+--- libavutil/common.h.orig	2024-05-15 16:55:52 UTC
++++ libavutil/common.h
+@@ -50,6 +50,10 @@
+ #   define AV_NE(be, le) (le)
+ #endif
+ 
++#ifndef		UINT64_C
++#define		UINT64_C(c)	(c ## UL)
++#endif
++
+ //rounded division & shift
+ #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b))
+ /* assume b>0 */
diff --git a/multimedia/ffmpeg3/override.mk b/multimedia/ffmpeg3/override.mk
new file mode 100644
index 000000000000..2141b02b8266
--- /dev/null
+++ b/multimedia/ffmpeg3/override.mk
@@ -0,0 +1,8 @@
+FF_SUFFIX=	3
+
+BUILD_DEPENDS:=	${BUILD_DEPENDS:S/ffmpeg/&${FF_SUFFIX}/g}
+LIB_DEPENDS:=	${LIB_DEPENDS:S/ffmpeg$/&${FF_SUFFIX}/}
+
+USES+=		localbase # -isystem
+CONFIGURE_ENV+=	PKG_CONFIG_PATH="${LOCALBASE}/ffmpeg${FF_SUFFIX}/libdata/pkgconfig"
+MAKE_ENV+=	PKG_CONFIG_PATH="${LOCALBASE}/ffmpeg${FF_SUFFIX}/libdata/pkgconfig"
diff --git a/multimedia/ffmpeg3/pkg-descr b/multimedia/ffmpeg3/pkg-descr
new file mode 100644
index 000000000000..e8c52c22f088
--- /dev/null
+++ b/multimedia/ffmpeg3/pkg-descr
@@ -0,0 +1,3 @@
+FFmpeg is a complete, cross-platform solution to record, convert and stream
+audio and video. It includes libavcodec - the leading audio/video codec
+library. This is a custom build of FFmpeg-3.0.2, a legacy version released in 2016, intended for use with PPSSPP.
diff --git a/multimedia/ffmpeg3/pkg-plist b/multimedia/ffmpeg3/pkg-plist
new file mode 100644
index 000000000000..a700a44512de
--- /dev/null
+++ b/multimedia/ffmpeg3/pkg-plist
@@ -0,0 +1,99 @@
+include/libavcodec/avcodec.h
+include/libavcodec/avdct.h
+include/libavcodec/avfft.h
+include/libavcodec/d3d11va.h
+include/libavcodec/dirac.h
+include/libavcodec/dv_profile.h
+include/libavcodec/dxva2.h
+include/libavcodec/qsv.h
+include/libavcodec/vaapi.h
+include/libavcodec/vda.h
+include/libavcodec/vdpau.h
+include/libavcodec/version.h
+include/libavcodec/videotoolbox.h
+include/libavcodec/vorbis_parser.h
+include/libavcodec/xvmc.h
+include/libavformat/avformat.h
+include/libavformat/avio.h
+include/libavformat/version.h
+include/libavutil/adler32.h
+include/libavutil/aes.h
+include/libavutil/aes_ctr.h
+include/libavutil/attributes.h
+include/libavutil/audio_fifo.h
+include/libavutil/avassert.h
+include/libavutil/avconfig.h
+include/libavutil/avstring.h
+include/libavutil/avutil.h
+include/libavutil/base64.h
+include/libavutil/blowfish.h
+include/libavutil/bprint.h
+include/libavutil/bswap.h
+include/libavutil/buffer.h
+include/libavutil/camellia.h
+include/libavutil/cast5.h
+include/libavutil/channel_layout.h
+include/libavutil/common.h
+include/libavutil/cpu.h
+include/libavutil/crc.h
+include/libavutil/des.h
+include/libavutil/dict.h
+include/libavutil/display.h
+include/libavutil/downmix_info.h
+include/libavutil/error.h
+include/libavutil/eval.h
+include/libavutil/ffversion.h
+include/libavutil/fifo.h
+include/libavutil/file.h
+include/libavutil/frame.h
+include/libavutil/hash.h
+include/libavutil/hmac.h
+include/libavutil/imgutils.h
+include/libavutil/intfloat.h
+include/libavutil/intreadwrite.h
+include/libavutil/lfg.h
+include/libavutil/log.h
+include/libavutil/macros.h
+include/libavutil/mastering_display_metadata.h
+include/libavutil/mathematics.h
+include/libavutil/md5.h
+include/libavutil/mem.h
+include/libavutil/motion_vector.h
+include/libavutil/murmur3.h
+include/libavutil/opt.h
+include/libavutil/parseutils.h
+include/libavutil/pixdesc.h
+include/libavutil/pixelutils.h
+include/libavutil/pixfmt.h
+include/libavutil/random_seed.h
+include/libavutil/rational.h
+include/libavutil/rc4.h
+include/libavutil/replaygain.h
+include/libavutil/ripemd.h
+include/libavutil/samplefmt.h
+include/libavutil/sha.h
+include/libavutil/sha512.h
+include/libavutil/stereo3d.h
+include/libavutil/tea.h
+include/libavutil/threadmessage.h
+include/libavutil/time.h
+include/libavutil/timecode.h
+include/libavutil/timestamp.h
+include/libavutil/tree.h
+include/libavutil/twofish.h
+include/libavutil/version.h
+include/libavutil/xtea.h
+include/libswresample/swresample.h
+include/libswresample/version.h
+include/libswscale/swscale.h
+include/libswscale/version.h
+lib/libavcodec.a
+lib/libavformat.a
+lib/libavutil.a
+lib/libswresample.a
+lib/libswscale.a
+libdata/pkgconfig/libavcodec.pc
+libdata/pkgconfig/libavformat.pc
+libdata/pkgconfig/libavutil.pc
+libdata/pkgconfig/libswresample.pc
+libdata/pkgconfig/libswscale.pc