Index | Thread | Search

From:
Landry Breuil <landry@openbsd.org>
Subject:
[update] audio/mpd 0.24.2 & ncmpd 0.52.0
To:
ports@openbsd.org
Date:
Sat, 29 Mar 2025 09:47:26 +0100

Download raw body.

Thread
hi,

here's updates for the newer 0.24 branch for mpd, see
https://www.musicpd.org/news/2025/03/mpd-0-24-released/ ,
https://raw.githubusercontent.com/MusicPlayerDaemon/MPD/v0.24.2/NEWS
and the companion ncmpc 0.52. i had to revert an upstream commit in both
that made the build fail with error messages related to undefined
invoke/invocable too modern c++20 concepts, i attribute that failure to
a 'too old base libcxx'.

with that reverted mpd builds with ports llvm 19 and base llvm 16.

i havent done any runtime testing yet, will update my local install
running on 7.6 with backports.

feedback/testing welcome.

Landry
? 0.21.8.log
? mpd-0.20.20
? mpd-0.21.1
? patch-src_Main_cxx
Index: Makefile
===================================================================
RCS file: /cvs/ports/audio/mpd/Makefile,v
diff -u -r1.153 Makefile
--- Makefile	23 Dec 2024 16:55:25 -0000	1.153
+++ Makefile	29 Mar 2025 08:45:22 -0000
@@ -1,6 +1,6 @@
 BROKEN-hppa =		no atomic ops
 COMMENT =		Music Player Daemon
-VER =			0.23.16
+VER =			0.24.2
 DISTNAME =		mpd-${VER}
 EXTRACT_SUFX =		.tar.xz
 CATEGORIES =		audio
@@ -19,6 +19,7 @@
 
 SITES =			https://www.musicpd.org/download/mpd/${VER:R}/
 
+# needs libcxx update ?
 COMPILER =		base-clang ports-gcc
 
 BUILD_DEPENDS =		devel/boost
Index: distinfo
===================================================================
RCS file: /cvs/ports/audio/mpd/distinfo,v
diff -u -r1.68 distinfo
--- distinfo	23 Dec 2024 16:55:25 -0000	1.68
+++ distinfo	29 Mar 2025 08:45:22 -0000
@@ -1,2 +1,2 @@
-SHA256 (mpd-0.23.16.tar.xz) = lmjjbfgN5IVoPJYtAoRb8xTYoI5hQa96/v92QB4yssE=
-SIZE (mpd-0.23.16.tar.xz) = 778572
+SHA256 (mpd-0.24.2.tar.xz) = 1pJR/dFbvY+80cSG3U3GpOAI4EWXWyQIyy83RhwQ8eQ=
+SIZE (mpd-0.24.2.tar.xz) = 1016792
Index: patches/patch-doc_meson_build
===================================================================
RCS file: /cvs/ports/audio/mpd/patches/patch-doc_meson_build,v
diff -u -r1.3 patch-doc_meson_build
--- patches/patch-doc_meson_build	9 Mar 2022 09:52:23 -0000	1.3
+++ patches/patch-doc_meson_build	29 Mar 2025 08:45:22 -0000
@@ -1,8 +1,8 @@
 Index: doc/meson.build
 --- doc/meson.build.orig
 +++ doc/meson.build
-@@ -19,7 +19,7 @@ if get_option('html_manual')
-       'conf.py',
+@@ -20,7 +20,7 @@ if get_option('html_manual')
+       '_static/css/custom.css'
      ],
      command: [sphinx, '-q', '-b', 'html', '-d', '@OUTDIR@/doctrees', meson.current_source_dir(), '@OUTPUT@'],
 -    build_by_default: true,
Index: patches/patch-doc_mpdconf_example
===================================================================
RCS file: /cvs/ports/audio/mpd/patches/patch-doc_mpdconf_example,v
diff -u -r1.23 patch-doc_mpdconf_example
--- patches/patch-doc_mpdconf_example	22 Dec 2023 19:24:34 -0000	1.23
+++ patches/patch-doc_mpdconf_example	29 Mar 2025 08:45:22 -0000
@@ -1,65 +1,62 @@
 Index: doc/mpdconf.example
 --- doc/mpdconf.example.orig
 +++ doc/mpdconf.example
