From: Mike Brady Date: Fri, 9 Feb 2018 20:38:55 +0000 (+0000) Subject: Add support for OpenBSD compilation X-Git-Tag: 3.2RC1~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1c045979bb42f2aa42c9b0f129fa91f059a7e35a;p=thirdparty%2Fshairport-sync.git Add support for OpenBSD compilation --- diff --git a/Makefile.am b/Makefile.am index 48ef77aa..b3bffb6d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -9,9 +9,13 @@ shairport_sync_SOURCES = shairport.c rtsp.c mdns.c mdns_external.c common.c rtp. AM_CFLAGS = -Wno-multichar -DSYSCONFDIR=\"$(sysconfdir)\" if BUILD_FOR_FREEBSD AM_CPPFLAGS = -I/usr/local/include -Wno-multichar -DSYSCONFDIR=\"$(sysconfdir)\" -O2 +else +if BUILD_FOR_OPENBSD + AM_CPPFLAGS = -I/usr/local/include -Wno-multichar -DSYSCONFDIR=\"$(sysconfdir)\" else AM_CPPFLAGS = -Wno-multichar -DSYSCONFDIR=\"$(sysconfdir)\" endif +endif if USE_APPLE_ALAC shairport_sync_SOURCES += apple_alac.cpp diff --git a/common.c b/common.c index e8cc16ac..80f9c60e 100644 --- a/common.c +++ b/common.c @@ -683,7 +683,7 @@ double vol2attn(double vol, long max_db, long min_db) { uint64_t get_absolute_time_in_fp() { uint64_t time_now_fp; -#ifdef COMPILE_FOR_LINUX_AND_FREEBSD_AND_CYGWIN +#ifdef COMPILE_FOR_LINUX_AND_FREEBSD_AND_CYGWIN_AND_OPENBSD struct timespec tn; // can't use CLOCK_MONOTONIC_RAW as it's not implemented in OpenWrt clock_gettime(CLOCK_MONOTONIC, &tn); diff --git a/common.h b/common.h index 24f37676..addccafb 100644 --- a/common.h +++ b/common.h @@ -11,20 +11,6 @@ #include "definitions.h" #include "mdns.h" -#if defined(__APPLE__) && defined(__MACH__) -/* Apple OSX and iOS (Darwin). ------------------------------ */ -#include -#if TARGET_OS_MAC == 1 -/* OSX */ -#define COMPILE_FOR_OSX 1 -#endif -#endif - -#if defined(__linux__) || defined(__FreeBSD__) || defined(__CYGWIN__) -/* Linux and FreeBSD */ -#define COMPILE_FOR_LINUX_AND_FREEBSD_AND_CYGWIN 1 -#endif - // struct sockaddr_in6 is bigger than struct sockaddr. derp #ifdef AF_INET6 #define SOCKADDR struct sockaddr_storage diff --git a/configure.ac b/configure.ac index b72ee605..1c91659a 100644 --- a/configure.ac +++ b/configure.ac @@ -28,8 +28,15 @@ if test "x${with_os}" = xlinux -o "x${with_os}" = xfreebsd ; then AC_CHECK_LIB([rt],[clock_gettime], , AC_MSG_ERROR(librt needed)) fi +if test "x${with_os}" = xopenbsd ; then + AC_CHECK_LIB([c],[clock_gettime], , AC_MSG_ERROR(libc needed)) +fi + AM_CONDITIONAL([BUILD_FOR_FREEBSD], [test "x${with_os}" = xfreebsd ]) +AM_CONDITIONAL([BUILD_FOR_OPENBSD], [test "x${with_os}" = xopenbsd ]) + + ##### Some build systems are not fully using pkg-config, so we can use the flag ${with_pkg_config} on a case-by-case basis ##### to control how to deal with them @@ -52,7 +59,8 @@ AC_MSG_RESULT(>>Including libpopt) if test "x${with_pkg_config}" = xyes ; then PKG_CHECK_MODULES( [POPT], [popt], - [LIBS="${POPT_LIBS} ${LIBS}" + [CFLAGS="${POPT_CFLAGS} ${CFLAGS}" + LIBS="${POPT_LIBS} ${LIBS}" AC_DEFINE([HAVE_LIBPOPT],[1],[Define to 1 if you have popt])]) else AC_CHECK_LIB([popt],[poptGetContext], , AC_MSG_ERROR(libpopt needed)) diff --git a/definitions.h b/definitions.h index 5fe42b41..bde920be 100644 --- a/definitions.h +++ b/definitions.h @@ -19,9 +19,8 @@ #endif #endif -#if defined(__linux__) || defined(__FreeBSD__) || defined(__CYGWIN__) -/* Linux and FreeBSD */ -#define COMPILE_FOR_LINUX_AND_FREEBSD_AND_CYGWIN 1 +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) +#define COMPILE_FOR_LINUX_AND_FREEBSD_AND_CYGWIN_AND_OPENBSD 1 #endif // struct sockaddr_in6 is bigger than struct sockaddr. derp diff --git a/player.c b/player.c index 8530f444..5079103c 100644 --- a/player.c +++ b/player.c @@ -1124,7 +1124,7 @@ static abuf_t *buffer_get_frame(rtsp_conn_info *conn) { time_to_wait_for_wakeup_fp *= 4 * 352; // four full 352-frame packets time_to_wait_for_wakeup_fp /= 3; // four thirds of a packet time -#ifdef COMPILE_FOR_LINUX_AND_FREEBSD_AND_CYGWIN +#ifdef COMPILE_FOR_LINUX_AND_FREEBSD_AND_CYGWIN_AND_OPENBSD uint64_t time_of_wakeup_fp = local_time_now + time_to_wait_for_wakeup_fp; uint64_t sec = time_of_wakeup_fp >> 32; uint64_t nsec = ((time_of_wakeup_fp & 0xffffffff) * 1000000000) >> 32; @@ -1380,7 +1380,7 @@ static void *player_thread_func(void *arg) { if (rc) debug(1, "Error initialising vol_mutex."); // set the flowcontrol condition variable to wait on a monotonic clock -#ifdef COMPILE_FOR_LINUX_AND_FREEBSD_AND_CYGWIN +#ifdef COMPILE_FOR_LINUX_AND_FREEBSD_AND_CYGWIN_AND_OPENBSD pthread_condattr_t attr; pthread_condattr_init(&attr); pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); // can't do this in OS X, and don't need it. diff --git a/shairport.c b/shairport.c index effc4cca..9a4a5f94 100644 --- a/shairport.c +++ b/shairport.c @@ -2,7 +2,7 @@ * Shairport, an Apple Airplay receiver * Copyright (c) James Laird 2013 * All rights reserved. - * Modifications (c) Mike Brady 2014--2017 + * Modifications (c) Mike Brady 2014--2018 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include