add check for abstract sockets (cherry picked from commit 5b657984f4bc5544a8df560adcd...
authorFrank Osterfeld <frank@kdab.net>
Wed, 22 Apr 2009 09:49:58 +0000 (11:49 +0200)
committerunknown <Administrator@.(none)>
Mon, 30 Nov 2009 09:54:32 +0000 (10:54 +0100)
cmake/CMakeLists.txt
cmake/ConfigureChecks.cmake
cmake/config.h.cmake
cmake/modules/CheckForAbstractSockets.c [new file with mode: 0644]

index 8f73d55..d63c40b 100644 (file)
@@ -49,6 +49,9 @@ find_package(LibXml2)
 find_package(LibExpat)
 find_package(X11)
 
+
+OPTION(DBUS_ENABLE_ABSTRACT_SOCKETS "enable support for abstract sockets" ON)
+
 # do config checks
 INCLUDE(ConfigureChecks.cmake)
 
index c44ea7a..f42ce76 100644 (file)
@@ -130,3 +130,20 @@ else(DBUS_HAVE_VA_COPY)
     SET(DBUS_VA_COPY_AS_ARRAY "1" CACHE STRING "'va_lists' cannot be copies as values")
   endif(DBUS_HAVE___VA_COPY)
 endif(DBUS_HAVE_VA_COPY)
+
+#### Abstract sockets
+
+if (DBUS_ENABLE_ABSTRACT_SOCKETS)
+
+  try_compile(HAVE_ABSTRACT_SOCKETS
+              ${CMAKE_BINARY_DIR}
+              ${CMAKE_SOURCE_DIR}/modules/CheckForAbstractSockets.c)
+
+endif(DBUS_ENABLE_ABSTRACT_SOCKETS)
+
+if(HAVE_ABSTRACT_SOCKETS)
+  set(DBUS_PATH_OR_ABSTRACT_VALUE abstract)
+else(HAVE_ABSTRACT_SOCKETS)
+  set(DBUS_PATH_OR_ABSTRACT_VALUE path)
+endif(HAVE_ABSTRACT_SOCKETS)
+
index 047135b..3461338 100644 (file)
 /* xmldocs */
 /* doxygen */
 #cmakedefine DBUS_GCOV_ENABLED 1
+
 /* abstract-sockets */
+
+#cmakedefine HAVE_ABSTRACT_SOCKETS 1
+
+#cmakedefine DBUS_PATH_OR_ABSTRACT_VALUE 1
+
+#if (defined DBUS_PATH_OR_ABSTRACT_VALUE)
+#define DBUS_PATH_OR_ABSTRACT @DBUS_PATH_OR_ABSTRACT_VALUE@
+#endif
+
+#ifdef DBUS_PATH_OR_ABSTRACT_VALUE
+#undef DBUS_PATH_OR_ABSTRACT_VALUE
+#endif
+
 /* selinux */
 #cmakedefine DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX 1
 /* kqueue */
 # define DBUS_VA_COPY @DBUS_VA_COPY_FUNC@
 #endif
 
+#ifdef DBUS_VA_COPY_FUNC
+#undef DBUS_VA_COPY_FUNC
+#endif
+
 #cmakedefine DBUS_VA_COPY_AS_ARRAY 1
 
 // headers
diff --git a/cmake/modules/CheckForAbstractSockets.c b/cmake/modules/CheckForAbstractSockets.c
new file mode 100644 (file)
index 0000000..062b846
--- /dev/null
@@ -0,0 +1,33 @@
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <errno.h>
+
+int main() {
+  int listen_fd;
+  struct sockaddr_un addr;
+
+  listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
+
+  if (listen_fd < 0)
+    {
+      fprintf (stderr, "socket() failed: %s\n", strerror (errno));
+      exit (1);
+    }
+
+  memset (&addr, '\0', sizeof (addr));
+  addr.sun_family = AF_UNIX;
+  strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
+  addr.sun_path[0] = '\0'; /* this is what makes it abstract */
+
+  if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0)
+    {
+      fprintf (stderr, "Abstract socket namespace bind() failed: %s\n",
+                strerror (errno));
+      exit (1);
+    }
+  else
+    exit (0);
+}
\ No newline at end of file