-@@ -10,14 +10,14 @@
- # be disabled and audio files will only be accepted over ipc socket (using
- # file:// protocol) or streaming files over an accepted protocol.
+@@ -12,6 +12,7 @@
  #
--#music_directory		"~/music"
+ #music_directory		"$XDG_MUSIC_DIR"
+ #music_directory		"~/music"
 +music_directory		"/please-configure-your-music_directory"
  #
  # This setting sets the MPD internal playlist directory. The purpose of this
  # directory is storage for playlists created by MPD. The server will use
- # playlist files not created by the server but only if they are in the MPD
- # format. This setting defaults to playlist saving being disabled.
+@@ -20,6 +21,7 @@
  #
--#playlist_directory		"~/.mpd/playlists"
+ #playlist_directory		"$XDG_CONFIG_HOME/mpd/playlists"
+ #playlist_directory		"~/.mpd/playlists"
 +playlist_directory			"/var/spool/mpd/playlists"
  #
  # This setting sets the location of the MPD database. This file is used to
  # load the database at server start up and store the database while the
-@@ -25,7 +25,7 @@
- # MPD to accept files over ipc socket (using file:// protocol) or streaming
- # files over an accepted protocol.
+@@ -29,6 +31,7 @@
  #
--#db_file			"~/.mpd/database"
+ #db_file			"$XDG_CACHE_HOME/mpd/database"
+ #db_file			"~/.mpd/database"
 +db_file			"/var/spool/mpd/mpd.db"
  
  # These settings are the locations for the daemon log files for the daemon.
  #
-@@ -35,7 +35,7 @@
- # If you use systemd, do not configure a log_file.  With systemd, MPD
- # defaults to the systemd journal, which is fine.
+@@ -40,6 +43,7 @@
  #
--#log_file			"~/.mpd/log"
+ #log_file			"$XDG_CACHE_HOME/mpd/log"
+ #log_file			"~/.mpd/log"
 +log_file			"/var/log/mpd/mpd.log"
  
  # This setting sets the location of the file which stores the process ID
  # for use of mpd --kill and some init scripts. This setting is disabled by
-@@ -43,19 +43,19 @@
+@@ -49,6 +53,7 @@
  #
- # If you use systemd, do not configure a pid_file.
- #
--#pid_file			"~/.mpd/pid"
+ #pid_file			"$XDG_RUNTIME_DIR/mpd/mpd.pid"
+ #pid_file			"~/.mpd/pid"
 +pid_file			"/var/spool/mpd/mpd.pid"
  
  # This setting sets the location of the file which contains information about
  # most variables to get MPD back into the same general shape it was in before
- # it was brought down. This setting is disabled by default and the server
- # state will be reset on server start up.
+@@ -57,12 +62,14 @@
  #
--#state_file			"~/.mpd/state"
+ #state_file			"$XDG_RUNTIME_DIR/mpd/state"
+ #state_file			"~/.mpd/state"
 +state_file			"/var/spool/mpd/mpdstate"
  #
  # The location of the sticker database.  This is a database which
  # manages dynamic information attached to songs.
  #
--#sticker_file			"~/.mpd/sticker.sql"
+ #sticker_file			"$XDG_CACHE_HOME/sticker.sql"
+ #sticker_file			"~/.mpd/sticker.sql"
 +sticker_file			"/var/spool/mpd/sticker.sql"
  #
  ###############################################################################
  
-@@ -67,7 +67,7 @@
+@@ -74,7 +81,7 @@
  # initialization. This setting is disabled by default and MPD is run as the
  # current user.
  #
@@ -68,9 +65,9 @@
  #
  # This setting specifies the group that MPD will run as. If not specified
  # primary group of user specified with "user" setting will be used (if set).
-@@ -86,7 +86,10 @@
- #
+@@ -94,7 +101,10 @@
  # And for Unix Socket
+ #bind_to_address		"$XDG_RUNTIME_DIR/mpd/socket"
  #bind_to_address		"~/.mpd/socket"
 +#bind_to_address		"/var/run/mpd/socket"
  #
@@ -79,7 +76,7 @@
  # This setting is the TCP port that is desired for the daemon to get assigned
  # to.
  #
