support building w/out System V shared memory

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@gentoo.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Mike Frysinger 2015-10-27 17:28:04 -04:00 committed by Takashi Iwai
parent 7e90867487
commit 561df6fda0
3 changed files with 34 additions and 3 deletions

View file

@ -295,7 +295,7 @@ fi
AC_SUBST(ALSA_DEPLIBS) AC_SUBST(ALSA_DEPLIBS)
dnl Check for headers 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... dnl Check for resmgr support...
AC_MSG_CHECKING(for resmgr support) AC_MSG_CHECKING(for resmgr support)
@ -508,6 +508,13 @@ if test "$gcc_have_atomics" != "yes"; then
build_pcm_meter="no" build_pcm_meter="no"
fi 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], [test x$build_pcm_plugin = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_COPY], [test x$build_pcm_copy = 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]) AM_CONDITIONAL([BUILD_PCM_PLUGIN_LINEAR], [test x$build_pcm_linear = xyes])
@ -594,6 +601,10 @@ for p in $ctl_plugins; do
done done
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], [test x$build_ctl_plugin = xyes])
AM_CONDITIONAL([BUILD_CTL_PLUGIN_SHM], [test x$build_ctl_shm = 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]) AM_CONDITIONAL([BUILD_CTL_PLUGIN_EXT], [test x$build_ctl_ext = xyes])

View file

@ -17,13 +17,16 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
*/ */
#include "config.h"
#include <stdio.h> #include <stdio.h>
#include <malloc.h> #include <malloc.h>
#include <string.h> #include <string.h>
#include <sys/poll.h> #include <sys/poll.h>
#include <sys/mman.h> #include <sys/mman.h>
#ifdef HAVE_SYS_SHM_H
#include <sys/shm.h> #include <sys/shm.h>
#endif
#include "pcm_local.h" #include "pcm_local.h"
void snd_pcm_mmap_appl_backward(snd_pcm_t *pcm, snd_pcm_uframes_t frames) 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; i->addr = ptr;
break; break;
case SND_PCM_AREA_SHM: case SND_PCM_AREA_SHM:
#ifdef HAVE_SYS_SHM_H
if (i->u.shm.shmid < 0) { if (i->u.shm.shmid < 0) {
int id; int id;
/* FIXME: safer permission? */ /* FIXME: safer permission? */
@ -385,6 +389,10 @@ int snd_pcm_mmap(snd_pcm_t *pcm)
} }
i->addr = ptr; i->addr = ptr;
break; break;
#else
SYSERR("shm support not available");
return -ENOSYS;
#endif
case SND_PCM_AREA_LOCAL: case SND_PCM_AREA_LOCAL:
ptr = malloc(size); ptr = malloc(size);
if (ptr == NULL) { if (ptr == NULL) {
@ -466,6 +474,7 @@ int snd_pcm_munmap(snd_pcm_t *pcm)
errno = 0; errno = 0;
break; break;
case SND_PCM_AREA_SHM: case SND_PCM_AREA_SHM:
#ifdef HAVE_SYS_SHM_H
if (i->u.shm.area) { if (i->u.shm.area) {
snd_shm_area_destroy(i->u.shm.area); snd_shm_area_destroy(i->u.shm.area);
i->u.shm.area = NULL; i->u.shm.area = NULL;
@ -482,6 +491,10 @@ int snd_pcm_munmap(snd_pcm_t *pcm)
} }
} }
break; break;
#else
SYSERR("shm support not available");
return -ENOSYS;
#endif
case SND_PCM_AREA_LOCAL: case SND_PCM_AREA_LOCAL:
free(i->addr); free(i->addr);
break; break;

View file

@ -17,7 +17,12 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * 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 <stdio.h>
#include <malloc.h> #include <malloc.h>
#include <string.h> #include <string.h>
@ -106,3 +111,5 @@ void snd_shm_area_destructor(void)
shmdt(area->ptr); shmdt(area->ptr);
} }
} }
#endif