diff --git a/NEWS b/NEWS index 284dabd5a..8b5ec0aed 100644 --- a/NEWS +++ b/NEWS @@ -49,17 +49,22 @@ ver 0.21 (not yet released) * build with Meson instead of autotools * use GTest instead of cppunit -ver 0.20.22 (not yet released) +ver 0.20.22 (2018/10/23) * protocol - add tag fallbacks for AlbumArtistSort, ArtistSort + - fix empty string filter on fallback tags - "count group ..." can print an empty group - fix broken command "list ... group" * storage - curl: URL-encode paths +* decoder + - fluidsynth: adapt to API change in version 2.0 * Android - now runs as a service - add button to start/stop MPD - add option to auto-start on boot +* work around clang bug leading to crash +* install the SVG icon ver 0.20.21 (2018/08/17) * database diff --git a/android/build.py b/android/build.py index dd8b74d23..842784d49 100755 --- a/android/build.py +++ b/android/build.py @@ -133,13 +133,15 @@ class AndroidNdkToolchain: libcxx_path = os.path.join(ndk_path, 'sources/cxx-stl/llvm-libc++') libcxx_libs_path = os.path.join(libcxx_path, 'libs', android_abi) - libstdcxx_flags = '-stdlib=libc++' + libstdcxx_flags = '' libstdcxx_cxxflags = libstdcxx_flags + ' -isystem ' + os.path.join(libcxx_path, 'include') + ' -isystem ' + os.path.join(ndk_path, 'sources/android/support/include') - libstdcxx_ldflags = libstdcxx_flags + ' -static-libstdc++ -L' + libcxx_libs_path + libstdcxx_ldflags = libstdcxx_flags + ' -L' + libcxx_libs_path + libstdcxx_libs = '-lc++_static -lc++abi' if use_cxx: self.cxxflags += ' ' + libstdcxx_cxxflags self.ldflags += ' ' + libstdcxx_ldflags + self.libs += ' ' + libstdcxx_libs self.env = dict(os.environ) diff --git a/src/decoder/plugins/FluidsynthDecoderPlugin.cxx b/src/decoder/plugins/FluidsynthDecoderPlugin.cxx index 0f106d5a4..69832bdeb 100644 --- a/src/decoder/plugins/FluidsynthDecoderPlugin.cxx +++ b/src/decoder/plugins/FluidsynthDecoderPlugin.cxx @@ -64,7 +64,12 @@ fluidsynth_level_to_mpd(enum fluid_log_level level) * logging library. */ static void -fluidsynth_mpd_log_function(int level, char *message, gcc_unused void *data) +fluidsynth_mpd_log_function(int level, +#if FLUIDSYNTH_VERSION_MAJOR >= 2 + const +#endif + char *message, + void *) { Log(fluidsynth_domain, fluidsynth_level_to_mpd(fluid_log_level(level)), diff --git a/src/input/Error.hxx b/src/input/Error.hxx index 04ea27ab8..42b88221a 100644 --- a/src/input/Error.hxx +++ b/src/input/Error.hxx @@ -30,7 +30,15 @@ * exist? This function attempts to recognize exceptions thrown by * various input plugins. */ +#ifndef __clang__ +/* the "pure" attribute must be disabled because it triggers a clang + bug, wrongfully leading to std::terminate() even though the + function catches all exceptions thrown by std::rethrow_exception(); + this can be reproduced with clang 7 from Android NDK r18b and on + clang 6 on FreeBSD + (https://github.com/MusicPlayerDaemon/MPD/issues/373) */ gcc_pure +#endif bool IsFileNotFound(std::exception_ptr e) noexcept; diff --git a/src/song/TagSongFilter.cxx b/src/song/TagSongFilter.cxx index e77169ddc..c05f1765b 100644 --- a/src/song/TagSongFilter.cxx +++ b/src/song/TagSongFilter.cxx @@ -54,15 +54,6 @@ TagSongFilter::MatchNN(const Tag &tag) const noexcept } if (type < TAG_NUM_OF_ITEM_TYPES && !visited_types[type]) { - /* If the search critieron was not visited during the - sweep through the song's tag, it means this field - is absent from the tag or empty. Thus, if the - searched string is also empty - then it's a match as well and we should return - true. */ - if (filter.empty()) - return true; - bool result = false; if (ApplyTagFallback(type, [&](TagType tag2) { @@ -80,6 +71,15 @@ TagSongFilter::MatchNN(const Tag &tag) const noexcept return true; })) return result; + + /* If the search critieron was not visited during the + sweep through the song's tag, it means this field + is absent from the tag or empty. Thus, if the + searched string is also empty + then it's a match as well and we should return + true. */ + if (filter.empty()) + return true; } return false;