-@@ -331,11 +334,11 @@ input {
+@@ -339,11 +349,11 @@ input {
  #
  # An example of an sndio output.
  #
Index: patches/patch-src_event_FineTimerEvent_hxx
===================================================================
RCS file: patches/patch-src_event_FineTimerEvent_hxx
diff -N patches/patch-src_event_FineTimerEvent_hxx
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_event_FineTimerEvent_hxx	29 Mar 2025 08:45:22 -0000
@@ -0,0 +1,24 @@
+revert https://github.com/MusicPlayerDaemon/MPD/commit/c5e607a3107c3ec2592f5785db4c9b55faefcaae
+
+to revisit when base libcxx is updated ?
+Index: src/event/FineTimerEvent.hxx
+--- src/event/FineTimerEvent.hxx.orig
++++ src/event/FineTimerEvent.hxx
+@@ -7,7 +7,7 @@
+ #include "Chrono.hxx"
+ #include "event/Features.h"
+ #include "util/BindMethod.hxx"
+-#include "util/IntrusiveTreeSet.hxx"
++#include <boost/intrusive/set_hook.hpp>
+ 
+ #include <cassert>
+ 
+@@ -25,7 +25,7 @@ class EventLoop;
+  * as thread-safe.
+  */
+ class FineTimerEvent final :
+-	public IntrusiveTreeSetHook<IntrusiveHookMode::AUTO_UNLINK>
++	public boost::intrusive::set_base_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>>
+ {
+ 	friend class TimerList;
+ 
Index: patches/patch-src_event_TimerList_cxx
===================================================================
RCS file: patches/patch-src_event_TimerList_cxx
diff -N patches/patch-src_event_TimerList_cxx
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_event_TimerList_cxx	29 Mar 2025 08:45:22 -0000
@@ -0,0 +1,30 @@
+revert https://github.com/MusicPlayerDaemon/MPD/commit/c5e607a3107c3ec2592f5785db4c9b55faefcaae
+
+to revisit when base libcxx is updated ?
+Index: src/event/TimerList.cxx
+--- src/event/TimerList.cxx.orig
++++ src/event/TimerList.cxx
+@@ -5,10 +5,11 @@
+ #include "TimerList.hxx"
+ #include "FineTimerEvent.hxx"
+ 
+-constexpr Event::TimePoint
+-TimerList::GetDue::operator()(const FineTimerEvent &timer) const noexcept
++constexpr bool
++TimerList::Compare::operator()(const FineTimerEvent &a,
++			       const FineTimerEvent &b) const noexcept
+ {
+-	return timer.GetDue();
++	return a.due < b.due;
+ }
+ 
+ TimerList::TimerList() = default;
+@@ -37,7 +38,7 @@ TimerList::Run(const Event::TimePoint now) noexcept
+ 		if (timeout > timeout.zero())
+ 			return timeout;
+ 
+-		timers.pop_front();
++		timers.erase(i);
+ 
+ 		t.Run();
+ 	}
Index: patches/patch-src_event_TimerList_hxx
===================================================================
RCS file: patches/patch-src_event_TimerList_hxx
diff -N patches/patch-src_event_TimerList_hxx
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_event_TimerList_hxx	29 Mar 2025 08:45:22 -0000
@@ -0,0 +1,35 @@
+revert https://github.com/MusicPlayerDaemon/MPD/commit/c5e607a3107c3ec2592f5785db4c9b55faefcaae
+
+to revisit when base libcxx is updated ?
+Index: src/event/TimerList.hxx
+--- src/event/TimerList.hxx.orig
++++ src/event/TimerList.hxx
+@@ -6,7 +6,7 @@
+ 
+ #include "Chrono.hxx"
+ #include "event/Features.h"
+-#include "util/IntrusiveTreeSet.hxx"
++#include <boost/intrusive/set.hpp>
+ 
+ class FineTimerEvent;
+ 
+@@ -14,12 +14,15 @@ class FineTimerEvent;
+  * A list of #FineTimerEvent instances sorted by due time point.
+  */
+ class TimerList final {
+-	struct GetDue {
+-		constexpr Event::TimePoint operator()(const FineTimerEvent &timer) const noexcept;
++	struct Compare {
++		constexpr bool operator()(const FineTimerEvent &a,
++					  const FineTimerEvent &b) const noexcept;
+ 	};
+ 
+-	IntrusiveTreeSet<FineTimerEvent,
+-			 IntrusiveTreeSetOperators<FineTimerEvent, GetDue>> timers;
++	boost::intrusive::multiset<FineTimerEvent,
++				   boost::intrusive::base_hook<boost::intrusive::set_base_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>>>,
++				   boost::intrusive::compare<Compare>,
++				   boost::intrusive::constant_time_size<false>> timers;
+ 
+ public:
+ 	TimerList();
Index: patches/patch-src_input_plugins_CdioParanoiaInputPlugin_cxx
===================================================================
RCS file: patches/patch-src_input_plugins_CdioParanoiaInputPlugin_cxx
diff -N patches/patch-src_input_plugins_CdioParanoiaInputPlugin_cxx
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_input_plugins_CdioParanoiaInputPlugin_cxx	29 Mar 2025 08:45:22 -0000
@@ -0,0 +1,14 @@
+otherwise NULL is defined to (void*)0 by cdio/types.h
+
+Index: src/input/plugins/CdioParanoiaInputPlugin.cxx
+--- src/input/plugins/CdioParanoiaInputPlugin.cxx.orig
++++ src/input/plugins/CdioParanoiaInputPlugin.cxx
+@@ -5,6 +5,8 @@
+  * CD-Audio handling (requires libcdio_paranoia)
+  */
+ 
++#define NULL nullptr
++
+ #include "CdioParanoiaInputPlugin.hxx"
+ #include "lib/cdio/Paranoia.hxx"
+ #include "lib/fmt/RuntimeError.hxx"
Index: patches/patch-src_net_DscpParser_cxx
===================================================================
RCS file: patches/patch-src_net_DscpParser_cxx
diff -N patches/patch-src_net_DscpParser_cxx
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_net_DscpParser_cxx	29 Mar 2025 08:45:22 -0000
@@ -0,0 +1,14 @@
+/usr/include/netinet/ip.h:67:19: error: field has incomplete type 'struct in_addr'
+
+Index: src/net/DscpParser.cxx
+--- src/net/DscpParser.cxx.orig
++++ src/net/DscpParser.cxx
+@@ -9,7 +9,7 @@
+ #ifdef _WIN32
+ #include <ws2tcpip.h>
+ #else
+-#include <netinet/ip.h>
++//#include <netinet/ip.h>
+ #endif
+ 
+ #ifndef IPTOS_DSCP_AF11
Index: patches/patch-src_net_meson_build
===================================================================
RCS file: /cvs/ports/audio/mpd/patches/patch-src_net_meson_build,v
diff -u -r1.2 patch-src_net_meson_build
--- patches/patch-src_net_meson_build	11 Mar 2022 18:20:19 -0000	1.2
+++ patches/patch-src_net_meson_build	29 Mar 2025 08:45:22 -0000
@@ -1,11 +1,11 @@
 Index: src/net/meson.build
 --- src/net/meson.build.orig
 +++ src/net/meson.build
-@@ -19,7 +19,6 @@ have_local_socket = not is_windows and get_option('loc
+@@ -29,7 +29,6 @@ have_local_socket = not is_windows and get_option('loc
  conf.set('HAVE_UN', have_local_socket)
  
  if have_local_socket
 -  conf.set('HAVE_STRUCT_UCRED', compiler.has_header_symbol('sys/socket.h', 'struct ucred') and compiler.has_header_symbol('sys/socket.h', 'SO_PEERCRED'))
    conf.set('HAVE_GETPEEREID', compiler.has_function('getpeereid'))
+   net_sources += 'LocalSocketAddress.cxx'
  endif
- 
Index: Makefile
===================================================================
RCS file: /cvs/ports/audio/ncmpc/Makefile,v
diff -u -r1.64 Makefile
--- Makefile	4 Jan 2025 16:30:13 -0000	1.64
+++ Makefile	29 Mar 2025 08:41:00 -0000
@@ -2,7 +2,7 @@
 
 COMMENT=		curses based frontend for mpd
 
-VER=			0.49
+VER=			0.52
 DISTNAME=		ncmpc-${VER}
 EPOCH=			0
 CATEGORIES=		audio
@@ -14,7 +14,7 @@
 
 # make sure to regen WANTLIB on ld.lld arches (-Wl,--as-needed)
 WANTLIB +=	${COMPILER_LIBCXX} c curses iconv intl m mpdclient>=1
-WANTLIB +=	pcre2-8
+WANTLIB +=	pcre2-8 fmt
 
 SITES=			https://www.musicpd.org/download/ncmpc/${VER:R}/
 
@@ -30,6 +30,7 @@
 			textproc/py-sphinx
 
 LIB_DEPENDS=		audio/libmpdclient>=2.20 \
+			devel/fmt \
 			devel/gettext,-runtime \
 			devel/pcre2
 
Index: distinfo
===================================================================
RCS file: /cvs/ports/audio/ncmpc/distinfo,v
diff -u -r1.29 distinfo
--- distinfo	12 Aug 2023 16:56:29 -0000	1.29
+++ distinfo	29 Mar 2025 08:41:00 -0000
@@ -1,2 +1,2 @@
-SHA256 (ncmpc-0.49.tar.xz) = ZbvsDt6ea89irGR7DHBkhb6yvdXbcMqNYBA/MvFizyk=
-SIZE (ncmpc-0.49.tar.xz) = 296012
+SHA256 (ncmpc-0.52.tar.xz) = OvIlSW/jY6hTSpeA+0auG9F7rv2Az0unQwoZzd1z6xo=
+SIZE (ncmpc-0.52.tar.xz) = 319580
Index: patches/patch-src_event_FineTimerEvent_hxx
===================================================================
RCS file: patches/patch-src_event_FineTimerEvent_hxx
diff -N patches/patch-src_event_FineTimerEvent_hxx
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_event_FineTimerEvent_hxx	29 Mar 2025 08:41:00 -0000
@@ -0,0 +1,24 @@
+revert https://github.com/MusicPlayerDaemon/ncmpc/commit/63e3372775c7b1330d07e7e2be38170ad9076cae
+
+to revisit when base libcxx is updated ?
+Index: src/event/FineTimerEvent.hxx
+--- src/event/FineTimerEvent.hxx.orig
++++ src/event/FineTimerEvent.hxx
+@@ -7,7 +7,7 @@
+ #include "Chrono.hxx"
+ #include "event/Features.h"
+ #include "util/BindMethod.hxx"
+-#include "util/IntrusiveTreeSet.hxx"
++#include <boost/intrusive/set_hook.hpp>
+ 
+ #include <cassert>
+ 
+@@ -25,7 +25,7 @@ class EventLoop;
+  * as thread-safe.
+  */
+ class FineTimerEvent final :
+-	public IntrusiveTreeSetHook<IntrusiveHookMode::AUTO_UNLINK>
++	public boost::intrusive::set_base_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>>
+ {
+ 	friend class TimerList;
+ 
Index: patches/patch-src_event_TimerList_cxx
===================================================================
RCS file: patches/patch-src_event_TimerList_cxx
diff -N patches/patch-src_event_TimerList_cxx
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_event_TimerList_cxx	29 Mar 2025 08:41:00 -0000
@@ -0,0 +1,30 @@
+revert https://github.com/MusicPlayerDaemon/ncmpc/commit/63e3372775c7b1330d07e7e2be38170ad9076cae
+
+to revisit when base libcxx is updated ?
+Index: src/event/TimerList.cxx
+--- src/event/TimerList.cxx.orig
++++ src/event/TimerList.cxx
+@@ -5,10 +5,11 @@
+ #include "TimerList.hxx"
+ #include "FineTimerEvent.hxx"
+ 
+-constexpr Event::TimePoint
+-TimerList::GetDue::operator()(const FineTimerEvent &timer) const noexcept
++constexpr bool
++TimerList::Compare::operator()(const FineTimerEvent &a,
++			       const FineTimerEvent &b) const noexcept
+ {
+-	return timer.GetDue();
++	return a.due < b.due;
+ }
+ 
+ TimerList::TimerList() = default;
+@@ -37,7 +38,7 @@ TimerList::Run(const Event::TimePoint now) noexcept
+ 		if (timeout > timeout.zero())
+ 			return timeout;
+ 
+-		timers.pop_front();
++		timers.erase(i);
+ 
+ 		t.Run();
+ 	}
Index: patches/patch-src_event_TimerList_hxx
===================================================================
RCS file: patches/patch-src_event_TimerList_hxx
diff -N patches/patch-src_event_TimerList_hxx
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_event_TimerList_hxx	29 Mar 2025 08:41:00 -0000
@@ -0,0 +1,35 @@
+revert https://github.com/MusicPlayerDaemon/ncmpc/commit/63e3372775c7b1330d07e7e2be38170ad9076cae
+
+to revisit when base libcxx is updated ?
+Index: src/event/TimerList.hxx
+--- src/event/TimerList.hxx.orig
++++ src/event/TimerList.hxx
+@@ -6,7 +6,7 @@
+ 
+ #include "Chrono.hxx"
+ #include "event/Features.h"
+-#include "util/IntrusiveTreeSet.hxx"
++#include <boost/intrusive/set.hpp>
+ 
+ class FineTimerEvent;
+ 
+@@ -14,12 +14,15 @@ class FineTimerEvent;
+  * A list of #FineTimerEvent instances sorted by due time point.
+  */
+ class TimerList final {
+-	struct GetDue {
+-		constexpr Event::TimePoint operator()(const FineTimerEvent &timer) const noexcept;
++	struct Compare {
++		constexpr bool operator()(const FineTimerEvent &a,
++					  const FineTimerEvent &b) const noexcept;
+ 	};
+ 
+-	IntrusiveTreeSet<FineTimerEvent,
+-			 IntrusiveTreeSetOperators<FineTimerEvent, GetDue>> timers;
++	boost::intrusive::multiset<FineTimerEvent,
++				   boost::intrusive::base_hook<boost::intrusive::set_base_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>>>,
++				   boost::intrusive::compare<Compare>,
++				   boost::intrusive::constant_time_size<false>> timers;
+ 
+ public:
+ 	TimerList();
Index: patches/patch-src_screen_cxx
===================================================================
RCS file: patches/patch-src_screen_cxx
diff -N patches/patch-src_screen_cxx
--- patches/patch-src_screen_cxx	23 Apr 2023 15:48:15 -0000	1.6
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,16 +0,0 @@
-Because c++14 zomg woot woot
-
-Index: src/screen.cxx
---- src/screen.cxx.orig
-+++ src/screen.cxx
-@@ -27,8 +27,8 @@ ScreenManager::MakePage(const PageMeta &sf) noexcept
- 		return i;
- 
- 	auto j = pages.emplace(&sf,
--			       sf.init(*this, main_window.w,
--				       main_window.size));
-+			       std::unique_ptr<Page>(sf.init(*this, main_window.w,
-+				       main_window.size)));
- 	assert(j.second);
- 	return j.first;
- }
Index: patches/patch-src_screen_utils_cxx
===================================================================
RCS file: patches/patch-src_screen_utils_cxx
diff -N patches/patch-src_screen_utils_cxx
--- patches/patch-src_screen_utils_cxx	23 Apr 2023 15:48:15 -0000	1.4
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,11 +0,0 @@
-Index: src/screen_utils.cxx
---- src/screen_utils.cxx.orig
-+++ src/screen_utils.cxx
-@@ -15,6 +15,7 @@
- #include <cerrno>
- #endif
- 
-+#include <errno.h>
- #include <string.h>
- 
- void
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/audio/ncmpc/pkg/PLIST,v
diff -u -r1.11 PLIST
--- pkg/PLIST	5 Mar 2022 09:32:53 -0000	1.11
+++ pkg/PLIST	29 Mar 2025 08:41:00 -0000
@@ -40,5 +40,8 @@
 share/locale/ru/LC_MESSAGES/ncmpc.mo
 share/locale/sk/LC_MESSAGES/ncmpc.mo
 share/locale/sv/LC_MESSAGES/ncmpc.mo
+share/locale/ta/
+share/locale/ta/LC_MESSAGES/
+share/locale/ta/LC_MESSAGES/ncmpc.mo
 share/locale/uk/LC_MESSAGES/ncmpc.mo
 share/locale/zh_CN/LC_MESSAGES/ncmpc.mo