Merge branch 'osx' of git://github.com/dmarion/tvheadend into master

This commit is contained in:
Jaroslav Kysela 2014-05-26 21:58:04 +02:00
commit 1c5de3a6f7
16 changed files with 110 additions and 30 deletions

View file

@ -32,7 +32,16 @@ CFLAGS += -Wmissing-prototypes -fms-extensions
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)

19
configure vendored
View file

@ -72,6 +72,16 @@ check_cc_header execinfo
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); }'
@ -147,6 +157,13 @@ else
die "SSL development support not found"
fi
#
# OS X
#
if [ ${PLATFORM} = "darwin" ]; then
disable linuxdvb
fi
#
# DVB API
#
@ -296,7 +313,7 @@ fi
#
# kqueue
#
if [ ${PLATFORM} = "freebsd" ]; then
if [ ${PLATFORM} = "freebsd" ] || [ ${PLATFORM} = "darwin" ]; then
enable kqueue
fi

View file

@ -89,7 +89,7 @@ static void
config_migrate_v1_dvb_svcs
( const char *name, const char *netu, const char *muxu, htsmsg_t *channels )
{
uuid_t svcu;
tvh_uuid_t svcu;
htsmsg_t *c, *e, *svc;
htsmsg_field_t *f;
const char *str;
@ -139,7 +139,7 @@ config_migrate_v1_dvb_network
( const char *name, htsmsg_t *c, htsmsg_t *channels )
{
int i;
uuid_t netu, muxu;
tvh_uuid_t netu, muxu;
htsmsg_t *e, *net, *mux, *tun;
htsmsg_field_t *f;
const char *str, *type;
@ -321,7 +321,7 @@ config_migrate_v1_epggrab ( const char *path, htsmsg_t *channels )
static void
config_migrate_v1 ( void )
{
uuid_t netu, muxu, svcu, chnu;
tvh_uuid_t netu, muxu, svcu, chnu;
htsmsg_t *c, *m, *e, *l;
htsmsg_field_t *f;
uint32_t u32;
@ -450,7 +450,7 @@ static void
config_migrate_v2 ( void )
{
htsmsg_t *m;
uuid_t u;
tvh_uuid_t u;
char src[1024], dst[1024];
/* Do we have IPTV config to migrate ? */

View file

@ -766,9 +766,9 @@ http_client_data_received( http_client_t *hc, char *buf, ssize_t len, int hdr )
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;
@ -801,7 +801,7 @@ int
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;

View file

@ -102,7 +102,7 @@ idnode_insert(idnode_t *in, const char *uuid, const idclass_t *class)
{
idnode_t *c;
lock_assert(&global_lock);
uuid_t u;
tvh_uuid_t u;
if (uuid_init_bin(&u, uuid))
return -1;
memcpy(in->in_uuid, u.bin, sizeof(in->in_uuid));
@ -192,7 +192,7 @@ idnode_get_short_uuid (const idnode_t *in)
const char *
idnode_uuid_as_str(const idnode_t *in)
{
static uuid_t ret[16];
static tvh_uuid_t ret[16];
static uint8_t p = 0;
bin2hex(ret[p].hex, sizeof(ret[p].hex), in->in_uuid, sizeof(in->in_uuid));
const char *s = ret[p].hex;

View file

@ -187,7 +187,7 @@ linuxdvb_adapter_add ( const char *path )
extern int linuxdvb_adapter_mask;
int a, i, j, r, fd;
char fe_path[512], dmx_path[512], dvr_path[512];
uuid_t uuid;
tvh_uuid_t uuid;
linuxdvb_adapter_t *la = NULL;
struct dvb_frontend_info dfi;
SHA_CTX sha1;

View file

@ -256,7 +256,7 @@ satip_device_calc_bin_uuid( uint8_t *uuid, const char *satip_uuid )
}
static void
satip_device_calc_uuid( uuid_t *uuid, const char *satip_uuid )
satip_device_calc_uuid( tvh_uuid_t *uuid, const char *satip_uuid )
{
uint8_t uuidbin[20];
@ -287,7 +287,7 @@ static satip_device_t *
satip_device_create( satip_device_info_t *info )
{
satip_device_t *sd = calloc(1, sizeof(satip_device_t));
uuid_t uuid;
tvh_uuid_t uuid;
htsmsg_t *conf = NULL, *feconf = NULL;
char *argv[10];
int i, j, n, m, fenum, t2, save = 0;

View file

@ -28,6 +28,10 @@
#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
*/
@ -458,7 +462,11 @@ muxer_cache_update(muxer_t *m, int fd, off_t pos, size_t size)
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();

View file

@ -20,7 +20,7 @@
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
@ -315,6 +315,26 @@ trap_init(const char *ver)
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

View file

@ -500,6 +500,20 @@ int tvh_str_update(char **strp, const char *src);
#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)
{
@ -677,8 +691,13 @@ void tvh_qsort_r(void *base, size_t nmemb, size_t size, int (*compar)(const 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

View file

@ -147,7 +147,7 @@ upnp_thread( void *aux )
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

View file

@ -103,9 +103,9 @@ uuid_init ( void )
/* Initialise binary */
int
uuid_init_bin ( uuid_t *u, const char *str )
uuid_init_bin ( tvh_uuid_t *u, const char *str )
{
memset(u, 0, sizeof(uuid_t));
memset(u, 0, sizeof(tvh_uuid_t));
if (str) {
return hex2bin(u->bin, sizeof(u->bin), str);
} else if (read(fd, u->bin, sizeof(u->bin)) != sizeof(u->bin)) {
@ -117,9 +117,9 @@ uuid_init_bin ( uuid_t *u, const char *str )
/* Initialise hex string */
int
uuid_init_hex ( uuid_t *u, const char *str )
uuid_init_hex ( tvh_uuid_t *u, const char *str )
{
uuid_t tmp;
tvh_uuid_t tmp;
if (uuid_init_bin(&tmp, str))
return 1;
return uuid_bin2hex(&tmp, u);
@ -127,9 +127,9 @@ uuid_init_hex ( uuid_t *u, const char *str )
/* Convert bin to hex string */
int
uuid_bin2hex ( const uuid_t *a, uuid_t *b )
uuid_bin2hex ( const tvh_uuid_t *a, tvh_uuid_t *b )
{
uuid_t tmp;
tvh_uuid_t tmp;
memset(&tmp, 0, sizeof(tmp));
bin2hex(tmp.hex, sizeof(tmp.hex), a->bin, sizeof(a->bin));
memcpy(b, &tmp, sizeof(tmp));
@ -138,9 +138,9 @@ uuid_bin2hex ( const uuid_t *a, uuid_t *b )
/* Convert hex string to bin (in place) */
int
uuid_hex2bin ( const uuid_t *a, uuid_t *b )
uuid_hex2bin ( const tvh_uuid_t *a, tvh_uuid_t *b )
{
uuid_t tmp;
tvh_uuid_t tmp;
memset(&tmp, 0, sizeof(tmp));
if (hex2bin(tmp.bin, sizeof(tmp.bin), a->hex))
return 1;

View file

@ -31,30 +31,30 @@ typedef struct uuid {
uint8_t bin[UUID_BIN_SIZE];
char hex[UUID_HEX_SIZE];
};
} uuid_t;
} tvh_uuid_t;
/* Initialise subsystem */
void uuid_init ( void );
/* Initialise binary */
int uuid_init_bin ( uuid_t *u, const char *str );
int uuid_init_bin ( tvh_uuid_t *u, const char *str );
/* Initialise hex string */
int uuid_init_hex ( uuid_t *u, const char *str );
int uuid_init_hex ( tvh_uuid_t *u, const char *str );
/**
* Convert bin to hex string
*
* Note: conversion is done such that a and b can be the same
*/
int uuid_bin2hex ( const uuid_t *a, uuid_t *b );
int uuid_bin2hex ( const tvh_uuid_t *a, tvh_uuid_t *b );
/**
* Convert hex string to bin (in place)
*
* Note: conversion is done such that a and b can be the same
*/
int uuid_hex2bin ( const uuid_t *a, uuid_t *b );
int uuid_hex2bin ( const tvh_uuid_t *a, tvh_uuid_t *b );
/**
* Hex string to binary

View file

@ -930,7 +930,7 @@ page_dvrfile(http_connection_t *hc, const char *remain, void *opaque)
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
@ -1017,6 +1017,9 @@ page_dvrfile(http_connection_t *hc, const char *remain, void *opaque)
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);

View file

@ -109,6 +109,8 @@ thread_wrapper ( void *p )
#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);

View file

@ -470,9 +470,11 @@ function write_config
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