mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-08-21 16:55:05 +02:00
![Måns Rullgård](/assets/img/avatar_default.png)
The auto-vectoriser in gcc is enabled by default at -O3 since version 4.3. However, it provides no speed benefit, but does produce incorrect code on many targets. Disabling it for gcc should give more reliable builds. If the adventurous want it back, they can edit the makefile themselves. Originally committed as revision 19439 to svn://svn.ffmpeg.org/ffmpeg/trunk
2747 lines
79 KiB
Bash
Executable File
2747 lines
79 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# 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 FFmpeg."
|
|
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(){
|
|
echo "Usage: configure [options]"
|
|
echo "Options: [defaults in brackets after descriptions]"
|
|
echo
|
|
echo "Standard options:"
|
|
echo " --help print this message"
|
|
echo " --logfile=FILE log tests and output to FILE [config.err]"
|
|
echo " --disable-logging do not log configure debug information"
|
|
echo " --prefix=PREFIX install in PREFIX [$prefix]"
|
|
echo " --bindir=DIR install binaries in DIR [PREFIX/bin]"
|
|
echo " --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]"
|
|
echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
|
|
echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
|
|
echo " --incdir=DIR install includes in DIR [PREFIX/include]"
|
|
echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
|
|
echo
|
|
echo "Configuration options:"
|
|
echo " --disable-static do not build static libraries [no]"
|
|
echo " --enable-shared build shared libraries [no]"
|
|
echo " --enable-gpl allow use of GPL code, the resulting libs"
|
|
echo " and binaries will be under GPL [no]"
|
|
echo " --enable-version3 upgrade (L)GPL to version 3 [no]"
|
|
echo " --enable-nonfree allow use of nonfree code, the resulting libs"
|
|
echo " and binaries will be unredistributable [no]"
|
|
echo " --disable-ffmpeg disable ffmpeg build"
|
|
echo " --disable-ffplay disable ffplay build"
|
|
echo " --disable-ffserver disable ffserver build"
|
|
echo " --enable-postproc enable GPLed postprocessing support [no]"
|
|
echo " --enable-avfilter video filter support [no]"
|
|
echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
|
|
echo " --enable-beosthreads use BeOS threads [no]"
|
|
echo " --enable-os2threads use OS/2 threads [no]"
|
|
echo " --enable-pthreads use pthreads [no]"
|
|
echo " --enable-w32threads use Win32 threads [no]"
|
|
echo " --enable-x11grab enable X11 grabbing [no]"
|
|
echo " --disable-network disable network support [no]"
|
|
echo " --disable-ipv6 disable IPv6 support [no]"
|
|
echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
|
|
echo " --enable-gray enable full grayscale support (slower color)"
|
|
echo " --disable-swscale-alpha disable alpha channel support in swscale"
|
|
echo " --disable-fastdiv disable table-based division"
|
|
echo " --enable-small optimize for size instead of speed"
|
|
echo " --disable-aandct disable AAN DCT code"
|
|
echo " --disable-fft disable FFT code"
|
|
echo " --disable-golomb disable Golomb code"
|
|
echo " --disable-mdct disable MDCT code"
|
|
echo " --disable-rdft disable RDFT code"
|
|
echo " --disable-vaapi disable VAAPI code"
|
|
echo " --disable-vdpau disable VDPAU code"
|
|
echo " --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)"
|
|
echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
|
|
echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
|
|
echo " --enable-beos-netserver enable BeOS netserver"
|
|
echo " --disable-encoder=NAME disable encoder NAME"
|
|
echo " --enable-encoder=NAME enable encoder NAME"
|
|
echo " --disable-encoders disable all encoders"
|
|
echo " --disable-decoder=NAME disable decoder NAME"
|
|
echo " --enable-decoder=NAME enable decoder NAME"
|
|
echo " --disable-decoders disable all decoders"
|
|
echo " --disable-hwaccel=NAME disable hwaccel NAME"
|
|
echo " --enable-hwaccel=NAME enable hwaccel NAME"
|
|
echo " --disable-hwaccels disable all hwaccels"
|
|
echo " --disable-muxer=NAME disable muxer NAME"
|
|
echo " --enable-muxer=NAME enable muxer NAME"
|
|
echo " --disable-muxers disable all muxers"
|
|
echo " --disable-demuxer=NAME disable demuxer NAME"
|
|
echo " --enable-demuxer=NAME enable demuxer NAME"
|
|
echo " --disable-demuxers disable all demuxers"
|
|
echo " --enable-parser=NAME enable parser NAME"
|
|
echo " --disable-parser=NAME disable parser NAME"
|
|
echo " --disable-parsers disable all parsers"
|
|
echo " --enable-bsf=NAME enable bitstream filter NAME"
|
|
echo " --disable-bsf=NAME disable bitstream filter NAME"
|
|
echo " --disable-bsfs disable all bitstream filters"
|
|
echo " --enable-protocol=NAME enable protocol NAME"
|
|
echo " --disable-protocol=NAME disable protocol NAME"
|
|
echo " --disable-protocols disable all protocols"
|
|
echo " --disable-indev=NAME disable input device NAME"
|
|
echo " --disable-outdev=NAME disable output device NAME"
|
|
echo " --disable-indevs disable input devices"
|
|
echo " --disable-outdevs disable output devices"
|
|
echo " --disable-devices disable all devices"
|
|
echo " --enable-filter=NAME enable filter NAME"
|
|
echo " --disable-filter=NAME disable filter NAME"
|
|
echo " --disable-filters disable all filters"
|
|
echo " --list-decoders show all available decoders"
|
|
echo " --list-encoders show all available encoders"
|
|
echo " --list-hwaccels show all available hardware accelerators"
|
|
echo " --list-muxers show all available muxers"
|
|
echo " --list-demuxers show all available demuxers"
|
|
echo " --list-parsers show all available parsers"
|
|
echo " --list-protocols show all available protocols"
|
|
echo " --list-bsfs show all available bitstream filters"
|
|
echo " --list-indevs show all available input devices"
|
|
echo " --list-outdevs show all available output devices"
|
|
echo " --list-filters show all available filters"
|
|
echo
|
|
echo "External library support:"
|
|
echo " --enable-avisynth enable reading of AVISynth script files [no]"
|
|
echo " --enable-bzlib enable bzlib [autodetect]"
|
|
echo " --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]"
|
|
echo " --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]"
|
|
echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
|
|
echo " and libraw1394 [no]"
|
|
echo " --enable-libdirac enable Dirac support via libdirac [no]"
|
|
echo " --enable-libfaac enable FAAC support via libfaac [no]"
|
|
echo " --enable-libfaad enable FAAD support via libfaad [no]"
|
|
echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
|
|
echo " --enable-libgsm enable GSM support via libgsm [no]"
|
|
echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
|
|
echo " --enable-libnut enable NUT (de)muxing via libnut,"
|
|
echo " native (de)muxer exists [no]"
|
|
echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
|
|
echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
|
|
echo " --enable-libspeex enable Speex decoding via libspeex [no]"
|
|
echo " --enable-libtheora enable Theora encoding via libtheora [no]"
|
|
echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
|
|
echo " native implementation exists [no]"
|
|
echo " --enable-libx264 enable H.264 encoding via x264 [no]"
|
|
echo " --enable-libxvid enable Xvid encoding via xvidcore,"
|
|
echo " native MPEG-4/Xvid encoder exists [no]"
|
|
echo " --enable-mlib enable Sun medialib [no]"
|
|
echo " --enable-zlib enable zlib [autodetect]"
|
|
echo ""
|
|
echo "Advanced options (experts only):"
|
|
echo " --source-path=PATH path to source code [$source_path]"
|
|
echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
|
|
echo " --enable-cross-compile assume a cross-compiler is used"
|
|
echo " --sysroot=PATH root of cross-build tree"
|
|
echo " --sysinclude=PATH location of cross-build system headers"
|
|
echo " --target-os=OS compiler targets OS [$target_os]"
|
|
echo " --target-exec=CMD command to run executables on target"
|
|
echo " --target-path=DIR path to view of build directory on target"
|
|
echo " --nm=NM use nm tool"
|
|
echo " --as=AS use assembler AS [$as_default]"
|
|
echo " --cc=CC use C compiler CC [$cc_default]"
|
|
echo " --ld=LD use linker LD"
|
|
echo " --host-cc=HOSTCC use host C compiler HOSTCC"
|
|
echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
|
|
echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
|
|
echo " --host-libs=HLIBS use libs HLIBS when linking for host"
|
|
echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
|
|
echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
|
|
echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
|
|
echo " --extra-version=STRING version string suffix []"
|
|
echo " --build-suffix=SUFFIX library name suffix []"
|
|
echo " --arch=ARCH select architecture [$arch]"
|
|
echo " --cpu=CPU select the minimum required CPU (affects"
|
|
echo " instruction selection, may crash on older CPUs)"
|
|
echo " --enable-powerpc-perf enable performance report on PPC"
|
|
echo " (requires enabling PMC)"
|
|
echo " --disable-altivec disable AltiVec optimizations"
|
|
echo " --disable-amd3dnow disable 3DNow! optimizations"
|
|
echo " --disable-amd3dnowext disable 3DNow! extended optimizations"
|
|
echo " --disable-mmx disable MMX optimizations"
|
|
echo " --disable-mmx2 disable MMX2 optimizations"
|
|
echo " --disable-sse disable SSE optimizations"
|
|
echo " --disable-ssse3 disable SSSE3 optimizations"
|
|
echo " --disable-armv5te disable armv5te optimizations"
|
|
echo " --disable-armv6 disable armv6 optimizations"
|
|
echo " --disable-armv6t2 disable armv6t2 optimizations"
|
|
echo " --disable-armvfp disable ARM VFP optimizations"
|
|
echo " --disable-iwmmxt disable iwmmxt optimizations"
|
|
echo " --disable-mmi disable MMI optimizations"
|
|
echo " --disable-neon disable neon optimizations"
|
|
echo " --disable-vis disable VIS optimizations"
|
|
echo " --disable-yasm disable use of yasm assembler"
|
|
echo
|
|
echo "Developer options (useful when working on FFmpeg itself):"
|
|
echo " --disable-debug disable debugging symbols"
|
|
echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
|
|
echo " --enable-gprof enable profiling with gprof [$gprof]"
|
|
echo " --disable-optimizations disable compiler optimizations"
|
|
echo " --enable-extra-warnings enable more compiler warnings"
|
|
echo " --disable-stripping disable stripping of executables and shared libraries"
|
|
echo ""
|
|
echo "NOTE: Object files are built at the place where configure is launched."
|
|
exit 0
|
|
}
|
|
|
|
log(){
|
|
echo "$@" >> $logfile
|
|
}
|
|
|
|
log_file(){
|
|
log BEGIN $1
|
|
pr -n -t $1 >> $logfile
|
|
log END $1
|
|
}
|
|
|
|
echolog(){
|
|
log "$@"
|
|
echo "$@"
|
|
}
|
|
|
|
die(){
|
|
echolog "$@"
|
|
cat <<EOF
|
|
|
|
If you think configure made a mistake, make sure you are using the latest
|
|
version from SVN. If the latest version fails, report the problem to the
|
|
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg 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 "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
|
|
echo "$v"
|
|
}
|
|
|
|
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(){
|
|
enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
|
|
}
|
|
|
|
disable_safe(){
|
|
disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
|
|
}
|
|
|
|
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 $*
|
|
}
|
|
|
|
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"
|
|
|
|
pushvar cfg dep_all dep_any dep_sel dep_sgs
|
|
check_deps $dep_all $dep_any $dep_sel $dep_sgs
|
|
popvar cfg dep_all dep_any dep_sel dep_sgs
|
|
|
|
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(){
|
|
pfx=$1
|
|
header=$2
|
|
makefile=$3
|
|
shift 3
|
|
for cfg; do
|
|
ucname="$(toupper $cfg)"
|
|
if enabled $cfg; then
|
|
echo "#define ${pfx}${ucname} 1" >> $header
|
|
echo "${pfx}${ucname}=yes" >> $makefile
|
|
else
|
|
echo "#define ${pfx}${ucname} 0" >> $header
|
|
fi
|
|
done
|
|
}
|
|
|
|
flags_saved(){
|
|
(: ${SAVE_CFLAGS?}) 2> /dev/null
|
|
}
|
|
|
|
save_flags(){
|
|
flags_saved && return
|
|
SAVE_CFLAGS="$CFLAGS"
|
|
SAVE_LDFLAGS="$LDFLAGS"
|
|
SAVE_extralibs="$extralibs"
|
|
}
|
|
|
|
restore_flags(){
|
|
flags_saved || return
|
|
CFLAGS="$SAVE_CFLAGS"
|
|
LDFLAGS="$SAVE_LDFLAGS"
|
|
extralibs="$SAVE_extralibs"
|
|
unset SAVE_CFLAGS
|
|
unset SAVE_LDFLAGS
|
|
unset SAVE_extralibs
|
|
}
|
|
|
|
temp_cflags(){
|
|
save_flags
|
|
CFLAGS="$CFLAGS $*"
|
|
}
|
|
|
|
temp_ldflags(){
|
|
save_flags
|
|
LDFLAGS="$LDFLAGS $*"
|
|
}
|
|
|
|
temp_extralibs(){
|
|
save_flags
|
|
extralibs="$extralibs $*"
|
|
}
|
|
|
|
append(){
|
|
var=$1
|
|
shift
|
|
flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
|
|
eval "$var=\"\$$var $*\""
|
|
}
|
|
|
|
add_cppflags(){
|
|
append CPPFLAGS $($filter_cppflags "$@")
|
|
}
|
|
|
|
add_cflags(){
|
|
append CFLAGS $($filter_cflags "$@")
|
|
}
|
|
|
|
add_asflags(){
|
|
append ASFLAGS $($filter_asflags "$@")
|
|
}
|
|
|
|
add_ldflags(){
|
|
append LDFLAGS "$@"
|
|
}
|
|
|
|
add_extralibs(){
|
|
append extralibs "$@"
|
|
}
|
|
|
|
check_cmd(){
|
|
log "$@"
|
|
"$@" >> $logfile 2>&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_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"
|
|
asm="$2"
|
|
shift 2
|
|
check_as "$@" <<EOF && enable $name || disable $name
|
|
void foo(void){ __asm__ volatile($asm); }
|
|
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 "$@"
|
|
check_cc || return
|
|
flags=''
|
|
libs=''
|
|
for f; do
|
|
test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
|
|
done
|
|
check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
|
|
}
|
|
|
|
check_cppflags(){
|
|
log check_cppflags "$@"
|
|
set -- $($filter_cppflags "$@")
|
|
check_cc "$@" <<EOF && append CPPFLAGS "$@"
|
|
int x;
|
|
EOF
|
|
}
|
|
|
|
check_cflags(){
|
|
log check_cflags "$@"
|
|
set -- $($filter_cflags "$@")
|
|
check_cc "$@" <<EOF && append CFLAGS "$@"
|
|
int x;
|
|
EOF
|
|
}
|
|
|
|
check_ldflags(){
|
|
log check_ldflags "$@"
|
|
check_ld "$@" <<EOF && add_ldflags "$@"
|
|
int main(void){ return 0; }
|
|
EOF
|
|
}
|
|
|
|
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_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){
|
|
(void) $func;
|
|
return 0;
|
|
}
|
|
EOF
|
|
}
|
|
|
|
check_cpp_condition(){
|
|
log check_cpp_condition "$@"
|
|
header=$1
|
|
condition=$2
|
|
check_cpp <<EOF
|
|
#include <$header>
|
|
#if !($condition)
|
|
#error "unsatisfied condition: $condition"
|
|
#endif
|
|
EOF
|
|
}
|
|
|
|
check_lib(){
|
|
log check_lib "$@"
|
|
header="$1"
|
|
func="$2"
|
|
shift 2
|
|
temp_extralibs "$@"
|
|
check_header $header && check_func $func && add_extralibs "$@"
|
|
err=$?
|
|
restore_flags
|
|
return $err
|
|
}
|
|
|
|
check_lib2(){
|
|
log check_lib2 "$@"
|
|
headers="$1"
|
|
func="$2"
|
|
shift 2
|
|
temp_extralibs "$@"
|
|
check_func_headers "$headers" $func && add_extralibs "$@"
|
|
err=$?
|
|
restore_flags
|
|
return $err
|
|
}
|
|
|
|
check_exec(){
|
|
check_ld "$@" && { 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 $type
|
|
incs=""
|
|
for hdr in $headers; do
|
|
incs="$incs
|
|
#include <$hdr>"
|
|
done
|
|
check_cc "$@" <<EOF && enable $type
|
|
$incs
|
|
$type v;
|
|
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
|
|
temp_cflags $(${pkg}-config --cflags)
|
|
temp_extralibs $(${pkg}-config --libs)
|
|
check_lib "$@" $header $func && enable $cfg
|
|
fi
|
|
return $err
|
|
}
|
|
|
|
apply(){
|
|
file=$1
|
|
shift
|
|
"$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
|
|
}
|
|
|
|
# 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
|
|
avfilter
|
|
avfilter_lavf
|
|
avisynth
|
|
beos_netserver
|
|
bzlib
|
|
fastdiv
|
|
ffmpeg
|
|
ffplay
|
|
ffserver
|
|
fft
|
|
golomb
|
|
gpl
|
|
gprof
|
|
gray
|
|
hardcoded_tables
|
|
ipv6
|
|
libdc1394
|
|
libdirac
|
|
libfaac
|
|
libfaad
|
|
libfaadbin
|
|
libgsm
|
|
libmp3lame
|
|
libnut
|
|
libopencore_amrnb
|
|
libopencore_amrwb
|
|
libopenjpeg
|
|
libschroedinger
|
|
libspeex
|
|
libtheora
|
|
libvorbis
|
|
libx264
|
|
libxvid
|
|
mdct
|
|
memalign_hack
|
|
mlib
|
|
mpegaudio_hp
|
|
network
|
|
nonfree
|
|
postproc
|
|
powerpc_perf
|
|
rdft
|
|
runtime_cpudetect
|
|
shared
|
|
small
|
|
static
|
|
swscale_alpha
|
|
vaapi
|
|
vdpau
|
|
version3
|
|
x11grab
|
|
zlib
|
|
"
|
|
|
|
THREADS_LIST='
|
|
beosthreads
|
|
os2threads
|
|
pthreads
|
|
w32threads
|
|
'
|
|
|
|
ARCH_LIST='
|
|
alpha
|
|
arm
|
|
bfin
|
|
ia64
|
|
m68k
|
|
mips
|
|
mips64
|
|
parisc
|
|
ppc
|
|
ppc64
|
|
s390
|
|
sh4
|
|
sparc
|
|
sparc64
|
|
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="
|
|
$ARCH_EXT_LIST
|
|
$THREADS_LIST
|
|
alsa_asoundlib_h
|
|
altivec_h
|
|
arpa_inet_h
|
|
bigendian
|
|
bswap
|
|
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
|
|
fast_64bit
|
|
fast_cmov
|
|
fast_unaligned
|
|
fork
|
|
gethrtime
|
|
GetProcessTimes
|
|
getrusage
|
|
inet_aton
|
|
inline_asm
|
|
ldbrx
|
|
libdc1394_1
|
|
libdc1394_2
|
|
llrint
|
|
log2
|
|
loongson
|
|
lrint
|
|
lrintf
|
|
lzo1x_999_compress
|
|
machine_ioctl_bt848_h
|
|
machine_ioctl_meteor_h
|
|
malloc_h
|
|
memalign
|
|
mkstemp
|
|
pld
|
|
posix_memalign
|
|
round
|
|
roundf
|
|
sdl
|
|
sdl_video_size
|
|
setmode
|
|
socklen_t
|
|
soundcard_h
|
|
poll_h
|
|
sys_mman_h
|
|
sys_resource_h
|
|
sys_select_h
|
|
sys_soundcard_h
|
|
sys_videoio_h
|
|
ten_operands
|
|
termios_h
|
|
threads
|
|
truncf
|
|
VirtualAlloc
|
|
winsock2_h
|
|
xform_asm
|
|
yasm
|
|
"
|
|
|
|
# options emitted with CONFIG_ prefix but not available on command line
|
|
CONFIG_EXTRA="
|
|
gplv3
|
|
lgplv3
|
|
"
|
|
|
|
CMDLINE_SELECT="
|
|
$ARCH_EXT_LIST
|
|
$CONFIG_LIST
|
|
$THREADS_LIST
|
|
cross_compile
|
|
debug
|
|
extra_warnings
|
|
logging
|
|
optimizations
|
|
stripping
|
|
yasm
|
|
"
|
|
|
|
PATHS_LIST='
|
|
bindir
|
|
datadir
|
|
incdir
|
|
libdir
|
|
mandir
|
|
prefix
|
|
shlibdir
|
|
'
|
|
|
|
CMDLINE_SET="
|
|
$PATHS_LIST
|
|
arch
|
|
as
|
|
build_suffix
|
|
cc
|
|
cpu
|
|
cross_prefix
|
|
dep_cc
|
|
extra_cflags
|
|
extra_version
|
|
host_cc
|
|
host_cflags
|
|
host_ldflags
|
|
host_libs
|
|
host_os
|
|
ld
|
|
logfile
|
|
nm
|
|
source_path
|
|
sysinclude
|
|
sysroot
|
|
target_exec
|
|
target_os
|
|
target_path
|
|
"
|
|
|
|
# code dependency declarations
|
|
|
|
# architecture extensions
|
|
altivec_deps="ppc"
|
|
amd3dnow_deps="mmx"
|
|
amd3dnowext_deps="amd3dnow"
|
|
armv5te_deps="arm"
|
|
armv6_deps="arm"
|
|
armv6t2_deps="arm"
|
|
armvfp_deps="arm"
|
|
iwmmxt_deps="arm"
|
|
mmi_deps="mips"
|
|
mmx_deps="x86"
|
|
mmx2_deps="mmx"
|
|
neon_deps="arm"
|
|
ppc4xx_deps="ppc"
|
|
sse_deps="mmx"
|
|
ssse3_deps="sse"
|
|
vis_deps="sparc"
|
|
|
|
need_memalign="altivec neon sse"
|
|
|
|
# decoders / encoders / hardware accelerators
|
|
aac_decoder_select="fft mdct"
|
|
ac3_decoder_select="fft mdct"
|
|
atrac3_decoder_select="fft mdct"
|
|
cavs_decoder_select="golomb"
|
|
cook_decoder_select="fft mdct"
|
|
cscd_decoder_suggest="zlib"
|
|
dca_decoder_select="fft mdct"
|
|
dnxhd_encoder_select="aandct"
|
|
dxa_decoder_select="zlib"
|
|
eac3_decoder_select="fft mdct"
|
|
eatgq_decoder_select="aandct"
|
|
eatqi_decoder_select="aandct"
|
|
ffv1_decoder_select="golomb"
|
|
flac_decoder_select="golomb"
|
|
flac_encoder_select="golomb"
|
|
flashsv_decoder_select="zlib"
|
|
flashsv_encoder_select="zlib"
|
|
flv_encoder_select="aandct"
|
|
h261_encoder_select="aandct"
|
|
h263_encoder_select="aandct"
|
|
h263_vaapi_hwaccel_deps="va_va_h"
|
|
h263_vaapi_hwaccel_select="vaapi h263_decoder"
|
|
h263p_encoder_select="aandct"
|
|
h264_decoder_select="golomb"
|
|
h264_vaapi_hwaccel_deps="va_va_h"
|
|
h264_vaapi_hwaccel_select="vaapi"
|
|
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
|
|
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"
|
|
mpeg1video_encoder_select="aandct"
|
|
mpeg2video_encoder_select="aandct"
|
|
mpeg4_encoder_select="aandct"
|
|
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
|
|
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
|
|
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
|
|
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
|
|
mpeg2_vaapi_hwaccel_deps="va_va_h"
|
|
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
|
|
mpeg4_vaapi_hwaccel_deps="va_va_h"
|
|
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
|
|
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
|
|
msmpeg4v1_encoder_select="aandct"
|
|
msmpeg4v2_encoder_select="aandct"
|
|
msmpeg4v3_encoder_select="aandct"
|
|
nellymoser_decoder_select="fft mdct"
|
|
nellymoser_encoder_select="fft mdct"
|
|
png_decoder_select="zlib"
|
|
png_encoder_select="zlib"
|
|
qdm2_decoder_select="fft mdct rdft"
|
|
rv10_encoder_select="aandct"
|
|
rv20_encoder_select="aandct"
|
|
rv30_decoder_select="golomb"
|
|
rv40_decoder_select="golomb"
|
|
shorten_decoder_select="golomb"
|
|
sonic_decoder_select="golomb"
|
|
sonic_encoder_select="golomb"
|
|
sonic_ls_encoder_select="golomb"
|
|
svq3_decoder_select="golomb"
|
|
svq3_decoder_suggest="zlib"
|
|
tiff_decoder_suggest="zlib"
|
|
tiff_encoder_suggest="zlib"
|
|
tscc_decoder_select="zlib"
|
|
vc1_vaapi_hwaccel_deps="va_va_h"
|
|
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
|
|
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
|
|
vc1_vdpau_decoder_select="vdpau vc1_decoder"
|
|
vorbis_decoder_select="fft mdct"
|
|
vorbis_encoder_select="fft mdct"
|
|
wmav1_decoder_select="fft mdct"
|
|
wmav1_encoder_select="fft mdct"
|
|
wmav2_decoder_select="fft mdct"
|
|
wmav2_encoder_select="fft mdct"
|
|
wmv1_encoder_select="aandct"
|
|
wmv2_encoder_select="aandct"
|
|
wmv3_vaapi_hwaccel_deps="va_va_h"
|
|
wmv3_vaapi_hwaccel_select="vaapi wmv3_decoder"
|
|
wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
|
|
wmv3_vdpau_decoder_select="vdpau wmv3_decoder"
|
|
zlib_decoder_select="zlib"
|
|
zlib_encoder_select="zlib"
|
|
zmbv_decoder_select="zlib"
|
|
zmbv_encoder_select="zlib"
|
|
|
|
# parsers
|
|
h264_parser_select="golomb"
|
|
|
|
# external libraries
|
|
libdirac_decoder_deps="libdirac !libschroedinger"
|
|
libdirac_encoder_deps="libdirac"
|
|
libfaac_encoder_deps="libfaac"
|
|
libfaad_decoder_deps="libfaad"
|
|
libfaadbin_decoder_extralibs='$ldl'
|
|
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"
|
|
libx264_encoder_deps="libx264"
|
|
libxvid_encoder_deps="libxvid"
|
|
|
|
# demuxers / muxers
|
|
ac3_demuxer_deps="ac3_parser"
|
|
asf_stream_muxer_select="asf_muxer"
|
|
avisynth_demuxer_deps="avisynth"
|
|
dirac_demuxer_deps="dirac_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_deps="mpegaudio_parser"
|
|
mp4_muxer_select="mov_muxer"
|
|
mpegtsraw_demuxer_select="mpegts_demuxer"
|
|
mxf_d10_muxer_select="mxf_muxer"
|
|
psp_muxer_select="mov_muxer"
|
|
redir_demuxer_deps="network"
|
|
rtp_muxer_deps="network rtp_protocol"
|
|
rtsp_demuxer_deps="sdp_demuxer"
|
|
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
|
|
tg2_muxer_select="mov_muxer"
|
|
tgp_muxer_select="mov_muxer"
|
|
|
|
# indevs / outdevs
|
|
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
|
|
alsa_indev_extralibs="-lasound"
|
|
alsa_outdev_deps="alsa_asoundlib_h"
|
|
alsa_outdev_extralibs="-lasound"
|
|
audio_beos_indev_deps="audio_beos"
|
|
audio_beos_indev_extralibs="-lmedia -lbe"
|
|
audio_beos_outdev_deps="audio_beos"
|
|
audio_beos_outdev_extralibs="-lmedia -lbe"
|
|
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"
|
|
jack_indev_extralibs="-ljack"
|
|
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_indev_extralibs="-lvfw32"
|
|
x11_grab_device_indev_deps="x11grab XShmCreateImage"
|
|
x11_grab_device_indev_extralibs="-lX11 -lXext"
|
|
|
|
# protocols
|
|
gopher_protocol_deps="network"
|
|
http_protocol_deps="network"
|
|
rtp_protocol_deps="udp_protocol"
|
|
tcp_protocol_deps="network"
|
|
udp_protocol_deps="network"
|
|
|
|
# filters
|
|
movie_filter_deps="avfilter_lavf"
|
|
|
|
# programs
|
|
ffplay_deps="sdl"
|
|
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
|
|
ffserver_extralibs='$ldl'
|
|
|
|
|
|
# default parameters
|
|
|
|
logfile="config.err"
|
|
|
|
# installation paths
|
|
prefix_default="/usr/local"
|
|
bindir_default='${prefix}/bin'
|
|
datadir_default='${prefix}/share/ffmpeg'
|
|
incdir_default='${prefix}/include'
|
|
libdir_default='${prefix}/lib'
|
|
mandir_default='${prefix}/share/man'
|
|
shlibdir_default="$libdir_default"
|
|
|
|
# toolchain
|
|
ar="ar"
|
|
cc_default="gcc"
|
|
host_cc_default="gcc"
|
|
ln_s="ln -sf"
|
|
nm_default="nm"
|
|
objformat="elf"
|
|
ranlib="ranlib"
|
|
strip="strip"
|
|
yasmexe="yasm"
|
|
|
|
# machine
|
|
arch=$(uname -m)
|
|
cpu="generic"
|
|
|
|
# OS
|
|
target_os=$(tolower $(uname -s))
|
|
host_os=$target_os
|
|
|
|
# configurable options
|
|
enable debug
|
|
enable fastdiv
|
|
enable ffmpeg
|
|
enable ffplay
|
|
enable ffserver
|
|
enable ipv6
|
|
enable mpegaudio_hp
|
|
enable network
|
|
enable optimizations
|
|
enable protocols
|
|
enable static
|
|
enable stripping
|
|
enable swscale_alpha
|
|
|
|
# build settings
|
|
SHFLAGS='-shared -Wl,-soname,$$(@F)'
|
|
FFSERVERLDFLAGS=-Wl,-E
|
|
LIBPREF="lib"
|
|
LIBSUF=".a"
|
|
FULLNAME='$(NAME)$(BUILDSUF)'
|
|
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
|
|
SLIBPREF="lib"
|
|
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='-O3 -g -Wall'
|
|
host_libs='-lm'
|
|
|
|
target_path='.'
|
|
|
|
# gcc stupidly only outputs the basename of targets with -MM, but we need the
|
|
# full relative path for objects in subdirectories for non-recursive Make.
|
|
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
|
|
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
|
|
|
|
# find source path
|
|
source_path="$(dirname "$0")"
|
|
enable source_path_used
|
|
if test -z "$source_path" -o "$source_path" = "." ; 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}"
|
|
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 libavcodec/allcodecs.c)
|
|
DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
|
|
HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
|
|
PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
|
|
BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
|
|
MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
|
|
DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
|
|
OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
|
|
INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
|
|
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
|
|
FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
|
|
|
|
enable $ARCH_EXT_LIST \
|
|
$DECODER_LIST \
|
|
$ENCODER_LIST \
|
|
$HWACCEL_LIST \
|
|
$PARSER_LIST \
|
|
$BSF_LIST \
|
|
$DEMUXER_LIST \
|
|
$MUXER_LIST \
|
|
$FILTER_LIST \
|
|
$PROTOCOL_LIST \
|
|
$INDEV_LIST \
|
|
$OUTDEV_LIST \
|
|
|
|
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
|
|
exit 0
|
|
}
|
|
|
|
for opt do
|
|
optval="${opt#*=}"
|
|
case "$opt" in
|
|
--extra-ldflags=*) add_ldflags $optval
|
|
;;
|
|
--extra-libs=*) add_extralibs $optval
|
|
;;
|
|
--disable-devices) disable $INDEV_LIST $OUTDEV_LIST
|
|
;;
|
|
--enable-debug=*) debuglevel="$optval"
|
|
;;
|
|
--enable-*=*|--disable-*=*)
|
|
eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
|
|
case "$thing" in
|
|
encoder|decoder|hwaccel|muxer|demuxer|indev|outdev|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
|
|
*) die_unknown "$opt" ;;
|
|
esac
|
|
;;
|
|
--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
|
|
;;
|
|
*)
|
|
optname="${opt%%=*}"
|
|
optname="${optname#--}"
|
|
optname=$(echo "$optname" | sed 's/-/_/g')
|
|
is_in $optname $CMDLINE_SET || die_unknown $opt
|
|
eval $optname='$optval'
|
|
;;
|
|
esac
|
|
done
|
|
|
|
disabled logging && logfile=/dev/null
|
|
|
|
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
|
|
set >> $logfile
|
|
|
|
test -n "$cross_prefix" && enable cross_compile
|
|
|
|
ar="${cross_prefix}${ar}"
|
|
cc_default="${cross_prefix}${cc_default}"
|
|
nm_default="${cross_prefix}${nm_default}"
|
|
ranlib="${cross_prefix}${ranlib}"
|
|
strip="${cross_prefix}${strip}"
|
|
|
|
sysinclude_default="${sysroot}/usr/include"
|
|
|
|
set_default cc nm sysinclude
|
|
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}/ffconf.XXXXXXXX")$2 &&
|
|
(set -C; exec > $tmp) 2>/dev/null ||
|
|
die "Unable to create temoporary 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 TMPSH .sh
|
|
|
|
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
|
|
|
|
if $cc --version 2>/dev/null | grep -qi gcc; then
|
|
cc_type=gcc
|
|
elif $cc --version 2>/dev/null | grep -q Intel; then
|
|
cc_type=icc
|
|
elif $cc -v 2>&1 | grep -q xlc; then
|
|
cc_type=xlc
|
|
elif $cc -V 2>/dev/null | grep -q Compaq; then
|
|
cc_type=ccc
|
|
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
|
|
debuglevel=3
|
|
add_ldflags -Wl,-z,now # calls to libots crash without this
|
|
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
|
|
test -d "$sysroot" || die "No valid sysroot specified."
|
|
cc_type=armcc
|
|
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"
|
|
fi
|
|
|
|
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
|
|
|
|
: ${as_default:=$cc}
|
|
: ${dep_cc_default:=$cc}
|
|
: ${ld_default:=$cc}
|
|
set_default as dep_cc ld
|
|
|
|
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"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# 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."
|
|
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
|
|
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
|
|
|
|
case "$arch" in
|
|
alpha)
|
|
arch="alpha"
|
|
enable fast_64bit
|
|
check_cflags -mieee
|
|
;;
|
|
arm|armv[4567]*l)
|
|
arch="arm"
|
|
;;
|
|
avr32)
|
|
;;
|
|
bfin)
|
|
arch="bfin"
|
|
;;
|
|
ia64)
|
|
arch="ia64"
|
|
enable fast_64bit
|
|
;;
|
|
m68k)
|
|
arch="m68k"
|
|
;;
|
|
mips|mipsel|IP*)
|
|
arch="mips"
|
|
;;
|
|
mips64)
|
|
arch="mips"
|
|
subarch="mips64"
|
|
enable fast_64bit
|
|
;;
|
|
parisc|hppa)
|
|
arch="parisc"
|
|
;;
|
|
parisc64|hppa64)
|
|
arch="parisc"
|
|
enable fast_64bit
|
|
;;
|
|
"Power Macintosh"|ppc|powerpc)
|
|
arch="ppc"
|
|
enable fast_unaligned
|
|
;;
|
|
ppc64)
|
|
arch="ppc"
|
|
subarch="ppc64"
|
|
enable fast_64bit
|
|
enable fast_unaligned
|
|
;;
|
|
s390|s390x)
|
|
arch="s390"
|
|
;;
|
|
sh4|sh)
|
|
arch="sh4"
|
|
;;
|
|
sparc)
|
|
arch="sparc"
|
|
;;
|
|
sun4u|sparc64)
|
|
arch="sparc"
|
|
subarch="sparc64"
|
|
enable fast_64bit
|
|
;;
|
|
i386|i486|i586|i686|i86pc|BePC)
|
|
arch="x86"
|
|
subarch="x86_32"
|
|
enable fast_unaligned
|
|
;;
|
|
x86_64|amd64)
|
|
arch="x86"
|
|
subarch="x86_32"
|
|
enable cmov
|
|
enable fast_cmov
|
|
enable fast_unaligned
|
|
check_cc <<EOF && enable fast_64bit && subarch="x86_64"
|
|
int test[sizeof(char*) - 7];
|
|
EOF
|
|
;;
|
|
*)
|
|
arch="unknown"
|
|
;;
|
|
esac
|
|
|
|
enable $arch $subarch
|
|
|
|
# OS specific
|
|
case $target_os in
|
|
beos|haiku|zeta)
|
|
prefix_default="$HOME/config"
|
|
# helps building libavcodec
|
|
add_cppflags -DPIC
|
|
add_cflags -fomit-frame-pointer
|
|
# 3 gcc releases known for BeOS, each with ugly bugs
|
|
gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
|
|
case "$gcc_version" in
|
|
2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
|
|
disable mmx
|
|
;;
|
|
*20010315*) echo "BeBits gcc"
|
|
add_cflags -fno-expensive-optimizations
|
|
;;
|
|
esac
|
|
SHFLAGS=-nostart
|
|
# enable BeOS things
|
|
enable audio_beos
|
|
# no need for libm, but the inet stuff
|
|
# Check for BONE
|
|
# XXX: actually should check for NOT net_server
|
|
if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
|
|
network_extralibs="-lbind -lsocket"
|
|
else
|
|
enable beos_netserver
|
|
network_extralibs="-lnet"
|
|
fi ;;
|
|
sunos)
|
|
FFSERVERLDFLAGS=""
|
|
SHFLAGS='-shared -Wl,-h,$$(@F)'
|
|
network_extralibs="-lsocket -lnsl"
|
|
add_cppflags -D__EXTENSIONS__
|
|
;;
|
|
netbsd)
|
|
oss_indev_extralibs="-lossaudio"
|
|
oss_outdev_extralibs="-lossaudio"
|
|
;;
|
|
openbsd)
|
|
enable malloc_aligned
|
|
LIBOBJFLAGS='$(PIC)'
|
|
SHFLAGS='-shared'
|
|
oss_indev_extralibs="-lossaudio"
|
|
oss_outdev_extralibs="-lossaudio"
|
|
;;
|
|
freebsd|dragonfly)
|
|
enable malloc_aligned
|
|
;;
|
|
bsd/os)
|
|
osextralibs="-lpoll -lgnugetopt"
|
|
strip="strip -d"
|
|
;;
|
|
darwin)
|
|
enable malloc_aligned
|
|
SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
|
|
strip="strip -x"
|
|
FFLDFLAGS="-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"
|
|
;;
|
|
mingw32*)
|
|
target_os=mingw32
|
|
LIBTARGET=i386
|
|
if enabled x86_64; then
|
|
enable malloc_aligned
|
|
LIBTARGET=x64
|
|
elif enabled arm; then
|
|
LIBTARGET=arm
|
|
fi
|
|
shlibdir_default="$bindir_default"
|
|
disable ffserver
|
|
SLIBPREF=""
|
|
SLIBSUF=".dll"
|
|
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
|
|
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(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'
|
|
objformat="win32"
|
|
enable dos_paths
|
|
check_cflags -fno-common
|
|
if ! enabled x86_64; then
|
|
check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
|
|
die "ERROR: MinGW runtime version must be >= 3.15."
|
|
enabled_any avisynth vfwcap_demuxer &&
|
|
{ check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
|
|
die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
|
|
fi
|
|
;;
|
|
cygwin*)
|
|
target_os=cygwin
|
|
shlibdir_default="$bindir_default"
|
|
SLIBPREF="cyg"
|
|
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)
|
|
enable dv1394
|
|
;;
|
|
irix*)
|
|
target_os=irix
|
|
ranlib="echo ignoring ranlib"
|
|
;;
|
|
os/2*)
|
|
strip="lxlite"
|
|
ln_s="cp -f"
|
|
FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
|
|
SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
|
|
FFSERVERLDFLAGS=""
|
|
LIBSUF="_s.a"
|
|
SLIBPREF=""
|
|
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)
|
|
;;
|
|
|
|
*)
|
|
die "Unknown OS '$target_os'."
|
|
;;
|
|
esac
|
|
|
|
set_default $PATHS_LIST
|
|
|
|
add_extralibs $osextralibs
|
|
|
|
# Combine FFLDFLAGS and the LDFLAGS environment variable.
|
|
LDFLAGS="$FFLDFLAGS $LDFLAGS"
|
|
|
|
# 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=""
|
|
|
|
if enabled_any libfaad libfaadbin ; then
|
|
if check_header faad.h; then
|
|
check_cc <<EOF
|
|
#include <faad.h>
|
|
#ifndef FAAD2_VERSION
|
|
ok faad1
|
|
#endif
|
|
int main(void) { return 0; }
|
|
EOF
|
|
test $? = 0 && enable libfaad2
|
|
else
|
|
die "FAAD test failed."
|
|
fi
|
|
fi
|
|
|
|
|
|
die_license_disabled() {
|
|
enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
|
|
}
|
|
|
|
die_license_disabled gpl libfaad2
|
|
die_license_disabled gpl libx264
|
|
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
|
|
|
|
#Darwin CC versions
|
|
if test $target_os = darwin; then
|
|
if enabled xlc; then
|
|
add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
|
|
else
|
|
add_cflags -pipe
|
|
check_cflags -force_cpusubtype_ALL
|
|
check_cflags -Wno-sign-compare
|
|
enabled shared || check_cflags -mdynamic-no-pic
|
|
fi
|
|
fi
|
|
|
|
disabled optimizations || check_cflags -fomit-frame-pointer
|
|
|
|
# Add processor-specific flags
|
|
if test $cpu != "generic"; then
|
|
warn_altivec(){
|
|
$1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
|
|
}
|
|
case $cpu in
|
|
601|ppc601|PowerPC601)
|
|
cpuflags="-mcpu=601"
|
|
warn_altivec enabled PPC601
|
|
;;
|
|
603*|ppc603*|PowerPC603*)
|
|
cpuflags="-mcpu=603"
|
|
warn_altivec enabled PPC603
|
|
;;
|
|
604*|ppc604*|PowerPC604*)
|
|
cpuflags="-mcpu=604"
|
|
warn_altivec enabled PPC604
|
|
;;
|
|
G3|g3|75*|ppc75*|PowerPC75*)
|
|
cpuflags="-mcpu=750 -mpowerpc-gfxopt"
|
|
warn_altivec enabled PPC75x
|
|
;;
|
|
G4|g4|745*|ppc745*|PowerPC745*)
|
|
cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
|
|
warn_altivec disabled PPC745x
|
|
;;
|
|
74*|ppc74*|PowerPC74*)
|
|
cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
|
|
warn_altivec disabled PPC74xx
|
|
;;
|
|
G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
|
|
cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
|
|
warn_altivec disabled PPC970
|
|
;;
|
|
Cell|CELL|cell)
|
|
cpuflags="-mcpu=cell"
|
|
warn_altivec disabled Cell
|
|
enable ldbrx
|
|
;;
|
|
# targets that do NOT support conditional mov (cmov)
|
|
i[345]86|pentium|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|core2)
|
|
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
|
|
;;
|
|
sparc64)
|
|
cpuflags="-mcpu=v9"
|
|
;;
|
|
arm11*|cortex*)
|
|
cpuflags="-mcpu=$cpu"
|
|
enable fast_unaligned
|
|
;;
|
|
armv[67]*)
|
|
cpuflags="-march=$cpu"
|
|
enable fast_unaligned
|
|
;;
|
|
armv*)
|
|
cpuflags="-march=$cpu"
|
|
;;
|
|
arm*)
|
|
cpuflags="-mcpu=$cpu"
|
|
;;
|
|
ev4|ev45|ev5|ev56|pca56|ev6|ev67)
|
|
enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
|
|
;;
|
|
bf*)
|
|
cpuflags="-mcpu=$cpu"
|
|
;;
|
|
mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
|
|
cpuflags="-march=$cpu"
|
|
;;
|
|
*)
|
|
echo "WARNING: Unknown CPU \"$cpu\", ignored."
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
add_cflags $cpuflags
|
|
add_asflags $cpuflags
|
|
|
|
check_cc <<EOF || die "Symbol mangling check failed."
|
|
int ff_extern;
|
|
EOF
|
|
sym=$($nm -P -g $TMPO | grep ff_extern)
|
|
extern_prefix=${sym%%ff_extern*}
|
|
|
|
check_cc <<EOF && enable inline_asm
|
|
void foo(void) { __asm__ volatile ("" ::); }
|
|
EOF
|
|
|
|
if enabled x86; then
|
|
# 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 wether EBX is available on x86
|
|
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_all x86_64 shared && append YASMFLAGS "-DPIC"
|
|
case "$objformat" in
|
|
elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
|
|
macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
|
|
*) append YASMFLAGS "-DPREFIX" ;;
|
|
esac
|
|
disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
|
|
fi
|
|
|
|
# check for assembler specific support
|
|
|
|
enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
|
|
|
|
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
|
|
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
|
|
enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
|
|
|
|
# check for SIMD availability
|
|
|
|
# AltiVec flags: The FSF version of GCC differs from the Apple version
|
|
if enabled altivec; then
|
|
check_cflags -maltivec -mabi=altivec &&
|
|
{ check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
|
|
check_cflags -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
|
|
|
|
# We have to check if pld is a nop and disable it.
|
|
enabled arm && 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 mmi && check_asm mmi '"lq $2, 0($2)"'
|
|
enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
|
|
enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
|
|
|
|
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
|
|
|
|
# ---
|
|
# big/little-endian test
|
|
check_cc <<EOF || die "endian test failed"
|
|
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
|
|
EOF
|
|
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
|
|
|
|
# ---
|
|
# check availability of some header files
|
|
|
|
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 fork
|
|
check_func gethrtime
|
|
check_func getrusage
|
|
check_func inet_aton $network_extralibs
|
|
check_func memalign
|
|
check_func mkstemp
|
|
check_func posix_memalign
|
|
check_func_headers io.h setmode
|
|
check_func_headers lzo/lzo1x.h lzo1x_999_compress
|
|
check_func_headers windows.h GetProcessTimes
|
|
check_func_headers windows.h VirtualAlloc
|
|
|
|
check_header conio.h
|
|
check_header dlfcn.h
|
|
check_header malloc.h
|
|
check_header poll.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 X11/extensions/XvMClib.h
|
|
|
|
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
|
|
|
|
# check for some common methods of building with pthread support
|
|
# do this before the optional library checks as some of them require pthreads
|
|
if enabled pthreads; then
|
|
if check_func pthread_create; then
|
|
:
|
|
elif check_func pthread_create -pthread; then
|
|
add_cflags -pthread
|
|
add_extralibs -pthread
|
|
elif check_func pthread_create -pthreads; then
|
|
add_cflags -pthreads
|
|
add_extralibs -pthreads
|
|
elif check_func pthread_create -lpthreadGC2; then
|
|
add_extralibs -lpthreadGC2
|
|
elif ! check_lib pthread.h pthread_create -lpthread; then
|
|
die "ERROR: can't find pthreads library"
|
|
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
|
|
check_lib va/va.h vaInitialize -lva
|
|
|
|
check_func llrint
|
|
check_func log2
|
|
check_func lrint
|
|
check_func lrintf
|
|
check_func round
|
|
check_func roundf
|
|
check_func truncf
|
|
|
|
# these are off by default, so fail if requested and not available
|
|
enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
|
|
enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
|
|
require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
|
|
require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
|
|
enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
|
|
enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
|
|
enabled libgsm && require libgsm gsm.h gsm_create -lgsm
|
|
enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
|
|
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 -lm
|
|
enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
|
|
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
|
|
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/theora.h theora_info_init -ltheora -logg
|
|
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
|
|
enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
|
|
{ check_cpp_condition x264.h "X264_BUILD >= 65" ||
|
|
die "ERROR: libx264 version must be >= 0.65."; }
|
|
enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
|
|
enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
|
|
|
|
# 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 of libdc1394 found "
|
|
fi
|
|
|
|
|
|
_restrict=
|
|
for restrict_keyword in restrict __restrict__ __restrict; do
|
|
check_cc <<EOF && _restrict=$restrict_keyword && break
|
|
void foo(char * $restrict_keyword p);
|
|
EOF
|
|
done
|
|
|
|
##########################################
|
|
# SDL check
|
|
|
|
disable sdl_too_old
|
|
disable sdl
|
|
SDL_CONFIG="${cross_prefix}sdl-config"
|
|
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
|
|
sdl_cflags=$("${SDL_CONFIG}" --cflags)
|
|
temp_cflags $sdl_cflags
|
|
temp_extralibs $("${SDL_CONFIG}" --libs)
|
|
if check_lib2 SDL.h SDL_Init; then
|
|
_sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
|
|
if test "$_sdlversion" -lt 121 ; then
|
|
enable sdl_too_old
|
|
else
|
|
enable sdl
|
|
check_cc $sdl_cflags <<EOF && enable sdl_video_size
|
|
#include <SDL.h>
|
|
int main(int argc, char **argv){
|
|
const SDL_VideoInfo *vi = SDL_GetVideoInfo();
|
|
int w = vi->current_w;
|
|
return 0;
|
|
}
|
|
EOF
|
|
fi
|
|
fi
|
|
restore_flags
|
|
fi
|
|
|
|
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
|
|
|
|
##########################################
|
|
# Network check
|
|
|
|
if enabled network; then
|
|
check_type "sys/types.h sys/socket.h" socklen_t
|
|
# Prefer arpa/inet.h over winsock2
|
|
if check_header arpa/inet.h ; then
|
|
check_func closesocket
|
|
elif check_header winsock2.h ; then
|
|
check_func_headers winsock2.h closesocket -lws2 && \
|
|
network_extralibs="-lws2" || \
|
|
{ check_func_headers winsock2.h closesocket -lws2_32 && \
|
|
network_extralibs="-lws2_32"; }
|
|
check_type ws2tcpip.h socklen_t
|
|
else
|
|
disable network
|
|
fi
|
|
fi
|
|
|
|
##########################################
|
|
# IPv6 check
|
|
|
|
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <netdb.h>
|
|
int main(void) {
|
|
struct sockaddr_storage saddr;
|
|
struct ipv6_mreq mreq6;
|
|
getaddrinfo(0,0,0,0);
|
|
getnameinfo(0,0,0,0,0,0,0);
|
|
IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
|
|
}
|
|
EOF
|
|
|
|
check_header linux/videodev.h
|
|
check_header linux/videodev2.h
|
|
check_header sys/videoio.h
|
|
|
|
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
|
|
|
|
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
|
|
{ check_header dev/bktr/ioctl_meteor.h &&
|
|
check_header dev/bktr/ioctl_bt848.h; } ||
|
|
{ check_header machine/ioctl_meteor.h &&
|
|
check_header machine/ioctl_bt848.h; } ||
|
|
{ check_header dev/video/meteor/ioctl_meteor.h &&
|
|
check_header dev/video/bktr/ioctl_bt848.h; } ||
|
|
check_header dev/ic/bt8xx.h
|
|
|
|
check_header sys/soundcard.h
|
|
check_header soundcard.h
|
|
|
|
enabled alsa_demuxer || enabled alsa_muxer && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
|
|
|
|
enabled jack_demuxer && check_lib2 jack/jack.h jack_client_open -ljack
|
|
|
|
# deal with the X11 frame grabber
|
|
enabled x11grab &&
|
|
check_header X11/Xlib.h &&
|
|
check_header X11/extensions/XShm.h &&
|
|
check_func XOpenDisplay -lX11 &&
|
|
check_func XShmCreateImage -lX11 -lXext
|
|
|
|
enabled debug && add_cflags -g"$debuglevel"
|
|
|
|
# add some useful compiler flags if supported
|
|
check_cflags -Wdeclaration-after-statement
|
|
check_cflags -Wall
|
|
check_cflags -Wno-switch
|
|
check_cflags -Wdisabled-optimization
|
|
check_cflags -Wpointer-arith
|
|
check_cflags -Wredundant-decls
|
|
check_cflags -Wno-pointer-sign
|
|
check_cflags -Wcast-qual
|
|
check_cflags -Wwrite-strings
|
|
check_cflags -Wtype-limits
|
|
check_cflags -Wundef
|
|
enabled extra_warnings && check_cflags -Winline
|
|
|
|
# add some linker flags
|
|
check_ldflags -Wl,--warn-common
|
|
check_ldflags -Wl,--as-needed
|
|
check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
|
|
check_ldflags -Wl,-Bsymbolic
|
|
|
|
if enabled small; then
|
|
check_cflags -Os # not all compilers support -Os
|
|
optimizations="small"
|
|
elif enabled optimizations; then
|
|
if enabled xlc; then
|
|
add_cflags -O5
|
|
add_ldflags -O5
|
|
elif enabled ccc; then
|
|
add_cflags -fast
|
|
else
|
|
add_cflags -O3
|
|
fi
|
|
fi
|
|
check_cflags -fno-math-errno
|
|
check_cflags -fno-signed-zeros
|
|
|
|
# add some flags for Intel C Compiler
|
|
if enabled icc; then
|
|
# Just warnings, no remarks
|
|
check_cflags -w1
|
|
# -wd: Disable following warnings
|
|
# 144, 167, 556: -Wno-pointer-sign
|
|
# 10006: ignoring unknown option -fno-signed-zeros
|
|
# 10156: ignoring option '-W'; no argument required
|
|
check_cflags -wd144,167,556,10006,10156
|
|
# 11030: Warning unknown option --as-needed
|
|
# 10156: ignoring option '-export'; no argument required
|
|
check_ldflags -wd10156,11030
|
|
# Allow to compile with optimizations
|
|
check_ldflags -march=$cpu
|
|
# icc 11.0 and 11.1 work with ebp_available, but don't pass the test
|
|
enable ebp_available
|
|
elif enabled ccc; then
|
|
# disable some annoying warnings
|
|
add_cflags -msg_disable cvtu32to64
|
|
add_cflags -msg_disable embedcomment
|
|
add_cflags -msg_disable needconstext
|
|
add_cflags -msg_disable nomainieee
|
|
add_cflags -msg_disable ptrmismatch1
|
|
add_cflags -msg_disable unreachcode
|
|
elif enabled gcc; then
|
|
check_cflags -fno-tree-vectorize
|
|
fi
|
|
|
|
# PIC flags for shared library objects where they are needed
|
|
if enabled shared; then
|
|
# LIBOBJFLAGS may have already been set in the OS configuration
|
|
if test -z "$LIBOBJFLAGS" ; then
|
|
case "${subarch-$arch}" in
|
|
x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
|
|
esac
|
|
fi
|
|
fi
|
|
|
|
if enabled gprof; then
|
|
add_cflags -p
|
|
add_ldflags -p
|
|
fi
|
|
|
|
# Find out if the .align argument is a power of two or not.
|
|
check_asm asmalign_pot '".align 3"'
|
|
|
|
enabled_any $DECODER_LIST && enable decoders
|
|
enabled_any $ENCODER_LIST && enable encoders
|
|
enabled_any $HWACCEL_LIST && enable hwaccels
|
|
enabled_any $BSF_LIST && enable bsfs
|
|
enabled_any $DEMUXER_LIST && enable demuxers
|
|
enabled_any $MUXER_LIST && enable muxers
|
|
enabled_any $FILTER_LIST && enable filters
|
|
enabled_any $INDEV_LIST && enable demuxers
|
|
enabled_any $OUTDEV_LIST && enable muxers
|
|
enabled_any $PROTOCOL_LIST && enable protocols
|
|
|
|
enabled_any $THREADS_LIST && enable threads
|
|
|
|
check_deps $CONFIG_LIST \
|
|
$CONFIG_EXTRA \
|
|
$HAVE_LIST \
|
|
$DECODER_LIST \
|
|
$ENCODER_LIST \
|
|
$HWACCEL_LIST \
|
|
$PARSER_LIST \
|
|
$BSF_LIST \
|
|
$DEMUXER_LIST \
|
|
$MUXER_LIST \
|
|
$FILTER_LIST \
|
|
$INDEV_LIST \
|
|
$OUTDEV_LIST \
|
|
$PROTOCOL_LIST \
|
|
|
|
echo "install prefix $prefix"
|
|
echo "source path $source_path"
|
|
echo "C compiler $cc"
|
|
echo ".align is power-of-two $asmalign_pot"
|
|
echo "ARCH $arch ($cpu)"
|
|
if test "$build_suffix" != ""; then
|
|
echo "build suffix $build_suffix"
|
|
fi
|
|
if test "$extra_version" != ""; then
|
|
echo "version string suffix $extra_version"
|
|
fi
|
|
echo "big-endian ${bigendian-no}"
|
|
echo "runtime cpu detection ${runtime_cpudetect-no}"
|
|
if enabled x86; then
|
|
echo "yasm ${yasm-no}"
|
|
echo "MMX enabled ${mmx-no}"
|
|
echo "MMX2 enabled ${mmx2-no}"
|
|
echo "3DNow! enabled ${amd3dnow-no}"
|
|
echo "3DNow! extended enabled ${amd3dnowext-no}"
|
|
echo "SSE enabled ${sse-no}"
|
|
echo "SSSE3 enabled ${ssse3-no}"
|
|
echo "CMOV enabled ${cmov-no}"
|
|
echo "CMOV is fast ${fast_cmov-no}"
|
|
echo "EBX available ${ebx_available-no}"
|
|
echo "EBP available ${ebp_available-no}"
|
|
echo "10 operands supported ${ten_operands-no}"
|
|
fi
|
|
if enabled arm; then
|
|
echo "ARMv5TE enabled ${armv5te-no}"
|
|
echo "ARMv6 enabled ${armv6-no}"
|
|
echo "ARMv6T2 enabled ${armv6t2-no}"
|
|
echo "ARM VFP enabled ${armvfp-no}"
|
|
echo "IWMMXT enabled ${iwmmxt-no}"
|
|
echo "NEON enabled ${neon-no}"
|
|
fi
|
|
if enabled mips; then
|
|
echo "MMI enabled ${mmi-no}"
|
|
fi
|
|
if enabled ppc; then
|
|
echo "AltiVec enabled ${altivec-no}"
|
|
echo "PPC 4xx optimizations ${ppc4xx-no}"
|
|
echo "dcbzl available ${dcbzl-no}"
|
|
echo "performance report ${powerpc_perf-no}"
|
|
fi
|
|
if enabled sparc; then
|
|
echo "VIS enabled ${vis-no}"
|
|
fi
|
|
echo "gprof enabled ${gprof-no}"
|
|
echo "debug symbols ${debug-no}"
|
|
echo "strip symbols ${stripping-no}"
|
|
echo "optimizations ${optimizations-no}"
|
|
echo "static ${static-no}"
|
|
echo "shared ${shared-no}"
|
|
echo "postprocessing support ${postproc-no}"
|
|
echo "new filter support ${avfilter-no}"
|
|
echo "filters using lavformat ${avfilter_lavf-no}"
|
|
echo "network support ${network-no}"
|
|
if enabled network; then
|
|
echo "IPv6 support ${ipv6-no}"
|
|
fi
|
|
echo "threading support ${thread_type-no}"
|
|
echo "SDL support ${sdl-no}"
|
|
if enabled sdl_too_old; then
|
|
echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
|
|
fi
|
|
echo "Sun medialib support ${mlib-no}"
|
|
echo "AVISynth enabled ${avisynth-no}"
|
|
echo "libdc1394 support ${libdc1394-no}"
|
|
echo "libdirac enabled ${libdirac-no}"
|
|
echo "libfaac enabled ${libfaac-no}"
|
|
echo "libfaad enabled ${libfaad-no}"
|
|
echo "libfaad dlopened ${libfaadbin-no}"
|
|
echo "libgsm enabled ${libgsm-no}"
|
|
echo "libmp3lame enabled ${libmp3lame-no}"
|
|
echo "libnut enabled ${libnut-no}"
|
|
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
|
|
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
|
|
echo "libopenjpeg enabled ${libopenjpeg-no}"
|
|
echo "libschroedinger enabled ${libschroedinger-no}"
|
|
echo "libspeex enabled ${libspeex-no}"
|
|
echo "libtheora enabled ${libtheora-no}"
|
|
echo "libvorbis enabled ${libvorbis-no}"
|
|
echo "libx264 enabled ${libx264-no}"
|
|
echo "libxvid enabled ${libxvid-no}"
|
|
echo "zlib enabled ${zlib-no}"
|
|
echo "bzlib enabled ${bzlib-no}"
|
|
echo
|
|
|
|
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
|
|
echo "Enabled ${type}s:"
|
|
eval list=\$$(toupper $type)_LIST
|
|
for part in $list; do
|
|
enabled $part && echo ${part%_*}
|
|
done | sort | pr -3 -t
|
|
echo
|
|
done
|
|
|
|
license="LGPL version 2.1 or later"
|
|
if enabled nonfree; then
|
|
license="nonfree and unredistributable"
|
|
elif enabled gplv3; then
|
|
license="GPL version 3 or later"
|
|
elif enabled lgplv3; then
|
|
license="LGPL version 3 or later"
|
|
elif enabled gpl; then
|
|
license="GPL version 2 or later"
|
|
fi
|
|
|
|
echo "License: $license"
|
|
|
|
echo "Creating config.mak and config.h..."
|
|
|
|
echo "# Automatically generated by configure - do not modify!" > config.mak
|
|
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
|
|
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
|
|
echo "#define FFMPEG_CONFIG_H" >> $TMPH
|
|
echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
|
|
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
|
|
|
|
echo "ifndef FFMPEG_CONFIG_MAK" >> config.mak
|
|
echo "FFMPEG_CONFIG_MAK=1" >> config.mak
|
|
|
|
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
|
|
echo "prefix=$prefix" >> config.mak
|
|
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
|
|
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
|
|
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
|
|
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
|
|
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
|
|
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
|
|
echo "SRC_PATH=\"$source_path\"" >> config.mak
|
|
echo "SRC_PATH_BARE=$source_path" >> config.mak
|
|
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
|
|
echo "CC=$cc" >> config.mak
|
|
echo "AS=$as" >> config.mak
|
|
echo "LD=$ld" >> config.mak
|
|
echo "DEPCC=$dep_cc" >> config.mak
|
|
echo "YASM=$yasmexe" >> config.mak
|
|
echo "AR=$ar" >> config.mak
|
|
echo "RANLIB=$ranlib" >> config.mak
|
|
echo "LN_S=$ln_s" >> config.mak
|
|
enabled stripping &&
|
|
echo "STRIP=$strip" >> config.mak ||
|
|
echo "STRIP=echo ignoring strip" >> config.mak
|
|
|
|
echo "CPPFLAGS=$CPPFLAGS" >> config.mak
|
|
echo "CFLAGS=$CFLAGS" >> config.mak
|
|
echo "ASFLAGS=$ASFLAGS" >> config.mak
|
|
echo "CC_O=$CC_O" >> config.mak
|
|
echo "LDFLAGS=$LDFLAGS" >> config.mak
|
|
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
|
|
echo "SHFLAGS=$SHFLAGS" >> config.mak
|
|
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
|
|
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
|
|
echo "BUILD_STATIC=$static" >> config.mak
|
|
echo "BUILDSUF=$build_suffix" >> config.mak
|
|
echo "FULLNAME=$FULLNAME" >> config.mak
|
|
echo "LIBPREF=$LIBPREF" >> config.mak
|
|
echo "LIBSUF=$LIBSUF" >> config.mak
|
|
echo "LIBNAME=$LIBNAME" >> config.mak
|
|
echo "SLIBPREF=$SLIBPREF" >> config.mak
|
|
echo "SLIBSUF=$SLIBSUF" >> config.mak
|
|
echo "EXESUF=$EXESUF" >> config.mak
|
|
echo "EXTRA_VERSION=$extra_version" >> config.mak
|
|
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
|
|
echo "DEPFLAGS=$DEPFLAGS" >> config.mak
|
|
echo "HOSTCC=$host_cc" >> config.mak
|
|
echo "HOSTCFLAGS=$host_cflags" >> config.mak
|
|
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
|
|
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
|
|
echo "HOSTLIBS=$host_libs" >> config.mak
|
|
echo "TARGET_EXEC=$target_exec" >> config.mak
|
|
echo "TARGET_PATH=$target_path" >> config.mak
|
|
|
|
if enabled bigendian; then
|
|
echo "WORDS_BIGENDIAN=yes" >> config.mak
|
|
echo "#define WORDS_BIGENDIAN 1" >> $TMPH
|
|
fi
|
|
|
|
if enabled sdl; then
|
|
echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
|
|
echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
|
|
fi
|
|
if enabled texi2html; then
|
|
echo "BUILD_DOC=yes" >> config.mak
|
|
fi
|
|
|
|
get_version(){
|
|
name=$1
|
|
file=$source_path/$2
|
|
eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
|
|
eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
|
|
lcname=$(tolower $name)
|
|
eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
|
|
eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
|
|
}
|
|
|
|
get_version LIBSWSCALE libswscale/swscale.h
|
|
get_version LIBPOSTPROC libpostproc/postprocess.h
|
|
get_version LIBAVCODEC libavcodec/avcodec.h
|
|
get_version LIBAVDEVICE libavdevice/avdevice.h
|
|
get_version LIBAVFORMAT libavformat/avformat.h
|
|
get_version LIBAVUTIL libavutil/avutil.h
|
|
get_version LIBAVFILTER libavfilter/avfilter.h
|
|
|
|
if enabled shared; then
|
|
echo "BUILD_SHARED=yes" >> config.mak
|
|
echo "PIC=-fPIC -DPIC" >> config.mak
|
|
echo "LIBTARGET=${LIBTARGET}" >> config.mak
|
|
echo "SLIBNAME=${SLIBNAME}" >> config.mak
|
|
echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
|
|
echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
|
|
echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
|
|
echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
|
|
echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
|
|
echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
|
|
fi
|
|
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
|
|
echo "EXTRALIBS=$extralibs" >> config.mak
|
|
|
|
echo "ARCH=$arch" >> config.mak
|
|
|
|
print_config ARCH_ $TMPH config.mak $ARCH_LIST
|
|
print_config HAVE_ $TMPH config.mak $HAVE_LIST
|
|
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
|
|
$CONFIG_EXTRA \
|
|
$DECODER_LIST \
|
|
$ENCODER_LIST \
|
|
$HWACCEL_LIST \
|
|
$PARSER_LIST \
|
|
$BSF_LIST \
|
|
$DEMUXER_LIST \
|
|
$MUXER_LIST \
|
|
$FILTER_LIST \
|
|
$PROTOCOL_LIST \
|
|
$INDEV_LIST \
|
|
$OUTDEV_LIST \
|
|
|
|
echo "#define restrict $_restrict" >> $TMPH
|
|
|
|
if enabled small; then
|
|
echo "#define av_always_inline" >> $TMPH
|
|
fi
|
|
|
|
|
|
# Apparently it's not possible to portably echo a backslash.
|
|
enabled asmalign_pot &&
|
|
printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
|
|
printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
|
|
|
|
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
|
|
|
|
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
|
|
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
|
|
|
|
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
|
|
cmp -s $TMPH config.h &&
|
|
echo "config.h is unchanged" ||
|
|
mv -f $TMPH config.h
|
|
|
|
# build tree in object directory if source path is different from current one
|
|
if enabled source_path_used; then
|
|
DIRS="\
|
|
doc \
|
|
libavcodec \
|
|
libavcodec/alpha \
|
|
libavcodec/arm \
|
|
libavcodec/bfin \
|
|
libavcodec/mlib \
|
|
libavcodec/ppc \
|
|
libavcodec/sh4 \
|
|
libavcodec/sparc \
|
|
libavcodec/x86 \
|
|
libavdevice \
|
|
libavfilter \
|
|
libavformat \
|
|
libavutil \
|
|
libpostproc \
|
|
libswscale \
|
|
libswscale/bfin \
|
|
libswscale/mlib \
|
|
libswscale/ppc \
|
|
libswscale/sparc \
|
|
libswscale/x86 \
|
|
tests \
|
|
tools \
|
|
"
|
|
FILES="\
|
|
Makefile \
|
|
common.mak \
|
|
subdir.mak \
|
|
doc/texi2pod.pl \
|
|
libavcodec/Makefile \
|
|
libavdevice/Makefile \
|
|
libavfilter/Makefile \
|
|
libavformat/Makefile \
|
|
libavutil/Makefile \
|
|
libpostproc/Makefile \
|
|
libswscale/Makefile \
|
|
"
|
|
for dir in $DIRS ; do
|
|
mkdir -p $dir
|
|
done
|
|
for f in $FILES ; do
|
|
$ln_s "$source_path/$f" $f
|
|
done
|
|
fi
|
|
|
|
|
|
# build pkg-config files
|
|
|
|
pkgconfig_generate(){
|
|
name=$1
|
|
shortname=${name#lib}${build_suffix}
|
|
comment=$2
|
|
version=$3
|
|
libs=$4
|
|
requires=$5
|
|
cat <<EOF > $name/$name.pc
|
|
prefix=$prefix
|
|
exec_prefix=\${prefix}
|
|
libdir=$libdir
|
|
includedir=$incdir
|
|
|
|
Name: $name
|
|
Description: $comment
|
|
Version: $version
|
|
Requires: $(disabled shared && echo $requires)
|
|
Requires.private: $(enabled shared && echo $requires)
|
|
Conflicts:
|
|
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
|
|
Libs.private: $(enabled shared && echo $libs)
|
|
Cflags: -I\${includedir}
|
|
EOF
|
|
cat <<EOF > $name/$name-uninstalled.pc
|
|
prefix=
|
|
exec_prefix=
|
|
libdir=\${pcfiledir}
|
|
includedir=${source_path}
|
|
|
|
Name: $name
|
|
Description: $comment
|
|
Version: $version
|
|
Requires: $requires
|
|
Conflicts:
|
|
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
|
|
Cflags: -I\${includedir}
|
|
EOF
|
|
}
|
|
|
|
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
|
|
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
|
|
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
|
|
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
|
|
enabled avfilter &&
|
|
pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
|
|
enabled postproc &&
|
|
pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
|
|
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
|