From 84533029c70a4dffb2cd2e4f05e3903fd1b8fcd9 Mon Sep 17 00:00:00 2001 From: Thomas Petazzoni Date: Sun, 7 Feb 2016 21:54:33 +0100 Subject: [PATCH] mpd: fix build on SPARC mpd uses __atomic_*() built-ins, but forgets to link with -latomic when needed, so this commit adds a patch that ensures it will link with libatomic, and adds a dependency on BR2_TOOLCHAIN_HAS_ATOMIC. Fixes: http://autobuild.buildroot.net/results/e2207280f3a177e12dba502b1c01f5aeb431d04c/ Signed-off-by: Thomas Petazzoni --- ...gure.ac-check-if-libatomic-is-needed.patch | 40 +++++++++++++++++++ package/mpd/Config.in | 2 + package/mpd/mpd.mk | 1 + 3 files changed, 43 insertions(+) create mode 100644 package/mpd/0005-configure.ac-check-if-libatomic-is-needed.patch diff --git a/package/mpd/0005-configure.ac-check-if-libatomic-is-needed.patch b/package/mpd/0005-configure.ac-check-if-libatomic-is-needed.patch new file mode 100644 index 0000000000..a9873a741f --- /dev/null +++ b/package/mpd/0005-configure.ac-check-if-libatomic-is-needed.patch @@ -0,0 +1,40 @@ +From 8eaf14a17244aaf000b4d19e4fde4a637576939f Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 7 Feb 2016 21:40:47 +0100 +Subject: [PATCH] configure.ac: check if libatomic is needed + +The mpd source code uses the C++11 functionality, which +internally is implemented using the __atomic_*() gcc built-ins. On +certain architectures, the __atomic_*() built-ins are implemented in +the libatomic library that comes with the rest of the gcc runtime. Due +to this, code using might need to link against libatomic, +otherwise one hits build issues such as: + +GlobalEvents.cxx:(.text._ZN12GlobalEvents4EmitENS_5EventE+0x14): undefined reference to `__atomic_fetch_or_4' + +on an architecture like SPARC. + +To solve this, a configure.ac check is added to know if we need to +link against libatomic or not. + +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 107b45a..8e6fab7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -233,6 +233,8 @@ if test x$have_pthread_setname_np = xyes; then + AC_DEFINE(HAVE_PTHREAD_SETNAME_NP, 1, [Is pthread_setname_np() available?]) + fi + ++AC_SEARCH_LIBS([__atomic_load_4], [atomic]) ++ + dnl --------------------------------------------------------------------------- + dnl Event loop selection + dnl --------------------------------------------------------------------------- +-- +2.6.4 + diff --git a/package/mpd/Config.in b/package/mpd/Config.in index b368397487..3ac806f74a 100644 --- a/package/mpd/Config.in +++ b/package/mpd/Config.in @@ -6,6 +6,7 @@ menuconfig BR2_PACKAGE_MPD depends on BR2_USE_MMU # libglib2 depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_6 depends on BR2_PACKAGE_BOOST_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_ATOMIC select BR2_PACKAGE_BOOST select BR2_PACKAGE_LIBGLIB2 select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE @@ -312,5 +313,6 @@ endif comment "mpd needs a toolchain w/ C++, threads, wchar, gcc >= 4.6" depends on BR2_USE_MMU depends on BR2_PACKAGE_BOOST_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_ATOMIC depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ !BR2_TOOLCHAIN_HAS_THREADS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_6 diff --git a/package/mpd/mpd.mk b/package/mpd/mpd.mk index 7a265f4875..d5d77a638c 100644 --- a/package/mpd/mpd.mk +++ b/package/mpd/mpd.mk @@ -11,6 +11,7 @@ MPD_SITE = http://www.musicpd.org/download/mpd/$(MPD_VERSION_MAJOR) MPD_DEPENDENCIES = host-pkgconf boost libglib2 MPD_LICENSE = GPLv2+ MPD_LICENSE_FILES = COPYING +MPD_AUTORECONF = YES # Some options need an explicit --disable or --enable -- 2.30.2