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