From 2feb3e2e653be1ef1292b92036f919bb990586c9 Mon Sep 17 00:00:00 2001 From: Frank Osterfeld Date: Wed, 22 Apr 2009 11:49:58 +0200 Subject: [PATCH] add check for abstract sockets (cherry picked from commit 5b657984f4bc5544a8df560adcd224ed243972f1) --- cmake/CMakeLists.txt | 3 +++ cmake/ConfigureChecks.cmake | 17 +++++++++++++ cmake/config.h.cmake | 18 ++++++++++++++ cmake/modules/CheckForAbstractSockets.c | 33 +++++++++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 cmake/modules/CheckForAbstractSockets.c diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 8f73d5598..d63c40b12 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -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) diff --git a/cmake/ConfigureChecks.cmake b/cmake/ConfigureChecks.cmake index c44ea7ae7..f42ce767c 100644 --- a/cmake/ConfigureChecks.cmake +++ b/cmake/ConfigureChecks.cmake @@ -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) + diff --git a/cmake/config.h.cmake b/cmake/config.h.cmake index 047135b21..3461338d8 100644 --- a/cmake/config.h.cmake +++ b/cmake/config.h.cmake @@ -48,7 +48,21 @@ /* 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 */ @@ -69,6 +83,10 @@ # 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 index 000000000..062b846c3 --- /dev/null +++ b/cmake/modules/CheckForAbstractSockets.c @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include +#include + +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 -- 2.47.3