Instead of disabling the FFmpeg support for moc I have switched the port to using a fork that has up to date FFmpeg support up through to version 7.
Index: Makefile =================================================================== RCS file: /cvs/ports/audio/moc/Makefile,v retrieving revision 1.31 diff -u -p -u -p -r1.31 Makefile --- Makefile 21 Nov 2024 07:00:52 -0000 1.31 +++ Makefile 21 Nov 2024 10:23:44 -0000 @@ -1,65 +1,65 @@ COMMENT = console audio player -DISTNAME = moc-2.5.2 + +DIST_TUPLE+= gitlab tomaszg mocp fb0a63b564b40fa861204e2f804b696c6ee573da . +PKGNAME = moc-2.6.a3 + CATEGORIES = audio -HOMEPAGE = https://moc.daper.net/ -SITES = https://ftp.daper.net/pub/soft/moc/stable/ \ - https://distfiles.sigtrap.nl/ -EXTRACT_SUFX = .tar.bz2 -REVISION = 12 # GPLv3+ PERMIT_PACKAGE = Yes # uses pledge() -WANTLIB += ${COMPILER_LIBCXX} FLAC c crypto curl curses db faad -WANTLIB += iconv id3tag ltdl m mad magic modplug mp3lame mpcdec -WANTLIB += mpg123 nghttp2 nghttp3 ngtcp2 ngtcp2_crypto_quictls -WANTLIB += ogg opus samplerate sndfile sndio speex ssl tag tag_c -WANTLIB += vorbis vorbisenc vorbisfile wavpack z +WANTLIB += ${COMPILER_LIBCXX} FLAC X11 X11-xcb Xext Xfixes aom +WANTLIB += avcodec avformat avutil bz2 c crypto curl curses dav1d +WANTLIB += drm faad gsm iconv id3tag intl ltdl lzma m mad magic +WANTLIB += modplug mp3lame mpcdec mpg123 nghttp2 nghttp3 ngtcp2 +WANTLIB += ngtcp2_crypto_quictls ogg opus popt samplerate sndfile +WANTLIB += sndio speex ssl swresample tag tag_c theoradec theoraenc +WANTLIB += va va-drm va-x11 vorbis vorbisenc vorbisfile vpx wavpack +WANTLIB += x264 x265 xcb xcb-dri3 xml2 xvidcore z -COMPILER = base-clang ports-gcc base-gcc +COMPILER = base-clang ports-gcc + +RUN_DEPENDS+= devel/desktop-file-utils \ + x11/gtk+4,-guic LIB_DEPENDS = audio/faad \ audio/flac \ - audio/lame \ audio/libid3tag \ audio/libmad \ audio/libmodplug \ - audio/libogg \ audio/libsamplerate \ audio/libsndfile \ audio/libvorbis \ - audio/mpg123 \ audio/musepack \ - audio/opus \ audio/speex \ audio/taglib \ audio/wavpack \ - converters/libiconv \ - databases/db/v4 \ devel/libmagic \ devel/libtool,-ltdl \ - net/curl \ - net/ngtcp2 \ - www/nghttp2 \ - www/nghttp3 + devel/popt \ + graphics/ffmpeg \ + net/curl +AUTOCONF_VERSION= 2.71 +AUTOMAKE_VERSION= 1.16 SEPARATE_BUILD = Yes - -CONFIGURE_STYLE = gnu +CONFIGURE_STYLE = autoreconf CONFIGURE_ARGS += \ - --with-sndio \ + --disable-cache \ --without-jack \ --without-oss \ --without-alsa \ + --without-mpg123 \ + --without-mpris \ + --without-opus \ + --without-pulse \ --without-rcc \ --without-included-ltdl \ --without-timidity \ - --without-ffmpeg \ - --with-magic \ --with-ltdl-include=${LOCALBASE}/include \ --with-ltdl-lib=${LOCALBASE}/lib -CONFIGURE_ENV = CPPFLAGS="-I${LOCALBASE}/include -I${LOCALBASE}/include/db4" \ +CONFIGURE_ENV = CPPFLAGS="-Wno-unused-but-set-parameter -I${LOCALBASE}/include -I${LOCALBASE}/include/db4" \ LDFLAGS="-L${LOCALBASE}/lib" pre-install: Index: distinfo =================================================================== RCS file: /cvs/ports/audio/moc/distinfo,v retrieving revision 1.2 diff -u -p -u -p -r1.2 distinfo --- distinfo 18 Nov 2017 12:01:14 -0000 1.2 +++ distinfo 21 Nov 2024 10:23:44 -0000 @@ -1,2 +1,2 @@ -SHA256 (moc-2.5.2.tar.bz2) = 86aBFWAqR4i3z6m76Tl6nV4kxoy2GldpXRwsPs9J2wg= -SIZE (moc-2.5.2.tar.bz2) = 602728 +SHA256 (tomaszg-mocp-fb0a63b564b40fa861204e2f804b696c6ee573da.tar.gz) = 0vVH+wk+UGP9Ag7nk+8QAKhSL0W4NwMQ8yok5DyyKIo= +SIZE (tomaszg-mocp-fb0a63b564b40fa861204e2f804b696c6ee573da.tar.gz) = 703656 Index: patches/patch-config_example_in =================================================================== RCS file: /cvs/ports/audio/moc/patches/patch-config_example_in,v retrieving revision 1.3 diff -u -p -u -p -r1.3 patch-config_example_in --- patches/patch-config_example_in 11 Mar 2022 18:20:18 -0000 1.3 +++ patches/patch-config_example_in 21 Nov 2024 10:23:44 -0000 @@ -3,7 +3,7 @@ Remove audio choices that are irrelevant Index: config.example.in --- config.example.in.orig +++ config.example.in -@@ -121,32 +121,10 @@ +@@ -140,32 +140,10 @@ # #HTTPProxy = @@ -35,5 +35,5 @@ Index: config.example.in -#ALSAMixer1 = PCM -#ALSAMixer2 = Master - # Under some circumstances on 32-bit systems, audio played continously - # for long periods of time may begin to stutter. Setting this option to + # Save software mixer state? + # If enabled, a file 'softmixer' will be created in '~/.moc/' storing the Index: patches/patch-decoder_plugins_ffmpeg_ffmpeg_c =================================================================== RCS file: patches/patch-decoder_plugins_ffmpeg_ffmpeg_c diff -N patches/patch-decoder_plugins_ffmpeg_ffmpeg_c --- patches/patch-decoder_plugins_ffmpeg_ffmpeg_c 11 Mar 2022 18:20:18 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,34 +0,0 @@ -Maint: Migrate to FFmpeg/LibAV's AV_-prefixed #defines. - -Index: decoder_plugins/ffmpeg/ffmpeg.c ---- decoder_plugins/ffmpeg/ffmpeg.c.orig -+++ decoder_plugins/ffmpeg/ffmpeg.c -@@ -984,7 +984,7 @@ static void *ffmpeg_open (const char *file) - * FFmpeg/LibAV in use. For some versions this will be caught in - * *_find_stream_info() above and misreported as an unfound codec - * parameters error. */ -- if (data->codec->capabilities & CODEC_CAP_EXPERIMENTAL) { -+ if (data->codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) { - decoder_error (&data->error, ERROR_FATAL, 0, - "The codec is experimental and may damage MOC: %s", - data->codec->name); -@@ -993,8 +993,8 @@ static void *ffmpeg_open (const char *file) - #endif - - set_downmixing (data); -- if (data->codec->capabilities & CODEC_CAP_TRUNCATED) -- data->enc->flags |= CODEC_FLAG_TRUNCATED; -+ if (data->codec->capabilities & AV_CODEC_CAP_TRUNCATED) -+ data->enc->flags |= AV_CODEC_FLAG_TRUNCATED; - - #ifdef HAVE_AVCODEC_OPEN2 - if (avcodec_open2 (data->enc, data->codec, NULL) < 0) -@@ -1025,7 +1025,7 @@ static void *ffmpeg_open (const char *file) - - data->sample_width = sfmt_Bps (data->fmt); - -- if (data->codec->capabilities & CODEC_CAP_DELAY) -+ if (data->codec->capabilities & AV_CODEC_CAP_DELAY) - data->delay = true; - data->seek_broken = is_seek_broken (data); - data->timing_broken = is_timing_broken (data->ic); Index: patches/patch-main_c =================================================================== RCS file: /cvs/ports/audio/moc/patches/patch-main_c,v retrieving revision 1.4 diff -u -p -u -p -r1.4 patch-main_c --- patches/patch-main_c 11 Mar 2022 18:20:18 -0000 1.4 +++ patches/patch-main_c 21 Nov 2024 10:23:44 -0000 @@ -4,33 +4,36 @@ Index: main.c --- main.c.orig +++ main.c -@@ -174,6 +174,8 @@ static void start_moc (const struct parameters *params - case 0: /* child - start server */ - set_me_server (); - list_sock = server_init (params->debug, params->foreground); -+ if (pledge("stdio rpath wpath cpath inet unix dns audio", NULL) == -1) -+ fatal ("pledge() failed: %s", strerror(errno)); - rc = write (notify_pipe[1], &i, sizeof(i)); - if (rc < 0) - fatal ("write() to notify pipe failed: %s", -@@ -208,10 +210,14 @@ static void start_moc (const struct parameters *params +@@ -161,6 +161,8 @@ static void start_moc (const struct parameters *params + if (params->foreground) { set_me_server (); - list_sock = server_init (params->debug, params->foreground); - signal (SIGCHLD, sig_chld); -+ if (pledge("stdio rpath wpath cpath inet unix dns audio", NULL) == -1) + server_init (params->debug, params->foreground); ++ if (pledge("stdio rpath wpath cpath inet unix audio", NULL) == -1) + fatal ("pledge() failed: %s", strerror(errno)); - server_loop (list_sock); + server_loop (); + return; } - - if (!params->only_server) { +@@ -185,6 +187,8 @@ static void start_moc (const struct parameters *params + case 0: /* child - start server */ + set_me_server (); + server_init (params->debug, params->foreground); ++ if (pledge("stdio rpath wpath cpath inet unix audio", NULL) == -1) ++ fatal ("pledge() failed: %s", strerror(errno)); + rc = write (notify_pipe[1], &i, sizeof(i)); + if (rc < 0) + fatal ("write() to notify pipe failed: %s", xstrerror (errno)); +@@ -216,6 +220,8 @@ static void start_moc (const struct parameters *params + if (params->only_server) + send_int (server_sock, CMD_DISCONNECT); + else { + if (pledge("stdio rpath wpath cpath flock unix tty proc", NULL) == -1) + fatal ("pledge() failed: %s", strerror(errno)); - signal (SIGPIPE, SIG_IGN); - if (ping_server(server_sock)) { - if (!params->dont_run_iface) { -@@ -800,6 +806,9 @@ int main (int argc, char *argv[]) - struct utsname uts; - #endif + xsignal (SIGPIPE, SIG_IGN); + if (!ping_server (server_sock)) + fatal ("Can't connect to the server!"); +@@ -1202,6 +1208,9 @@ int main (int argc, const char *argv[]) + mocp_argc = argc; + mocp_argv = argv; + if (pledge("stdio rpath wpath cpath flock inet unix dns tty proc prot_exec audio", NULL) == -1) + fatal ("pledge() failed: %s", strerror(errno)); @@ -38,19 +41,20 @@ Index: main.c #ifdef PACKAGE_REVISION logit ("This is Music On Console (revision %s)", PACKAGE_REVISION); #else -@@ -852,11 +861,12 @@ int main (int argc, char *argv[]) +@@ -1265,12 +1274,14 @@ int main (int argc, const char *argv[]) io_init (); rcc_init (); decoder_init (params.debug); - srand (time(NULL)); -- if (!params.only_server && params.dont_run_iface) -+ if (!params.only_server && params.dont_run_iface) { + if (params.allow_iface) + start_moc (¶ms, args); +- else ++ else { + if (pledge("cpath rpath stdio unix", NULL) == -1) + fatal ("pledge() failed: %s", strerror(errno)); server_command (¶ms, args); -- else -+ } else - start_moc (¶ms, args); ++ } lists_strs_free (args); + options_free (); Index: patches/patch-mocp_1 =================================================================== RCS file: /cvs/ports/audio/moc/patches/patch-mocp_1,v retrieving revision 1.2 diff -u -p -u -p -r1.2 patch-mocp_1 --- patches/patch-mocp_1 11 Mar 2022 18:20:18 -0000 1.2 +++ patches/patch-mocp_1 21 Nov 2024 10:23:44 -0000 @@ -1,7 +1,8 @@ Fix paths in manual. ---- mocp.1.orig Sun Apr 24 06:23:30 2016 -+++ mocp.1 Sun Jun 5 13:16:37 2016 +Index: mocp.1 +--- mocp.1.orig ++++ mocp.1 @@ -58,10 +58,8 @@ Implies \fB\-S\fP. Run the server in foreground and l .TP \fB\-R\fP \fINAME\fP[\fB:\fP...], \ @@ -15,7 +16,7 @@ Fix paths in manual. .LP .TP \fB\-m\fP, \fB\-\-music\-dir\fP -@@ -123,7 +121,7 @@ file currently being played. +@@ -128,7 +126,7 @@ file currently being played. .TP \fB\-T\fP \fITHEME\fP, \fB\-\-theme\fP \fITHEME\fP Use a theme file. If the path is not absolute, the file will be searched @@ -24,7 +25,7 @@ Fix paths in manual. \fB~/.moc/themes/\fP and the current directory. .LP .TP -@@ -143,7 +141,7 @@ allows the new values to be picked up by substitutions +@@ -152,7 +150,7 @@ allows the new values to be picked up by substitutions options are overridden afterwards (which gives the choice of whether the configured values are replaced or added to). .IP @@ -33,7 +34,7 @@ Fix paths in manual. of the options available. .LP .RS -@@ -261,7 +259,7 @@ MOC directory for the configuration file, socket, the +@@ -440,7 +438,7 @@ MOC directory for the configuration file, socket, the .TP .B ~/.moc/config Configuration file for MOC. The format is very simple; to see how to use @@ -42,7 +43,7 @@ Fix paths in manual. with the program. The example file fully describes all the configuration options, and so is a useful reference when using the \fB\-O\fP option. As this file can specify commands which invoke other applications MOC will -@@ -271,11 +269,11 @@ it is writable by anyone other than its owner. +@@ -460,11 +458,11 @@ variable above.) .TP .B ~/.moc/themes .TQ Index: patches/patch-playlist_c =================================================================== RCS file: /cvs/ports/audio/moc/patches/patch-playlist_c,v retrieving revision 1.2 diff -u -p -u -p -r1.2 patch-playlist_c --- patches/patch-playlist_c 11 Mar 2022 18:20:18 -0000 1.2 +++ patches/patch-playlist_c 21 Nov 2024 10:23:44 -0000 @@ -1,14 +1,14 @@ Replace rand(3)-based computation with arc4random_uniform(3). ---- playlist.c.orig Sun Jun 5 13:54:04 2016 -+++ playlist.c Sun Jun 5 13:58:53 2016 -@@ -774,8 +774,7 @@ void plist_shuffle (struct plist *plist) +Index: playlist.c +--- playlist.c.orig ++++ playlist.c +@@ -846,7 +846,7 @@ void plist_shuffle (struct plist *plist) int i; - for (i = 0; i < plist->num; i++) -- plist_swap (plist, i, -- (rand()/(float)RAND_MAX) * (plist->num - 1)); + for (i = 0; i < plist->num; i += 1) +- plist_swap (plist, i, (rand () / (float)RAND_MAX) * (plist->num - 1)); + plist_swap (plist, i, arc4random_uniform(plist->num)); - rb_clear (&plist->search_tree); + rb_tree_clear (plist->search_tree); Index: pkg/PLIST =================================================================== RCS file: /cvs/ports/audio/moc/pkg/PLIST,v retrieving revision 1.5 diff -u -p -u -p -r1.5 PLIST --- pkg/PLIST 21 Nov 2024 07:00:52 -0000 1.5 +++ pkg/PLIST 21 Nov 2024 10:23:44 -0000 @@ -2,6 +2,7 @@ lib/moc/ lib/moc/decoder_plugins/ @so lib/moc/decoder_plugins/libaac_decoder.so +@so lib/moc/decoder_plugins/libffmpeg_decoder.so @so lib/moc/decoder_plugins/libflac_decoder.so @so lib/moc/decoder_plugins/libmodplug_decoder.so @so lib/moc/decoder_plugins/libmp3_decoder.so @@ -11,6 +12,7 @@ lib/moc/decoder_plugins/ @so lib/moc/decoder_plugins/libvorbis_decoder.so @so lib/moc/decoder_plugins/libwavpack_decoder.so @man man/man1/mocp.1 +share/applications/mocp.desktop share/doc/moc/ share/doc/moc/README share/doc/moc/README_equalizer @@ -18,14 +20,23 @@ share/doc/moc/THANKS share/examples/moc/ share/examples/moc/config.example share/examples/moc/keymap.example +share/icons/hicolor/scalable/apps/mocp.svg share/moc/ share/moc/themes/ +share/moc/themes/black_orange_theme share/moc/themes/black_theme +share/moc/themes/blue_theme share/moc/themes/darkdot_theme share/moc/themes/example_theme share/moc/themes/green_theme +share/moc/themes/lcars +share/moc/themes/lcars2 share/moc/themes/moca_theme share/moc/themes/nightly_theme share/moc/themes/red_theme share/moc/themes/transparent-background +share/moc/themes/white_theme +share/moc/themes/winter share/moc/themes/yellow_red_theme +@tag update-desktop-database +@tag gtk-update-icon-cache %D/share/icons/hicolor