Commit 3db495e4 authored by Jörg Krause's avatar Jörg Krause Committed by Thomas Petazzoni
Browse files

package/mpd: add patch to fix musl gcc5 build issue

Add a patch from the Alpine Linux project [1] to fix a musl build issue with
gcc 5:

```
error: temporary of non-literal type ‘pthread_mutex_t’ in a constant expression
  constexpr PosixMutex():mutex(PTHREAD_MUTEX_INITIALIZER) {}
```

Problem has been reported by the Alpine team upstream and was closed by the MPD
maintainer with WONTFIX:
http://bugs.musicpd.org/view.php?id=4387
http://bugs.musicpd.org/view.php?id=4110

However...

POSIX does not permit using PTHREAD_COND_INITIALIZER except for static
initialization, and certainly does not permit using it as a value.

Also POSIX does not specify the type of the object (it's opaque) so if
there are any types for which their code would be invalid C++, then their
code is invalid.

Also, volatile in the type is necessary. without that, LTO can break the code.

[1]
http://git.alpinelinux.org/cgit/aports/log/main/mpd/musl-gcc5-fixes.patch



Signed-off-by: default avatarJörg Krause <joerg.krause@embedded.rocks>
Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
parent fe500c5c
Loading
Loading
Loading
Loading
+56 −0
Original line number Diff line number Diff line
musl gcc5 fixes

Fetch from:
http://git.alpinelinux.org/cgit/aports/plain/main/mpd/musl-gcc5-fixes.patch

Problem has been reported upstream and closed with WONTFIX:
http://bugs.musicpd.org/view.php?id=4387
http://bugs.musicpd.org/view.php?id=4110

however...

POSIX does not permit using PTHREAD_COND_INITIALIZER except for static
initialization, and certainly does not permit using it as a value

also POSIX does not specify the type of the object (it's opaque) so if
there are any types for which their code would be invalid C++, then their
code is invalid

also, volatile in the type is necessary. without that, LTO can break the code.

Signed-off-by: Jörg Krause <joerg.krause@embedded.rocks>

--- ./src/notify.hxx.orig
+++ ./src/notify.hxx
@@ -28,7 +28,7 @@
 	Cond cond;
 	bool pending;
 
-#if !defined(WIN32) && !defined(__NetBSD__) && !defined(__BIONIC__)
+#if defined(__GLIBC__)
 	constexpr
 #endif
 	notify():pending(false) {}
--- ./src/thread/PosixCond.hxx.orig
+++ ./src/thread/PosixCond.hxx
@@ -41,7 +41,7 @@
 	pthread_cond_t cond;
 
 public:
-#if defined(__NetBSD__) || defined(__BIONIC__)
+#if !defined(__GLIBC__)
 	/* NetBSD's PTHREAD_COND_INITIALIZER is not compatible with
 	   "constexpr" */
 	PosixCond() {
--- ./src/thread/PosixMutex.hxx.orig
+++ ./src/thread/PosixMutex.hxx
@@ -41,7 +41,7 @@
 	pthread_mutex_t mutex;
 
 public:
-#if defined(__NetBSD__) || defined(__BIONIC__)
+#if !defined(__GLIBC__)
 	/* NetBSD's PTHREAD_MUTEX_INITIALIZER is not compatible with
 	   "constexpr" */
 	PosixMutex() {