[alsa-devel] [PATCH alsa-lib 2/2] support building w/out System V shared memory

Mike Frysinger vapier at gentoo.org
Tue Oct 27 22:28:04 CET 2015


From: Mike Frysinger <vapier at chromium.org>

Some systems, like Android/Bionic, do not support SysV at all.
Let the configure script detect if the header is available, and
if not, automatically disable the pieces that require it.

Signed-off-by: Mike Frysinger <vapier at gentoo.org>
---
 configure.ac       | 13 ++++++++++++-
 src/pcm/pcm_mmap.c | 15 ++++++++++++++-
 src/shmarea.c      |  9 ++++++++-
 3 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/configure.ac b/configure.ac
index 1dcc0a4..9490d39 100644
--- a/configure.ac
+++ b/configure.ac
@@ -295,7 +295,7 @@ fi
 AC_SUBST(ALSA_DEPLIBS)
 
 dnl Check for headers
-AC_CHECK_HEADERS([wordexp.h endian.h sys/endian.h])
+AC_CHECK_HEADERS([wordexp.h endian.h sys/endian.h sys/shm.h])
 
 dnl Check for resmgr support...
 AC_MSG_CHECKING(for resmgr support)
@@ -508,6 +508,13 @@ if test "$gcc_have_atomics" != "yes"; then
   build_pcm_meter="no"
 fi
 
+if test "$ac_cv_header_sys_shm_h" != "yes"; then
+  build_pcm_dmix="no"
+  build_pcm_dshare="no"
+  build_pcm_dsnoop="no"
+  build_pcm_shm="no"
+fi
+
 AM_CONDITIONAL([BUILD_PCM_PLUGIN], [test x$build_pcm_plugin = xyes])
 AM_CONDITIONAL([BUILD_PCM_PLUGIN_COPY], [test x$build_pcm_copy = xyes])
 AM_CONDITIONAL([BUILD_PCM_PLUGIN_LINEAR], [test x$build_pcm_linear = xyes])
@@ -594,6 +601,10 @@ for p in $ctl_plugins; do
   done
 done
 
+if test "$ac_cv_header_sys_shm_h" != "yes"; then
+  build_ctl_shm="no"
+fi
+
 AM_CONDITIONAL([BUILD_CTL_PLUGIN], [test x$build_ctl_plugin = xyes])
 AM_CONDITIONAL([BUILD_CTL_PLUGIN_SHM], [test x$build_ctl_shm = xyes])
 AM_CONDITIONAL([BUILD_CTL_PLUGIN_EXT], [test x$build_ctl_ext = xyes])
diff --git a/src/pcm/pcm_mmap.c b/src/pcm/pcm_mmap.c
index 470bd04..5c4fbe1 100644
--- a/src/pcm/pcm_mmap.c
+++ b/src/pcm/pcm_mmap.c
@@ -17,13 +17,16 @@
  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  *
  */
-  
+
+#include "config.h"
 #include <stdio.h>
 #include <malloc.h>
 #include <string.h>
 #include <sys/poll.h>
 #include <sys/mman.h>
+#ifdef HAVE_SYS_SHM_H
 #include <sys/shm.h>
+#endif
 #include "pcm_local.h"
 
 void snd_pcm_mmap_appl_backward(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
@@ -341,6 +344,7 @@ int snd_pcm_mmap(snd_pcm_t *pcm)
 			i->addr = ptr;
 			break;
 		case SND_PCM_AREA_SHM:
+#ifdef HAVE_SYS_SHM_H
 			if (i->u.shm.shmid < 0) {
 				int id;
 				/* FIXME: safer permission? */
@@ -385,6 +389,10 @@ int snd_pcm_mmap(snd_pcm_t *pcm)
 			}
 			i->addr = ptr;
 			break;
+#else
+			SYSERR("shm support not available");
+			return -ENOSYS;
+#endif
 		case SND_PCM_AREA_LOCAL:
 			ptr = malloc(size);
 			if (ptr == NULL) {
@@ -466,6 +474,7 @@ int snd_pcm_munmap(snd_pcm_t *pcm)
 			errno = 0;
 			break;
 		case SND_PCM_AREA_SHM:
+#ifdef HAVE_SYS_SHM_H
 			if (i->u.shm.area) {
 				snd_shm_area_destroy(i->u.shm.area);
 				i->u.shm.area = NULL;
@@ -482,6 +491,10 @@ int snd_pcm_munmap(snd_pcm_t *pcm)
 				}
 			}
 			break;
+#else
+			SYSERR("shm support not available");
+			return -ENOSYS;
+#endif
 		case SND_PCM_AREA_LOCAL:
 			free(i->addr);
 			break;
diff --git a/src/shmarea.c b/src/shmarea.c
index 071f9f3..9843aa8 100644
--- a/src/shmarea.c
+++ b/src/shmarea.c
@@ -17,7 +17,12 @@
  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  *
  */
-  
+
+#include "config.h"
+
+/* These funcs are only used by pcm_mmap when sys/shm.h is available. */
+#ifdef HAVE_SYS_SHM_H
+
 #include <stdio.h>
 #include <malloc.h>
 #include <string.h>
@@ -106,3 +111,5 @@ void snd_shm_area_destructor(void)
 		shmdt(area->ptr);
 	}
 }
+
+#endif
-- 
2.5.2



More information about the Alsa-devel mailing list