mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
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:
parent
7e90867487
commit
561df6fda0
3 changed files with 34 additions and 3 deletions
13
configure.ac
13
configure.ac
|
|
@ -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])
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue