CFLAGS += -g -funsigned-char -O2
CFLAGS += -D_FILE_OFFSET_BITS=64
CFLAGS += -I${BUILDDIR} -I${ROOTDIR}/src -I${ROOTDIR}
-LDFLAGS += -lrt -ldl -lpthread -lm
+LDFLAGS += -ldl -lpthread -lm
+ifneq ($(PLATFORM), darwin)
+LDFLAGS += -lrt
+endif
+
+ifeq ($(COMPILER), clang)
+CFLAGS += -Wno-microsoft -Qunused-arguments -Wno-unused-function
+CFLAGS += -Wno-unused-value -Wno-tautological-constant-out-of-range-compare
+CFLAGS += -Wno-parentheses-equality -Wno-incompatible-pointer-types
+endif
vpath %.c $(ROOTDIR)
vpath %.h $(ROOTDIR)
check_cc_option mmx
check_cc_option sse2
+if check_cc '
+#if !defined(__clang__)
+#error this is not clang
+#endif
+'; then
+ COMPILER=clang
+else
+ COMPILER=gcc
+fi
+
check_cc_snippet getloadavg '#include <stdlib.h>
void test() { getloadavg(NULL,0); }'
die "SSL development support not found"
fi
+#
+# OS X
+#
+if [ ${PLATFORM} = "darwin" ]; then
+ disable linuxdvb
+fi
+
#
# DVB API
#
#
# kqueue
#
-if [ ${PLATFORM} = "freebsd" ]; then
+if [ ${PLATFORM} = "freebsd" ] || [ ${PLATFORM} = "darwin" ]; then
enable kqueue
fi
return 0;
}
- csize = hc->hc_csize < 0 ? 0 : hc->hc_csize;
+ csize = hc->hc_csize == (size_t) -1 ? 0 : hc->hc_csize;
l = len;
- if (hc->hc_csize && hc->hc_csize != -1 && hc->hc_rpos > csize) {
+ if (hc->hc_csize && hc->hc_csize != (size_t) -1 && hc->hc_rpos > csize) {
l2 = hc->hc_rpos - csize;
if (l2 < l)
l = l2;
http_client_run( http_client_t *hc )
{
char *buf, *saveptr, *argv[3], *d, *p;
- http_ver_t ver;
+ int ver;
ssize_t r;
size_t len;
int res;
#include "muxer/muxer_libav.h"
#endif
+#if defined(PLATFORM_DARWIN)
+#define fdatasync(fd) fcntl(fd, F_FULLFSYNC)
+#endif
+
/**
* Mime type for containers containing only audio
*/
fdatasync(fd);
/* fall through */
case MC_CACHE_DONTKEEP:
+#if defined(PLATFORM_DARWIN)
+ fcntl(fd, F_NOCACHE, 1);
+#else
posix_fadvise(fd, pos, size, POSIX_FADV_DONTNEED);
+#endif
break;
default:
abort();
char tvh_binshasum[20];
-#if defined(__i386__) || defined(__x86_64__)
+#if (defined(__i386__) || defined(__x86_64__)) && !defined(PLATFORM_DARWIN)
// Only do this on x86 for now
sigprocmask(SIG_UNBLOCK, &m, NULL);
}
+#elif defined(PLATFORM_DARWIN)
+
+#include <string.h>
+#include <signal.h>
+
+void
+trap_init(const char *ver)
+{
+ sigset_t m;
+
+ sigemptyset(&m);
+ sigaddset(&m, SIGSEGV);
+ sigaddset(&m, SIGBUS);
+ sigaddset(&m, SIGILL);
+ sigaddset(&m, SIGABRT);
+ sigaddset(&m, SIGFPE);
+
+ sigprocmask(SIG_UNBLOCK, &m, NULL);
+}
+
#else
void
#define CLOCK_MONOTONIC_COARSE CLOCK_MONOTONIC
#endif
+#ifdef PLATFORM_DARWIN
+#define CLOCK_MONOTONIC 0
+#define CLOCK_REALTIME 0
+
+static inline int clock_gettime(int clk_id, struct timespec* t) {
+ struct timeval now;
+ int rv = gettimeofday(&now, NULL);
+ if (rv) return rv;
+ t->tv_sec = now.tv_sec;
+ t->tv_nsec = now.tv_usec * 1000;
+ return 0;
+}
+#endif
+
static inline int64_t
getmonoclock(void)
{
#endif
#define PRIslongword_t "ld"
#define PRIulongword_t "lu"
+#if defined(PLATFORM_DARWIN)
+#define PRIsize_t PRIulongword_t
+#define PRIssize_t PRIslongword_t
+#else
#define PRIsize_t PRIuword_t
#define PRIssize_t PRIsword_t
+#endif
#if __WORDSIZE == 32 && defined(PLATFORM_FREEBSD)
#define PRItime_t PRIsword_t
#else
inet_ntop(ip.ss_family, IP_IN_ADDR(ip), tbuf, sizeof(tbuf));
tvhtrace("upnp", "%s - received data from %s:%hu [size=%zi]",
conn == multicast ? "multicast" : "unicast",
- tbuf, IP_PORT(ip), size);
+ tbuf, (unsigned short) IP_PORT(ip), size);
tvhlog_hexdump("upnp", buf, size);
}
#endif
off_t content_len, file_start, file_end, chunk;
#if defined(PLATFORM_LINUX)
ssize_t r;
-#elif defined(PLATFORM_FREEBSD)
+#elif defined(PLATFORM_FREEBSD) || defined(PLATFORM_DARWIN)
off_t r;
#endif
r = sendfile(hc->hc_fd, fd, NULL, chunk);
#elif defined(PLATFORM_FREEBSD)
sendfile(fd, hc->hc_fd, 0, chunk, NULL, &r, 0);
+#elif defined(PLATFORM_DARWIN)
+ r = chunk;
+ sendfile(fd, hc->hc_fd, 0, NULL, &r, 0);
#endif
if(r == -1) {
close(fd);
#elif defined(PLATFORM_FREEBSD)
/* Set name of thread */
pthread_set_name_np(pthread_self(), ts->name);
+#elif defined(PLATFORM_DARWIN)
+ pthread_setname_np(ts->name);
#endif
sigemptyset(&set);
CONFIGURE_ARGS = ${CONFIGURE_ARGS}
ROOTDIR ?= ${ROOTDIR}
BUILDDIR ?= ${BUILDDIR}
+PLATFORM ?= ${PLATFORM}
OSENV ?= ${OSENV}
ARCH ?= ${ARCH}
CPU ?= ${CPU}
+COMPILER ?= ${COMPILER}
ifeq (\$(origin CC),default)
CC = ${CC}
endif