summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSASANO Takayoshi <uaa@uaa.org.uk>2022-07-10 11:03:00 +0900
committerJaroslav Kysela <perex@perex.cz>2022-10-17 13:11:29 +0200
commitb33ef3f73d632f54c27138e585030c50d76f47aa (patch)
tree96ced43d54b58c020fc12a776bc77c65cca7868f
parente288ca7c29d9372e68c9704becdaf9261b30c9bf (diff)
downloadalsa-lib-b33ef3f73d632f54c27138e585030c50d76f47aa.tar.gz
add NetBSD/OpenBSD build support (except test/)
Fixes: https://github.com/alsa-project/alsa-lib/pull/250 Signed-off-by: SASANO Takayoshi <uaa@uaa.org.uk> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r--configure.ac2
-rw-r--r--include/bswap.h5
-rw-r--r--include/local.h8
-rw-r--r--include/sound/type_compat.h20
-rw-r--r--include/sound/uapi/asoc.h2
-rw-r--r--src/async.c10
-rw-r--r--src/conf.c2
-rw-r--r--src/pcm/pcm.c2
-rw-r--r--src/pcm/pcm_direct.c4
-rw-r--r--src/pcm/pcm_mmap.c2
-rw-r--r--src/seq/seq_midi_event.c2
-rw-r--r--src/shmarea.c3
-rw-r--r--src/ucm/parser.c2
-rw-r--r--src/ucm/ucm_exec.c5
14 files changed, 52 insertions, 17 deletions
diff --git a/configure.ac b/configure.ac
index 864df1d0..9a9eda9b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -335,7 +335,7 @@ else
fi
dnl Check for headers
-AC_CHECK_HEADERS([endian.h sys/endian.h sys/shm.h])
+AC_CHECK_HEADERS([endian.h sys/endian.h sys/shm.h malloc.h])
dnl Check for resmgr support...
AC_MSG_CHECKING(for resmgr support)
diff --git a/include/bswap.h b/include/bswap.h
index 4e5b3e2a..e590124c 100644
--- a/include/bswap.h
+++ b/include/bswap.h
@@ -27,6 +27,11 @@
#define bswap_16 bswap16
#define bswap_32 bswap32
#define bswap_64 bswap64
+#elif defined(__OpenBSD__)
+#include <sys/endian.h>
+#define bswap_16 swap16
+#define bswap_32 swap32
+#define bswap_64 swap64
#elif defined (__sun)
#include <sys/byteorder.h>
#define bswap_16 BSWAP_16
diff --git a/include/local.h b/include/local.h
index 268a9ff1..151e3fd4 100644
--- a/include/local.h
+++ b/include/local.h
@@ -34,6 +34,9 @@
#include <endian.h>
#elif defined(HAVE_SYS_ENDIAN_H)
#include <sys/endian.h>
+#else
+#error Header defining endianness not defined
+#endif
#ifndef __BYTE_ORDER
#define __BYTE_ORDER BYTE_ORDER
#endif
@@ -43,9 +46,6 @@
#ifndef __BIG_ENDIAN
#define __BIG_ENDIAN BIG_ENDIAN
#endif
-#else
-#error Header defining endianness not defined
-#endif
#include <stdarg.h>
#include <poll.h>
#include <sys/types.h>
@@ -85,6 +85,8 @@
#define versionsort64 versionsort
#define alphasort64 alphasort
#define ino64_t ino_t
+#define fstat64 fstat
+#define stat64 stat
#endif
#define _snd_config_iterator list_head
diff --git a/include/sound/type_compat.h b/include/sound/type_compat.h
index b994ccfe..0c424efc 100644
--- a/include/sound/type_compat.h
+++ b/include/sound/type_compat.h
@@ -3,7 +3,7 @@
#ifndef DOC_HIDDEN
#include <stdint.h>
-#ifdef __linux__
+#if defined(__linux__)
#include <linux/types.h>
#else
typedef uint8_t __u8;
@@ -15,8 +15,14 @@ typedef int16_t __s16;
typedef int32_t __s32;
typedef int64_t __s64;
+#if defined(__sun)
+#include <sys/byteorder.h>
+#define __cpu_to_le32 LE_32(x)
+#define __cpu_to_be32 BE_32(x)
+#define __cpu_to_le16 LE_16(x)
+#define __cpu_to_be16 BE_16(x)
+#else
#include <endian.h>
-#include <byteswap.h>
#if __BYTE_ORDER == __LITTLE_ENDIAN
#define __cpu_to_le32(x) (x)
#define __cpu_to_be32(x) bswap_32(x)
@@ -28,20 +34,12 @@ typedef int64_t __s64;
#define __cpu_to_le16(x) bswap_16(x)
#define __cpu_to_be16(x) (x)
#endif
+#endif
#define __le32_to_cpu __cpu_to_le32
#define __be32_to_cpu __cpu_to_be32
#define __le16_to_cpu __cpu_to_le16
#define __be16_to_cpu __cpu_to_be16
-
-#define __le64 __u64
-#define __le32 __u32
-#define __le16 __u16
-#define __le8 __u8
-#define __be64 __u64
-#define __be32 __u32
-#define __be16 __u16
-#define __be8 __u8
#endif
#ifndef __kernel_long_t
diff --git a/include/sound/uapi/asoc.h b/include/sound/uapi/asoc.h
index f32c5697..3903f2f4 100644
--- a/include/sound/uapi/asoc.h
+++ b/include/sound/uapi/asoc.h
@@ -16,7 +16,9 @@
#ifndef __LINUX_UAPI_SND_ASOC_H
#define __LINUX_UAPI_SND_ASOC_H
+#if defined(__linux__)
#include <linux/types.h>
+#endif
/*
* Maximum number of channels topology kcontrol can represent.
diff --git a/src/async.c b/src/async.c
index e6a8b5f2..8e8481b5 100644
--- a/src/async.c
+++ b/src/async.c
@@ -54,6 +54,15 @@ static LIST_HEAD(snd_async_handlers);
static void snd_async_handler(int signo ATTRIBUTE_UNUSED, siginfo_t *siginfo, void *context ATTRIBUTE_UNUSED)
{
+#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__)
+ /* siginfo_t does not have si_fd */
+ struct list_head *i;
+ list_for_each(i, &snd_async_handlers) {
+ snd_async_handler_t *h = list_entry(i, snd_async_handler_t, glist);
+ if (h->callback)
+ h->callback(h);
+ }
+#else
int fd;
struct list_head *i;
//assert(siginfo->si_code == SI_SIGIO);
@@ -66,6 +75,7 @@ static void snd_async_handler(int signo ATTRIBUTE_UNUSED, siginfo_t *siginfo, vo
if (h->fd == fd && h->callback)
h->callback(h);
}
+#endif
}
/**
diff --git a/src/conf.c b/src/conf.c
index a996e5f9..029a0db4 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -4115,7 +4115,7 @@ static int config_file_load(snd_config_t *root, const char *fn, int errors)
if (!S_ISDIR(st.st_mode))
return config_file_open(root, fn);
#ifndef DOC_HIDDEN
-#if defined(_GNU_SOURCE) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(__sun) && !defined(ANDROID)
+#if defined(_GNU_SOURCE) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__sun) && !defined(ANDROID)
#define SORTFUNC versionsort64
#else
#define SORTFUNC alphasort64
diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c
index 9aec52d1..927aa055 100644
--- a/src/pcm/pcm.c
+++ b/src/pcm/pcm.c
@@ -660,7 +660,9 @@ playback devices.
#include <stdio.h>
#include <string.h>
+#if HAVE_MALLOC_H
#include <malloc.h>
+#endif
#include <stdarg.h>
#include <signal.h>
#include <ctype.h>
diff --git a/src/pcm/pcm_direct.c b/src/pcm/pcm_direct.c
index 39b82b96..c16956f1 100644
--- a/src/pcm/pcm_direct.c
+++ b/src/pcm/pcm_direct.c
@@ -44,12 +44,16 @@
*
*/
+#if !defined(__OpenBSD__)
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
+#if defined(__linux__)
struct seminfo *__buf; /* Buffer for IPC_INFO (Linux specific) */
+#endif
};
+#endif
/*
* FIXME:
diff --git a/src/pcm/pcm_mmap.c b/src/pcm/pcm_mmap.c
index 9cbaae05..dcd5c77e 100644
--- a/src/pcm/pcm_mmap.c
+++ b/src/pcm/pcm_mmap.c
@@ -20,7 +20,9 @@
#include "config.h"
#include <stdio.h>
+#if HAVE_MALLOC_H
#include <malloc.h>
+#endif
#include <string.h>
#include <poll.h>
#include <sys/mman.h>
diff --git a/src/seq/seq_midi_event.c b/src/seq/seq_midi_event.c
index 5a12a18c..df09bde3 100644
--- a/src/seq/seq_midi_event.c
+++ b/src/seq/seq_midi_event.c
@@ -28,7 +28,9 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#if HAVE_MALLOC_H
#include <malloc.h>
+#endif
#include "local.h"
#ifndef DOC_HIDDEN
diff --git a/src/shmarea.c b/src/shmarea.c
index 18937d9e..b566c79e 100644
--- a/src/shmarea.c
+++ b/src/shmarea.c
@@ -24,7 +24,10 @@
#ifdef HAVE_SYS_SHM_H
#include <stdio.h>
+#include <stdlib.h>
+#if HAVE_MALLOC_H
#include <malloc.h>
+#endif
#include <string.h>
#include <errno.h>
#include <poll.h>
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
index 9e62fa9f..56d67e50 100644
--- a/src/ucm/parser.c
+++ b/src/ucm/parser.c
@@ -2907,7 +2907,7 @@ int uc_mgr_scan_master_configs(const char **_list[])
snprintf(filename, sizeof(filename), "%s/ucm2/conf.virt.d",
snd_config_topdir());
-#if defined(_GNU_SOURCE) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(__sun) && !defined(ANDROID)
+#if defined(_GNU_SOURCE) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__sun) && !defined(ANDROID)
#define SORTFUNC versionsort64
#else
#define SORTFUNC alphasort64
diff --git a/src/ucm/ucm_exec.c b/src/ucm/ucm_exec.c
index fffff55c..d5251fab 100644
--- a/src/ucm/ucm_exec.c
+++ b/src/ucm/ucm_exec.c
@@ -33,6 +33,11 @@
#include <limits.h>
#include <dirent.h>
+#if defined(__NetBSD__) || defined(__OpenBSD__)
+#include <signal.h>
+extern char **environ;
+#endif
+
static pthread_mutex_t fork_lock = PTHREAD_MUTEX_INITIALIZER;
/*