diff mbox

SV: [PATCH 1/6] dbus: Add configure check for mq_getattr in librt

Message ID BD22328D0EB182418C2A0952DC2454F8791B659A@VMPREVAS1.prevas.se
State Not Applicable
Headers show

Commit Message

kim.hansen@prevas.dk Dec. 16, 2014, 10:16 a.m. UTC
So, we managed to figure out what this is about.

The patch itself makes sense, but only on an older version of dbus, where there is no D_DAEMON_DISABLE_MQ define in: sd-daemon.c sd_is_mq(). This result in a build failure:

make[2]: Entering directory `/home/buildbot/slave/build/oe-lite/tmp/work/machine/arm-cortexa8neon-linux-gnueabi/dbus-1.7.0/build/bus'
  CCLD   dbus-daemon
  CCLD   dbus-daemon-launch-helper
../dbus/.libs/libdbus-internal.a(libdbus_internal_la-sd-daemon.o): In function `sd_is_mq':
sd-daemon.c:(.text+0x7bc): undefined reference to `mq_getattr'
collect2: error: ld returned 1 exit status
make[2]: *** [dbus-daemon-launch-helper] Error 1

So at least for dbus-1.7.0

For dbus-1.7.10 which we currently have on both meta/base[master] and [3.3] , this define is now included in the code, and set by dbus/Makefile.in:

------snip------
# On Linux with glibc 2.17, sd-daemon.c support for POSIX message queues                                                                                                                                                                                                       
# results in an otherwise unnecessary dependency on librt. Disable it.                                                                                                                                                                                                         
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) $(SYSTEMD_CFLAGS) \
        $(VALGRIND_CFLAGS) -DDBUS_COMPILATION \
        -DDBUS_MACHINE_UUID_FILE=\""$(localstatedir)/lib/dbus/machine-id"\" \
        -DDBUS_SYSTEM_CONFIG_FILE=\""$(configdir)/system.conf"\" \
        -DDBUS_SESSION_CONFIG_FILE=\""$(configdir)/session.conf"\" \
        $(NULL) -DSD_DAEMON_DISABLE_MQ

------- snip ------

So, I am not going to add this, since it is fixed in the versions we care about.

/Kim
diff mbox

Patch

diff --git a/recipes/dbus/dbus-1.7.0/dbus-configure-mq_getattr.patch b/recipes/dbus/dbus-1.7.0/dbus-configure-mq_getattr.patch
new file mode 100644
index 0000000..e0de1a4
--- /dev/null
+++ b/recipes/dbus/dbus-1.7.0/dbus-configure-mq_getattr.patch
@@ -0,0 +1,87 @@ 
+diff -U 5 dbus~orig/configure dbus/configure
+--- dbus~orig/configure        2014-03-05 14:57:28.550768162 +0100
++++ dbus/configure     2014-03-05 14:57:28.549768148 +0100
+@@ -19741,10 +19741,67 @@
+   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+   THREAD_LIBS="$LIBS"
+ fi
+
+
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing mq_getattr" >&5
++$as_echo_n "checking for library containing mq_getattr... " >&6; }
++if ${ac_cv_search_mq_getattr+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  ac_func_search_save_LIBS=$LIBS
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char mq_getattr ();
++int
++main ()
++{
++return mq_getattr ();
++  ;
++  return 0;
++}
++_ACEOF
++for ac_lib in '' rt; do
++  if test -z "$ac_lib"; then
++    ac_res="none required"
++  else
++    ac_res=-l$ac_lib
++    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
++  fi
++  if ac_fn_c_try_link "$LINENO"; then :
++  ac_cv_search_mq_getattr=$ac_res
++fi
++rm -f core conftest.err conftest.$ac_objext \
++    conftest$ac_exeext
++  if ${ac_cv_search_mq_getattr+:} false; then :
++  break
++fi
++done
++if ${ac_cv_search_mq_getattr+:} false; then :
++
++else
++  ac_cv_search_mq_getattr=no
++fi
++rm conftest.$ac_ext
++LIBS=$ac_func_search_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_mq_getattr" >&5
++$as_echo "$ac_cv_search_mq_getattr" >&6; }
++ac_res=$ac_cv_search_mq_getattr
++if test "$ac_res" != no; then :
++  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
++  THREAD_LIBS="$LIBS"
++fi
++
++
+     if test "x$ac_cv_search_pthread_condattr_setclock" != xno; then :
+
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_getres" >&5
+ $as_echo_n "checking for library containing clock_getres... " >&6; }
+ if ${ac_cv_search_clock_getres+:} false; then :
+diff -U 5 dbus~orig/configure.ac dbus/configure.ac
+--- dbus~orig/configure.ac     2014-03-05 14:57:28.549768148 +0100
++++ dbus/configure.ac  2014-03-05 14:57:28.549768148 +0100
+@@ -949,10 +949,12 @@
+     # is non-fatal if we don't find it.
+     AC_SEARCH_LIBS([pthread_condattr_setclock],
+         [pthread],
+         [THREAD_LIBS="$LIBS"])
+
++    AC_SEARCH_LIBS([mq_getattr], [rt], [THREAD_LIBS="$LIBS"])
++
+     AS_IF([test "x$ac_cv_search_pthread_condattr_setclock" != xno],
+       [
+         AC_SEARCH_LIBS([clock_getres], [rt], [THREAD_LIBS="$LIBS"])
+         AC_MSG_CHECKING([for CLOCK_MONOTONIC])
+         AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
diff --git a/recipes/dbus/dbus_1.7.10.oe b/recipes/dbus/dbus_1.7.10.oe
index 2fa5020..b556d3f 100644
--- a/recipes/dbus/dbus_1.7.10.oe
+++ b/recipes/dbus/dbus_1.7.10.oe
@@ -2,6 +2,7 @@ 
 include dbus.inc

 SRC_URI += "file://tmpdir.patch"
+SRC_URI += "file://dbus-configure-mq_getattr.patch"

 SRC_URI:>HOST_LIBC_mingw = " file://libtool-bindir.patch"
 export sharedlibdir