Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

executable file 5047 lines (4535 sloc) 152.339 kb
#!/bin/sh
#
# MythTV configure script, based on the FFmpeg configure script
#
# Copyright (c) 2000-2002 Fabrice Bellard
# Copyright (c) 2005-2008 Diego Biurrun
# Copyright (c) 2005-2008 Mans Rullgard
#
# Prevent locale nonsense from breaking basic text processing.
LC_ALL=C
export LC_ALL
# make sure we are running under a compatible shell
# try to make this part work with most shells
try_exec(){
echo "Trying shell $1"
type "$1" > /dev/null 2>&1 && exec "$@"
}
unset foo
(: ${foo%%bar}) 2> /dev/null
E1="$?"
(: ${foo?}) 2> /dev/null
E2="$?"
if test "$E1" != 0 || test "$E2" = 0; then
echo "Broken shell detected. Trying alternatives."
export FF_CONF_EXEC
if test "0$FF_CONF_EXEC" -lt 1; then
FF_CONF_EXEC=1
try_exec bash "$0" "$@"
fi
if test "0$FF_CONF_EXEC" -lt 2; then
FF_CONF_EXEC=2
try_exec ksh "$0" "$@"
fi
if test "0$FF_CONF_EXEC" -lt 3; then
FF_CONF_EXEC=3
try_exec /usr/xpg4/bin/sh "$0" "$@"
fi
echo "No compatible shell script interpreter found."
echo "This configure script requires a POSIX-compatible shell"
echo "such as bash or ksh."
echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
echo "Instead, install a working POSIX-compatible shell."
echo "Disabling this configure test will create a broken MythTV."
if test "$BASH_VERSION" = '2.04.0(1)-release'; then
echo "This bash version ($BASH_VERSION) is broken on your platform."
echo "Upgrade to a later version if available."
fi
exit 1
fi
show_help(){
cat <<EOF
Usage: configure [options]
Options: [defaults in brackets after descriptions]
Standard options:
--help print this message
--previous use previous configure parameters if possible
--compile-type=CTYPE one of release, profile, debug [$compile_type]
NOTE: profile is for sampling profilers
--prefix=PREFIX install in PREFIX [$prefix]
--runprefix=PREFIX prefix to be used at runtime (e.g. .. or /myth/latest)
--libdir-name=LIBNAME search/install libraries in PREFIX/LIBNAME [$libdir_name]
--disable-ccache disable compiler cache (ccache)
--disable-distcc disable distributed compilation (distcc)
Advanced options (experts only):
--cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
--enable-cross-compile assume a cross-compiler is used
--sysroot=PATH root of cross-build tree
--sysinclude=PATH location of cross-build system headers
--cc=CC use C compiler CC [$cc_default]
--cxx=CXX use C++ compiler CXX [$cxx_default]
--ld=LD use linker LD
--qmake=QMAKE use specified qmake [$qmake_default]
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
--extra-cxxflags=ECXFLAGS add ECXXFLAGS to list of flags for C++ compile
--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
--disable-symbol-visibility disables symbol visibility options
--arch=ARCH select architecture [$arch]
--tune=CPU tune instruction usage for a particular CPU [$tune]
--cpu=CPU select the minimum required CPU (affects
instruction selection, may crash on older CPUs)
--disable-altivec disable AltiVec optimizations
--disable-amd3dnow disable 3DNow! optimizations
--disable-amd3dnowext disable 3DNow! extended optimizations
--disable-mmx disable MMX optimizations
--disable-mmx2 disable MMX2 optimizations
--disable-sse disable SSE optimizations
--disable-ssse3 disable SSSE3 optimizations
--disable-yasm disable use of yasm assembler
--enable-pic build position-independent code
--enable-proc-opt enable processor specific compilation
--disable-audio-oss disable OSS audio support
--disable-audio-alsa disable ALSA audio support
--disable-audio-jack disable JACK audio support
--disable-audio-pulseoutput disable PulseAudio audio output support
--enable-valgrind disables timeouts for valgrind memory debugging
--disable-lirc disable lirc support (Infrared Remotes)
--disable-joystick-menu disable joystick menu
--disable-libcec disable libCEC device support
--libcec-path=HDRLOC location of directory containing
'libcec/cec.h', not the directory
with 'cec.h' [$libcec_path_default]
--disable-firewire disable support for FireWire cable boxes
--firewire-sdk specify location for mac FireWire SDK [mac only]
--disable-iptv disable support for recording RTSP/UDP/RTP streams
--disable-hdhomerun disable support for HDHomeRun boxes
--disable-ceton disable support for Ceton cards
--disable-v4l2 disable Video4Linux support
--disable-ivtv disable ivtv support (PVR-x50) req. v4l2 support
--disable-hdpvr disable HD-PVR support
--disable-dvb disable DVB support
--dvb-path=HDRLOC location of directory containing
'linux/dvb/frontend.h', not the
directory with frontend.h [$dvb_path_default]
--disable-asi disable support for ASI recorder
--disable-x11 disable X11 support
--x11-path=X11LOC location of X11 include files [$x11_path_default]
--disable-xrandr disable X11 resolution switching
--disable-xv disable XVideo (X11 video output accel.)
--enable-vdpau enable NVidia VDPAU hardware acceleration.
--enable-crystalhd enable Broadcom CrystalHD hardware decoder support
--enable-vaapi enable VAAPI hardware accelerated video decoding
--enable-dxva2 enable hardware accelerated decoding on windows
--disable-opengl-video disable OpenGL based video display
--disable-quartz-video disable Mac OS X CoreVideo based video display
--disable-libass disable libass SSA/ASS subtitle support
--enable-mac-bundle produce standalone OS X apps (e.g. mythfrontend.app)
--disable-libxml2 disable libxml2 support (disc metadata)
--libxml2-path=HDRLOC location of directory containing
'libxml/parser.h', not the
directory with parser.h [$libxml2_path_default]
--disable-libdns-sd disable DNS Service Discovery (Bonjour/Zeroconf/Avahi)
--disable-libcrypto disable use of the OpenSSL cryptographic library
--with-bindings=LIST install the bindings specified in the
comma-separated list
Supported bindings: perl, python, php
comma-separated list
--python=PATH Force a specific python executable to use [$python_default]
--perl-config-opts=OPTS Additional options to pass when generating
Makefile.perl for building Perl bindings.
External codec library options (used for mythffmpeg and streaming transcode):
--enable-libmp3lame enable MP3 encoding via libmp3lame [no]
--enable-libfaac enable AAC encoding vic libfaac [no]
--enable-libx264 enable H.264 encoding via x264 [no]
--enable-libvpx enable VP8 encoding via libvpx [no]
--enable-libxvid enable Xvid encoding via xvidcore,
native MPEG-4/Xvid encoder exists [no]
EOF
#following is ffmpeg's configure help text
<<EOF
Standard options:
--help print this message
--disable-logging do not log configure debug information
--prefix=PREFIX install in PREFIX [$prefix]
--bindir=DIR install binaries in DIR [PREFIX/bin]
--datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
--libdir=DIR install libs in DIR [PREFIX/lib]
--shlibdir=DIR install shared libs in DIR [PREFIX/lib]
--incdir=DIR install includes in DIR [PREFIX/include]
--mandir=DIR install man page in DIR [PREFIX/share/man]
Configuration options:
--disable-static do not build static libraries [no]
--enable-shared build shared libraries [no]
--enable-gpl allow use of GPL code, the resulting libs
and binaries will be under GPL [no]
--enable-version3 upgrade (L)GPL to version 3 [no]
--enable-nonfree allow use of nonfree code, the resulting libs
and binaries will be unredistributable [no]
--disable-doc do not build documentation
--disable-ffmpeg disable ffmpeg build
--disable-ffplay disable ffplay build
--disable-ffprobe disable ffprobe build
--disable-ffserver disable ffserver build
--disable-avdevice disable libavdevice build
--disable-avcodec disable libavcodec build
--disable-avformat disable libavformat build
--disable-swscale disable libswscale build
--enable-postproc enable GPLed postprocessing support [no]
--disable-avfilter disable video filter support [no]
--disable-pthreads disable pthreads [auto]
--enable-w32threads use Win32 threads [no]
--enable-x11grab enable X11 grabbing [no]
--disable-network disable network support [no]
--disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]
--enable-gray enable full grayscale support (slower color)
--disable-swscale-alpha disable alpha channel support in swscale
--disable-fastdiv disable table-based division
--enable-small optimize for size instead of speed
--disable-aandct disable AAN DCT code
--disable-dct disable DCT code
--disable-fft disable FFT code
--disable-golomb disable Golomb code
--disable-huffman disable Huffman code
--disable-lpc disable LPC code
--disable-mdct disable MDCT code
--disable-rdft disable RDFT code
--disable-vaapi disable VAAPI code
--disable-vdpau disable VDPAU code
--disable-dxva2 disable DXVA2 code
--enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
--enable-hardcoded-tables use hardcoded tables instead of runtime generation
--enable-memalign-hack emulate memalign, interferes with memory debuggers
--disable-everything disable all components listed below
--disable-encoder=NAME disable encoder NAME
--enable-encoder=NAME enable encoder NAME
--disable-encoders disable all encoders
--disable-decoder=NAME disable decoder NAME
--enable-decoder=NAME enable decoder NAME
--disable-decoders disable all decoders
--disable-hwaccel=NAME disable hwaccel NAME
--enable-hwaccel=NAME enable hwaccel NAME
--disable-hwaccels disable all hwaccels
--disable-muxer=NAME disable muxer NAME
--enable-muxer=NAME enable muxer NAME
--disable-muxers disable all muxers
--disable-demuxer=NAME disable demuxer NAME
--enable-demuxer=NAME enable demuxer NAME
--disable-demuxers disable all demuxers
--enable-parser=NAME enable parser NAME
--disable-parser=NAME disable parser NAME
--disable-parsers disable all parsers
--enable-bsf=NAME enable bitstream filter NAME
--disable-bsf=NAME disable bitstream filter NAME
--disable-bsfs disable all bitstream filters
--enable-protocol=NAME enable protocol NAME
--disable-protocol=NAME disable protocol NAME
--disable-protocols disable all protocols
--disable-indev=NAME disable input device NAME
--disable-outdev=NAME disable output device NAME
--disable-indevs disable input devices
--disable-outdevs disable output devices
--disable-devices disable all devices
--enable-filter=NAME enable filter NAME
--disable-filter=NAME disable filter NAME
--disable-filters disable all filters
--list-decoders show all available decoders
--list-encoders show all available encoders
--list-hwaccels show all available hardware accelerators
--list-muxers show all available muxers
--list-demuxers show all available demuxers
--list-parsers show all available parsers
--list-protocols show all available protocols
--list-bsfs show all available bitstream filters
--list-indevs show all available input devices
--list-outdevs show all available output devices
--list-filters show all available filters
External library support:
--enable-avisynth enable reading of AVISynth script files [no]
--enable-bzlib enable bzlib [autodetect]
--enable-frei0r enable frei0r video filtering
--enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
--enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
--enable-libopencv enable video filtering via libopencv [no]
--enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
and libraw1394 [no]
--enable-libdirac enable Dirac support via libdirac [no]
--enable-libfaac enable FAAC support via libfaac [no]
--enable-libgsm enable GSM support via libgsm [no]
--enable-libmp3lame enable MP3 encoding via libmp3lame [no]
--enable-libnut enable NUT (de)muxing via libnut,
native (de)muxer exists [no]
--enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]
--enable-librtmp enable RTMP[E] support via librtmp [no]
--enable-libschroedinger enable Dirac support via libschroedinger [no]
--enable-libspeex enable Speex decoding via libspeex [no]
--enable-libtheora enable Theora encoding via libtheora [no]
--enable-libvorbis enable Vorbis encoding via libvorbis,
native implementation exists [no]
--enable-libvpx enable VP8 support via libvpx [no]
--enable-libx264 enable H.264 encoding via x264 [no]
--enable-libxavs enable AVS encoding via xavs [no]
--enable-libxvid enable Xvid encoding via xvidcore,
native MPEG-4/Xvid encoder exists [no]
--enable-mlib enable Sun medialib [no]
--enable-zlib enable zlib [autodetect]
Advanced options (experts only):
--source-path=PATH path to source code [$source_path]
--cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
--enable-cross-compile assume a cross-compiler is used
--sysroot=PATH root of cross-build tree
--sysinclude=PATH location of cross-build system headers
--target-os=OS compiler targets OS [$target_os]
--target-exec=CMD command to run executables on target
--target-path=DIR path to view of build directory on target
--nm=NM use nm tool
--ar=AR use archive tool AR [$ar_default]
--as=AS use assembler AS [$as_default]
--cc=CC use C compiler CC [$cc_default]
--ld=LD use linker LD
--host-cc=HOSTCC use host C compiler HOSTCC
--host-cflags=HCFLAGS use HCFLAGS when compiling for host
--host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
--host-libs=HLIBS use libs HLIBS when linking for host
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
--extra-libs=ELIBS add ELIBS [$ELIBS]
--extra-version=STRING version string suffix []
--build-suffix=SUFFIX library name suffix []
--arch=ARCH select architecture [$arch]
--cpu=CPU select the minimum required CPU (affects
instruction selection, may crash on older CPUs)
--disable-asm disable all assembler optimizations
--disable-altivec disable AltiVec optimizations
--disable-amd3dnow disable 3DNow! optimizations
--disable-amd3dnowext disable 3DNow! extended optimizations
--disable-mmx disable MMX optimizations
--disable-mmx2 disable MMX2 optimizations
--disable-sse disable SSE optimizations
--disable-ssse3 disable SSSE3 optimizations
--disable-armv5te disable armv5te optimizations
--disable-armv6 disable armv6 optimizations
--disable-armv6t2 disable armv6t2 optimizations
--disable-armvfp disable ARM VFP optimizations
--disable-iwmmxt disable iwmmxt optimizations
--disable-mmi disable MMI optimizations
--disable-neon disable neon optimizations
--disable-vis disable VIS optimizations
--disable-yasm disable use of yasm assembler
--enable-pic build position-independent code
--malloc-prefix=PFX prefix malloc and related names with PFX
--enable-sram allow use of on-chip SRAM
Developer options (useful when working on FFmpeg itself):
--disable-debug disable debugging symbols
--enable-debug=LEVEL set the debug level [$debuglevel]
--disable-optimizations disable compiler optimizations
--enable-extra-warnings enable more compiler warnings
--disable-stripping disable stripping of executables and shared libraries
--samples=PATH location of test samples for FATE
NOTE: Object files are built at the place where configure is launched.
EOF
exit 0
}
quotes='""'
log(){
echo "$@" >> $logfile
}
log_file(){
log BEGIN $1
pr -n -t $1 >> $logfile
log END $1
}
echolog(){
log "$@"
echo "$@"
}
warn(){
log "WARNING: $*"
WARNINGS="${WARNINGS}WARNING: $*\n"
}
die(){
echolog "$@"
cat <<EOF
If you think configure made a mistake, make sure that you are using the latest
version of MythTV from git. If the latest version fails, report the problem to the
mythtv-dev@mythtv.org mailing list or IRC #mythtv on irc.freenode.net
EOF
if disabled logging; then
cat <<EOF
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
EOF
else
cat <<EOF
Include the log file "$logfile" produced by configure as this will help
solving the problem.
EOF
fi
exit 1
}
# Avoid locale weirdness, besides we really just want to translate ASCII.
toupper(){
echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
}
tolower(){
echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
}
c_escape(){
echo "$*" | sed 's/["\\]/\\\0/g'
}
sh_quote(){
v=$(echo "$1" | sed "s/'/'\\\\''/g")
test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
echo "$v"
}
filter(){
pat=$1
shift
for v; do
eval "case $v in $pat) echo $v ;; esac"
done
}
map(){
m=$1
shift
for v; do eval $m; done
}
set_all(){
value=$1
shift
for var in $*; do
eval $var=$value
done
}
set_weak(){
value=$1
shift
for var; do
eval : \${$var:=$value}
done
}
pushvar(){
for var in $*; do
eval level=\${${var}_level:=0}
eval ${var}_${level}="\$$var"
eval ${var}_level=$(($level+1))
done
}
popvar(){
for var in $*; do
eval level=\${${var}_level:-0}
test $level = 0 && continue
eval level=$(($level-1))
eval $var="\${${var}_${level}}"
eval ${var}_level=$level
eval unset ${var}_${level}
done
}
enable(){
set_all yes $*
}
disable(){
set_all no $*
}
enable_weak(){
set_weak yes $*
}
disable_weak(){
set_weak no $*
}
enable_safe(){
for var; do
enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
done
}
disable_safe(){
for var; do
disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
done
}
do_enable_deep(){
for var; do
enabled $var && continue
eval sel="\$${var}_select"
eval sgs="\$${var}_suggest"
pushvar var sgs
enable_deep $sel
popvar sgs
enable_deep_weak $sgs
popvar var
done
}
enable_deep(){
do_enable_deep $*
enable $*
}
enable_deep_weak(){
do_enable_deep $*
enable_weak $*
}
disable_bindings_python(){
echo "WARNING: disabling Python bindings; missing $1"
disable bindings_python
}
disable_bindings_perl(){
echo "WARNING: disabling Perl bindings; missing $1"
disable bindings_perl
}
disable_bindings_php(){
echo "WARNING: disabling PHP bindings; missing $1"
disable bindings_php
}
enabled(){
test "${1#!}" = "$1" && op== || op=!=
eval test "x\$${1#!}" $op "xyes"
}
disabled(){
test "${1#!}" = "$1" && op== || op=!=
eval test "x\$${1#!}" $op "xno"
}
enabled_all(){
for opt; do
enabled $opt || return 1
done
}
disabled_all(){
for opt; do
disabled $opt || return 1
done
}
enabled_any(){
for opt; do
enabled $opt && return 0
done
}
disabled_any(){
for opt; do
disabled $opt && return 0
done
return 1
}
set_default(){
for opt; do
eval : \${$opt:=\$${opt}_default}
done
}
is_in(){
value=$1
shift
for var in $*; do
[ $var = $value ] && return 0
done
return 1
}
check_deps(){
for cfg; do
cfg="${cfg#!}"
enabled ${cfg}_checking && die "Circular dependency for $cfg."
disabled ${cfg}_checking && continue
enable ${cfg}_checking
eval dep_all="\$${cfg}_deps"
eval dep_any="\$${cfg}_deps_any"
eval dep_sel="\$${cfg}_select"
eval dep_sgs="\$${cfg}_suggest"
eval dep_ifa="\$${cfg}_if"
eval dep_ifn="\$${cfg}_if_any"
pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
[ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
[ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
enabled_all $dep_all || disable $cfg
enabled_any $dep_any || disable $cfg
disabled_any $dep_sel && disable $cfg
if enabled $cfg; then
eval dep_extralibs="\$${cfg}_extralibs"
test -n "$dep_extralibs" && add_extralibs $dep_extralibs
enable_deep $dep_sel
enable_deep_weak $dep_sgs
fi
disable ${cfg}_checking
done
}
print_config_h(){
enabled $1 && v=1 || v=0
echo "#define $2 $v"
}
print_config_mak(){
enabled $1 && v= || v=!
echo "$v$2=yes"
}
print_config_asm(){
enabled $1 && echo "%define $2"
}
print_config(){
pfx=$1
files=$2
shift 2
for cfg; do
ucname="$(toupper $cfg)"
for f in $files; do
"print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
done
done
}
print_enabled(){
test "$1" = -n && end=" " && shift || end="\n"
suf=$1
shift
for v; do
enabled $v && printf "%s$end" ${v%$suf};
done
}
append(){
var=$1
shift
eval "$var=\"\$$var $*\""
}
prepend(){
var=$1
shift
eval "$var=\"$* \$$var\""
}
append_uniq(){
log append_uniq "$@"
var=$1
shift
for value; do
eval tmpvar='$'$var
echo "$tmpvar" | grep -q ".$value" || append $var $value
done
}
add_cppflags(){
append CPPFLAGS $($filter_cppflags "$@")
}
add_cflags(){
append CFLAGS $($filter_cflags "$@")
}
add_asflags(){
append ASFLAGS $($filter_asflags "$@")
}
add_cxxflags(){
append ECXXFLAGS "$@"
}
add_cxxppflags(){
append CXXPPFLAGS $($filter_cxxppflags "$@")
}
add_ldflags(){
append LDFLAGS "$@"
}
add_extralibs(){
prepend extralibs "$@"
}
check_cmd(){
log "$@"
"$@" >> $logfile 2>&1
}
check_python(){
log check_python
check_cmd $python <<EOF
import sys
if sys.version_info < (2,6):
sys.exit(1)
EOF
}
check_py_lib(){
log check_py_lib "$@"
lib=${1}
check_cmd $python <<EOF
import sys
try:
import $lib
except:
sys.exit(1)
sys.exit(0)
EOF
}
check_pl_lib(){
log check_pl_lib "$@"
check_cmd perl -e "use ${1};"
}
check_cc(){
log check_cc "$@"
cat > $TMPC
log_file $TMPC
check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
}
check_cpp(){
log check_cpp "$@"
cat > $TMPC
log_file $TMPC
check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
}
check_cxx(){
log check_cxx "$@"
cat > $TMPCXX
log_file $TMPCXX
check_cmd $cxx $CXXPPFLAGS $ECXXFLAGS "$@" -c -o $TMPO $TMPCXX
}
check_as(){
log check_as "$@"
cat > $TMPC
log_file $TMPC
check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
}
check_asm(){
log check_asm "$@"
name="$1"
code="$2"
shift 2
disable $name
check_as "$@" <<EOF && enable $name
void foo(void){ __asm__ volatile($code); }
EOF
}
check_yasm(){
log check_yasm "$@"
echo "$1" > $TMPS
log_file $TMPS
shift 1
check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}
check_ld(){
log check_ld "$@"
flags=''
libs=''
for f; do
test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
done
check_cc $($filter_cflags $flags) || return
check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
}
check_cppflags(){
log check_cppflags "$@"
set -- $($filter_cppflags "$@")
check_cc "$@" <<EOF && append CPPFLAGS "$@"
int x;
EOF
}
check_ld_cxx(){
log check_ld_cxx "$@"
flags=''
libs=''
for f; do
test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
done
check_cxx $($filter_cflags $flags) || return
check_cmd $cxx $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
}
check_cflags(){
log check_cflags "$@"
set -- $($filter_cflags "$@")
check_cc "$@" <<EOF && append CFLAGS "$@"
int x;
EOF
}
check_cxxflags(){
log check_cxxflags "$@"
check_cxx "$@" <<EOF && add_cxxflags "$@" || echolog "WARNING! An unknown C++ compiler flag in: \"$@\". Option(s) will be ignored."
class X {};
int x;
EOF
}
check_cxxppflags(){
log check_cxxppflags "$@"
set -- $($filter_cxxppflags "$@")
check_cxx "$@" <<EOF && append CXXPPFLAGS "$@"
int x;
EOF
}
test_ldflags(){
log test_ldflags "$@"
check_ld "$@" <<EOF
int main(void){ return 0; }
EOF
}
check_ldflags(){
log check_ldflags "$@"
test_ldflags "$@" && add_ldflags "$@"
}
check_header(){
log check_header "$@"
header=$1
shift
disable_safe $header
check_cpp "$@" <<EOF && enable_safe $header
#include <$header>
int x;
EOF
}
check_func(){
log check_func "$@"
func=$1
shift
disable $func
check_ld "$@" <<EOF && enable $func
extern int $func();
int main(void){ $func(); }
EOF
}
check_mathfunc(){
log check_mathfunc "$@"
func=$1
shift
disable $func
check_ld "$@" <<EOF && enable $func
#include <math.h>
float foo(float f) { return $func(f); }
int main(void){ return 0; }
EOF
}
check_func_headers(){
log check_func_headers "$@"
headers=$1
func=$2
shift 2
disable $func
incs=""
for hdr in $headers; do
incs="$incs
#include <$hdr>"
done
check_ld "$@" <<EOF && enable $func && enable_safe $headers
$incs
int main(int argc, char **argv){
return (long) $func;
}
EOF
}
check_cpp_condition(){
log check_cpp_condition "$@"
header=$1
condition=$2
shift 2
check_cpp $($filter_cppflags "$@") <<EOF
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}
check_lib(){
log check_lib "$@"
header="$1"
func="$2"
shift 2
check_header $header && check_func $func "$@" && add_extralibs "$@"
}
check_lib2(){
log check_lib2 "$@"
headers="$1"
func="$2"
shift 2
check_func_headers "$headers" $func "$@" && add_extralibs "$@"
}
check_libx(){
log check_libx "$@"
libvar="$1"
headers="$2"
func="$3"
shift 3
check_func_headers "$headers" $func "$@" && append_uniq $libvar "$@"
}
check_exec(){
check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
}
check_exec_cxx(){
check_ld_cxx "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
}
check_exec_crash(){
code=$(cat)
# exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
# are safe but may not be available everywhere. Thus we use
# raise(SIGTERM) instead. The check is run in a subshell so we
# can redirect the "Terminated" message from the shell. SIGBUS
# is not defined by standard C so it is used conditionally.
(check_exec "$@") >> $logfile 2>&1 <<EOF
#include <signal.h>
static void sighandler(int sig){
raise(SIGTERM);
}
int main(void){
signal(SIGILL, sighandler);
signal(SIGFPE, sighandler);
signal(SIGSEGV, sighandler);
#ifdef SIGBUS
signal(SIGBUS, sighandler);
#endif
{ $code }
}
EOF
}
check_type(){
log check_type "$@"
headers=$1
type=$2
shift 2
disable_safe "$type"
incs=""
for hdr in $headers; do
incs="$incs
#include <$hdr>"
done
check_cc "$@" <<EOF && enable_safe "$type"
$incs
$type v;
EOF
}
check_struct(){
log check_type "$@"
headers=$1
struct=$2
member=$3
shift 3
disable_safe "${struct}_${member}"
incs=""
for hdr in $headers; do
incs="$incs
#include <$hdr>"
done
check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
$incs
const void *p = &(($struct *)0)->$member;
EOF
}
require(){
name="$1"
header="$2"
func="$3"
shift 3
check_lib $header $func "$@" || die "ERROR: $name not found"
}
require2(){
name="$1"
headers="$2"
func="$3"
shift 3
check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}
check_foo_config(){
cfg=$1
pkg=$2
header=$3
func=$4
shift 4
disable $cfg
check_cmd ${pkg}-config --version
err=$?
if test "$err" = 0; then
backup_cflags=$CFLAGS
temp_extralibs=$(${pkg}-config --libs)
add_cflags $(${pkg}-config --cflags)
check_lib "$@" $header $func $temp_extralibs && enable $cfg
CFLAGS=$backup_cflags
fi
return $err
}
check_host_cc(){
log check_host_cc "$@"
cat > $TMPC
log_file $TMPC
check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
}
check_host_cflags(){
log check_host_cflags "$@"
check_host_cc "$@" <<EOF && append host_cflags "$@"
int x;
EOF
}
apply(){
file=$1
shift
"$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}
cp_if_changed(){
cmp -s "$1" "$2" &&
echo "$2 is unchanged" ||
cp -f "$1" "$2"
}
x86_mmx_cpus="pentium-mmx,pentium2,pentium3,pentium3m,pentium-m"
x86_mmx_cpus="$x86_mmx_cpus,pentium4,pentium4m,prescott"
x86_mmx_cpus="$x86_mmx_cpus,athlon,athlon-xp,athlon-tbird,athlon-4,athlon-mp,"
x86_mmx_cpus="$x86_mmx_cpus,c3,c3-2,k6,k6-2,k6-3"
x86_cpus="i386,i486,i586,i686,pentium,pentiumpro,${x86_mmx_cpus}"
x86_64_cpus="x86-64,athlon64,k8,opteron,athlon64-sse3,k8-sse3,opteron-sse3"
x86_64_cpus="$x86_64_cpus,barcelona,athlon-fx,nocona,core2"
is_x86_cpu() {
expr ",${x86_cpus}," : ".*,$1," > /dev/null
}
is_x86_64_cpu() {
expr ",${x86_64_cpus}," : ".*,$1," > /dev/null
}
is_x86_mmx() {
expr ",${x86_mmx_cpus}," : ".*,$1," > /dev/null || is_x86_64_cpu "$1"
}
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.
COMPONENT_LIST="
bsfs
decoders
demuxers
encoders
filters
hwaccels
indevs
muxers
outdevs
parsers
protocols
"
CONFIG_LIST="
$COMPONENT_LIST
aandct
avcodec
avdevice
avfilter
avformat
avisynth
bzlib
dct
doc
dwt
dxva2
fastdiv
ffmpeg
ffplay
ffprobe
ffserver
fft
frei0r
golomb
gpl
gray
h264dsp
h264pred
hardcoded_tables
huffman
libdc1394
libdirac
libfaac
libgsm
libmp3lame
libnut
libopencore_amrnb
libopencore_amrwb
libopencv
libopenjpeg
librtmp
libschroedinger
libspeex
libtheora
libvorbis
libvpx
libx264
libxavs
libxvid
lpc
lsp
mdct
memalign_hack
mlib
mpegaudio_hp
network
nonfree
pic
postproc
rdft
rtpdec
runtime_cpudetect
shared
small
sram
static
swscale
swscale_alpha
vaapi
vdpau
version3
x11grab
zlib
"
THREADS_LIST='
pthreads
w32threads
'
ARCH_LIST='
alpha
arm
avr32
avr32_ap
avr32_uc
bfin
ia64
m68k
mips
mips64
parisc
ppc
ppc64
s390
sh4
sparc
sparc64
tomi
x86
x86_32
x86_64
'
ARCH_EXT_LIST='
altivec
amd3dnow
amd3dnowext
armv5te
armv6
armv6t2
armvfp
iwmmxt
mmi
mmx
mmx2
neon
ppc4xx
sse
ssse3
vis
'
HAVE_LIST_PUB='
bigendian
fast_unaligned
'
HAVE_LIST="
$ARCH_EXT_LIST
$HAVE_LIST_PUB
$THREADS_LIST
aligned_stack
alsa_asoundlib_h
altivec_h
arpa_inet_h
attribute_may_alias
attribute_packed
bswap
byteswap_h
closesocket
cmov
conio_h
dcbzl
dev_bktr_ioctl_bt848_h
dev_bktr_ioctl_meteor_h
dev_ic_bt8xx_h
dev_video_meteor_ioctl_meteor_h
dev_video_bktr_ioctl_bt848_h
dlfcn_h
dlopen
dos_paths
ebp_available
ebx_available
exp2
exp2f
fast_64bit
fast_clz
fast_cmov
fcntl
fork
getaddrinfo
gethrtime
GetProcessMemoryInfo
GetProcessTimes
getrusage
gnu_as
struct_rusage_ru_maxrss
ibm_asm
inet_aton
inline_asm
isatty
ldbrx
libdc1394_1
libdc1394_2
llrint
llrintf
local_aligned_16
local_aligned_8
log2
log2f
loongson
lrint
lrintf
lzo1x_999_compress
machine_ioctl_bt848_h
machine_ioctl_meteor_h
malloc_h
MapViewOfFile
memalign
mkstemp
mmap
pld
posix_memalign
round
roundf
sdl
sdl_video_size
setmode
socklen_t
soundcard_h
poll_h
setrlimit
strerror_r
strtok_r
struct_addrinfo
struct_ipv6_mreq
struct_sockaddr_in6
struct_sockaddr_sa_len
struct_sockaddr_storage
symver
symver_gnu_asm
symver_asm_label
sys_mman_h
sys_resource_h
sys_select_h
sys_soundcard_h
sys_videoio_h
ten_operands
termios_h
threads
truncf
vfp_args
VirtualAlloc
winsock2_h
xform_asm
xmm_clobbers
yasm
"
# options emitted with CONFIG_ prefix but not available on command line
CONFIG_EXTRA="
avutil
gplv3
lgplv3
"
MYTHTV_CONFIG_LIST='
backend
bindings_perl
bindings_python
bindings_php
crystalhd
cygwin
darwin
disable_mmx_for_debugging
dvb
firewire
frontend
hdhomerun
ceton
hdpvr
iptv
ivtv
asi
joystick_menu
libcec
libcrypto
libdns_sd
libfftw3
libmpeg2external
libxml2
libudf
lirc
mheg
opengl_video
qtwebkit
qtscript
qtdbus
quartz_video
v4l2
v4l1
valgrind
x11
xrandr
xv
'
MYTHTV_HAVE_LIST='
cpu_clips_negative
cpu_clips_positive
fe_can_2g_modulation
ftime
getifaddrs
gettimeofday
posix_fadvise
libudev
stdint_h
sync_file_range
'
MYTHTV_LIST='
audio_pulse
audio_pulseoutput
audio_alsa
audio_jack
audio_oss
ffmpeg_pthreads
mac_bundle
proc_opt
silent_cc
symbol_visibility
'
USING_LIST='
appleremote
bindings_perl
bindings_python
bindings_php
darwin_da
mythtranscode
dxva2
opengl
opengles
vaapi
vdpau
'
CMDLINE_SELECT="
$ARCH_EXT_LIST
$CONFIG_LIST
$THREADS_LIST
asm
cross_compile
$MYTHTV_LIST
$MYTHTV_CONFIG_LIST
debug
extra_warnings
logging
opengl
optimizations
stripping
symver
yasm
"
PATHS_LIST='
bindir
datadir
dvb_path
incdir
libcec_path
libdir
mandir
prefix
runprefix
shlibdir
x11_path
libxml2_path
firewiresdk_path
'
CMDLINE_SET="
$PATHS_LIST
ar
arch
as
build_suffix
cc
cpu
cross_prefix
cxx
dep_cc
logging
extra_version
host_cc
host_cflags
host_ldflags
host_libs
host_os
ld
logfile
malloc_prefix
nm
python
qmake
samples
source_path
strip
sysinclude
sysroot
target_exec
target_os
target_path
"
CMDLINE_APPEND="
extra_cflags
"
# code dependency declarations
# architecture extensions
armv5te_deps="arm"
armv6_deps="arm"
armv6t2_deps="arm"
armvfp_deps="arm"
iwmmxt_deps="arm"
neon_deps="arm"
mmi_deps="mips"
altivec_deps="ppc"
ppc4xx_deps="ppc"
vis_deps="sparc"
x86_64_suggest="cmov fast_cmov"
amd3dnow_deps="mmx"
amd3dnowext_deps="amd3dnow"
mmx_deps="x86"
mmx2_deps="mmx"
sse_deps="mmx"
ssse3_deps="sse"
aligned_stack_if_any="ppc x86"
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
fast_unaligned_if_any="armv6 ppc x86"
need_memalign="altivec neon sse"
inline_asm_deps="!tms470"
symver_if_any="symver_asm_label symver_gnu_asm"
# subsystems
dct_select="rdft"
mdct_select="fft"
rdft_select="fft"
# decoders / encoders / hardware accelerators
aac_decoder_select="mdct rdft"
aac_encoder_select="mdct"
aac_latm_decoder_select="aac_decoder aac_latm_parser"
ac3_decoder_select="mdct ac3_parser"
ac3_encoder_select="mdct"
alac_encoder_select="lpc"
amrnb_decoder_select="lsp"
amrwb_decoder_select="lsp"
atrac1_decoder_select="mdct"
atrac3_decoder_select="mdct"
binkaudio_dct_decoder_select="mdct rdft dct"
binkaudio_rdft_decoder_select="mdct rdft"
cavs_decoder_select="golomb"
cook_decoder_select="mdct"
cscd_decoder_suggest="zlib"
dca_decoder_select="mdct"
dnxhd_encoder_select="aandct"
dxa_decoder_select="zlib"
eac3_decoder_select="ac3_decoder"
eamad_decoder_select="aandct"
eatgq_decoder_select="aandct"
eatqi_decoder_select="aandct"
ffv1_decoder_select="golomb"
flac_decoder_select="golomb"
flac_encoder_select="golomb lpc"
flashsv_decoder_select="zlib"
flashsv_encoder_select="zlib"
flv_decoder_select="h263_decoder"
flv_encoder_select="h263_encoder"
fraps_decoder_select="huffman"
h261_encoder_select="aandct"
h263_decoder_select="h263_parser"
h263_encoder_select="aandct"
h263_vaapi_hwaccel_select="vaapi h263_decoder"
h263i_decoder_select="h263_decoder"
h263p_encoder_select="h263_encoder"
h264_decoder_select="golomb h264dsp h264pred"
h264_dxva2_hwaccel_deps="dxva2api_h"
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
h264_vaapi_hwaccel_select="vaapi"
h264_vdpau_decoder_select="vdpau h264_decoder"
imc_decoder_select="fft mdct"
jpegls_decoder_select="golomb"
jpegls_encoder_select="golomb"
ljpeg_encoder_select="aandct"
loco_decoder_select="golomb"
mjpeg_encoder_select="aandct"
mlp_decoder_select="mlp_parser"
mp1float_decoder_select="dct"
mp2float_decoder_select="dct"
mp3adufloat_decoder_select="dct"
mp3float_decoder_select="dct"
mp3on4float_decoder_select="dct"
mpeg1video_encoder_select="aandct"
mpeg2video_encoder_select="aandct"
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
mpeg4_encoder_select="h263_encoder"
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
msmpeg4v1_decoder_select="h263_decoder"
msmpeg4v1_encoder_select="h263_encoder"
msmpeg4v2_decoder_select="h263_decoder"
msmpeg4v2_encoder_select="h263_encoder"
msmpeg4v3_decoder_select="h263_decoder"
msmpeg4v3_encoder_select="h263_encoder"
nellymoser_decoder_select="mdct"
nellymoser_encoder_select="mdct"
png_decoder_select="zlib"
png_encoder_select="zlib"
qcelp_decoder_select="lsp"
qdm2_decoder_select="mdct rdft"
ra_144_encoder_select="lpc"
rv10_decoder_select="h263_decoder"
rv10_encoder_select="h263_encoder"
rv20_decoder_select="h263_decoder"
rv20_encoder_select="h263_encoder"
rv30_decoder_select="golomb h264pred"
rv40_decoder_select="golomb h264pred"
shorten_decoder_select="golomb"
sipr_decoder_select="lsp"
snow_decoder_select="dwt"
snow_encoder_select="aandct dwt"
sonic_decoder_select="golomb"
sonic_encoder_select="golomb"
sonic_ls_encoder_select="golomb"
svq1_encoder_select="aandct"
svq3_decoder_select="golomb h264dsp h264pred"
svq3_decoder_suggest="zlib"
theora_decoder_select="vp3_decoder"
tiff_decoder_suggest="zlib"
tiff_encoder_suggest="zlib"
truehd_decoder_select="mlp_decoder"
tscc_decoder_select="zlib"
twinvq_decoder_select="mdct lsp"
vc1_decoder_select="h263_decoder"
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
vc1_vdpau_decoder_select="vdpau vc1_decoder"
vorbis_decoder_select="mdct"
vorbis_encoder_select="mdct"
vp6_decoder_select="huffman"
vp6a_decoder_select="vp6_decoder"
vp6f_decoder_select="vp6_decoder"
vp8_decoder_select="h264pred"
wmapro_decoder_select="mdct"
wmav1_decoder_select="mdct"
wmav1_encoder_select="mdct"
wmav2_decoder_select="mdct"
wmav2_encoder_select="mdct"
wmavoice_decoder_select="lsp rdft dct mdct"
wmv1_decoder_select="h263_decoder"
wmv1_encoder_select="h263_encoder"
wmv2_decoder_select="h263_decoder"
wmv2_encoder_select="h263_encoder"
wmv3_decoder_select="vc1_decoder"
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
zlib_decoder_select="zlib"
zlib_encoder_select="zlib"
zmbv_decoder_select="zlib"
zmbv_encoder_select="zlib"
vaapi_deps="va_va_h va_va_glx_h va_va_x11_h"
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
# parsers
h264_parser_select="golomb h264dsp h264pred"
# external libraries
libdirac_decoder_deps="libdirac !libschroedinger"
libdirac_encoder_deps="libdirac"
libfaac_encoder_deps="libfaac"
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
libgsm_ms_decoder_deps="libgsm"
libgsm_ms_encoder_deps="libgsm"
libmp3lame_encoder_deps="libmp3lame"
libopencore_amrnb_decoder_deps="libopencore_amrnb"
libopencore_amrnb_encoder_deps="libopencore_amrnb"
libopencore_amrwb_decoder_deps="libopencore_amrwb"
libopenjpeg_decoder_deps="libopenjpeg"
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
libspeex_decoder_deps="libspeex"
libtheora_encoder_deps="libtheora"
libvorbis_encoder_deps="libvorbis"
libvpx_decoder_deps="libvpx"
libvpx_encoder_deps="libvpx"
libx264_encoder_deps="libx264"
libxavs_encoder_deps="libxavs"
libxvid_encoder_deps="libxvid"
# demuxers / muxers
ac3_demuxer_select="ac3_parser"
asf_stream_muxer_select="asf_muxer"
avisynth_demuxer_deps="avisynth"
dirac_demuxer_select="dirac_parser"
eac3_demuxer_select="ac3_parser"
flac_demuxer_select="flac_parser"
ipod_muxer_select="mov_muxer"
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
matroska_audio_muxer_select="matroska_muxer"
matroska_demuxer_suggest="zlib bzlib"
mov_demuxer_suggest="zlib"
mp3_demuxer_select="mpegaudio_parser"
mp4_muxer_select="mov_muxer"
mpegtsraw_demuxer_select="mpegts_demuxer"
mxf_d10_muxer_select="mxf_muxer"
ogg_demuxer_select="golomb"
psp_muxer_select="mov_muxer"
rtp_demuxer_select="sdp_demuxer"
rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
rtsp_demuxer_select="http_protocol rtpdec"
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
sap_demuxer_select="sdp_demuxer"
sap_muxer_select="rtp_muxer rtp_protocol"
sdp_demuxer_select="rtpdec"
spdif_muxer_select="aac_parser"
tg2_muxer_select="mov_muxer"
tgp_muxer_select="mov_muxer"
w64_demuxer_deps="wav_demuxer"
wtv_demuxer_deps="disable_borked"
# indevs / outdevs
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
alsa_outdev_deps="alsa_asoundlib_h"
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
dv1394_indev_deps="dv1394 dv_demuxer"
jack_indev_deps="jack_jack_h"
libdc1394_indev_deps="libdc1394"
oss_indev_deps_any="soundcard_h sys_soundcard_h"
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
v4l_indev_deps="linux_videodev_h"
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
vfwcap_indev_extralibs="-lavicap32"
x11_grab_device_indev_deps="x11grab XShmCreateImage"
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
# protocols
gopher_protocol_deps="network"
http_protocol_deps="network"
http_protocol_select="tcp_protocol"
mmsh_protocol_select="http_protocol"
mmst_protocol_deps="network"
rtmp_protocol_select="tcp_protocol"
rtp_protocol_select="udp_protocol"
tcp_protocol_deps="network"
udp_protocol_deps="network"
# filters
blackframe_filter_deps="gpl"
cropdetect_filter_deps="gpl"
frei0r_filter_deps="frei0r dlopen strtok_r"
frei0r_src_filter_deps="frei0r dlopen strtok_r"
hqdn3d_filter_deps="gpl"
scale_filter_deps="swscale"
ocv_filter_deps="libopencv"
yadif_filter_deps="gpl"
# libraries
avdevice_deps="avcodec avformat"
avformat_deps="avcodec"
# programs
ffmpeg_deps="avcodec avformat swscale"
ffmpeg_select="buffer_filter"
ffplay_deps="avcodec avformat swscale sdl"
ffplay_select="rdft"
ffprobe_deps="avcodec avformat"
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
ffserver_extralibs='$ldl'
doc_deps="texi2html"
# mythtv dependencies
audio_oss_deps_any="soundcard_h sys_soundcard_h"
dvb_deps="backend"
firewire_deps="backend"
iptv_deps="backend"
ivtv_deps="backend v4l2"
hdpvr_deps="backend v4l2"
hdhomerun_deps="backend"
ceton_deps="backend"
mpegtsraw_demuxer_deps="merge_libavformat_mpegts_c"
mythtranscode_deps="backend frontend"
opengl_deps_any="agl_h GL_gl_h GLES2_gl2_h darwin windows x11"
opengles_deps="GLES2_gl2_h"
opengl_video_deps="opengl"
v4l2_deps="backend linux_videodev2_h"
v4l1_deps="backend v4l2 linux_videodev_h"
vdpau_deps="opengl vdpau_vdpau_h vdpau_vdpau_x11_h"
xrandr_deps="x11"
xv_deps="x11"
vaapi_deps="x11 opengl va_va_h va_va_glx_h va_va_x11_h"
asi_deps="backend"
<<BLOCKQUOTE
# tests
test_deps(){
suf1=$1
suf2=$2
shift 2
for v; do
dep=${v%=*}
tests=${v#*=}
for name in ${tests}; do
eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
done
done
}
set_ne_test_deps(){
eval ${1}_be_test_deps="bigendian"
eval ${1}_le_test_deps="!bigendian"
}
test_deps _encoder _decoder \
ac3 \
adpcm_g726=g726 \
adpcm_ima_qt \
adpcm_ima_wav \
adpcm_ms \
adpcm_swf \
adpcm_yamaha=adpcm_yam \
alac \
asv1 \
asv2 \
bmp \
dnxhd="hdxhd_1080i dnxhd_720p dnxhd_720p_rd" \
dvvideo="dv dv50" \
ffv1 \
flac \
flashsv \
flv \
gif \
h261 \
h263="h263 h263p" \
huffyuv \
jpegls \
mjpeg="jpg mjpeg ljpeg" \
mp2 \
mpeg1video="mpeg mpeg1b" \
mpeg2video="mpeg2 mpeg2thread" \
mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc" \
msmpeg4v3=msmpeg4 \
msmpeg4v2 \
pbm=pbmpipe \
pcx \
pgm="pgm pgmpipe" \
ppm="ppm ppmpipe" \
rawvideo="rgb yuv" \
roq \
rv10 \
rv20 \
sgi \
snow="snow snowll" \
svq1 \
targa=tga \
tiff \
wmav1 \
wmav2 \
wmv1 \
wmv2 \
test_deps _muxer _demuxer \
aiff \
pcm_alaw=alaw \
asf \
au \
avi \
dv=dv_fmt \
ffm \
flv=flv_fmt \
gxf \
matroska=mkv \
mmf \
mov \
pcm_mulaw=mulaw \
mxf \
nut \
ogg \
rawvideo=pixfmt \
rm \
swf \
mpegts=ts \
voc \
wav \
yuv4mpegpipe=yuv4mpeg \
mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
set_ne_test_deps pixdesc
set_ne_test_deps pixfmts_crop
set_ne_test_deps pixfmts_hflip
set_ne_test_deps pixfmts_null
set_ne_test_deps pixfmts_pad
set_ne_test_deps pixfmts_scale
set_ne_test_deps pixfmts_vflip
BLOCKQUOTE
# default parameters
pre_logfile="config.ep"
logfile="$pre_logfile"
compile_type="profile"
# installation paths
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
datadir_default='${prefix}/share/mythtv'
incdir_default='$(prefix)/include/mythtv'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
shlibdir_default="$libdir_default"
libdir_name='lib'
# toolchain
ar_default="ar"
cc_default="gcc"
cc_version=\"unknown\"
host_cc_default="gcc"
ln_s="ln -sf"
cxx_default="g++"
ccache="yes"
distcc="yes"
nm_default="nm"
objformat="elf"
ranlib="ranlib"
strip_default="strip"
qmake_default="qmake"
python_default="python"
yasmexe="yasm"
nogas=":"
nm_opts='-g'
# machine
arch_default=$(uname -m)
cpu="generic"
processor=`uname -p 2>/dev/null`
processor_flags=""
tune="generic"
if test -f /proc/cpuinfo ; then
if test x"$processor" = x"" -o x"$processor" = x"$arch_default" -o \
x"$processor" = x"unknown" ; then
processor=`cat /proc/cpuinfo | grep "model name" | head -n 1`
fi
processor_flags=`cat /proc/cpuinfo | grep "flags" | head -n 1`
fi
# Mac OS X equivalent
if test -f /usr/bin/hostinfo ; then
arch=`arch`
if test x"$arch" = x"ppc" -o x"$arch" = x"ppc64" ; then
processor=`/usr/bin/hostinfo | grep "Processor type:"`
processor=${processor#Processor type: *}
processor=${processor% (*}
tune=$processor
else
# 10.4 only:
processor=`/usr/sbin/sysctl -n machdep.cpu.model_string 2>/dev/null`
if test x"$processor" = x"" ; then
# On 10.5, this contains the type of CPU also:
processor=`/usr/sbin/sysctl -n machdep.cpu.brand_string`
fi
processor_flags=`/usr/sbin/sysctl -n machdep.cpu.features`
processor_flags=`echo $processor_flags | tr "[A-Z]" "[a-z]"`
fi
fi
# OS
target_os_default=$(tolower $(uname -s))
host_os=$target_os_default
# mythtv settings
CONFIG_DEFINES=""
CONFIG_INCLUDEPATH=""
PROFILEFLAGS=""
audio_pulse="default"
audio_pulseoutput="default"
audio_alsa="default"
audio_jack="default"
enable audio_oss
enable bindings_perl
enable bindings_python
enable bindings_php
enable dvb
enable ffmpeg_pthreads
enable firewire
enable frontend
enable hdhomerun
enable ceton
enable hdpvr
enable iptv
enable ivtv
enable asi
enable lamemp3
enable libass
enable libcec
enable libcrypto
enable libdns_sd
enable libxml2
enable libudf
enable lirc
enable mheg
enable mythtranscode
enable opengl
enable opengles
enable opengl_video
enable quartz_video
enable symbol_visibility
enable v4l1
enable v4l2
enable x11
enable xrandr
enable xv
disable indevs
# mythtv paths
dvb_path_default="${sysroot}/usr/include"
x11_path_default="${sysroot}/usr/X11R6/include"
libcec_path_default="${sysroot}/usr/include"
libxml2_path_default="${sysroot}/usr/include/libxml2"
firewiresdk_path_default=""
# configurable options
enable avcodec
enable avdevice
enable avfilter
enable avformat
enable avutil
enable asm
enable debug
#enable doc
enable ffmpeg
enable ffplay
enable fastdiv
enable gpl
enable mpegaudio_hp
enable network
enable optimizations
enable postproc
enable protocols
enable runtime_cpudetect
enable shared
enable stripping
enable swscale
enable swscale_alpha
# build settings
SHFLAGS='-shared -Wl,-soname,$$(@F)'
FFSERVERLDFLAGS=-Wl,-E
LIBPREF="libmyth"
LIBSUF=".a"
FULLNAME='$(NAME)$(BUILDSUF)'
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
SLIBPREF="libmyth"
SLIBSUF=".so"
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
CC_O='-o $@'
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
host_libs='-lm'
target_path='$(CURDIR)'
# since the object filename is not given with the -MM flag, the compiler
# is only able to print the basename, and we must add the path ourselves
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
# find source path
source_path="$(dirname "$0")"
enable source_path_used
if test -f configure; then
source_path="$(pwd)"
disable source_path_used
else
source_path="$(cd "$source_path"; pwd)"
echo "$source_path" | grep -q '[[:blank:]]' &&
die "Out of tree builds are impossible with whitespace in source path."
test -e "$source_path/config.h" &&
die "Out of tree builds are impossible with config.h in source dir."
fi
for v in "$@"; do
r=${v#*=}
l=${v%"$r"}
r=$(sh_quote "$r")
FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
MYTHTV_CONFIGURATION="${MYTHTV_CONFIGURATION# } ${v}"
done
find_things(){
thing=$1
pattern=$2
file=$source_path/$3
sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
}
ENCODER_LIST=$(find_things encoder ENC external/FFmpeg/libavcodec/allcodecs.c)
DECODER_LIST=$(find_things decoder DEC external/FFmpeg/libavcodec/allcodecs.c)
HWACCEL_LIST=$(find_things hwaccel HWACCEL external/FFmpeg/libavcodec/allcodecs.c)
PARSER_LIST=$(find_things parser PARSER external/FFmpeg/libavcodec/allcodecs.c)
BSF_LIST=$(find_things bsf BSF external/FFmpeg/libavcodec/allcodecs.c)
MUXER_LIST=$(find_things muxer _MUX external/FFmpeg/libavformat/allformats.c)
DEMUXER_LIST=$(find_things demuxer DEMUX external/FFmpeg/libavformat/allformats.c)
OUTDEV_LIST=$(find_things outdev OUTDEV external/FFmpeg/libavdevice/alldevices.c)
INDEV_LIST=$(find_things indev _IN external/FFmpeg/libavdevice/alldevices.c)
PROTOCOL_LIST=$(find_things protocol PROTOCOL external/FFmpeg/libavformat/allformats.c)
FILTER_LIST=$(find_things filter FILTER external/FFmpeg/libavfilter/allfilters.c)
#find_tests(){
# map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
#}
#ACODEC_TESTS=$(find_tests acodec)
#VCODEC_TESTS=$(find_tests vsynth1)
#LAVF_TESTS=$(find_tests lavf)
#LAVFI_TESTS=$(find_tests lavfi)
#SEEK_TESTS=$(find_tests seek seek_)
#pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
for n in $COMPONENT_LIST; do
v=$(toupper ${n%s})_LIST
eval enable \$$v
eval ${n}_if_any="\$$v"
done
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
die_unknown(){
echo "Unknown option \"$1\"."
echo "See $0 --help for available options."
exit 1
}
show_list() {
suffix=_$1
shift
echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
exit 0
}
if [ -e config.log ] ; then
PCONF=$(tail -n 1 config.log | grep configure | sed 's/.\/configure//g')
for opt in "$@" ; do
if test x"$opt" != x"--prev" -a x"$opt" != x"--previous" ; then
OTHOPT="${OTHOPT# }${opt}"
fi
if test x"$opt" = x"--prev" -o x"$opt" = x"--previous" ; then
if test x"$PCONF" != "--prev" ; then
PREV="yes";
fi
fi
done
if test x"$PREV" = x"yes"; then
echo "Options: $PCONF $OTHOPT"
./configure $PCONF $OTHOPT
exit
fi
fi
for opt do
optval="${opt#*=}"
case "$opt" in
--compile-type=*) compile_type=$optval
;;
--libdir-name=*) libdir_name=$optval
;;
--extra-cxxflags=*) add_cxxflags $optval
;;
--extra-ldflags=*) add_ldflags $optval
;;
--extra-libs=*) add_extralibs $optval
;;
--arch=*) arch=$optval && enable cpu_override
;;
--cpu=*) cpu=$optval && enable cpu_override
;;
--tune=*) tune=$optval
;;
--disable-ccache) disable ccache
;;
--disable-distcc) disable distcc
;;
--enable-quartz-video) enable quartz_video
;;
--disable-quartz-video) disable quartz_video
;;
# disabled due to abuse in Gentoo ebuild
--disable-frontend)
;;
# disabled due to abuse in Gentoo ebuild
--disable-backend)
;;
--enable-mac-bundle) enable mac_bundle
;;
--previous|--prev)
echo "No history of previous configure parameters."
;;
--with-bindings=*)
tmp_bindings=`echo ${optval} | sed -e 's/,/ /g'`
for binding in ${tmp_bindings} ; do
if test x"${binding}" = x"perl"; then
bindings_perl="yes"
fi
if test x"${binding}" = x"python"; then
bindings_python="yes"
fi
if test x"${binding}" = x"php"; then
bindings_php="yes"
fi
done
;;
--without-bindings=*)
tmp_bindings=`echo ${optval} | sed -e 's/,/ /g'`
for binding in ${tmp_bindings} ; do
if test x"${binding}" = x"perl"; then
bindings_perl="no"
fi
if test x"${binding}" = x"python"; then
bindings_python="no"
fi
if test x"${binding}" = x"php"; then
bindings_php="no"
fi
done
;;
--perl-config-opts=*)
PERL_CONFIG_OPTS=`echo ${optval}`
;;
--disable-devices) disable $INDEV_LIST $OUTDEV_LIST
;;
--enable-debug=*) debuglevel="$optval"
;;
--disable-everything)
map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
;;
--enable-*=*|--disable-*=*)
eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
eval list=\$$(toupper $thing)_LIST
name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
$action $(filter "$name" $list)
;;
--enable-?*|--disable-?*)
eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
if is_in $option $COMPONENT_LIST; then
test $action = disable && action=unset
eval $action \$$(toupper ${option%s})_LIST
elif is_in $option $CMDLINE_SELECT; then
$action $option
else
die_unknown $opt
fi
;;
--list-*)
NAME="${opt#--list-}"
is_in $NAME $COMPONENT_LIST || die_unknown $opt
NAME=${NAME%s}
eval show_list $NAME \$$(toupper $NAME)_LIST
;;
--help|-h) show_help
;;
--firewire-sdk=*) firewiresdk_path="${optval}"
;;
*)
optname="${opt%%=*}"
optname="${optname#--}"
optname=$(echo "$optname" | sed 's/-/_/g')
if is_in $optname $CMDLINE_SET; then
eval $optname='$optval'
elif is_in $optname $CMDLINE_APPEND; then
append $optname "$optval"
else
die_unknown $opt
fi
;;
esac
done
#setting default runtime prefix and libdir
if test -n "${prefix}"; then
runprefix_default=${prefix}
libdir_default="${prefix}/${libdir_name}"
shlibdir_default="${prefix}/${libdir_name}"
else
runprefix_default=${prefix_default}
libdir_default="${prefix_default}/${libdir_name}"
shlibdir_default="${prefix_default}/${libdir_name}"
fi
if enabled_any cpu_override cross_compile || test x"$tune" != x"generic" &&
enabled proc_opt; then
echo "Warning! --enable-proc-opt shouldn't be used with --arch, --cpu or --tune"
echo "Disabling it now."
disable proc_opt
fi
enabled proc_opt && disable runtime_cpudetect && cpu="host"
disabled logging && logfile=/dev/null
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
set >> $logfile
test -n "$cross_prefix" && enable cross_compile
if enabled cross_compile; then
test -n "$arch" && test -n "$target_os" ||
die "Must specify target arch and OS when cross-compiling"
fi
set_default arch target_os
ar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix}${cc_default}"
cxx_default="${cross_prefix}${cxx_default}"
nm_default="${cross_prefix}${nm_default}"
ranlib="${cross_prefix}${ranlib}"
strip_default="${cross_prefix}${strip_default}"
sysinclude_default="${sysroot}/usr/include"
set_default cc nm strip sysinclude
set_default cxx qmake python
enabled cross_compile || host_cc_default=$cc
set_default host_cc
exesuf() {
case $1 in
mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
esac
}
EXESUF=$(exesuf $target_os)
HOSTEXESUF=$(exesuf $host_os)
# set temporary file name
: ${TMPDIR:=$TEMPDIR}
: ${TMPDIR:=$TMP}
: ${TMPDIR:=/tmp}
if ! check_cmd type mktemp; then
# simple replacement for missing mktemp
# NOT SAFE FOR GENERAL USE
mktemp(){
echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
}
fi
tmpfile(){
tmp=$(mktemp -u "${TMPDIR}/mythtv_conf.XXXXXXXX")$2 &&
(set -C; exec > $tmp) 2>/dev/null ||
die "Unable to create temporary file in $TMPDIR."
append TMPFILES $tmp
eval $1=$tmp
}
trap 'rm -f -- $TMPFILES' EXIT
trap exit HUP INT TERM
tmpfile TMPC .c
tmpfile TMPE $EXESUF
tmpfile TMPH .h
tmpfile TMPO .o
tmpfile TMPS .S
tmpfile TMPV .ver
tmpfile TMPSH .sh
tmpfile TMPCXX .cpp
tmpfile TMPASM .asm
tmpfile TMPMAK .mak
unset -f mktemp
# make sure we can execute files in $TMPDIR
cat > $TMPSH 2>> $logfile <<EOF
#! /bin/sh
EOF
chmod +x $TMPSH >> $logfile 2>&1
if ! $TMPSH >> $logfile 2>&1; then
cat <<EOF
Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
variable to another directory and make sure that it is not mounted noexec.
EOF
die "Sanity test failed."
fi
filter_cflags=echo
filter_cppflags=echo
filter_asflags=echo
filter_cxxppflags=echo
if $cc -v 2>&1 | grep -qi ^gcc; then
cc_type=gcc
cc_version=__VERSION__
gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
cc_ident="gcc $($cc -dumpversion) $gcc_extra_ver"
if ! $cc -dumpversion | grep -q '^2\.'; then
CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
fi
speed_cflags='-O3'
size_cflags='-Os'
elif $cc --version 2>/dev/null | grep -q Intel; then
cc_type=icc
cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
cc_ident=$($cc --version | head -n1)
CC_DEPFLAGS='-MMD'
AS_DEPFLAGS='-MMD'
speed_cflags='-O3'
size_cflags='-Os'
noopt_cflags='-O1'
elif $cc -v 2>&1 | grep -q xlc; then
cc_type=xlc
cc_version="AV_STRINGIFY(__IBMC__)"
cc_ident=$($cc -qversion 2>/dev/null | head -n1)
speed_cflags='-O5'
size_cflags='-O5 -qcompact'
elif $cc -V 2>/dev/null | grep -q Compaq; then
cc_type=ccc
cc_version="AV_STRINGIFY(__DECC_VER)"
cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
debuglevel=3
add_ldflags -Wl,-z,now # calls to libots crash without this
speed_cflags='-fast'
size_cflags='-O1'
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
test -d "$sysroot" || die "No valid sysroot specified."
cc_type=armcc
cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
cc_ident=$($cc --vsn | head -n1)
armcc_conf="$PWD/armcc.conf"
$cc --arm_linux_configure \
--arm_linux_config_file="$armcc_conf" \
--configure_sysroot="$sysroot" \
--configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
die "Error creating armcc configuration file."
cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
as_default="${cross_prefix}gcc"
CC_DEPFLAGS='-MMD'
AS_DEPFLAGS='-MMD'
speed_cflags='-O3'
size_cflags='-Os'
elif $cc -version 2>/dev/null | grep -q TMS470; then
cc_type=tms470
cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
cc_ident=$($cc -version | head -n1 | tr -s ' ')
cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
CC_O='-fr=$(@D)'
as_default="${cross_prefix}gcc"
ld_default="${cross_prefix}gcc"
TMPO=$(basename $TMPC .c).o
append TMPFILES $TMPO
add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
AS_DEPFLAGS='-MMD'
speed_cflags='-O3 -mf=5'
size_cflags='-O3 -mf=2'
filter_cflags=tms470_flags
tms470_flags(){
for flag; do
case $flag in
-march=*|-mcpu=*)
case "${flag#*=}" in
armv7-a|cortex-a*) echo -mv=7a8 ;;
armv7-r|cortex-r*) echo -mv=7r4 ;;
armv7-m|cortex-m*) echo -mv=7m3 ;;
armv6*|arm11*) echo -mv=6 ;;
armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
echo -mv=5e ;;
armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
esac
;;
-mfpu=neon) echo --float_support=vfpv3 --neon ;;
-mfpu=vfp) echo --float_support=vfpv2 ;;
-mfpu=vfpv3) echo --float_support=vfpv3 ;;
-msoft-float) echo --float_support=vfplib ;;
-O[0-3]|-mf=*) echo $flag ;;
-g) echo -g -mn ;;
-pds=*) echo $flag ;;
esac
done
}
elif $cc -v 2>&1 | grep -q clang; then
cc_type=clang
$cc -dM -E $TMPC | grep -q __clang_version__ &&
cc_version=__clang_version__ || cc_version=__VERSION__
cc_ident=$($cc --version | head -n1)
CC_DEPFLAGS='-MMD'
AS_DEPFLAGS='-MMD'
speed_cflags='-O3'
size_cflags='-Os'
elif $cc -V 2>&1 | grep -q Sun; then
cc_type=suncc
cc_version="AV_STRINGIFY(__SUNPRO_C)"
cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
speed_cflags='-O5'
size_cflags='-O5 -xspace'
filter_cflags=suncc_flags
suncc_flags(){
for flag; do
case $flag in
-march=*|-mcpu=*)
case "${flag#*=}" in
native) echo -xtarget=native ;;
v9|niagara) echo -xarch=sparc ;;
ultrasparc) echo -xarch=sparcvis ;;
ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
i586|pentium) echo -xchip=pentium ;;
i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
pentium3*|c3-2) echo -xtarget=pentium3 ;;
pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
pentium4*) echo -xtarget=pentium4 ;;
prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
*-sse3) echo -xarch=sse3 ;;
core2) echo -xarch=ssse3 -xchip=core2 ;;
amdfam10|barcelona) echo -xarch=sse4_1 ;;
athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
k8|opteron|athlon64|athlon-fx)
echo -xarch=sse2a ;;
athlon*) echo -xarch=pentium_proa ;;
esac
;;
-std=c99) echo -xc99 ;;
-fomit-frame-pointer) echo -xregs=frameptr ;;
-fPIC) echo -KPIC -xcode=pic32 ;;
-W*,*) echo $flag ;;
-f*-*|-W*) ;;
*) echo $flag ;;
esac
done
}
elif $cc -v 2>&1 | grep -q PathScale; then
cc_type=pathscale
cc_version=__PATHSCALE__
cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
speed_cflags='-O2'
size_cflags='-Os'
fi
test -n "$cc_type" && enable $cc_type ||
warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
if $cxx -v 2>&1 | grep -qi ^gcc; then
cxx_type=gxx
gxx_version=$($cxx -dumpversion)
fi
test -n "$cxx_type" && enable $cxx_type ||
warn "Unknown C++ compiler $cxx, unable to select optimal CXXFLAGS"
: ${as_default:=$cc}
: ${dep_cc_default:=$cc}
: ${ld_default:=$cc}
set_default ar as dep_cc ld
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
add_cflags $extra_cflags
add_asflags $extra_cflags
if test -n "$sysroot"; then
case "$cc_type" in
gcc)
add_cppflags --sysroot="$sysroot"
add_ldflags --sysroot="$sysroot"
add_cxxppflags --sysroot="$sysroot"
;;
tms470)
add_cppflags -I"$sysinclude"
add_ldflags --sysroot="$sysroot"
add_cxxppflags -I"$sysinclude"
;;
clang)
add_cppflags -isysroot "$sysroot"
add_ldflags -isysroot "$sysroot"
add_cxxppflags -isysroot "$sysroot"
;;
esac
fi
if test "$cpu" = host; then
enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
case "$cc_type" in
gcc)
check_native(){
$cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
sed -n "/$1=/{
s/.*$1=\\([^ ]*\\).*/\\1/
p
q
}" $TMPE
}
cpu=$(check_native -march || check_native -mcpu)
;;
esac
if test "${cpu:-host}" = host ; then
enable proc_opt_old
cpu="$arch"
fi
test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
fi
# Deal with common $arch aliases
case "$arch" in
arm*)
arch="arm"
;;
mips|mipsel|IP*)
arch="mips"
;;
mips64*)
arch="mips"
subarch="mips64"
;;
parisc|hppa)
arch="parisc"
;;
parisc64|hppa64)
arch="parisc"
subarch="parisc64"
;;
"Power Macintosh"|ppc|powerpc)
arch="ppc"
;;
ppc64|powerpc64)
arch="ppc"
subarch="ppc64"
;;
s390|s390x)
arch="s390"
;;
sh4|sh)
arch="sh4"
;;
sun4u|sparc64)
arch="sparc"
subarch="sparc64"
;;
i[3-6]86|i86pc|BePC|x86_64|amd64)
arch="x86"
;;
esac
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
enable $arch
# if no tune setting and we know cpu class look at $processor
if enabled proc_opt_old; then
# first try to tune based on processor info
# Intel i3, i5, i7 processors (EMT64T capable)
if expr "$processor" : ".*Intel(R).*Core(TM) i[357] CPU.*" > /dev/null ; then
cpu="core2"
# EM64T era Intel Xeon
elif expr "$processor" : ".*Intel(R) Xeon(R) CPU.*51[1-6][08]" > /dev/null ; then
cpu="core2"
elif expr "$processor" : ".*Intel(R) Xeon(R) CPU.*54[0-9][025]" > /dev/null ; then
cpu="core2"
elif expr "$processor" : ".*Intel(R) Xeon(R) CPU.*33[2567]0" > /dev/null ; then
cpu="core2"
elif expr "$processor" : ".*Intel(R) Xeon(R) CPU.*X32[123]0" > /dev/null ; then
cpu="core2"
# Various Intel Duo processors (EMT64T capable)
elif expr "$processor" : ".*Intel(R).*Core(TM)2.*CPU" > /dev/null ; then
cpu="core2"
elif expr "$processor" : "*.Pentium(R) 5 CPU" > /dev/null ; then
cpu="nocona"
# EM64T compatible Intel Celeron
elif expr "$processor" : ".*Celeron(R) D CPU" > /dev/null ; then
cpu="nocona"
enable small
# Intel Core2 Duo
elif expr "$processor" : ".*Genuine.*Intel.*CPU.*2160" > /dev/null ; then
cpu="core2"
# Intel Atom
elif expr "$processor" : ".*Intel(R) Atom(TM)" > /dev/null ; then
cpu="nocona"
enable small
# Reportedly Intel Duo, but we assume 32 bit P3 due to generic name
elif expr "$processor" : ".*Genuine.*Intel.*CPU" > /dev/null ; then
cpu="pentium3"
# Pentium-M derivative in AppleTV, assume 32 bit P3 due to generic name
elif expr "$processor" : ".*Genuine.*Intel.*processor" > /dev/null ; then
cpu="pentium3"
# P4
elif expr "$processor" : ".*Xeon(TM) CPU" > /dev/null ; then
cpu="pentium4"
elif expr "$processor" : ".*XEON(TM) CPU" > /dev/null ; then
cpu="pentium4"
elif expr "$processor" : ".*XEON(TM) MP CPU" > /dev/null ; then
cpu="pentium4"
elif expr "$processor" : "pentium4" > /dev/null ; then
cpu="pentium4"
elif expr "$processor" : ".*Pentium(R) [4D]" > /dev/null ; then
cpu="pentium4"
elif expr "$processor" : ".*Celeron(R) CPU" > /dev/null ; then
cpu="pentium4"
enable small
# P6, which includes Intel Core
elif expr "$processor" : ".*Intel P6 Family" > /dev/null ; then
cpu="pentium4"
# P3
elif expr "$processor" : "pentium3" > /dev/null ; then
cpu="pentium3"
elif expr "$processor" : ".*Pentium.* III" > /dev/null ; then
cpu="pentium3"
elif expr "$processor" : ".*Coppermine" > /dev/null ; then
cpu="pentium3"
enable small
elif expr "$processor" : ".*Celeron(TM) CPU" > /dev/null ; then
cpu="pentium3"
enable small
elif expr "$processor" : ".*Pentium(R) M" > /dev/null ; then
cpu="pentium3"
elif expr "$processor" : ".*Celeron(R) M processor" > /dev/null ; then
cpu="pentium3"
enable small
# P2
elif expr "$processor" : "pentium2" > /dev/null ; then
cpu="pentium2"
elif expr "$processor" : ".*Mendocino" > /dev/null ; then
cpu="pentium2"
enable small
elif expr "$processor" : ".*Klamath" > /dev/null ; then
cpu="pentium2"
enable small
elif expr "$processor" : ".*Deschutes" > /dev/null ; then
cpu="pentium2"
enable small
elif expr "$processor" : ".*Pentium II" > /dev/null ; then
cpu="pentium2"
enable small
# AMD Turion
elif expr "$processor" : ".*AMD Turion(tm) 64" > /dev/null ; then
cpu="k8"
# AMD Geode NX
elif expr "$processor" : ".*AMD Geode(tm) NX" > /dev/null ; then
cpu="athlon"
enable small
# Athlon 64
elif expr "$processor" : ".*AMD Athlon(tm) II" > /dev/null ; then
cpu="k8"
elif expr "$processor" : ".*AMD Athlon(tm) 64" > /dev/null ; then
cpu="k8"
elif expr "$processor" : ".*AMD Athlon(tm) Dual Core" > /dev/null ; then
cpu="k8"
elif expr "$processor" : ".*Athlon LE-16" > /dev/null ; then
cpu="k8"
# AMD Phenom
elif expr "$processor" : ".*AMD Phenom(tm)" > /dev/null ; then
cpu="barcelona"
# AMD Opteron
elif expr "$processor" : ".*AMD Opteron(tm)" >/dev/null ; then
cpu="k8"
# Athlon MP
elif expr "$processor" : ".*AMD Athlon(tm) MP.*" > /dev/null ; then
cpu="athlon-mp"
# Athlon XP
elif expr "$processor" : "athlon-xp" > /dev/null ; then
cpu="athlon-xp"
elif expr "$processor" : ".*AMD Athlon(tm) XP" > /dev/null ; then
cpu="athlon-xp"
elif expr "$processor" : ".*AMD Sempron(tm)" > /dev/null ; then
cpu="athlon-xp"
# Athlon
elif expr "$processor" : "athlon" > /dev/null ; then
cpu="athlon"
elif expr "$processor" : ".*AMD Athlon(..)" > /dev/null ; then
cpu="athlon"
elif expr "$processor" : ".*AMD Duron(..)" > /dev/null ; then
cpu="athlon"
enable small
# K6
elif expr "$processor" : ".*AMD-K6(tm) 3D" > /dev/null ; then
cpu="k6"
enable small
# Transmeta Crusoe
elif expr "$processor" : ".*Crusoe(m) Processor TM5600" > /dev/null ; then
cpu="pentium2"
# c3-2
elif expr "$processor" : ".*VIA Esther" > /dev/null ; then
cpu="c3-2"
enable small
elif expr "$processor" : ".*VIA Nehemiah" > /dev/null ; then
cpu="c3-2"
enable small
# c3
elif expr "$processor" : ".*VIA.*Ezra" > /dev/null ; then
cpu="c3"
enable small
elif expr "$processor" : ".*VIA Samuel" > /dev/null ; then
cpu="c3"
enable small
# if no known processor info, tune base on uname -m info
else
enable proc_error_msg
fi
fi
if enabled proc_error_msg; then
UNAME_M_INFO=` uname -m 2> /dev/null`
UNAME_P_INFO=` uname -p 2> /dev/null`
PROC_INFO=`cat /proc/cpuinfo | grep "model name" | head -n 1 | sed s/"\t"//g 2>/dev/null`
PROC_FLAG=`cat /proc/cpuinfo | grep "flags" | head -n 1 | sed s/"\t"//g 2>/dev/null`
echo ""
echo " *** WARNING *** "
echo " Your CPU was not detected properly:"
echo " uname -m: $UNAME_M_INFO"
echo " uname -p: $UNAME_P_INFO"
echo " $PROC_INFO"
echo " $PROC_FLAG"
echo ""
echo " If you are using a recent checkout from "
echo " http://svn.mythtv.org/svn/trunk/mythtv "
echo " please e-mail the above to mythtv-users@mythtv.org"
echo " With the subject \"configure did not detect my cpu\""
echo ""
fi
if test $target_os = "darwin"; then
# Apple GCC doesn't support march=core2 yet:
if test $cpu = "core2"; then
cpu="nocona"
fi
# Core Duo might be identified as march=pentium3, which errors:
# ...MachineExceptions.h:... error: '__m128i' does not name a type
# ...MachineExceptions.h:... error: '__m128i' does not name a type
if test $cpu = "pentium3"; then
cpu=prescott
fi
fi
# Add processor-specific flags
if test "$cpu" = generic; then
: do nothing
elif enabled ppc; then
case $(tolower $cpu) in
601|ppc601|powerpc601)
cpuflags="-mcpu=601"
disable altivec
;;
603*|ppc603*|powerpc603*)
cpuflags="-mcpu=603"
disable altivec
;;
604*|ppc604*|powerpc604*)
cpuflags="-mcpu=604"
disable altivec
;;
g3|75*|ppc75*|powerpc75*)
cpuflags="-mcpu=750 -mpowerpc-gfxopt"
disable altivec
;;
g4|745*|ppc745*|powerpc745*)
cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
;;
74*|ppc74*|powerpc74*)
cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
;;
g5|970|ppc970|powerpc970|power4*)
cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
;;
cell)
cpuflags="-mcpu=cell"
enable ldbrx
;;
e500v2)
cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
disable altivec
;;
e500)
cpuflags="-mcpu=8540 -mhard-float"
disable altivec
;;
esac
elif enabled x86; then
case $cpu in
i[345]86|pentium)
cpuflags="-march=$cpu"
disable mmx
;;
# targets that do NOT support conditional mov (cmov)
pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
cpuflags="-march=$cpu"
disable cmov
;;
# targets that do support conditional mov (cmov)
i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|k8-sse3|opteron-sse3|athlon64-sse3|core2|amdfam10|barcelona|atom)
cpuflags="-march=$cpu"
enable cmov
enable fast_cmov
;;
# targets that do support conditional mov but on which it's slow
pentium4|pentium4m|prescott|nocona)
cpuflags="-march=$cpu"
enable cmov
disable fast_cmov
;;
esac
elif enabled sparc; then
case $cpu in
niagara)
cpuflags="-mcpu=$cpu"
disable vis
;;
sparc64)
cpuflags="-mcpu=v9"
;;
esac
elif enabled arm; then
case $cpu in
armv*)
cpuflags="-march=$cpu"
subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
;;
*)
cpuflags="-mcpu=$cpu"
case $cpu in
cortex-a*) subarch=armv7a ;;
cortex-r*) subarch=armv7r ;;
cortex-m*) subarch=armv7m ;;
arm11*) subarch=armv6 ;;
arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
esac
;;
esac
elif enabled alpha; then
enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
elif enabled bfin; then
cpuflags="-mcpu=$cpu"
elif enabled mips; then
cpuflags="-march=$cpu"
elif enabled avr32; then
case $cpu in
ap7[02]0[0-2])
subarch="avr32_ap"
cpuflags="-mpart=$cpu"
;;
ap)
subarch="avr32_ap"
cpuflags="-march=$cpu"
;;
uc3[ab]*)
subarch="avr32_uc"
cpuflags="-mcpu=$cpu"
;;
uc)
subarch="avr32_uc"
cpuflags="-march=$cpu"
;;
esac
fi
# if architecture specific flags don't work blank them
if test -n "$cpuflags"; then
tmp_cpuflags="$cpuflags"
check_cc $cpuflags <<EOF || cpuflags=""
int main( void ) { return 0; }
EOF
if test -z "$cpuflags"; then
if enabled cpu_override || enabled proc_opt || test x"$tune" != x"generic"; then
echo "ERROR: CPU specific ./configure options failed compile test"
echo " Removing CPU specific compilation options. ($tmp_cpuflags)"
echo ""
fi
fi
fi
add_cflags $cpuflags
add_asflags $cpuflags
add_cxxflags $cpuflags
# compiler sanity check
check_exec <<EOF
int main(void){ return 0; }
EOF
if test "$?" != 0; then
echo "$cc is unable to create an executable file."
echo "Check your ECFLAGS: [$ECFLAGS]"
if test -z "$cross_prefix" && ! enabled cross_compile ; then
echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
echo "Only do this if you know what cross compiling means."
fi
die "C compiler test failed."
fi
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
# C++ compiler sanity check
check_exec_cxx <<EOF
int main(void){ return 0; }
EOF
if test "$?" != 0; then
echo "$cxx is unable to create an executable file."
echo "Check your ECXXFLAGS: [$ECXXFLAGS]"
if test -z "$cross_prefix" && ! enabled cross_compile ; then
echo "If $cxx is a cross-compiler, use the --enable-cross-compile option."
echo "Only do this if you know what cross compiling means."
fi
die "C++ compiler test failed."
fi
check_cflags -std=c99
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
#include <stdlib.h>
EOF
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
#include <stdlib.h>
EOF
check_cxx -D_FILE_OFFSET_BITS=64 <<EOF && add_cxxppflags -D_FILE_OFFSET_BITS=64
#include <stdlib.h>
EOF
check_cxx -D_LARGEFILE_SOURCE <<EOF && add_cxxppflags -D_LARGEFILE_SOURCE
#include <stdlib.h>
EOF
check_host_cflags -std=c99
case "$arch" in
alpha|ia64|mips|parisc|sparc|ppc)
spic=$shared
;;
x86)
subarch="x86_32"
check_cc <<EOF && subarch="x86_64"
int test[(int)sizeof(char*) - 7];
EOF
if test "$subarch" = "x86_64"; then
spic=$shared
fi
;;
esac
enable $subarch
enabled spic && enable pic
# OS specific
case $target_os in
haiku)
prefix_default="/boot/common"
network_extralibs="-lnetwork"
;;
sunos)
FFSERVERLDFLAGS=""
SHFLAGS='-shared -Wl,-h,$$(@F)'
enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
network_extralibs="-lsocket -lnsl"
add_cppflags -D__EXTENSIONS__
add_cxxppflags -D__EXTENSIONS__
nm_opts='-P -g'
;;
netbsd)
oss_indev_extralibs="-lossaudio"
oss_outdev_extralibs="-lossaudio"
add_cppflags -D_XOPEN_SOURCE=600
add_cxxppflags -D_XOPEN_SOURCE=600
;;
openbsd)
append CCONFIG "openbsd"
enable malloc_aligned
# On OpenBSD 4.5. the compiler does not use PIC unless
# explicitly using -fPIC. FFmpeg builds fine without PIC,
# however the generated executable will not do anything
# (simply quits with exit-code 1, no crash, no output).
# Thus explicitly enable PIC here.
enable pic
SHFLAGS='-shared'
oss_indev_extralibs="-lossaudio"
oss_outdev_extralibs="-lossaudio"
;;
freebsd|dragonfly)
append CCONFIG "freebsd"
enable malloc_aligned
# Workaround compile errors from missing u_int/uint def
CPPFLAGS=`echo $CPPFLAGS | sed 's/-D_POSIX_C_SOURCE=200112//'`
disable ivtv
enable backend
;;
bsd/os)
add_extralibs -lpoll -lgnugetopt
strip="strip -d"
;;
darwin)
enable appleremote
enable backend
enable darwin
disable dvb
disable v4l1
disable v4l2
disable x11
# Workaround compile errors from missing u_int/uint def
CFLAGS=`echo $CFLAGS | sed 's/-D_POSIX_C_SOURCE=200112//'`
CPPFLAGS=`echo $CPPFLAGS | sed 's/-D_POSIX_C_SOURCE=200112//'`
# Workaround compile errors from missing ru_maxrss
add_cppflags -D_DARWIN_C_SOURCE
# Prevent linker problems on default Intel 10.5 XCode:
ldver=$(ld -v 2>&1 | sed -e s/^[^-]*-//)
osxver=$(uname -r | cut -c 1)
if [[ ${ldver%%.*} -lt "82" && ${osxver} = "9" && ${subarch} = "x86_32" ]]; then
cat <<EOF
You have a broken ld. Please upgrade XCode to 3.1.1 or newer.
MMX disabled to allow libavcodec to build.
Playback of HD videos may be very poor.
EOF
disable mmx
enable disable_mmx_for_debugging # prevent later call to die
fi
###### Standard ffmpeg configure stuff follows:
enable malloc_aligned
gas="gas-preprocessor.pl $cc"
enabled ppc && add_asflags -force_cpusubtype_ALL
build_os_ver=$(uname -r)
if test ${build_os_ver:0:1} = 8; then
SHFLAGS='-headerpad_max_install_names -dynamiclib -Wl,-single_module -Wl,-install_name,$(SLIBNAME),-current_version,$(LIBVERSION)'
else
SHFLAGS='-headerpad_max_install_names -dynamiclib -Wl,-single_module -Wl,-install_name,$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
fi
enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
strip="${strip} -x"
add_ldflags -Wl,-dynamic,-search_paths_first
SLIBSUF=".dylib"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
FFSERVERLDFLAGS=-Wl,-bind_at_load
objformat="macho"
enabled x86_64 && objformat="macho64"
enabled_any pic shared ||
{ check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
;;
mingw32*)
if test $target_os = "mingw32ce"; then
disable network
else
target_os=mingw32
fi
LIBTARGET=i386
if enabled x86_64; then
enable malloc_aligned
LIBTARGET=x64
elif enabled arm; then
LIBTARGET=arm
fi
shlibdir_default="$bindir_default"
enable backend
disable bindings_perl
disable bindings_python
disable bindings_php
disable dv1394
disable dvb
disable ceton
enable memalign_hack
disable mythtranscode
disable network
enable opengl
if enabled wince; then
disable protocols
fi
disable symver
disable v4l1
disable v4l2
enable windows
disable x11
disable qtdbus
###### Standard ffmpeg configure stuff follows:
disable ffserver
SLIBPREF="libmyth"
SLIBSUF=".dll"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
install -d "$(LIBDIR)"; \
install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
add_extralibs -lws2_32
objformat="win32"
enable dos_paths
# Workaround compile errors due -std=c++98 incompatible system headers
ECXXFLAGS=`echo $ECXXFLAGS | sed 's/-std=c++98//'`
check_cflags -fno-common
check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
|| (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
die "ERROR: MinGW runtime version must be >= 3.15."
;;
cygwin*)
enable cygwin
target_os=cygwin
shlibdir_default="$bindir_default"
enable windows
SLIBPREF="cygmyth"
SLIBSUF=".dll"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
SHFLAGS='-shared -Wl,--enable-auto-image-base'
objformat="win32"
enable dos_paths
check_cflags -fno-common
;;
*-dos|freedos|opendos)
disable ffplay ffserver
disable $INDEV_LIST $OUTDEV_LIST
network_extralibs="-lsocket"
objformat="coff"
enable dos_paths
;;
linux)
append CCONFIG "linux"
enable backend
! disabled joystick_menu && enable joystick_menu
enable dv1394
enable libudev
;;
irix*)
target_os=irix
ranlib="echo ignoring ranlib"
;;
os/2*)
strip="lxlite"
ln_s="cp -f"
add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
FFSERVERLDFLAGS=""
LIBSUF="_s.a"
SLIBPREF="myth"
SLIBSUF=".dll"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
echo PROTMODE >> $(SUBDIR)$(NAME).def; \
echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
echo EXPORTS >> $(SUBDIR)$(NAME).def; \
emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
enable dos_paths
;;
gnu/kfreebsd)
;;
gnu)
;;
none)
;;
*)
die "Unknown OS '$target_os'."
;;
esac
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
set_default $PATHS_LIST
append CONFIG_INCLUDEPATH $sysinclude "${sysroot}${prefix}"
append CCONFIG "$compile_type"
if test x$compile_type = x"profile" ; then
add_cflags -DNDEBUG
add_cxxflags -DNDEBUG
enable debug
disable stripping
elif test x$compile_type = x"debug"; then
enable debug
disable optimizations stripping
fi
enabled silent_cc && append CCONFIG "silent"
# we need to build at least one lib type
if ! enabled_any static shared; then
cat <<EOF
At least one library type must be built.
Specify --enable-static to build the static libraries or --enable-shared to
build the shared libraries as well. To only build the shared libraries specify
--disable-static in addition to --enable-shared.
EOF
exit 1;
fi
disabled static && LIBNAME=""
die_license_disabled() {
enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
}
die_license_disabled gpl libx264
die_license_disabled gpl libxavs
die_license_disabled gpl libxvid
die_license_disabled gpl postproc
die_license_disabled gpl x11grab
die_license_disabled nonfree libfaac
die_license_disabled version3 libopencore_amrnb
die_license_disabled version3 libopencore_amrwb
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
check_deps $ARCH_EXT_LIST
is_qmake4(){
$1 --version 2>&1 | egrep -q -e "Qt version 4\.[6-9]\.[0-9]"
}
if ! is_qmake4 $qmake; then
is_qmake4 qmake-qt4 && qmake=qmake-qt4 || die "qmake for Qt4.6 or newer not found.\nPlease specify the correct qmake with --qmake="
fi
if ! expr $($qmake -query QT_VERSION) : "4\.[6-9]\.[0-9]" >/dev/null; then
die "Qt4.6 or newer is required to build MythTV."
fi
enable_pic() {
enable pic
add_cppflags -DPIC
add_cxxppflags -DPIC
add_cflags -fPIC
add_cxxflags -fPIC
add_asflags -fPIC
}
disabled optimizations || check_cflags -fomit-frame-pointer
disabled optimizations || check_cxxflags -fomit-frame-pointer
enabled pic && enable_pic
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
extern_prefix=${sym%%ff_extern*}
check_cc <<EOF && enable inline_asm
void foo(void) { __asm__ volatile ("" ::); }
EOF
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
check_cxx <<EOF && _restrict=$restrict_keyword && break
void foo(char * $restrict_keyword p);
EOF
done
check_cc <<EOF && enable attribute_packed
struct { int x; } __attribute__((packed)) x;
EOF
check_cc <<EOF && enable attribute_may_alias
union { int x; } __attribute__((may_alias)) x;
EOF
check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
EOF
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
if enabled alpha; then
check_cflags -mieee
elif enabled arm; then
check_cflags -marm
nogas=die
check_ld <<EOF && enable vfp_args
__asm__ (".eabi_attribute 28, 1");
int main(void) { return 0; }
EOF
# We have to check if pld is a nop and disable it.
check_asm pld '"pld [r0]"'
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
enabled_all armv6t2 shared !pic && enable_pic
elif enabled mips; then
check_asm loongson '"dmult.g $1, $2, $3"'
enabled mmi && check_asm mmi '"lq $2, 0($2)"'
elif enabled ppc; then
enable local_aligned_8 local_aligned_16
check_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
check_asm ibm_asm '"add 0, 0, 0"'
check_asm ppc4xx '"maclhw r10, r11, r12"'
check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
# AltiVec flags: The FSF version of GCC differs from the Apple version
if enabled altivec; then
nogas=warn
check_cflags -maltivec -mabi=altivec &&
{ check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
check_cflags -faltivec
check_cxxflags -maltivec -mabi=altivec &&
{ check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
check_cxxflags -faltivec
# check if our compiler supports Motorola AltiVec C API
check_cc <<EOF || disable altivec
$inc_altivec_h
int main(void) {
vector signed int v1, v2, v3;
v1 = vec_add(v2,v3);
return 0;
}
EOF
# check if our compiler supports braces for vector declarations
check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
$inc_altivec_h
int main (void) { (vector int) {1}; return 0; }
EOF
fi
elif enabled sparc; then
enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
add_cflags -mcpu=ultrasparc -mtune=ultrasparc
elif enabled x86; then
enable local_aligned_8 local_aligned_16
# check whether EBP is available on x86
# As 'i' is stored on the stack, this program will crash
# if the base pointer is used to access it because the
# base pointer is cleared in the inline assembly code.
check_exec_crash <<EOF && enable ebp_available
volatile int i=0;
__asm__ volatile (
"xorl %%ebp, %%ebp"
::: "%ebp");
return i;
EOF
# check whether EBX is available on x86
check_asm ebx_available '""::"b"(0)' &&
check_asm ebx_available '"":::"%ebx"'
# check whether more than 10 operands are supported
check_cc <<EOF && enable ten_operands
int main(void) {
int x=0;
__asm__ volatile(
""
:"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
);
return 0;
}
EOF
# check whether binutils is new enough to compile SSSE3/MMX2
enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
check_asm bswap '"bswap %%eax" ::: "%eax"'
YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
enabled x86_64 && append YASMFLAGS "-m amd64"
enabled pic && append YASMFLAGS "-DPIC"
test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
case "$objformat" in
elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
esac
if ! disabled yasm; then
check_yasm "pabsw xmm0, xmm0" && enable yasm ||
warn "yasm not found, performance will suffer"
fi
case "$cpu" in
athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
disable fast_clz
;;
esac
fi
if enabled asm; then
as=${gas:=$as}
check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
$nogas "GNU assembler not found, install gas-preprocessor"
fi
# "CPU_CLIP" test for SRC / libsamplerate
# test positive wrap
check_exec -lm << EOF && enable cpu_clips_positive
#define _ISOC9X_SOURCE 1
#define _ISOC99_SOURCE 1
#define __USE_ISOC99 1
#define __USE_ISOC9X 1
#include <math.h>
int main (void)
{ double fval ;
int k, ival ;
fval = 1.0 * 0x7FFFFFFF ;
for (k = 0 ; k < 100 ; k++)
{
ival = (lrint (fval)) >> 24 ;
if (ival != 127)
return 1 ;
fval *= 1.2499999 ;
} ;
return 0 ;
}
EOF
# test negative wrap
check_exec -lm << EOF && enable cpu_clips_negative
#define _ISOC9X_SOURCE 1
#define _ISOC99_SOURCE 1
#define __USE_ISOC99 1
#define __USE_ISOC9X 1
#include <math.h>
int main (void)
{
double fval ;
int k, ival ;
fval = -8.0 * 0x10000000 ;
for (k = 0 ; k < 100 ; k++)
{
ival = (lrint (fval)) >> 24 ;
if (ival != -128)
return 1 ;
fval *= 1.2499999 ;
} ;
return 0 ;
}
EOF
# test for distcc
enabled distcc && check_cmd distcc --version || disable distcc
if enabled distcc; then
XYZ=`which $cc`
if test x"$XYZ" != x"" -a x"`ls -l $XYZ | grep distcc`" != x""; then
distcc="symlink"
distcc_txt=" $cc"
fi
fi
# test for ccache
enabled ccache && check_cmd ccache -V || disable ccache
if enabled ccache; then
XYZ=`which $cc`
if test x"$XYZ" != x"" -a x"`ls -l $XYZ | grep ccache`" != x""; then
ccache="symlink"
ccache_txt=" $cc"
fi
fi
# ccache should be used before distcc for better cache coherency
if enabled distcc; then
if disabled ccache; then
cc="distcc $cc"
cxx="distcc $cxx"
elif enabled ccache; then
cc="ccache distcc $cc"
cxx="ccache distcc $cxx"
else
disable distcc
distcc_txt="t using distcc explicitly, since ccache symlink is present"
fi
else
if enabled ccache; then
cc="ccache $cc"
cxx="ccache $cxx"
fi
fi
if check_func dlopen; then
ldl=
elif check_func dlopen -ldl; then
ldl=-ldl
fi
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
check_func fcntl
check_func fork
check_func getaddrinfo $network_extralibs
check_func gethrtime
check_func getrusage
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
check_func inet_aton $network_extralibs
check_func isatty
check_func ${malloc_prefix}memalign && enable memalign
check_func mkstemp
check_func mmap
check_func ${malloc_prefix}posix_memalign && enable posix_memalign
check_func setrlimit
check_func strerror_r
check_func_headers io.h setmode
check_func_headers lzo/lzo1x.h lzo1x_999_compress
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
check_func_headers windows.h GetProcessTimes
check_func_headers windows.h VirtualAlloc
check_header byteswap.h
check_header conio.h
check_header dlfcn.h
check_header dxva2api.h
check_header malloc.h
check_header poll.h
check_header sys/endian.h
check_header sys/mman.h
check_header sys/resource.h
check_header sys/select.h
check_header termios.h
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
check_header va/va.h
check_header va/va_x11.h
check_header va/va_glx.h
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
check_func posix_fadvise
check_func_headers sys/timeb.h ftime
check_func_headers sys/time.h gettimeofday
check_func_headers "sys/types.h sys/socket.h ifaddrs.h" getifaddrs
# libmythhdhomerun now uses clock_gettime, which some Unixes need -lrt for:
check_func clock_gettime || \
{ check_func clock_gettime -lrt && add_extralibs -lrt; }
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
enabled_any $need_memalign ; then
die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
fi
disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
# Attempt to use libudev for mediamonitor
enabled libudev && check_lib2 libudev.h udev_new -ludev || disable libudev
enabled ffmpeg_pthreads && enable pthreads
# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
if ! disabled pthreads && ! enabled w32threads; then
enable pthreads
if check_func pthread_create; then
:
elif check_func pthread_create -pthread; then
add_cflags -pthread
add_cxxflags -pthread
add_extralibs -pthread
elif check_func pthread_create -pthreads; then
add_cflags -pthreads
add_cxxflags -pthreads
add_extralibs -pthreads
elif check_func pthread_create -lpthreadGC2; then
add_extralibs -lpthreadGC2
elif ! check_lib pthread.h pthread_create -lpthread; then
disable pthreads ffmpeg_pthreads
fi
fi
for thread in $THREADS_LIST; do
if enabled $thread; then
test -n "$thread_type" &&
die "ERROR: Only one thread type must be selected." ||
thread_type="$thread"
fi
done
check_lib math.h sin -lm
disabled vaapi || check_lib va/va.h vaInitialize -lva
check_mathfunc exp2
check_mathfunc exp2f
check_mathfunc llrint
check_mathfunc llrintf
check_mathfunc log2
check_mathfunc log2f
check_mathfunc lrint
check_mathfunc lrintf
check_mathfunc round
check_mathfunc roundf
check_mathfunc truncf
# these are off by default, so fail if requested and not available
enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame
enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
enabled libopencv && { check_lib opencv/cv.h cvCreateImageHeader $(pkg-config --libs opencv) ||
die "ERROR: libopencv not found"; }
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
enabled librtmp && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; }
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
enabled libvpx && {
enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
die "ERROR: libvpx decoder version must be >=0.9.1"; }
enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
die "ERROR: libvpx encoder version must be >=0.9.1"; } }
enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
{ check_cpp_condition x264.h "X264_BUILD >= 99" ||
die "ERROR: libx264 version must be >= 0.99."; }
enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
if enabled libmpeg2external; then
check_lib mpeg2dec/mpeg2.h mpeg2_init -lmpeg2 || disable libmpeg2external
if disabled libmpeg2external; then
die "Warning! No suitable external libmpeg2 found, use internal copy."
fi
disable mythtranscode
fi
# libdc1394 check
if enabled libdc1394; then
{ check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
enable libdc1394_2; } ||
{ check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
enable libdc1394_1; } ||
die "ERROR: No version o