Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package mpd for openSUSE:Factory checked in at 2022-06-02 21:54:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mpd (Old) and /work/SRC/openSUSE:Factory/.mpd.new.1548 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mpd" Thu Jun 2 21:54:08 2022 rev:40 rq:980373 version:0.23.7 Changes: -------- --- /work/SRC/openSUSE:Factory/mpd/mpd.changes 2022-03-30 20:36:02.349321640 +0200 +++ /work/SRC/openSUSE:Factory/.mpd.new.1548/mpd.changes 2022-06-02 21:54:14.720371331 +0200 @@ -1,0 +2,12 @@ +Wed Jun 1 14:58:09 UTC 2022 - ???????? ???????????? <i...@ilya.cf> + +- Updated to 0.23.7 + * https://raw.githubusercontent.com/MusicPlayerDaemon/MPD/v0.23.7/NEWS + * decoder: + * ffmpeg: fix HLS seeking + * opus: fix missing song length on high-latency files + * mixer: + * pipewire: fix volume restore + * software: update volume of disabled outputs + +------------------------------------------------------------------- @@ -36 +48 @@ -Fri Nov 12 23:12:23 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua> +Fri Nov 12 23:12:23 UTC 2021 - ???????? ???????????? <i...@ilya.cf> @@ -52 +64 @@ -Sat Nov 6 02:02:33 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua> +Sat Nov 6 02:02:33 UTC 2021 - ???????? ???????????? <i...@ilya.cf> @@ -109 +121 @@ -Wed Sep 1 07:24:21 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua> +Wed Sep 1 07:24:21 UTC 2021 - ???????? ???????????? <i...@ilya.cf> @@ -120 +132 @@ -Tue Aug 17 07:55:08 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua> +Tue Aug 17 07:55:08 UTC 2021 - ???????? ???????????? <i...@ilya.cf> @@ -141 +153 @@ -Sun Jun 27 11:12:37 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua> +Sun Jun 27 11:12:37 UTC 2021 - ???????? ???????????? <i...@ilya.cf> @@ -159 +171 @@ -Fri May 21 06:04:21 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua> +Fri May 21 06:04:21 UTC 2021 - ???????? ???????????? <i...@ilya.cf> @@ -191 +203 @@ -Sat Jan 23 11:49:19 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua> +Sat Jan 23 11:49:19 UTC 2021 - ???????? ???????????? <i...@ilya.cf> @@ -206 +218 @@ -Mon Nov 9 06:24:26 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua> +Mon Nov 9 06:24:26 UTC 2020 - ???????? ???????????? <i...@ilya.cf> @@ -219 +231 @@ -Wed Oct 28 22:04:23 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua> +Wed Oct 28 22:04:23 UTC 2020 - ???????? ???????????? <i...@ilya.cf> @@ -242 +254 @@ -Wed Sep 30 01:36:05 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua> +Wed Sep 30 01:36:05 UTC 2020 - ???????? ???????????? <i...@ilya.cf> @@ -359 +371 @@ -Mon Jun 22 10:33:14 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua> +Mon Jun 22 10:33:14 UTC 2020 - ???????? ???????????? <i...@ilya.cf> @@ -373 +385 @@ -Sat Apr 25 18:01:18 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua> +Sat Apr 25 18:01:18 UTC 2020 - ???????? ???????????? <i...@ilya.cf> @@ -389 +401 @@ -Sat Apr 4 22:04:54 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua> +Sat Apr 4 22:04:54 UTC 2020 - ???????? ???????????? <i...@ilya.cf> @@ -400 +412 @@ -Fri Mar 27 15:53:58 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua> +Fri Mar 27 15:53:58 UTC 2020 - ???????? ???????????? <i...@ilya.cf> @@ -412 +424 @@ -Thu Feb 27 06:59:18 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua> +Thu Feb 27 06:59:18 UTC 2020 - ???????? ???????????? <i...@ilya.cf> @@ -423 +435 @@ -Mon Jan 20 07:42:18 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua> +Mon Jan 20 07:42:18 UTC 2020 - ???????? ???????????? <i...@ilya.cf> @@ -435 +447 @@ -Sat Dec 28 10:42:29 UTC 2019 - ???????? ???????????? <i...@ilya.pp.ua> +Sat Dec 28 10:42:29 UTC 2019 - ???????? ???????????? <i...@ilya.cf> @@ -449 +461 @@ -Wed Dec 18 15:55:55 UTC 2019 - ???????? ???????????? <i...@ilya.pp.ua> +Wed Dec 18 15:55:55 UTC 2019 - ???????? ???????????? <i...@ilya.cf> @@ -464 +476 @@ -Wed Oct 16 11:36:22 UTC 2019 - ???????? ???????????? <i...@ilya.pp.ua> +Wed Oct 16 11:36:22 UTC 2019 - ???????? ???????????? <i...@ilya.cf> @@ -479 +491 @@ -Tue Oct 8 08:02:09 UTC 2019 - ???????? ???????????? <i...@ilya.pp.ua> +Tue Oct 8 08:02:09 UTC 2019 - ???????? ???????????? <i...@ilya.cf> @@ -523 +535 @@ -Tue Jul 23 07:42:13 UTC 2019 - ???????? ???????????? <i...@ilya.pp.ua> +Tue Jul 23 07:42:13 UTC 2019 - ???????? ???????????? <i...@ilya.cf> Old: ---- mpd-0.23.6.tar.xz mpd-0.23.6.tar.xz.sig New: ---- mpd-0.23.7.tar.xz mpd-0.23.7.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mpd.spec ++++++ --- /var/tmp/diff_new_pack.mCRtc3/_old 2022-06-02 21:54:15.408372207 +0200 +++ /var/tmp/diff_new_pack.mCRtc3/_new 2022-06-02 21:54:15.412372212 +0200 @@ -20,7 +20,7 @@ %bcond_with faad %bcond_without mpd_iso9660 Name: mpd -Version: 0.23.6 +Version: 0.23.7 Release: 0 Summary: Music Player Daemon License: GPL-2.0-or-later ++++++ mpd-0.23.6.tar.xz -> mpd-0.23.7.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/NEWS new/mpd-0.23.7/NEWS --- old/mpd-0.23.6/NEWS 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/NEWS 2022-05-09 23:04:30.000000000 +0200 @@ -1,3 +1,16 @@ +ver 0.23.7 (2022/05/09) +* database + - upnp: support pupnp 1.14 +* decoder + - ffmpeg: fix HLS seeking + - opus: fix missing song length on high-latency files +* output + - shout: require at least libshout 2.4.0 +* mixer + - pipewire: fix volume restore + - software: update volume of disabled outputs +* support libiconv + ver 0.23.6 (2022/03/14) * protocol - support filename "cover.webp" for "albumart" command diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/android/AndroidManifest.xml new/mpd-0.23.7/android/AndroidManifest.xml --- old/mpd-0.23.6/android/AndroidManifest.xml 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/android/AndroidManifest.xml 2022-05-09 23:04:30.000000000 +0200 @@ -2,8 +2,8 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.musicpd" android:installLocation="auto" - android:versionCode="65" - android:versionName="0.23.5"> + android:versionCode="66" + android:versionName="0.23.7"> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/> @@ -19,6 +19,7 @@ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <application android:allowBackup="true" + android:debuggable="true" android:requestLegacyExternalStorage="true" android:icon="@drawable/icon" android:banner="@drawable/icon" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/android/gdb.sh new/mpd-0.23.7/android/gdb.sh --- old/mpd-0.23.6/android/gdb.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/mpd-0.23.7/android/gdb.sh 2022-05-09 23:04:30.000000000 +0200 @@ -0,0 +1,54 @@ +#!/bin/sh + +# This script need the following modification in ANDROID_NDK in order to attach +# to the good :main pid +#--- a/prebuilt/linux-x86_64/bin/ndk-gdb.py +#+++ b/prebuilt/linux-x86_64/bin/ndk-gdb.py +#@@ -669,7 +669,7 @@ +# log("Sleeping for {} seconds.".format(args.delay)) +# time.sleep(args.delay) +# +#- pids = gdbrunner.get_pids(device, pkg_name) +#+ pids = gdbrunner.get_pids(device, pkg_name + ":main") +# if len(pids) == 0: +# error("Failed to find running process '{}'".format(pkg_name)) +# if len(pids) > 1: + +SCRIPT_PATH=$(dirname $0) +BUILD_PATH="`pwd`" +TMP_PATH="$BUILD_PATH/gdb" +NDK_GDB_ARGS="--force" +ANDROID_NDK=$1 + +if [ ! -f $ANDROID_NDK/source.properties ];then + echo "usage: $0 ANDROID_NDK" + exit 1 +fi + +if [ ! -f $BUILD_PATH/libmpd.so ];then + echo "This script need to be executed from the android build directory" + exit 1 +fi + +rm -rf "$TMP_PATH" +mkdir -p "$TMP_PATH" + +ANDROID_MANIFEST="$SCRIPT_PATH/AndroidManifest.xml" +ABI=`ls "$BUILD_PATH/android/apk/apk/lib" --sort=time | head -n 1` + +if [ ! -f "$ANDROID_MANIFEST" -o "$ABI" = "" ]; then + echo "Invalid manifest/ABI, did you try building first ?" + exit 1 +fi + +mkdir -p "$TMP_PATH"/jni +touch "$TMP_PATH"/jni/Android.mk +echo "APP_ABI := $ABI" > "$TMP_PATH"/jni/Application.mk + +DEST=obj/local/$ABI +mkdir -p "$TMP_PATH/$DEST" + +cp "$BUILD_PATH/libmpd.so" "$TMP_PATH/$DEST" +cp "$ANDROID_MANIFEST" "$TMP_PATH" + +(cd "$TMP_PATH" && bash $ANDROID_NDK/ndk-gdb $NDK_GDB_ARGS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/doc/conf.py new/mpd-0.23.7/doc/conf.py --- old/mpd-0.23.6/doc/conf.py 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/doc/conf.py 2022-05-09 23:04:30.000000000 +0200 @@ -38,7 +38,7 @@ # built documents. # # The short X.Y version. -version = '0.23.6' +version = '0.23.7' # The full version, including alpha/beta/rc tags. #release = version + '~git' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/doc/protocol.rst new/mpd-0.23.7/doc/protocol.rst --- old/mpd-0.23.6/doc/protocol.rst 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/doc/protocol.rst 2022-05-09 23:04:30.000000000 +0200 @@ -545,6 +545,13 @@ Sets repeat state to ``STATE``, ``STATE`` should be 0 or 1. + If enabled, MPD keeps repeating the whole queue (:ref:`single mode + <command_single>` disabled) or the current song (:ref:`single mode + <command_single>` enabled). + + If :ref:`random mode <command_random>` is also enabled, the + playback order will be shuffled each time the queue gets repeated. + .. _command_setvol: :command:`setvol {VOL}` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/meson.build new/mpd-0.23.7/meson.build --- old/mpd-0.23.6/meson.build 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/meson.build 2022-05-09 23:04:30.000000000 +0200 @@ -1,7 +1,7 @@ project( 'mpd', ['c', 'cpp'], - version: '0.23.6', + version: '0.23.7', meson_version: '>= 0.56.0', default_options: [ 'c_std=c11', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/python/build/libs.py new/mpd-0.23.7/python/build/libs.py --- old/mpd-0.23.6/python/build/libs.py 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/python/build/libs.py 2022-05-09 23:04:30.000000000 +0200 @@ -55,8 +55,8 @@ ) zlib = ZlibProject( - 'http://zlib.net/zlib-1.2.11.tar.xz', - '4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066', + 'http://zlib.net/zlib-1.2.12.tar.xz', + '7db46b8d7726232a621befaab4a1c870f00a90805511c0e0090441dac57def18', 'lib/libz.a', ) @@ -151,8 +151,8 @@ ) ffmpeg = FfmpegProject( - 'http://ffmpeg.org/releases/ffmpeg-5.0.tar.xz', - '51e919f7d205062c0fd4fae6243a84850391115104ccf1efc451733bc0ac7298', + 'http://ffmpeg.org/releases/ffmpeg-5.0.1.tar.xz', + 'ef2efae259ce80a240de48ec85ecb062cecca26e4352ffb3fda562c21a93007b', 'lib/libavcodec.a', [ '--disable-shared', '--enable-static', @@ -380,14 +380,14 @@ ) openssl = OpenSSLProject( - 'https://www.openssl.org/source/openssl-3.0.1.tar.gz', - 'c311ad853353bce796edad01a862c50a8a587f62e7e2100ef465ab53ec9b06d1', + 'https://www.openssl.org/source/openssl-3.0.3.tar.gz', + '9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f', 'include/openssl/ossl_typ.h', ) curl = CmakeProject( - 'https://curl.se/download/curl-7.82.0.tar.xz', - '0aaa12d7bd04b0966254f2703ce80dd5c38dbbd76af0297d3d690cdce58a583c', + 'https://curl.se/download/curl-7.83.0.tar.xz', + 'bbff0e6b5047e773f3c3b084d80546cc1be4e354c09e419c2d0ef6116253511a', 'lib/libcurl.a', [ '-DBUILD_CURL_EXE=OFF', @@ -444,7 +444,7 @@ ) boost = BoostProject( - 'https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.bz2', - '8681f175d4bdb26c52222665793eef08490d7758529330f98d3b29dd0735bccc', + 'https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.bz2', + '475d589d51a7f8b3ba2ba4eda022b170e562ca3b760ee922c146b6c65856ef39', 'include/boost/version.hpp', ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/decoder/plugins/FfmpegDecoderPlugin.cxx new/mpd-0.23.7/src/decoder/plugins/FfmpegDecoderPlugin.cxx --- old/mpd-0.23.6/src/decoder/plugins/FfmpegDecoderPlugin.cxx 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/decoder/plugins/FfmpegDecoderPlugin.cxx 2022-05-09 23:04:30.000000000 +0200 @@ -384,7 +384,8 @@ FfmpegParseMetaData(const AVStream &stream, ReplayGainInfo &rg, MixRampInfo &mr) { - FfmpegParseMetaData(*stream.metadata, rg, mr); + if (stream.metadata != nullptr) + FfmpegParseMetaData(*stream.metadata, rg, mr); } static void @@ -393,7 +394,9 @@ { assert(audio_stream >= 0); - FfmpegParseMetaData(*format_context.metadata, rg, mr); + if (format_context.metadata != nullptr) + FfmpegParseMetaData(*format_context.metadata, rg, mr); + FfmpegParseMetaData(*format_context.streams[audio_stream], rg, mr); } @@ -468,7 +471,7 @@ IsSeekable(const AVFormatContext &format_context) noexcept { #if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(58, 6, 100) - return (format_context.ctx_flags & AVFMTCTX_UNSEEKABLE) != 0; + return (format_context.ctx_flags & AVFMTCTX_UNSEEKABLE) == 0; #else (void)format_context; return false; @@ -530,9 +533,8 @@ : FromFfmpegTimeChecked(format_context.duration, AV_TIME_BASE_Q); client.Ready(audio_format, - input - ? input->IsSeekable() - : IsSeekable(format_context), + (input ? input->IsSeekable() : false) + || IsSeekable(format_context), total_time); FfmpegParseMetaData(client, format_context, audio_stream); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/encoder/meson.build new/mpd-0.23.7/src/encoder/meson.build --- old/mpd-0.23.6/src/encoder/meson.build 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/encoder/meson.build 2022-05-09 23:04:30.000000000 +0200 @@ -3,6 +3,23 @@ encoder_features.set('ENABLE_ENCODER', need_encoder) if not need_encoder + if need_wave_encoder + # Special case for the Snapcast output plugin which only needs the + # PCM wave encoder encoder plugin + encoder_glue = static_library( + 'encoder_glue', + 'plugins/WaveEncoderPlugin.cxx', + include_directories: inc, + ) + + encoder_glue_dep = declare_dependency( + link_with: encoder_glue, + ) + + configure_file(output: 'Features.h', configuration: encoder_features) + subdir_done() + endif + encoder_glue_dep = dependency('', required: false) configure_file(output: 'Features.h', configuration: encoder_features) subdir_done() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/encoder/plugins/meson.build new/mpd-0.23.7/src/encoder/plugins/meson.build --- old/mpd-0.23.6/src/encoder/plugins/meson.build 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/encoder/plugins/meson.build 2022-05-09 23:04:30.000000000 +0200 @@ -35,7 +35,7 @@ endif encoder_features.set('ENABLE_WAVE_ENCODER', get_option('wave_encoder')) -if get_option('wave_encoder') +if get_option('wave_encoder') or need_wave_encoder encoder_plugins_sources += 'WaveEncoderPlugin.cxx' endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/lib/icu/meson.build new/mpd-0.23.7/src/lib/icu/meson.build --- old/mpd-0.23.6/src/lib/icu/meson.build 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/lib/icu/meson.build 2022-05-09 23:04:30.000000000 +0200 @@ -12,17 +12,23 @@ icu_sources += 'Win32.cxx' endif +iconv_dep = [] if icu_dep.found() icu_sources += [ 'Util.cxx', 'Init.cxx', ] elif not get_option('iconv').disabled() - have_iconv = compiler.has_function('iconv', prefix : '#include <iconv.h>') - conf.set('HAVE_ICONV', have_iconv) + # an installed iconv library will make the builtin iconv() unavailable, + # so search for the library first and pass it as (possible) dependency + iconv_dep = compiler.find_library('libiconv', required: false) + have_iconv = compiler.has_function('iconv', + dependencies: iconv_dep, + prefix : '#include <iconv.h>') if not have_iconv and get_option('iconv').enabled() error('iconv() not available') endif + conf.set('HAVE_ICONV', have_iconv) endif icu = static_library( @@ -31,6 +37,7 @@ include_directories: inc, dependencies: [ icu_dep, + iconv_dep, fmt_dep, ], ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/lib/upnp/Init.cxx new/mpd-0.23.7/src/lib/upnp/Init.cxx --- old/mpd-0.23.6/src/lib/upnp/Init.cxx 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/lib/upnp/Init.cxx 2022-05-09 23:04:30.000000000 +0200 @@ -35,13 +35,7 @@ static void DoInit(const char* iface) { - -#ifdef UPNP_ENABLE_IPV6 - auto code = UpnpInit2(iface, 0); -#else - auto code = UpnpInit(iface, 0); -#endif - if (code != UPNP_E_SUCCESS) + if (auto code = UpnpInit2(iface, 0); code != UPNP_E_SUCCESS) throw FormatRuntimeError("UpnpInit() failed: %s", UpnpGetErrorMessage(code)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/lib/xiph/OggSyncState.cxx new/mpd-0.23.7/src/lib/xiph/OggSyncState.cxx --- old/mpd-0.23.6/src/lib/xiph/OggSyncState.cxx 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/lib/xiph/OggSyncState.cxx 2022-05-09 23:04:30.000000000 +0200 @@ -67,7 +67,7 @@ bool OggSyncState::ExpectPageSeek(ogg_page &page) { - size_t remaining_skipped = 32768; + size_t remaining_skipped = 65536; while (true) { int r = ogg_sync_pageseek(&oy, &page); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/mixer/MixerAll.cxx new/mpd-0.23.7/src/mixer/MixerAll.cxx --- old/mpd-0.23.6/src/mixer/MixerAll.cxx 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/mixer/MixerAll.cxx 2022-05-09 23:04:30.000000000 +0200 @@ -34,13 +34,15 @@ static int output_mixer_get_volume(const AudioOutputControl &ao) noexcept { - if (!ao.IsEnabled()) - return -1; - auto *mixer = ao.GetMixer(); if (mixer == nullptr) return -1; + /* software mixers are always considered, even if they are + disabled */ + if (!ao.IsEnabled() && !mixer->IsPlugin(software_mixer_plugin)) + return -1; + try { return mixer_get_volume(mixer); } catch (...) { @@ -76,13 +78,15 @@ { assert(volume <= 100); - if (!ao.IsEnabled()) - return false; - auto *mixer = ao.GetMixer(); if (mixer == nullptr) return false; + /* software mixers are always updated, even if they are + disabled */ + if (!ao.IsReallyEnabled() && !mixer->IsPlugin(software_mixer_plugin)) + return false; + try { mixer_set_volume(mixer, volume); return true; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/output/Control.hxx new/mpd-0.23.7/src/output/Control.hxx --- old/mpd-0.23.6/src/output/Control.hxx 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/output/Control.hxx 2022-05-09 23:04:30.000000000 +0200 @@ -291,6 +291,13 @@ /** * Caller must lock the mutex. */ + bool IsReallyEnabled() const noexcept { + return really_enabled; + } + + /** + * Caller must lock the mutex. + */ bool IsEnabled() const noexcept { return enabled; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/output/plugins/PipeWireOutputPlugin.cxx new/mpd-0.23.7/src/output/plugins/PipeWireOutputPlugin.cxx --- old/mpd-0.23.6/src/output/plugins/PipeWireOutputPlugin.cxx 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/output/plugins/PipeWireOutputPlugin.cxx 2022-05-09 23:04:30.000000000 +0200 @@ -638,8 +638,8 @@ [[maybe_unused]] const struct spa_pod *param) noexcept { if (restore_volume) { - SetVolume(volume); restore_volume = false; + SetVolume(volume); } #if defined(ENABLE_DSD) && defined(SPA_AUDIO_DSD_FLAG_NONE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/output/plugins/ShoutOutputPlugin.cxx new/mpd-0.23.7/src/output/plugins/ShoutOutputPlugin.cxx --- old/mpd-0.23.6/src/output/plugins/ShoutOutputPlugin.cxx 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/output/plugins/ShoutOutputPlugin.cxx 2022-05-09 23:04:30.000000000 +0200 @@ -59,7 +59,7 @@ public: ShoutConfig(const ConfigBlock &block, const char *mime_type); - void Setup(shout_t *connection) const; + void Setup(shout_t &connection) const; }; struct ShoutOutput final : AudioOutput { @@ -229,41 +229,56 @@ return new ShoutOutput(block); } +static void +SetMeta(shout_t &connection, const char *name, const char *value) +{ + if (shout_set_meta(&connection, name, value) != SHOUTERR_SUCCESS) + throw std::runtime_error(shout_get_error(&connection)); +} + +static void +SetOptionalMeta(shout_t &connection, const char *name, const char *value) +{ + if (value != nullptr) + SetMeta(connection, name, value); +} + inline void -ShoutConfig::Setup(shout_t *connection) const +ShoutConfig::Setup(shout_t &connection) const { - if (shout_set_host(connection, host) != SHOUTERR_SUCCESS || - shout_set_port(connection, port) != SHOUTERR_SUCCESS || - shout_set_password(connection, passwd) != SHOUTERR_SUCCESS || - shout_set_mount(connection, mount) != SHOUTERR_SUCCESS || - shout_set_name(connection, name) != SHOUTERR_SUCCESS || - shout_set_user(connection, user) != SHOUTERR_SUCCESS || - shout_set_public(connection, is_public) != SHOUTERR_SUCCESS || - shout_set_format(connection, format) != SHOUTERR_SUCCESS || - shout_set_protocol(connection, protocol) != SHOUTERR_SUCCESS || + if (shout_set_host(&connection, host) != SHOUTERR_SUCCESS || + shout_set_port(&connection, port) != SHOUTERR_SUCCESS || + shout_set_password(&connection, passwd) != SHOUTERR_SUCCESS || + shout_set_mount(&connection, mount) != SHOUTERR_SUCCESS || + shout_set_user(&connection, user) != SHOUTERR_SUCCESS || + shout_set_public(&connection, is_public) != SHOUTERR_SUCCESS || +#ifdef SHOUT_USAGE_AUDIO + /* since libshout 2.4.3 */ + shout_set_content_format(&connection, format, SHOUT_USAGE_AUDIO, + nullptr) != SHOUTERR_SUCCESS || +#else + shout_set_format(&connection, format) != SHOUTERR_SUCCESS || +#endif + shout_set_protocol(&connection, protocol) != SHOUTERR_SUCCESS || #ifdef SHOUT_TLS - shout_set_tls(connection, tls) != SHOUTERR_SUCCESS || + shout_set_tls(&connection, tls) != SHOUTERR_SUCCESS || #endif - shout_set_agent(connection, "MPD") != SHOUTERR_SUCCESS) - throw std::runtime_error(shout_get_error(connection)); - - /* optional paramters */ + shout_set_agent(&connection, "MPD") != SHOUTERR_SUCCESS) + throw std::runtime_error(shout_get_error(&connection)); - if (genre != nullptr && shout_set_genre(connection, genre)) - throw std::runtime_error(shout_get_error(connection)); + SetMeta(connection, SHOUT_META_NAME, name); - if (description != nullptr && - shout_set_description(connection, description)) - throw std::runtime_error(shout_get_error(connection)); + /* optional paramters */ - if (url != nullptr && shout_set_url(connection, url)) - throw std::runtime_error(shout_get_error(connection)); + SetOptionalMeta(connection, SHOUT_META_GENRE, genre); + SetOptionalMeta(connection, SHOUT_META_DESCRIPTION, description); + SetOptionalMeta(connection, SHOUT_META_URL, url); if (quality != nullptr) - shout_set_audio_info(connection, SHOUT_AI_QUALITY, quality); + shout_set_audio_info(&connection, SHOUT_AI_QUALITY, quality); if (bitrate != nullptr) - shout_set_audio_info(connection, SHOUT_AI_BITRATE, bitrate); + shout_set_audio_info(&connection, SHOUT_AI_BITRATE, bitrate); } void @@ -274,7 +289,7 @@ throw std::bad_alloc{}; try { - config.Setup(shout_conn); + config.Setup(*shout_conn); } catch (...) { shout_free(shout_conn); throw; @@ -418,7 +433,7 @@ } static void -shout_tag_to_metadata(const Tag &tag, char *dest, size_t size) +shout_tag_to_metadata(const Tag &tag, char *dest, size_t size) noexcept { const char *artist = tag.GetValue(TAG_ARTIST); const char *title = tag.GetValue(TAG_TITLE); @@ -446,9 +461,15 @@ char song[1024]; shout_tag_to_metadata(tag, song, sizeof(song)); - shout_metadata_add(meta, "song", song); - shout_metadata_add(meta, "charset", "UTF-8"); - if (SHOUTERR_SUCCESS != shout_set_metadata(shout_conn, meta)) { + if (SHOUTERR_SUCCESS != shout_metadata_add(meta, "song", song) || +#ifdef SHOUT_FORMAT_TEXT + /* since libshout 2.4.6 */ + SHOUTERR_SUCCESS != shout_set_metadata_utf8(shout_conn, meta) +#else + SHOUTERR_SUCCESS != shout_metadata_add(meta, "charset", "UTF-8") || + SHOUTERR_SUCCESS != shout_set_metadata(shout_conn, meta) +#endif + ) { LogWarning(shout_output_domain, "error setting shout metadata"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/output/plugins/meson.build new/mpd-0.23.7/src/output/plugins/meson.build --- old/mpd-0.23.6/src/output/plugins/meson.build 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/output/plugins/meson.build 2022-05-09 23:04:30.000000000 +0200 @@ -10,6 +10,7 @@ ] need_encoder = false +need_wave_encoder = false if alsa_dep.found() output_plugins_sources += 'AlsaOutputPlugin.cxx' @@ -99,7 +100,7 @@ need_encoder = true endif -libshout_dep = dependency('shout', required: get_option('shout')) +libshout_dep = dependency('shout', version: '>= 2.4.0', required: get_option('shout')) output_features.set('HAVE_SHOUT', libshout_dep.found()) if libshout_dep.found() output_plugins_sources += 'ShoutOutputPlugin.cxx' @@ -127,9 +128,7 @@ output_features.set('HAVE_YAJL', yajl_dep.found()) - # TODO: the Snapcast plugin needs just the "wave" encoder, but this - # enables all available encoders - need_encoder = true + need_wave_encoder = true endif enable_solaris_output = get_option('solaris_output') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/tag/ApeLoader.cxx new/mpd-0.23.7/src/tag/ApeLoader.cxx --- old/mpd-0.23.6/src/tag/ApeLoader.cxx 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/tag/ApeLoader.cxx 2022-05-09 23:04:30.000000000 +0200 @@ -73,10 +73,10 @@ unsigned n = FromLE32(footer.count); const char *p = buffer.get(); while (n-- && remaining > 10) { - size_t size = FromLE32(*(const uint32_t *)p); + size_t size = *(const PackedLE32 *)p; p += 4; remaining -= 4; - unsigned long flags = FromLE32(*(const uint32_t *)p); + unsigned long flags = *(const PackedLE32 *)p; p += 4; remaining -= 4; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/tag/Id3Picture.cxx new/mpd-0.23.7/src/tag/Id3Picture.cxx --- old/mpd-0.23.6/src/tag/Id3Picture.cxx 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/tag/Id3Picture.cxx 2022-05-09 23:04:30.000000000 +0200 @@ -32,7 +32,7 @@ if (src.size < 4) return nullptr; - const size_t length = FromBE32(*(const uint32_t *)src.data); + const size_t length = *(const PackedBE32 *)src.data; src.skip_front(4); if (src.size < length) @@ -65,7 +65,7 @@ buffer.skip_front(16); - const size_t image_size = FromBE32(*(const uint32_t *)buffer.data); + const size_t image_size = *(const PackedBE32 *)buffer.data; buffer.skip_front(4); if (buffer.size < image_size) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/src/util/ByteOrder.hxx new/mpd-0.23.7/src/util/ByteOrder.hxx --- old/mpd-0.23.6/src/util/ByteOrder.hxx 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/src/util/ByteOrder.hxx 2022-05-09 23:04:30.000000000 +0200 @@ -298,6 +298,60 @@ static_assert(alignof(PackedBE16) == 1, "Wrong alignment"); /** + * A packed big-endian 32 bit integer. + */ +class PackedBE32 { + uint8_t a, b, c, d; + +public: + PackedBE32() = default; + + constexpr PackedBE32(uint32_t src) noexcept + :a(uint8_t(src >> 24)), + b(uint8_t(src >> 16)), + c(uint8_t(src >> 8)), + d(uint8_t(src)) {} + + /** + * Construct an instance from an integer which is already + * big-endian. + */ + static constexpr auto FromBE(uint32_t src) noexcept { + union { + uint32_t in; + PackedBE32 out; + } u{src}; + return u.out; + } + + constexpr operator uint32_t() const noexcept { + return (uint32_t(a) << 24) | (uint32_t(b) << 16) | + (uint32_t(c) << 8) | uint32_t(d); + } + + PackedBE32 &operator=(uint32_t new_value) noexcept { + d = uint8_t(new_value); + c = uint8_t(new_value >> 8); + b = uint8_t(new_value >> 16); + a = uint8_t(new_value >> 24); + return *this; + } + + /** + * Reads the raw, big-endian value. + */ + constexpr uint32_t raw() const noexcept { + uint32_t x = *this; + if (IsLittleEndian()) + x = ByteSwap32(x); + return x; + } +}; + +static_assert(sizeof(PackedBE32) == sizeof(uint32_t), "Wrong size"); +static_assert(alignof(PackedBE32) == 1, "Wrong alignment"); + +/** * A packed little-endian 16 bit integer. */ class PackedLE16 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/subprojects/expat.wrap new/mpd-0.23.7/subprojects/expat.wrap --- old/mpd-0.23.6/subprojects/expat.wrap 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/subprojects/expat.wrap 2022-05-09 23:04:30.000000000 +0200 @@ -1,9 +1,12 @@ -[wrap-file] -directory = expat-2.2.9 -source_url = https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.xz -source_filename = expat-2.2.9.tar.bz2 -source_hash = 1ea6965b15c2106b6bbe883397271c80dfa0331cdf821b2c319591b55eadc0a4 -patch_url = https://wrapdb.mesonbuild.com/v1/projects/expat/2.2.9/3/get_zip -patch_filename = expat-2.2.9-3-wrap.zip -patch_hash = e9aaace62e9a158b5e96f5c38c9f81f369179206acd87697653d777c0d3975d3 - +[wrap-file] +directory = expat-2.4.8 +source_url = https://github.com/libexpat/libexpat/releases/download/R_2_4_8/expat-2.4.8.tar.xz +source_filename = expat-2.4.8.tar.bz2 +source_hash = f79b8f904b749e3e0d20afeadecf8249c55b2e32d4ebb089ae378df479dcaf25 +patch_filename = expat_2.4.8-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/expat_2.4.8-1/get_patch +patch_hash = 9aec253a2c6d1c0feb852c5c6920298d14701eeec7acc6832bb402438b52112a + +[provide] +expat = expat_dep + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/subprojects/fmt.wrap new/mpd-0.23.7/subprojects/fmt.wrap --- old/mpd-0.23.6/subprojects/fmt.wrap 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/subprojects/fmt.wrap 2022-05-09 23:04:30.000000000 +0200 @@ -1,11 +1,11 @@ [wrap-file] -directory = fmt-7.1.3 -source_url = https://github.com/fmtlib/fmt/archive/7.1.3.tar.gz -source_filename = fmt-7.1.3.tar.gz -source_hash = 5cae7072042b3043e12d53d50ef404bbb76949dad1de368d7f993a15c8c05ecc -patch_url = https://wrapdb.mesonbuild.com/v1/projects/fmt/7.1.3/1/get_zip -patch_filename = fmt-7.1.3-1-wrap.zip -patch_hash = 6eb951a51806fd6ffd596064825c39b844c1fe1799840ef507b61a53dba08213 +directory = fmt-8.1.1 +source_url = https://github.com/fmtlib/fmt/archive/8.1.1.tar.gz +source_filename = fmt-8.1.1.tar.gz +source_hash = 3d794d3cf67633b34b2771eb9f073bde87e846e0d395d254df7b211ef1ec7346 +patch_filename = fmt_8.1.1-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/fmt_8.1.1-1/get_patch +patch_hash = 6035a67c7a8c90bed74c293c7265c769f47a69816125f7566bccb8e2543cee5e [provide] fmt = fmt_dep diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/subprojects/gtest.wrap new/mpd-0.23.7/subprojects/gtest.wrap --- old/mpd-0.23.6/subprojects/gtest.wrap 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/subprojects/gtest.wrap 2022-05-09 23:04:30.000000000 +0200 @@ -1,10 +1,15 @@ [wrap-file] -directory = googletest-release-1.10.0 +directory = googletest-release-1.11.0 +source_url = https://github.com/google/googletest/archive/release-1.11.0.tar.gz +source_filename = gtest-1.11.0.tar.gz +source_hash = b4870bf121ff7795ba20d20bcdd8627b8e088f2d1dab299a031c1034eddc93d5 +patch_filename = gtest_1.11.0-2_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/gtest_1.11.0-2/get_patch +patch_hash = 764530d812ac161c9eab02a8cfaec67c871fcfc5548e29fd3d488070913d4e94 -source_url = https://github.com/google/googletest/archive/release-1.10.0.zip -source_filename = gtest-1.10.0.zip -source_hash = 94c634d499558a76fa649edb13721dce6e98fb1e7018dfaeba3cd7a083945e91 +[provide] +gtest = gtest_dep +gtest_main = gtest_main_dep +gmock = gmock_dep +gmock_main = gmock_main_dep -patch_url = https://wrapdb.mesonbuild.com/v1/projects/gtest/1.10.0/1/get_zip -patch_filename = gtest-1.10.0-1-wrap.zip -patch_hash = 04ff14e8880e4e465f6260221e9dfd56fea6bc7cce4c4aff0dc528e4a2c8f514 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/subprojects/sqlite3.wrap new/mpd-0.23.7/subprojects/sqlite3.wrap --- old/mpd-0.23.6/subprojects/sqlite3.wrap 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/subprojects/sqlite3.wrap 2022-05-09 23:04:30.000000000 +0200 @@ -1,11 +1,11 @@ [wrap-file] -directory = sqlite-amalgamation-3340100 -source_url = https://www.sqlite.org/2021/sqlite-amalgamation-3340100.zip -source_filename = sqlite-amalgamation-3340100.zip -source_hash = e0b1c0345fe4338b936e17da8e1bd88366cd210e576834546977f040c12a8f68 -patch_url = https://wrapdb.mesonbuild.com/v1/projects/sqlite3/3.34.1/1/get_zip -patch_filename = sqlite3-3.34.1-1-wrap.zip -patch_hash = cba9e47bdb4c02f88fadaae8deab357218d32562c6b86ce7ba0c72f107044360 +directory = sqlite-amalgamation-3380000 +source_url = https://sqlite.org/2022/sqlite-amalgamation-3380000.zip +source_filename = sqlite-amalgamation-3380000.zip +source_hash = e055f6054e97747a135c89e36520c0a423249e8a91c5fc445163f4a6adb20df6 +patch_filename = sqlite3_3.38.0-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/sqlite3_3.38.0-1/get_patch +patch_hash = 49e30bf010ff63ab772d5417885e6905379025ceac80382e292c6dbd3a9da744 [provide] sqlite3 = sqlite3_dep diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/subprojects/vorbis.wrap new/mpd-0.23.7/subprojects/vorbis.wrap --- old/mpd-0.23.6/subprojects/vorbis.wrap 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/subprojects/vorbis.wrap 2022-05-09 23:04:30.000000000 +0200 @@ -1,11 +1,11 @@ [wrap-file] -directory = libvorbis-1.3.5 -source_url = http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.xz -source_filename = libvorbis-1.3.5.tar.xz -source_hash = 54f94a9527ff0a88477be0a71c0bab09a4c3febe0ed878b24824906cd4b0e1d1 -patch_url = https://wrapdb.mesonbuild.com/v1/projects/vorbis/1.3.5/7/get_zip -patch_filename = vorbis-1.3.5-7-wrap.zip -patch_hash = 7f4d3f9253925196461d52fd4553aad4468fd845560d1ff6c2eb6a012cf64fb0 +directory = libvorbis-1.3.7 +source_url = https://downloads.xiph.org/releases/vorbis/libvorbis-1.3.7.tar.xz +source_filename = libvorbis-1.3.7.tar.xz +source_hash = b33cc4934322bcbf6efcbacf49e3ca01aadbea4114ec9589d1b1e9d20f72954b +patch_filename = vorbis_1.3.7-2_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/vorbis_1.3.7-2/get_patch +patch_hash = fe302576cbf8408754b332b539ea1b83f0f96fa9aae50a5d1fea911713d5f21c [provide] vorbis = vorbis_dep diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/test/DumpOgg.cxx new/mpd-0.23.7/test/DumpOgg.cxx --- old/mpd-0.23.6/test/DumpOgg.cxx 1970-01-01 01:00:00.000000000 +0100 +++ new/mpd-0.23.7/test/DumpOgg.cxx 2022-05-09 23:04:30.000000000 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright 2003-2022 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "lib/xiph/OggSyncState.hxx" +#include "lib/xiph/OggStreamState.hxx" +#include "config/Data.hxx" +#include "input/Init.hxx" +#include "input/InputStream.hxx" +#include "input/Reader.hxx" +#include "event/Thread.hxx" +#include "util/PrintException.hxx" + +#include <inttypes.h> +#include <stdio.h> + +int +main(int argc, char **argv) noexcept +try { + if (argc != 2) { + fprintf(stderr, "Usage: DumpOgg FILE\n"); + return EXIT_FAILURE; + } + + const char *path = argv[1]; + + EventThread io_thread; + io_thread.Start(); + + const ScopeInputPluginsInit input_plugins_init(ConfigData(), + io_thread.GetEventLoop()); + + Mutex mutex; + auto is = InputStream::OpenReady(path, mutex); + + InputStreamReader reader{*is}; + + OggSyncState sync{reader}; + + while (true) { + ogg_page page; + if (!sync.ExpectPage(page)) + break; + + printf("page offset=%" PRIu64 " serial=%d\n", + sync.GetStartOffset(), ogg_page_serialno(&page)); + } + + return EXIT_SUCCESS; +} catch (...) { + PrintException(std::current_exception()); + return EXIT_FAILURE; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.6/test/meson.build new/mpd-0.23.7/test/meson.build --- old/mpd-0.23.6/test/meson.build 2022-03-14 18:55:47.000000000 +0100 +++ new/mpd-0.23.7/test/meson.build 2022-05-09 23:04:30.000000000 +0200 @@ -490,6 +490,19 @@ ], ) endif + +if ogg_dep.found() + executable( + 'DumpOgg', + 'DumpOgg.cxx', + include_directories: inc, + dependencies: [ + ogg_dep, + input_glue_dep, + archive_glue_dep, + ], + ) +endif # # Filter @@ -559,7 +572,7 @@ # Encoder # -if encoder_glue_dep.found() +if need_encoder executable( 'run_encoder', 'run_encoder.cxx',