From dc11dea7cc204e25126c2c024744eded02eb1b08 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Mon, 8 Dec 2014 14:13:20 +0100
Subject: [PATCH 1/4] configure.ac: prepare for 0.18.20

---
 NEWS         | 2 ++
 configure.ac | 4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index 2782ca89d..67a7b31a0 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,5 @@
+ver 0.18.20 (not yet released)
+
 ver 0.18.19 (2014/11/26)
 * archive
   - zzip: fix crash after seeking
diff --git a/configure.ac b/configure.ac
index 2e0061954..4da467ba3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,10 +1,10 @@
 AC_PREREQ(2.60)
 
-AC_INIT(mpd, 0.18.19, mpd-devel@musicpd.org)
+AC_INIT(mpd, 0.18.20, mpd-devel@musicpd.org)
 
 VERSION_MAJOR=0
 VERSION_MINOR=18
-VERSION_REVISION=19
+VERSION_REVISION=20
 VERSION_EXTRA=0
 
 AC_CONFIG_SRCDIR([src/Main.cxx])

From d8fc2db910a11dbbba53ba7ecf96d0e32a081076 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Mon, 8 Dec 2014 14:17:17 +0100
Subject: [PATCH 2/4] thread/Id: drop "::" prefix before pthread function names

The "::" to explicitly refer to the global namespace appeared like a
good idea in C++, but it breaks with C libraries that implement
standard functions using macros (e.g. musl).
---
 NEWS              | 1 +
 src/thread/Id.hxx | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index 67a7b31a0..fa6bb2060 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,5 @@
 ver 0.18.20 (not yet released)
+* fix build failure with musl
 
 ver 0.18.19 (2014/11/26)
 * archive
diff --git a/src/thread/Id.hxx b/src/thread/Id.hxx
index fa1cf2cab..2372a12f5 100644
--- a/src/thread/Id.hxx
+++ b/src/thread/Id.hxx
@@ -75,7 +75,7 @@ public:
 #ifdef WIN32
 		return ::GetCurrentThreadId();
 #else
-		return ::pthread_self();
+		return pthread_self();
 #endif
 	}
 
@@ -84,7 +84,7 @@ public:
 #ifdef WIN32
 		return id == other.id;
 #else
-		return ::pthread_equal(id, other.id);
+		return pthread_equal(id, other.id);
 #endif
 	}
 

From 41b4a63f2b772eba1e436c82fc9c5c9766d4470e Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Mon, 8 Dec 2014 14:25:34 +0100
Subject: [PATCH 3/4] decoder/ffmpeg: support FFmpeg 2.5

Version 2.5 fixed an API oddity, however it broke API compatibility,
at least with C++.  Disable the workaround when a libavformat version
is detected that is recent enough.
---
 NEWS                                | 2 ++
 src/decoder/FfmpegDecoderPlugin.cxx | 5 +++++
 2 files changed, 7 insertions(+)

diff --git a/NEWS b/NEWS
index fa6bb2060..e88ef7a85 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,6 @@
 ver 0.18.20 (not yet released)
+* decoder
+  - ffmpeg: support FFmpeg 2.5
 * fix build failure with musl
 
 ver 0.18.19 (2014/11/26)
diff --git a/src/decoder/FfmpegDecoderPlugin.cxx b/src/decoder/FfmpegDecoderPlugin.cxx
index 69e7a6c8b..8a0937903 100644
--- a/src/decoder/FfmpegDecoderPlugin.cxx
+++ b/src/decoder/FfmpegDecoderPlugin.cxx
@@ -394,10 +394,15 @@ ffmpeg_probe(Decoder *decoder, InputStream &is)
 	avpd.filename = is.uri.c_str();
 
 #ifdef AVPROBE_SCORE_MIME
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(56, 5, 1)
 	/* this attribute was added in libav/ffmpeg version 11, but
 	   unfortunately it's "uint8_t" instead of "char", and it's
 	   not "const" - wtf? */
 	avpd.mime_type = (uint8_t *)const_cast<char *>(is.GetMimeType());
+#else
+	/* API problem fixed in FFmpeg 2.5 */
+	avpd.mime_type = is.GetMimeType();
+#endif
 #endif
 
 	return av_probe_input_format(&avpd, true);

From 1b5f33a4358f69d153a4c2d2fae34165dc200cca Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Mon, 8 Dec 2014 14:57:17 +0100
Subject: [PATCH 4/4] release v0.18.20

---
 NEWS | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index e88ef7a85..6660ae2f2 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-ver 0.18.20 (not yet released)
+ver 0.18.20 (2014/12/08)
 * decoder
   - ffmpeg: support FFmpeg 2.5
 * fix build failure with musl