From be9d1e0b3ba969c71db6e1b00be505bea425908b Mon Sep 17 00:00:00 2001 From: Antoine Jacoutot Date: Fri, 18 Apr 2014 00:59:45 +0200 Subject: [PATCH] broadway backend: allow building on OpenBSD On OpenBSD shm_open(3) is part of libc and there is not librt, so add an according check. Check if we have posix_fallocate before using it. https://bugzilla.gnome.org/show_bug.cgi?id=728272 --- configure.ac | 5 +++++ gdk/broadway/Makefile.am | 6 ++++-- gdk/broadway/gdkbroadway-server.c | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 462bcca901..12544a3f8f 100644 --- a/configure.ac +++ b/configure.ac @@ -397,6 +397,11 @@ else fi AC_SUBST(DISABLE_ON_QUARTZ) +AC_CHECK_LIB([rt], [shm_open], [SHM_LIBS="-lrt"], [SHM_LIBS=""]) +AC_SUBST(SHM_LIBS) + +AC_CHECK_FUNCS(posix_fallocate) + if test "x$enable_broadway_backend" = xyes; then GDK_BACKENDS="$GDK_BACKENDS broadway" cairo_backends="$cairo_backends cairo" diff --git a/gdk/broadway/Makefile.am b/gdk/broadway/Makefile.am index af1fa9783c..0f190b3402 100644 --- a/gdk/broadway/Makefile.am +++ b/gdk/broadway/Makefile.am @@ -1,5 +1,6 @@ ## Process this file with automake to produce Makefile.in include $(top_srcdir)/Makefile.decl +NULL = libgdkincludedir = $(includedir)/gtk-3.0/gdk libgdkbroadwayincludedir = $(includedir)/gtk-3.0/gdk/broadway @@ -75,7 +76,8 @@ libgdk_broadway_la_SOURCES = \ if OS_UNIX libgdk_broadway_la_LIBADD = \ - -lrt + $(SHM_LIBS) \ + $(NULL) endif broadwayd_SOURCES = \ @@ -91,7 +93,7 @@ broadwayd_SOURCES = \ if OS_WIN32 broadwayd_LDADD = $(GDK_DEP_LIBS) -lws2_32 else -broadwayd_LDADD = $(GDK_DEP_LIBS) -lrt +broadwayd_LDADD = $(GDK_DEP_LIBS) @SHM_LIBS@ endif MAINTAINERCLEANFILES = $(broadway_built_sources) diff --git a/gdk/broadway/gdkbroadway-server.c b/gdk/broadway/gdkbroadway-server.c index 55ab58bfa7..dfbb19dc4f 100644 --- a/gdk/broadway/gdkbroadway-server.c +++ b/gdk/broadway/gdkbroadway-server.c @@ -540,12 +540,14 @@ map_named_shm (char *name, gsize size) res = ftruncate (fd, size); g_assert (res != -1); +#ifdef HAVE_POSIX_FALLOCATE res = posix_fallocate (fd, 0, size); if (res != 0) { shm_unlink (name); g_error ("Not enough shared memory for window surface"); } +#endif ptr = mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);