tvheadend/configure

557 lines
10 KiB
Bash
Executable file

#!/bin/bash
#
# Tvheadend configure script
#
# Copyright (c) 2012 Adam Sutton <dev@adamsutton.me.uk>
#
# ###########################################################################
# Setup
# ###########################################################################
ROOTDIR=$(cd "$(dirname "$0")"; pwd)
test -z "$PKG_CONFIG" && PKG_CONFIG=pkg-config
#
# Options
#
OPTIONS=(
"cwc:yes"
"capmt:yes"
"constcw:yes"
"linuxdvb:yes"
"satip_server:yes"
"satip_client:yes"
"hdhomerun_client:auto"
"hdhomerun_static:no"
"iptv:yes"
"tsfile:yes"
"dvbscan:yes"
"timeshift:yes"
"trace:yes"
"imagecache:auto"
"avahi:auto"
"zlib:auto"
"libav:auto"
"libffmpeg_static:no"
"libffmpeg_static_x264:yes"
"inotify:auto"
"epoll:auto"
"uriparser:auto"
"ccache:auto"
"tvhcsa:auto"
"bundle:no"
"dvbcsa:no"
"dvben50221:auto"
"kqueue:no"
"dbus_1:auto"
"android:no"
"tsdebug:no"
"gtimer_check:no"
)
#
# Begin
#
. "$ROOTDIR/support/configure.inc"
# ###########################################################################
# Parse arguments
# ###########################################################################
opt=
val=
for opt do
val=${opt#*=}
opt=${opt%=*}
opt=${opt#*--}
case "$opt" in
help)
show_help
;;
*dir|prefix)
eval "$opt=$val"
;;
cc|cflags|ldflags|arch|cpu|platform|python)
eval "$(toupper $opt)=\"$val\""
;;
enable-*)
opt=${opt#*-}
enable $opt 1
;;
disable-*)
opt=${opt#*-}
disable $opt 1
;;
esac
done
# ###########################################################################
# Checks
# ###########################################################################
echo "Checking support/features"
#
# Compiler
#
# Use ccache
if enabled_or_auto ccache; then
which ccache &> /dev/null
if [ $? -eq 0 ]; then
echo "$CC" | grep -q ccache || CC="ccache $CC"
enable ccache
elif enabled ccache; then
die "ccache not found, try --disable-ccache"
fi
fi
# Valiate compiler
check_cc || die 'No C compiler found'
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); }'
check_cc_snippet atomic64 '#include <stdint.h>
uint64_t test(uint64_t *ptr){
return __sync_fetch_and_add(ptr, 1);
}'
check_cc_snippet lockowner '
#include <sys/syscall.h>
#include <unistd.h>
#include <pthread.h>
#define TEST test
int ok = 1;
void *lockowner ( void *p)
{
pthread_mutex_t lock;
pthread_mutex_init(&lock, NULL);
pthread_mutex_lock(&lock);
if (lock.__data.__owner == syscall(SYS_gettid))
ok = 0;
return NULL;
}
int test ( void )
{
pthread_t tid;
pthread_create(&tid, NULL, lockowner, NULL);
pthread_join(tid, NULL);
return ok;
}' -lpthread
check_cc_snippet qsort_r '
#include <stdlib.h>
#define TEST test
int test(void)
{
qsort_r(NULL, 0, 0, NULL, NULL);
return 0;
}
'
check_cc_snippet stime '
#include <time.h>
#define TEST test
int test(void)
{
time_t t = 1;
stime(&t);
return 0;
}
'
check_cc_snippet recvmmsg '
#define _GNU_SOURCE
#include <stdlib.h>
#include <sys/socket.h>
#define TEST test
int test(void)
{
recvmmsg(0, NULL, 0, 0, NULL);
return 0;
}
'
check_cc_snippet sendmmsg '
#define _GNU_SOURCE
#include <stdlib.h>
#include <sys/socket.h>
#define TEST test
int test(void)
{
sendmmsg(0, NULL, 0, 0);
return 0;
}
'
check_cc_snippet libiconv '
#include <iconv.h>
int test(void)
{
iconv_t ic = iconv_open("ASCII", "ASCII");
return 0;
}
' -liconv
if enabled_or_auto dvben50221; then
check_cc_snippet libdvben50221 '
#include <libdvben50221/en50221_session.h>
#define TEST test
int test(void)
{
struct en50221_transport_layer *tl = en50221_tl_create(5, 32);
return 0;
}
' '-ldvben50221 -ldvbapi -lucsi'
if enabled libdvben50221; then
enable dvben50221
else
disable dvben50221
fi
fi
#
# Python
#
check_py || echo 'WARN: no python binary found'
check_py_import gzip
#
# Binaries
#
check_bin bzip2 || echo 'WARN: no bzip2 binary found'
#
# SSL
#
if [ ${PLATFORM} = "freebsd" ]; then
# FreeBSD has libssl in base
enable ssl
elif check_pkg openssl || check_pkg libssl; then
enable ssl
elif check_cc_header 'openssl/ssl' ssl; then
enable ssl
else
die "SSL development support not found"
fi
#
# OS X
#
if [ ${PLATFORM} = "darwin" ]; then
disable linuxdvb
disable avahi
enable bonjour
fi
#
# DVB API
#
check_cc_header 'linux/dvb/version' linuxdvbapi
if enabled_or_auto linuxdvb; then
if enabled linuxdvbapi; then
enable linuxdvb
elif enabled linuxdvb; then
die "Linux DVB API not found (use --disable-linuxdvb)"
fi
fi
#
# HDHomeRun - libhdhomerun
#
if enabled hdhomerun_static; then
enable hdhomerun_client
else
if enabled_or_auto hdhomerun_client; then
if check_cc_header 'libhdhomerun/hdhomerun' libhdhomerun; then
enable hdhomerun_client
LDFLAGS="$LDFLAGS -lhdhomerun"
fi
fi
fi
#
# Gzip
#
if enabled_or_auto zlib; then
if check_pkg zlib; then
enable zlib
elif enabled zlib; then
die "Zlib development support not found (use --disable-zlib)"
fi
fi
#
# SAT>IP server
#
if enabled_or_auto satip_server; then
enable upnp
fi
#
# SAT>IP client
#
if enabled_or_auto satip_client; then
enable upnp
fi
#
# uriparser
#
if enabled_or_auto uriparser; then
if check_pkg liburiparser; then
enable uriparser
elif enabled uriparser; then
die "liburiparser development support not found (use --disable-uriparser)"
fi
fi
#
# Bundling
#
if enabled bundle; then
if enabled zlib && ! enabled py_gzip; then
die "Python gzip module not found (use --disable-zlib or --disable-bundle)"
fi
fi
#
# Avahi
#
if enabled_or_auto avahi; then
if check_pkg avahi-client; then
enable avahi
elif enabled avahi; then
die "Avahi development support not found (use --disable-avahi)"
fi
fi
#
# libav
#
if enabled libffmpeg_static; then
enable libav
has_libav=true
else
if enabled_or_auto libav; then
has_libav=true
ffmpeg=$(${PKG_CONFIG} --modversion libavcodec | cut -d '.' -f 3)
test -z "$ffmpeg" && ffmpeg=0
printf "$TAB" "checking for ffmpeg libraries ..."
if test $ffmpeg -lt 100; then
ffmpeg=
echo "fail"
else
ffmpeg=yes
echo "ok"
fi
if test "$ffmpeg" == "yes"; then
#
# check for version n1.2+
#
if $has_libav && ! check_pkg libavcodec ">=55.18.102"; then
has_libav=false
fi
if $has_libav && ! check_pkg libavutil ">=52.38.100"; then
has_libav=false
fi
if $has_libav && ! check_pkg libavformat ">=55.12.100"; then
has_libav=false
fi
if $has_libav && ! check_pkg libswscale ">=2.3.100"; then
has_libav=false
fi
if $has_libav && ! check_pkg libavresample ">=1.1.0"; then
has_libav=false
fi
else
#
# check for version v10+
#
if $has_libav && ! check_pkg libavcodec ">=55.34.1"; then
has_libav=false
fi
if $has_libav && ! check_pkg libavutil ">=53.3.0"; then
has_libav=false
fi
if $has_libav && ! check_pkg libavformat ">=55.12.0"; then
has_libav=false
fi
if $has_libav && ! check_pkg libswscale ">=2.1.2"; then
has_libav=false
fi
if $has_libav && ! check_pkg libavresample ">=1.1.0"; then
has_libav=false
fi
fi
if $has_libav; then
enable libav
else
echo "WARNING: none or old libav or libffmpeg libraries were detected"
echo " * use --disable-libav or --enable-libffmpeg_static"
echo " ** supported ffmpeg libs n1.2+"
echo " ** supported libav libs v10+"
if enabled libav; then
die "libav development support not found"
fi
fi
fi
fi
#
# Inotify
#
if enabled_or_auto inotify; then
if check_cc_header "sys/inotify" inotify_h; then
enable inotify
elif enabled inotify; then
die "Inotify support not found (use --disable-inotify)"
fi
fi
#
# libdvbcsa, tvhcsa
#
if enabled cwc || enabled capmt || enabled constcw; then
enable tvhcsa
if enabled dvbcsa; then
(check_cc_header "dvbcsa/dvbcsa" dvbcsa_h &&\
check_cc_lib dvbcsa dvbcsa_l) ||\
die "Failed to find dvbcsa support (use --disable-dvbcsa)"
LDFLAGS="$LDFLAGS -ldvbcsa"
fi
fi
#
# libdvben50221
#
if enabled libdvben50221; then
LDFLAGS="$LDFLAGS -ldvben50221 -ldvbapi -lucsi"
enable linuxdvb_ca
fi
#
# Icon caching
#
if enabled_or_auto imagecache; then
enable imagecache
fi
#
# DVB scan
#
if enabled dvbscan; then
printf "${TAB}" "fetching dvb-scan files ..."
"${ROOTDIR}/support/getmuxlist"
if [ $? -ne 0 ]; then
echo "fail"
die "Failed to fetch dvb-scan data (use --disable-dvbscan)"
fi
echo "ok"
fi
#
# epoll
#
if [ ${PLATFORM} = "linux" ]; then
enable epoll
fi
#
# kqueue
#
if [ ${PLATFORM} = "freebsd" ] || [ ${PLATFORM} = "darwin" ]; then
enable kqueue
fi
#
# MPEGTS support
#
disable mpegts
disable mpegts_dvb
if enabled linuxdvb || enabled iptv || enabled tsfile || enabled satip_client || \
enabled hdhomerun_client || enabled satip_server;
then
enable mpegts
fi
if enabled linuxdvb || enabled satip_client || enabled hdhomerun_client || enabled satip_server; then
enable mpegts_dvb
fi
#
# DBus
#
if enabled_or_auto dbus_1; then
if check_pkg dbus-1; then
enable dbus_1
elif enabled dbus-1; then
die "DBus-1 development support not found (use --disable-dbus-1)"
fi
fi
#
# TSDebug
#
if enabled_or_auto tsdebug; then
enable mpegts_dvb
fi
# ###########################################################################
# Write config
# ###########################################################################
# Write config
write_config
cat >> "${CONFIG_H}" <<EOF
#define TVHEADEND_DATADIR "$(eval echo ${datadir})/tvheadend"
EOF
# Output config
print_config
echo "Final Binary:"
echo " $BUILDDIR/tvheadend"
echo ""
echo "Tvheadend Data Directory:"
echo " $(eval echo ${datadir}/tvheadend)"
echo ""