summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2018-10-23 20:10:57 +0200
committerMax Kellermann <max@musicpd.org>2018-10-23 20:10:57 +0200
commitc2a2573aa5ed2d5e875c6b5f0cf84e7e940bbfa4 (patch)
tree57198837fcf65f57c65615738baa2d7c218539e1
parent66ab2de5785755594b300b933083a0e5892d05fc (diff)
parent9274bc15bc41bbe490fde847f8422468cc20375d (diff)
Merge tag 'v0.20.22'
release v0.20.22
-rw-r--r--NEWS7
-rwxr-xr-xandroid/build.py6
-rw-r--r--src/decoder/plugins/FluidsynthDecoderPlugin.cxx7
-rw-r--r--src/input/Error.hxx8
-rw-r--r--src/song/TagSongFilter.cxx18
5 files changed, 33 insertions, 13 deletions
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;