--prefix=PREFIX install in PREFIX [$prefix]
--bindir=DIR install binaries in DIR [PREFIX/bin]
--datadir=DIR install data files in DIR [PREFIX/share/avconv]
+ --docdir=DIR install documentation in DIR [PREFIX/share/doc/libav]
--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]
--disable-avresample disable libavresample build [no]
--disable-pthreads disable pthreads [auto]
--disable-w32threads disable Win32 threads [auto]
- --enable-x11grab enable X11 grabbing [no]
--disable-network disable network support [no]
--disable-dct disable DCT code
+ --disable-error-resilience disable error resilience code
--disable-lsp disable LSP code
--disable-lzo disable LZO decoder code
--disable-mdct disable MDCT code
--disable-rdft disable RDFT code
--disable-fft disable FFT code
+
+Hardware accelerators:
--enable-dxva2 enable DXVA2 code
--enable-vaapi enable VAAPI code
--enable-vda enable VDA code
--disable-filters disable all filters
External library support:
- --enable-avisynth enable reading of AVISynth script files [no]
+ --enable-avisynth enable reading of AviSynth script files [no]
--enable-bzlib enable bzlib [autodetect]
--enable-frei0r enable frei0r video filtering
--enable-gnutls enable gnutls [no]
--enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
and libraw1394 [no]
--enable-libfaac enable AAC encoding via libfaac [no]
- --enable-libfdk-aac enable AAC encoding via libfdk-aac [no]
+ --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
--enable-libfreetype enable libfreetype [no]
--enable-libgsm enable GSM de/encoding via libgsm [no]
--enable-libilbc enable iLBC de/encoding via libilbc [no]
--enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
--enable-libvorbis enable Vorbis encoding via libvorbis [no]
--enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
+ --enable-libwavpack enable wavpack encoding via libwavpack [no]
+ --enable-libwebp enable WebP encoding via libwebp [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-openssl enable openssl [no]
+ --enable-x11grab enable X11 grabbing [no]
--enable-zlib enable zlib [autodetect]
Advanced options (experts only):
--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
+ --target-samples=DIR path to samples directory on target
--toolchain=NAME set tool defaults according to NAME
--nm=NM use nm tool
--ar=AR use archive tool AR [$ar_default]
--ld=LD use linker LD
--host-cc=HOSTCC use host C compiler HOSTCC
--host-cflags=HCFLAGS use HCFLAGS when compiling for host
+ --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
--host-ld=HOSTLD use host linker HOSTLD
--host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
--host-libs=HLIBS use libs HLIBS when linking for host
--disable-sse42 disable SSE4.2 optimizations
--disable-avx disable AVX optimizations
--disable-fma4 disable FMA4 optimizations
+ --disable-avx2 disable AVX2 optimizations
--disable-armv5te disable armv5te optimizations
--disable-armv6 disable armv6 optimizations
--disable-armv6t2 disable armv6t2 optimizations
--enable-extra-warnings enable more compiler warnings
--samples=PATH location of test samples for FATE, if not set use
\$LIBAV_SAMPLES at make invocation time.
+ --enable-neon-clobber-test check NEON registers for clobbering (should be
+ used only for debugging purposes)
--enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
should be used only for debugging purposes)
--enable-random randomly enable/disable components
If you think configure made a mistake, make sure you are using the latest
version from Git. If the latest version fails, report the problem to the
-libav-user@libav.org mailing list or IRC #libav on irc.freenode.net.
+libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
EOF
if disabled logging; then
cat <<EOF
done
}
+sanitize_var_name(){
+ echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
+}
+
set_safe(){
var=$1
shift
- eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
+ eval $(sanitize_var_name "$var")='$*'
}
get_safe(){
- eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
+ eval echo \$$(sanitize_var_name "$1")
}
pushvar(){
- for var in $*; do
- eval level=\${${var}_level:=0}
- eval ${var}_${level}="\$$var"
- eval ${var}_level=$(($level+1))
+ for pvar in $*; do
+ eval level=\${${pvar}_level:=0}
+ eval ${pvar}_${level}="\$$pvar"
+ eval ${pvar}_level=$(($level+1))
done
}
popvar(){
- for var in $*; do
- eval level=\${${var}_level:-0}
+ for pvar in $*; do
+ eval level=\${${pvar}_level:-0}
test $level = 0 && continue
eval level=$(($level-1))
- eval $var="\${${var}_${level}}"
- eval ${var}_level=$level
- eval unset ${var}_${level}
+ eval $pvar="\${${pvar}_${level}}"
+ eval ${pvar}_level=$level
+ eval unset ${pvar}_${level}
done
}
}
enable_deep_weak(){
- do_enable_deep $*
- enable_weak $*
+ for var; do
+ disabled $var && continue
+ pushvar var
+ do_enable_deep $var
+ popvar var
+ enable_weak $var
+ done
}
enabled(){
append LDFLAGS $($ldflags_filter "$@")
}
+add_stripflags(){
+ append STRIPFLAGS "$@"
+}
+
add_extralibs(){
prepend extralibs $($ldflags_filter "$@")
}
+add_host_cppflags(){
+ append host_cppflags "$@"
+}
+
add_host_cflags(){
append host_cflags $($host_cflags_filter "$@")
}
check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
}
+print_include(){
+ hdr=$1
+ test "${hdr%.h}" = "${hdr}" &&
+ echo "#include $hdr" ||
+ echo "#include <$hdr>"
+}
+
check_code(){
log check_code "$@"
check=$1
shift 3
{
for hdr in $headers; do
- echo "#include <$hdr>"
+ print_include $hdr
done
echo "int main(void) { $code; return 0; }"
} | check_$check "$@"
EOF
}
-check_cflags(){
- log check_cflags "$@"
+test_cflags(){
+ log test_cflags "$@"
set -- $($cflags_filter "$@")
- check_cc "$@" <<EOF && append CFLAGS "$@"
+ check_cc "$@" <<EOF
int x;
EOF
}
+check_cflags(){
+ log check_cflags "$@"
+ test_cflags "$@" && add_cflags "$@"
+}
+
test_ldflags(){
log test_ldflags "$@"
check_ld "$@" <<EOF
test_ldflags "$@" && add_ldflags "$@"
}
+test_stripflags(){
+ log test_stripflags "$@"
+ # call check_cc to get a fresh TMPO
+ check_cc <<EOF
+int main(void) { return 0; }
+EOF
+ check_cmd $strip $STRIPFLAGS "$@" $TMPO
+}
+
+check_stripflags(){
+ log check_stripflags "$@"
+ test_stripflags "$@" && add_stripflags "$@"
+}
+
check_header(){
log check_header "$@"
header=$1
shift 2
{
for hdr in $headers; do
- echo "#include <$hdr>"
+ print_include $hdr
done
for func in $funcs; do
echo "long check_$func(void) { return (long) $func; }"
headers="$2"
funcs="$3"
shift 3
- $pkg_config --exists $pkg || return
+ check_cmd $pkg_config --exists --print-errors $pkg || return
pkg_cflags=$($pkg_config --cflags $pkg)
pkg_libs=$($pkg_config --libs $pkg)
check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
int foo(void){
$code
}
+int (*func_ptr)(void) = foo;
int main(void){
signal(SIGILL, sighandler);
signal(SIGFPE, sighandler);
#ifdef SIGBUS
signal(SIGBUS, sighandler);
#endif
- foo();
+ return func_ptr();
}
EOF
}
}
check_struct(){
- log check_type "$@"
+ log check_struct "$@"
headers=$1
struct=$2
member=$3
enable_safe "${struct}_${member}"
}
+check_builtin(){
+ log check_builtin "$@"
+ name=$1
+ headers=$2
+ builtin=$3
+ shift 3
+ disable "$name"
+ check_code ld "$headers" "$builtin" "$@" && enable "$name"
+}
+
require(){
name="$1"
header="$2"
add_extralibs $(get_safe ${pkg}_libs)
}
+hostcc_e(){
+ eval printf '%s\\n' $HOSTCC_E
+}
+
hostcc_o(){
eval printf '%s\\n' $HOSTCC_O
}
check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
}
+check_host_cpp(){
+ log check_host_cpp "$@"
+ cat > $TMPC
+ log_file $TMPC
+ check_cmd $host_cc $HOSTCPPFLAGS $HOSTCFLAGS "$@" $(hostcc_e $TMPO) $TMPC
+}
+
+check_host_cppflags(){
+ log check_host_cppflags "$@"
+ check_host_cc "$@" <<EOF && append host_cppflags "$@"
+int x;
+EOF
+}
+
check_host_cflags(){
log check_host_cflags "$@"
set -- $($host_cflags_filter "$@")
EOF
}
+check_host_cpp_condition(){
+ log check_host_cpp_condition "$@"
+ header=$1
+ condition=$2
+ shift 2
+ check_host_cpp "$@" <<EOF
+#include <$header>
+#if !($condition)
+#error "unsatisfied condition: $condition"
+#endif
+EOF
+}
+
apply(){
file=$1
shift
protocols
"
-LIBRARY_LIST="
- avcodec
- avdevice
- avfilter
- avformat
- avresample
- avutil
- swscale
-"
-
-PROGRAM_LIST="
- avconv
- avplay
- avprobe
- avserver
+EXAMPLE_LIST="
+ output_example
+ transcode_aac_example
"
-CONFIG_LIST="
- $COMPONENT_LIST
- $LIBRARY_LIST
- $PROGRAM_LIST
+EXTERNAL_LIBRARY_LIST="
avisynth
bzlib
- dct
- doc
- dxva2
- fft
frei0r
gnutls
- gpl
- gray
- hardcoded_tables
libcdio
libdc1394
libfaac
libvo_amrwbenc
libvorbis
libvpx
+ libwavpack
+ libwebp
libx264
libxavs
libxvid
+ openssl
+ x11grab
+ zlib
+"
+
+HWACCEL_LIST="
+ dxva2
+ vaapi
+ vda
+ vdpau
+"
+LIBRARY_LIST="
+ avcodec
+ avdevice
+ avfilter
+ avformat
+ avresample
+ avutil
+ swscale
+"
+
+PROGRAM_LIST="
+ avconv
+ avplay
+ avprobe
+ avserver
+"
+
+CONFIG_LIST="
+ $COMPONENT_LIST
+ $EXAMPLE_LIST
+ $EXTERNAL_LIBRARY_LIST
+ $HWACCEL_LIST
+ $LIBRARY_LIST
+ $PROGRAM_LIST
+ dct
+ doc
+ error_resilience
+ fft
+ gpl
+ gray
+ hardcoded_tables
lsp
lzo
mdct
memalign_hack
+ neon_clobber_test
network
nonfree
- openssl
+ pod2man
pic
rdft
runtime_cpudetect
sram
static
swscale_alpha
+ texi2html
thumb
- vaapi
- vda
- vdpau
version3
xmm_clobber_test
- x11grab
- zlib
"
THREADS_LIST='
w32threads
'
+ATOMICS_LIST='
+ atomics_gcc
+ atomics_suncc
+ atomics_win32
+'
+
ARCH_LIST='
aarch64
alpha
amd3dnow
amd3dnowext
avx
+ avx2
fma4
+ i686
mmx
mmxext
sse
$HAVE_LIST_CMDLINE
$HAVE_LIST_PUB
$THREADS_LIST
+ $ATOMICS_LIST
$MATH_FUNCS
aligned_malloc
aligned_stack
arpa_inet_h
asm_mod_q
asm_mod_y
+ atomic_cas_ptr
+ atomics_native
attribute_may_alias
attribute_packed
cdio_paranoia_h
cdio_paranoia_paranoia_h
closesocket
- cmov
CommandLineToArgvW
cpunop
CryptGenRandom
ibm_asm
inet_aton
io_h
+ inline_asm_labels
isatty
jack_port_get_latency_range
ldbrx
+ libc_msvcrt
libdc1394_1
libdc1394_2
local_aligned_16
loongson
machine_ioctl_bt848_h
machine_ioctl_meteor_h
+ machine_rw_barrier
malloc_h
MapViewOfFile
memalign
+ MemoryBarrier
mkstemp
mm_empty
mmap
mprotect
- msvcrt
nanosleep
poll_h
posix_memalign
+ pragma_deprecated
rdtsc
sched_getaffinity
sdl
- sdl_video_size
SetConsoleTextAttribute
setmode
setrlimit
struct_v4l2_frmivalenum_discrete
symver_asm_label
symver_gnu_asm
+ sync_val_compare_and_swap
sysconf
sysctl
sys_mman_h
sys_select_h
sys_soundcard_h
sys_time_h
+ sys_un_h
sys_videoio_h
threads
unistd_h
usleep
+ vdpau_x11
vfp_args
VirtualAlloc
windows_h
winsock2_h
xform_asm
+ xlib
xmm_clobbers
"
CONFIG_EXTRA="
aandcttables
ac3dsp
- error_resilience
+ audio_frame_queue
+ dsputil
gcrypt
golomb
gplv3
+ h263dsp
h264chroma
h264dsp
h264pred
h264qpel
+ hpeldsp
huffman
+ intrax8
lgplv3
lpc
mpegaudio
mpegvideoenc
nettle
rangecoder
+ riffdec
+ riffenc
rtpdec
rtpenc_chain
sinewin
PATHS_LIST='
bindir
datadir
+ docdir
incdir
libdir
mandir
target_exec
target_os
target_path
+ target_samples
toolchain
"
CMDLINE_APPEND="
extra_cflags
+ host_cppflags
"
# code dependency declarations
armv5te_deps="arm"
armv6_deps="arm"
armv6t2_deps="arm"
-neon_deps="arm"
-vfp_deps="arm"
+neon_deps_any="aarch64 arm"
+vfp_deps_any="aarch64 arm"
vfpv3_deps="vfp"
map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
vis_deps="sparc"
-x86_64_suggest="cmov fast_cmov"
+cpunop_deps="i686"
+x86_64_select="i686"
+x86_64_suggest="fast_cmov"
amd3dnow_deps="mmx"
amd3dnowext_deps="amd3dnow"
sse42_deps="sse4"
avx_deps="sse42"
fma4_deps="avx"
+avx2_deps="avx"
mmx_external_deps="yasm"
mmx_inline_deps="inline_asm"
eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
done
-aligned_stack_if_any="ppc x86"
-fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
-fast_clz_if_any="alpha avr32 mips ppc x86"
-fast_unaligned_if_any="ppc x86"
+aligned_stack_if_any="aarch64 ppc x86"
+fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
+fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
+fast_unaligned_if_any="aarch64 ppc x86"
-inline_asm_deps="!tms470"
need_memalign="altivec neon sse"
+# system capabilities
+log2_deps="!libc_msvcrt"
+
symver_if_any="symver_asm_label symver_gnu_asm"
-log2_deps="!msvcrt"
+# threading support
+atomics_gcc_if="sync_val_compare_and_swap"
+atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
+atomics_win32_if="MemoryBarrier"
+atomics_native_if_any="$ATOMICS_LIST"
+threads_if_any="$THREADS_LIST"
# subsystems
dct_select="rdft"
+error_resilience_select="dsputil"
+lpc_select="dsputil"
mdct_select="fft"
rdft_select="fft"
mpegaudio_select="mpegaudiodsp"
mpegaudiodsp_select="dct"
-mpegvideo_select="videodsp"
+mpegvideo_select="dsputil hpeldsp videodsp"
mpegvideoenc_select="mpegvideo"
# decoders / encoders
aac_decoder_select="mdct sinewin"
-aac_encoder_select="mdct sinewin"
+aac_encoder_select="audio_frame_queue mdct sinewin"
aac_latm_decoder_select="aac_decoder aac_latm_parser"
-ac3_decoder_select="mdct ac3dsp ac3_parser"
-ac3_encoder_select="mdct ac3dsp"
-ac3_fixed_encoder_select="mdct ac3dsp"
+ac3_decoder_select="mdct ac3dsp ac3_parser dsputil"
+ac3_encoder_select="mdct ac3dsp dsputil"
+ac3_fixed_encoder_select="mdct ac3dsp dsputil"
+aic_decoder_select="dsputil golomb"
alac_encoder_select="lpc"
+als_decoder_select="dsputil"
amrnb_decoder_select="lsp"
amrwb_decoder_select="lsp"
+amv_decoder_select="dsputil hpeldsp"
+ape_decoder_select="dsputil"
+asv1_decoder_select="dsputil"
+asv1_encoder_select="dsputil"
+asv2_decoder_select="dsputil"
+asv2_encoder_select="dsputil"
atrac1_decoder_select="mdct sinewin"
atrac3_decoder_select="mdct"
+atrac3p_decoder_select="mdct sinewin"
+bink_decoder_select="dsputil hpeldsp"
binkaudio_dct_decoder_select="mdct rdft dct sinewin"
binkaudio_rdft_decoder_select="mdct rdft sinewin"
-cavs_decoder_select="golomb mpegvideo"
+cavs_decoder_select="dsputil golomb h264chroma videodsp"
+cllc_decoder_select="dsputil"
comfortnoise_encoder_select="lpc"
-cook_decoder_select="mdct sinewin"
+cook_decoder_select="dsputil mdct sinewin"
cscd_decoder_select="lzo"
cscd_decoder_suggest="zlib"
dca_decoder_select="mdct"
-dnxhd_encoder_select="aandcttables mpegvideoenc"
-dxa_decoder_select="zlib"
+dnxhd_decoder_select="dsputil"
+dnxhd_encoder_select="aandcttables dsputil mpegvideoenc"
+dvvideo_decoder_select="dsputil"
+dvvideo_encoder_select="dsputil"
+dxa_decoder_deps="zlib"
eac3_decoder_select="ac3_decoder"
eac3_encoder_select="ac3_encoder"
-eamad_decoder_select="aandcttables error_resilience mpegvideo"
-eatgq_decoder_select="aandcttables"
+eamad_decoder_select="aandcttables dsputil mpegvideo"
+eatgq_decoder_select="aandcttables dsputil"
eatqi_decoder_select="aandcttables error_resilience mpegvideo"
-ffv1_decoder_select="golomb rangecoder"
-ffv1_encoder_select="rangecoder"
-ffvhuff_encoder_select="huffman"
+ffv1_decoder_select="dsputil golomb rangecoder"
+ffv1_encoder_select="dsputil rangecoder"
+ffvhuff_decoder_select="dsputil"
+ffvhuff_encoder_select="dsputil huffman"
flac_decoder_select="golomb"
-flac_encoder_select="golomb lpc"
-flashsv_decoder_select="zlib"
-flashsv_encoder_select="zlib"
-flashsv2_decoder_select="zlib"
+flac_encoder_select="dsputil golomb lpc"
+flashsv_decoder_deps="zlib"
+flashsv_encoder_deps="zlib"
+flashsv2_decoder_deps="zlib"
flv_decoder_select="h263_decoder"
flv_encoder_select="h263_encoder"
-fraps_decoder_select="huffman"
+fourxm_decoder_select="dsputil"
+fraps_decoder_select="dsputil huffman"
+g2m_decoder_deps="zlib"
+g2m_decoder_select="dsputil"
h261_decoder_select="error_resilience mpegvideo"
h261_encoder_select="aandcttables mpegvideoenc"
-h263_decoder_select="error_resilience h263_parser mpegvideo"
-h263_encoder_select="aandcttables error_resilience mpegvideoenc"
+h263_decoder_select="error_resilience h263_parser h263dsp mpegvideo"
+h263_encoder_select="aandcttables h263dsp mpegvideoenc"
h263i_decoder_select="h263_decoder"
h263p_encoder_select="h263_encoder"
-h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
-huffyuv_encoder_select="huffman"
-iac_decoder_select="fft mdct sinewin"
-imc_decoder_select="fft mdct sinewin"
-jpegls_decoder_select="golomb"
+h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
+h264_decoder_suggest="error_resilience"
+hevc_decoder_select="dsputil golomb videodsp"
+huffyuv_decoder_select="dsputil"
+huffyuv_encoder_select="dsputil huffman"
+iac_decoder_select="dsputil fft mdct sinewin"
+imc_decoder_select="dsputil fft mdct sinewin"
+indeo3_decoder_select="hpeldsp"
+interplay_video_decoder_select="hpeldsp"
+jpegls_decoder_select="dsputil golomb hpeldsp"
jpegls_encoder_select="golomb"
+jv_decoder_select="dsputil"
+lagarith_decoder_select="dsputil"
ljpeg_encoder_select="aandcttables mpegvideoenc"
loco_decoder_select="golomb"
-mdec_decoder_select="error_resilience mpegvideo"
-mjpeg_encoder_select="aandcttables mpegvideoenc"
-mlp_decoder_select="mlp_parser"
+mdec_decoder_select="dsputil error_resilience mpegvideo"
+metasound_decoder_select="lsp mdct sinewin"
+mimic_decoder_select="dsputil hpeldsp"
+mjpeg_decoder_select="dsputil hpeldsp"
+mjpegb_decoder_select="dsputil hpeldsp"
+mjpeg_encoder_select="aandcttables dsputil mpegvideoenc"
+mlp_decoder_select="dsputil mlp_parser"
+motionpixels_decoder_select="dsputil"
mp1_decoder_select="mpegaudio"
mp1float_decoder_select="mpegaudio"
mp2_decoder_select="mpegaudio"
mp3float_decoder_select="mpegaudio"
mp3on4_decoder_select="mpegaudio"
mp3on4float_decoder_select="mpegaudio"
-mpc7_decoder_select="mpegaudiodsp"
-mpc8_decoder_select="mpegaudiodsp"
+mpc7_decoder_select="dsputil mpegaudiodsp"
+mpc8_decoder_select="dsputil mpegaudiodsp"
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
-mpeg_xvmc_decoder_select="mpegvideo_decoder"
+mpeg_xvmc_decoder_select="mpeg2video_decoder"
mpeg1video_decoder_select="error_resilience mpegvideo"
-mpeg1video_encoder_select="aandcttables error_resilience mpegvideoenc"
+mpeg1video_encoder_select="aandcttables mpegvideoenc"
mpeg2video_decoder_select="error_resilience mpegvideo"
-mpeg2video_encoder_select="aandcttables error_resilience mpegvideoenc"
+mpeg2video_encoder_select="aandcttables mpegvideoenc"
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
mpeg4_encoder_select="h263_encoder"
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"
-mss2_decoder_select="vc1_decoder"
+mss2_decoder_select="error_resilience vc1_decoder"
+mxpeg_decoder_select="dsputil hpeldsp"
nellymoser_decoder_select="mdct sinewin"
-nellymoser_encoder_select="mdct sinewin"
-nuv_decoder_select="lzo"
-png_decoder_select="zlib"
-png_encoder_select="zlib"
+nellymoser_encoder_select="audio_frame_queue mdct sinewin"
+nuv_decoder_select="dsputil lzo"
+png_decoder_deps="zlib"
+png_decoder_select="dsputil"
+png_encoder_deps="zlib"
+png_encoder_select="dsputil"
+prores_decoder_select="dsputil"
+prores_encoder_select="dsputil"
qcelp_decoder_select="lsp"
qdm2_decoder_select="mdct rdft mpegaudiodsp"
-ra_144_encoder_select="lpc"
+ra_144_encoder_select="audio_frame_queue lpc"
ralf_decoder_select="golomb"
-rv10_decoder_select="h263_decoder"
+rv10_decoder_select="error_resilience h263_decoder h263dsp"
rv10_encoder_select="h263_encoder"
-rv20_decoder_select="h263_decoder"
+rv20_decoder_select="error_resilience h263_decoder h263dsp"
rv20_encoder_select="h263_encoder"
-rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
-rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
+rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
+rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
shorten_decoder_select="golomb"
sipr_decoder_select="lsp"
-svq1_decoder_select="error_resilience mpegvideo"
-svq1_encoder_select="aandcttables error_resilience mpegvideoenc"
-svq3_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
-svq3_decoder_suggest="zlib"
+sp5x_decoder_select="dsputil hpeldsp"
+svq1_decoder_select="hpeldsp"
+svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc"
+svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel hpeldsp mpegvideo videodsp"
+svq3_decoder_suggest="error_resilience zlib"
+tak_decoder_select="dsputil"
theora_decoder_select="vp3_decoder"
tiff_decoder_suggest="zlib"
tiff_encoder_suggest="zlib"
+thp_decoder_select="dsputil hpeldsp"
truehd_decoder_select="mlp_decoder"
-tscc_decoder_select="zlib"
+truemotion2_decoder_select="dsputil"
+truespeech_decoder_select="dsputil"
+tscc_decoder_deps="zlib"
twinvq_decoder_select="mdct lsp sinewin"
-utvideo_encoder_select="huffman"
-vc1_decoder_select="h263_decoder h264chroma h264qpel"
+utvideo_decoder_select="dsputil"
+utvideo_encoder_select="dsputil huffman"
+vble_decoder_select="dsputil"
+vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel intrax8"
vc1image_decoder_select="vc1_decoder"
vorbis_decoder_select="mdct"
vorbis_encoder_select="mdct"
-vp3_decoder_select="vp3dsp videodsp"
-vp5_decoder_select="vp3dsp videodsp"
-vp6_decoder_select="huffman vp3dsp videodsp"
+vp3_decoder_select="hpeldsp vp3dsp videodsp"
+vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
+vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
vp6a_decoder_select="vp6_decoder"
vp6f_decoder_select="vp6_decoder"
vp8_decoder_select="h264pred videodsp"
+vp9_decoder_select="videodsp"
+webp_decoder_select="vp8_decoder"
wmapro_decoder_select="mdct sinewin"
wmav1_decoder_select="mdct sinewin"
wmav1_encoder_select="mdct sinewin"
wmavoice_decoder_select="lsp rdft dct mdct sinewin"
wmv1_decoder_select="h263_decoder"
wmv1_encoder_select="h263_encoder"
-wmv2_decoder_select="h263_decoder"
+wmv2_decoder_select="h263_decoder intrax8 videodsp"
wmv2_encoder_select="h263_encoder"
wmv3_decoder_select="vc1_decoder"
wmv3image_decoder_select="wmv3_decoder"
-zerocodec_decoder_select="zlib"
-zlib_decoder_select="zlib"
-zlib_encoder_select="zlib"
-zmbv_decoder_select="zlib"
-zmbv_encoder_select="zlib"
+zerocodec_decoder_deps="zlib"
+zlib_decoder_deps="zlib"
+zlib_encoder_deps="zlib"
+zmbv_decoder_deps="zlib"
+zmbv_encoder_deps="zlib"
# hardware accelerators
+dxva2_deps="dxva2api_h"
vaapi_deps="va_va_h"
vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
+vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
-h263_vaapi_hwaccel_select="vaapi h263_decoder"
-h263_vdpau_hwaccel_select="vdpau h263_decoder"
-h264_dxva2_hwaccel_deps="dxva2api_h"
-h264_dxva2_hwaccel_select="dxva2 h264_decoder"
-h264_vaapi_hwaccel_select="vaapi h264_decoder"
-h264_vda_hwaccel_select="vda h264_decoder"
-h264_vdpau_decoder_select="vdpau h264_decoder"
-h264_vdpau_hwaccel_select="vdpau h264_decoder"
-mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
-mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
-mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
-mpeg2_dxva2_hwaccel_deps="dxva2api_h"
-mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
-mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
-mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
-mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
-mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
-mpeg4_vdpau_hwaccel_select="vdpau mpeg4_decoder"
-vc1_dxva2_hwaccel_deps="dxva2api_h"
-vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
-vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
-vc1_vdpau_decoder_select="vdpau vc1_decoder"
-vc1_vdpau_hwaccel_select="vdpau vc1_decoder"
+h263_vaapi_hwaccel_deps="vaapi"
+h263_vaapi_hwaccel_select="h263_decoder"
+h263_vdpau_hwaccel_deps="vdpau"
+h263_vdpau_hwaccel_select="h263_decoder"
+h264_dxva2_hwaccel_deps="dxva2"
+h264_dxva2_hwaccel_select="h264_decoder"
+h264_vaapi_hwaccel_deps="vaapi"
+h264_vaapi_hwaccel_select="h264_decoder"
+h264_vda_hwaccel_deps="vda"
+h264_vda_hwaccel_select="h264_decoder"
+h264_vdpau_hwaccel_deps="vdpau"
+h264_vdpau_hwaccel_select="h264_decoder"
+mpeg1_vdpau_hwaccel_deps="vdpau"
+mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
+mpeg2_dxva2_hwaccel_deps="dxva2"
+mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
+mpeg2_vaapi_hwaccel_deps="vaapi"
+mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
+mpeg2_vdpau_hwaccel_deps="vdpau"
+mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
+mpeg4_vaapi_hwaccel_deps="vaapi"
+mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
+mpeg4_vdpau_hwaccel_deps="vdpau"
+mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
+vc1_dxva2_hwaccel_deps="dxva2"
+vc1_dxva2_hwaccel_select="vc1_decoder"
+vc1_vaapi_hwaccel_deps="vaapi"
+vc1_vaapi_hwaccel_select="vc1_decoder"
+vc1_vdpau_hwaccel_deps="vdpau"
+vc1_vdpau_hwaccel_select="vc1_decoder"
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
-wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
# parsers
-h264_parser_select="error_resilience golomb h264dsp h264pred h264qpel mpegvideo"
+h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
mpeg4video_parser_select="error_resilience mpegvideo"
mpegvideo_parser_select="error_resilience mpegvideo"
-vc1_parser_select="error_resilience mpegvideo"
+vc1_parser_select="mpegvideo"
# external libraries
libfaac_encoder_deps="libfaac"
+libfaac_encoder_select="audio_frame_queue"
+libfdk_aac_decoder_deps="libfdk_aac"
libfdk_aac_encoder_deps="libfdk_aac"
+libfdk_aac_encoder_select="audio_frame_queue"
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
libgsm_ms_decoder_deps="libgsm"
libilbc_decoder_deps="libilbc"
libilbc_encoder_deps="libilbc"
libmp3lame_encoder_deps="libmp3lame"
+libmp3lame_encoder_select="audio_frame_queue"
libopencore_amrnb_decoder_deps="libopencore_amrnb"
libopencore_amrnb_encoder_deps="libopencore_amrnb"
+libopencore_amrnb_encoder_select="audio_frame_queue"
libopencore_amrwb_decoder_deps="libopencore_amrwb"
libopenjpeg_decoder_deps="libopenjpeg"
libopenjpeg_encoder_deps="libopenjpeg"
libopus_decoder_deps="libopus"
libopus_encoder_deps="libopus"
+libopus_encoder_select="audio_frame_queue"
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
libspeex_decoder_deps="libspeex"
libspeex_encoder_deps="libspeex"
+libspeex_encoder_select="audio_frame_queue"
libtheora_encoder_deps="libtheora"
libvo_aacenc_encoder_deps="libvo_aacenc"
+libvo_aacenc_encoder_select="audio_frame_queue"
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
libvorbis_encoder_deps="libvorbis"
+libvorbis_encoder_select="audio_frame_queue"
libvpx_vp8_decoder_deps="libvpx"
libvpx_vp8_encoder_deps="libvpx"
libvpx_vp9_decoder_deps="libvpx"
libvpx_vp9_encoder_deps="libvpx"
+libwavpack_encoder_deps="libwavpack"
+libwebp_encoder_deps="libwebp"
libx264_encoder_deps="libx264"
libxavs_encoder_deps="libxavs"
libxvid_encoder_deps="libxvid"
# demuxers / muxers
ac3_demuxer_select="ac3_parser"
+asf_demuxer_select="riffdec"
+asf_muxer_select="riffenc"
asf_stream_muxer_select="asf_muxer"
+avi_demuxer_select="riffdec"
+avi_muxer_select="riffenc"
avisynth_demuxer_deps="avisynth"
+avisynth_demuxer_select="riffdec"
+caf_demuxer_select="riffdec"
dirac_demuxer_select="dirac_parser"
+dxa_demuxer_select="riffdec"
eac3_demuxer_select="ac3_parser"
+f4v_muxer_select="mov_muxer"
flac_demuxer_select="flac_parser"
+hds_muxer_select="flv_muxer"
+hls_muxer_select="mpegts_muxer"
ipod_muxer_select="mov_muxer"
ismv_muxer_select="mov_muxer"
matroska_audio_muxer_select="matroska_muxer"
+matroska_demuxer_select="riffdec"
matroska_demuxer_suggest="bzlib lzo zlib"
+matroska_muxer_select="riffenc"
+mmf_muxer_select="riffenc"
+mov_demuxer_select="riffdec"
mov_demuxer_suggest="zlib"
-mov_muxer_select="rtpenc_chain"
+mov_muxer_select="riffenc rtpenc_chain"
mp3_demuxer_select="mpegaudio_parser"
mp4_muxer_select="mov_muxer"
-mpegts_muxer_select="adts_muxer latm_muxer mpegvideo"
+mpegts_muxer_select="adts_muxer latm_muxer"
mpegtsraw_demuxer_select="mpegts_demuxer"
mxf_d10_muxer_select="mxf_muxer"
+nut_muxer_select="riffenc"
+nuv_demuxer_select="riffdec"
ogg_demuxer_select="golomb"
psp_muxer_select="mov_muxer"
rtp_demuxer_select="sdp_demuxer"
-rtp_muxer_select="mpegvideo"
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 rtpenc_chain"
tak_demuxer_select="tak_parser"
tg2_muxer_select="mov_muxer"
tgp_muxer_select="mov_muxer"
-w64_demuxer_deps="wav_demuxer"
+w64_demuxer_select="wav_demuxer"
+wav_demuxer_select="riffdec"
+wav_muxer_select="riffenc"
+webm_muxer_select="riffenc"
+wtv_demuxer_select="riffdec"
+xmv_demuxer_select="riffdec"
+xwma_demuxer_select="riffdec"
# 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"
+dv1394_indev_deps="dv1394"
+dv1394_indev_select="dv_demuxer"
fbdev_indev_deps="linux_fb_h"
-jack_indev_deps="jack_jack_h"
+jack_indev_deps="jack_jack_h pthreads"
libcdio_indev_deps="libcdio"
libdc1394_indev_deps="libdc1394"
oss_indev_deps_any="soundcard_h sys_soundcard_h"
tls_protocol_deps_any="openssl gnutls"
tls_protocol_select="tcp_protocol"
udp_protocol_select="network"
+unix_protocol_deps="sys_un_h"
+unix_protocol_select="network"
# filters
blackframe_filter_deps="gpl"
frei0r_src_filter_deps="frei0r dlopen strtok_r"
frei0r_src_filter_extralibs='$ldl'
hqdn3d_filter_deps="gpl"
+interlace_filter_deps="gpl"
resample_filter_deps="avresample"
ocv_filter_deps="libopencv"
scale_filter_deps="swscale"
-yadif_filter_deps="gpl"
+
+# examples
+output_example_deps="avcodec avformat avutil swscale"
+transcode_aac_example_deps="avcodec avformat avresample"
# libraries
avcodec_deps="avutil"
# programs
avconv_deps="avcodec avfilter avformat avresample swscale"
-avconv_select="aformat_filter anull_filter asyncts_filter format_filter
+avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
fps_filter null_filter resample_filter scale_filter
- setpts_filter"
+ setpts_filter trim_filter"
avplay_deps="avcodec avformat avresample swscale sdl"
avplay_select="rdft"
avprobe_deps="avcodec avformat"
-avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer !shared"
+avserver_deps="avformat fork !shared"
+avserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
avserver_extralibs='$ldl'
-doc_deps="texi2html"
+# documentation
+pod2man_deps="doc"
+texi2html_deps="doc"
# default parameters
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
datadir_default='${prefix}/share/avconv'
+docdir_default='${prefix}/share/doc/libav'
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
cc_default="gcc"
host_cc_default="gcc"
cp_f="cp -f"
-ln_s="ln -sf"
+ln_s="ln -s -f"
nm_default="nm -g"
objformat="elf"
pkg_config_default=pkg-config
ranlib="ranlib"
+strip="strip"
yasmexe="yasm"
nogas=":"
host_os=$target_os_default
# configurable options
-enable $LIBRARY_LIST $PROGRAM_LIST
+enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
enable asm
enable debug
enable static
enable swscale_alpha
+# By default, enable only those hwaccels that have no external dependencies.
+enable dxva2 vdpau
+
# build settings
SHFLAGS='-shared -Wl,-soname,$$(@F)'
-AVSERVERLDFLAGS=-Wl,-E
LIBPREF="lib"
LIBSUF=".a"
FULLNAME='$(NAME)$(BUILDSUF)'
LD_LIB='-l%'
LD_PATH='-L'
HOSTCC_C='-c'
+HOSTCC_E='-E -o $@'
HOSTCC_O='-o $@'
HOSTLD_O='-o $@'
-host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
+host_cflags='-O3'
+host_cppflags='-D_ISOC99_SOURCE'
host_libs='-lm'
host_cflags_filter=echo
host_ldflags_filter=echo
exit 1
}
+print_3_columns() {
+ cat | tr ' ' '\n' | sort | pr -r -3 -t
+}
+
show_list() {
suffix=_$1
shift
- echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
+ echo $* | sed s/$suffix//g | print_3_columns
exit 0
}
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
ranlib="${cross_prefix}${ranlib}"
+strip="${cross_prefix}${strip}"
sysinclude_default="${sysroot}/usr/include"
case "$toolchain" in
clang-asan)
cc_default="clang"
- add_cflags -faddress-sanitizer
- add_ldflags -faddress-sanitizer
+ add_cflags -fsanitize=address
+ add_ldflags -fsanitize=address
;;
clang-tsan)
cc_default="clang"
- add_cflags -fthread-sanitizer
- add_ldflags -fthread-sanitizer
+ add_cflags -fsanitize=thread -pie
+ add_ldflags -fsanitize=thread -pie
+ ;;
+ gcc-asan)
+ cc_default="gcc"
+ add_cflags -fsanitize=address
+ add_ldflags -fsanitize=address
+ ;;
+ gcc-tsan)
+ cc_default="gcc"
+ add_cflags -fsanitize=thread -pie -fPIC
+ add_ldflags -fsanitize=thread -pie -fPIC
+ ;;
+ valgrind-massif)
+ target_exec_default="valgrind"
+ target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
+ ;;
+ valgrind-memcheck)
+ target_exec_default="valgrind"
+ target_exec_args="--track-origins=yes --leak-check=full"
;;
msvc)
- cc_default="c99wrap cl"
- ld_default="c99wrap link"
+ # Check whether the current MSVC version needs the C99 converter.
+ # From MSVC 2013 (compiler major version 18) onwards, it does actually
+ # support enough of C99 to build libav. Default to the new
+ # behaviour if the regexp was unable to match anything, since this
+ # successfully parses the version number of existing supported
+ # versions that require the converter (MSVC 2010 and 2012).
+ cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
+ if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
+ cc_default="cl"
+ else
+ cc_default="c99wrap cl"
+ fi
+ ld_default="link"
nm_default="dumpbin -symbols"
ar_default="lib"
target_os_default="win32"
+ # Use a relative path for TMPDIR. This makes sure all the
+ # ffconf temp files are written with a relative path, avoiding
+ # issues with msys/win32 path conversion for MSVC parameters
+ # such as -Fo<file> or -out:<file>.
+ TMPDIR=.
+ ;;
+ icl)
+ cc_default="icl"
+ ld_default="xilink"
+ nm_default="dumpbin -symbols"
+ ar_default="xilib"
+ target_os_default="win32"
+ TMPDIR=.
+ ;;
+ gcov)
+ add_cflags -fprofile-arcs -ftest-coverage
+ add_ldflags -fprofile-arcs -ftest-coverage
+ ;;
+ hardened)
+ add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
+ add_ldflags -Wl,-z,relro -Wl,-z,now
;;
?*)
die "Unknown toolchain $toolchain"
;;
esac
-set_default arch cc pkg_config sysinclude target_os
+set_default arch cc pkg_config sysinclude target_exec target_os
enabled cross_compile || host_cc_default=$cc
set_default host_cc
done
}
-msvc_flags(){
+cparser_flags(){
for flag; do
case $flag in
- -fomit-frame-pointer) echo -Oy ;;
- -g) echo -Z7 ;;
- -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
- -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
- -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
- -wd4996 -wd4273 ;;
+ -Wno-switch) echo -Wno-switch-enum ;;
+ -Wno-format-zero-length) ;;
+ -Wdisabled-optimization) ;;
+ -Wno-pointer-sign) echo -Wno-other ;;
+ *) echo $flag ;;
+ esac
+ done
+}
+
+msvc_common_flags(){
+ for flag; do
+ case $flag in
+ # In addition to specifying certain flags under the compiler
+ # specific filters, they must be specified here as well or else the
+ # generic catch all at the bottom will print the original flag.
+ -Wall) ;;
-std=c99) ;;
+ # Common flags
+ -fomit-frame-pointer) ;;
+ -g) echo -Z7 ;;
-fno-math-errno) ;;
-fno-common) ;;
-fno-signed-zeros) ;;
-fPIC) ;;
+ -mthumb) ;;
+ -march=*) ;;
-lz) echo zlib.lib ;;
-lavifil32) echo vfw32.lib ;;
-lavicap32) echo vfw32.lib user32.lib ;;
done
}
+msvc_flags(){
+ msvc_common_flags "$@"
+ for flag; do
+ case $flag in
+ -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
+ -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
+ -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
+ -wd4273 ;;
+ esac
+ done
+}
+
+icl_flags(){
+ msvc_common_flags "$@"
+ for flag; do
+ case $flag in
+ # Despite what Intel's documentation says -Wall, which is supported
+ # on Windows, does enable remarks so disable them here.
+ -Wall) echo $flag -Qdiag-disable:remark ;;
+ -std=c99) echo -Qstd=c99 ;;
+ esac
+ done
+}
+
pgi_flags(){
for flag; do
case $flag in
corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
- athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
+ athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
k8|opteron|athlon64|athlon-fx)
- echo -xarch=sse2a ;;
- athlon*) echo -xarch=pentium_proa ;;
+ echo -xarch=sse2a ;;
+ athlon*) echo -xarch=pentium_proa ;;
esac
;;
-std=c99) echo -xc99 ;;
fi
_cflags_speed='-O3'
_cflags_size='-Os'
- elif $_cc --version 2>/dev/null | grep -q Intel; then
+ elif $_cc --version 2>/dev/null | grep -q ^icc; then
_type=icc
_ident=$($_cc --version | head -n1)
_depflags='-MMD'
_DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
_cflags_speed="-O2"
_cflags_size="-O1"
- # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
if $_cc 2>&1 | grep -q Linker; then
- _ld_o='-out $@'
+ _ld_o='-out:$@'
else
_ld_o='-Fe$@'
fi
- _cc_o='-Fo $@'
- _cc_e='-P -Fi $@'
+ _cc_o='-Fo$@'
+ _cc_e='-P -Fi$@'
_flags_filter=msvc_flags
_ld_lib='lib%.a'
_ld_path='-libpath:'
_flags='-nologo'
- _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
+ _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
if [ $pfx = hostcc ]; then
append _cflags -Dsnprintf=_snprintf
fi
+ elif $_cc 2>&1 | grep -q Intel; then
+ _type=icl
+ _ident=$($cc 2>&1 | head -n1)
+ _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
+ # Not only is O3 broken on 13.x+ but it is slower on all previous
+ # versions (tested) as well.
+ _cflags_speed="-O2"
+ _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
+ if $_cc 2>&1 | grep -q Linker; then
+ _ld_o='-out:$@'
+ else
+ _ld_o='-Fe$@'
+ fi
+ _cc_o='-Fo$@'
+ _cc_e='-P'
+ _flags_filter=icl_flags
+ _ld_lib='lib%.a'
+ _ld_path='-libpath:'
+ # -Qdiag-error to make icl error when seeing certain unknown arguments
+ _flags='-nologo -Qdiag-error:4044,10157'
+ # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
+ # with MSVC which enables it by default.
+ _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
+ if [ $pfx = hostcc ]; then
+ append _cflags -Dsnprintf=_snprintf
+ fi
+ elif $_cc --version 2>/dev/null | grep -q ^cparser; then
+ _type=cparser
+ _ident=$($_cc --version | head -n1)
+ _depflags='-MMD'
+ _cflags_speed='-O4'
+ _cflags_size='-O2'
+ _flags_filter=cparser_flags
fi
eval ${pfx}_type=\$_type
elif $ar 2>&1 | grep -q 'Texas Instruments'; then
arflags="rq"
ar_o='$@'
+elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
+ arflags='-Xany -r -c'
+ ar_o='$@'
else
arflags="rc"
ar_o='$@'
fi
if test "$cpu" = host; then
- enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
+ enabled cross_compile &&
+ die "--cpu=host makes no sense when cross-compiling."
case "$cc_type" in
gcc|llvm_gcc)
;;
esac
- test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
+ test "${cpu:-host}" = host &&
+ die "--cpu=host not supported with compiler $cc"
fi
# Deal with common $arch aliases
cpuflags="-march=$cpu"
disable mmx
;;
- # targets that do NOT support conditional mov (cmov)
+ # targets that do NOT support nopl and conditional mov (cmov)
pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
cpuflags="-march=$cpu"
- disable cmov
+ disable i686
;;
- # targets that do support conditional mov (cmov)
+ # targets that do support nopl and conditional mov (cmov)
i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*)
cpuflags="-march=$cpu"
- enable cmov
+ enable i686
enable fast_cmov
;;
# targets that do support conditional mov but on which it's slow
pentium4|pentium4m|prescott|nocona)
cpuflags="-march=$cpu"
- enable cmov
+ enable i686
disable fast_cmov
;;
esac
esac
enable $subarch
-enabled spic && enable pic
+enabled spic && enable_weak pic
# OS specific
case $target_os in
+ aix)
+ SHFLAGS=-shared
+ add_cppflags '-I\$(SRC_PATH)/compat/aix'
+ enabled shared && add_ldflags -Wl,-brtl
+ ;;
haiku)
prefix_default="/boot/common"
network_extralibs="-lnetwork"
host_libs=
;;
sunos)
- AVSERVERLDFLAGS=""
SHFLAGS='-shared -Wl,-h,$$(@F)'
enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
network_extralibs="-lsocket -lnsl"
- add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
# When using suncc to build, the Solaris linker will mark
# an executable with each instruction set encountered by
# the Solaris assembler. As our libraries contain their own
# guards for processor-specific code, instead suppress
# generation of the HWCAPS ELF section on Solaris x86 only.
- enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
+ enabled_all suncc x86 &&
+ echo "hwcap_1 = OVERRIDE;" > mapfile &&
+ add_ldflags -Wl,-M,mapfile
nm_default='nm -P -g'
;;
netbsd)
openbsd|bitrig)
disable symver
SHFLAGS='-shared'
- SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
+ SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
SLIB_INSTALL_LINKS=
oss_indev_extralibs="-lossaudio"
oss_outdev_extralibs="-lossaudio"
SLIBSUF=".dylib"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
- AVSERVERLDFLAGS=-Wl,-bind_at_load
objformat="macho"
enabled x86_64 && objformat="macho64"
enabled_any pic shared ||
elif enabled arm; then
LIBTARGET=arm-wince
fi
+ check_ldflags -Wl,--nxcompat
+ check_ldflags -Wl,--dynamicbase
shlibdir_default="$bindir_default"
SLIBPREF=""
SLIBSUF=".dll"
dlltool="${cross_prefix}dlltool"
ranlib=:
enable dos_paths
- add_cppflags -U__STRICT_ANSI__
;;
win32|win64)
+ disable symver
if enabled shared; then
# Link to the import library instead of the normal static library
# for shared libs.
LD_LIB='%.lib'
- # Cannot build shared and static libraries at the same time with
- # MSVC.
+ # Cannot build both shared and static libs with MSVC or icl.
disable static
fi
shlibdir_default="$bindir_default"
SLIBSUF=".dll"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
- SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
+ SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS=
SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
add_cppflags -D_GNU_SOURCE
add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
- AVSERVERLDFLAGS=""
LIBSUF="_s.a"
SLIBPREF=""
SLIBSUF=".dll"
;;
osf1)
add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
- AVSERVERLDFLAGS=
;;
minix)
;;
network_extralibs='-lbsd'
exeobjs=compat/plan9/main.o
disable avserver
- ln_s='ln -s -f'
cp_f='cp'
;;
none)
# determine libc flavour
-if check_cpp_condition features.h "defined __UCLIBC__"; then
- libc_type=uclibc
- add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
-elif check_cpp_condition features.h "defined __GLIBC__"; then
- libc_type=glibc
- add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
-# MinGW headers can be installed on Cygwin, so check for newlib first.
-elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
- libc_type=newlib
- add_cppflags -U__STRICT_ANSI__
-elif check_header _mingw.h; then
- libc_type=mingw
- check_cpp_condition _mingw.h \
- "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
+probe_libc(){
+ pfx=$1
+ pfx_no_=${pfx%_}
+ # uclibc defines __GLIBC__, so it needs to be checked before glibc.
+ if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
+ eval ${pfx}libc_type=uclibc
+ add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
+ elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
+ eval ${pfx}libc_type=glibc
+ add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
+ # MinGW headers can be installed on Cygwin, so check for newlib first.
+ elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
+ eval ${pfx}libc_type=newlib
+ add_${pfx}cppflags -U__STRICT_ANSI__
+ # MinGW64 is backwards compatible with MinGW32, so check for it first.
+ elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
+ eval ${pfx}libc_type=mingw64
+ add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
+ eval test \$${pfx_no_}cc_type = "gcc" &&
+ add_${pfx}cppflags -D__printf__=__gnu_printf__
+ elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
+ check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
+ eval ${pfx}libc_type=mingw32
+ check_${pfx}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."
-elif check_func_headers stdlib.h _get_doserrno; then
- libc_type=msvcrt
- add_compat strtod.o strtod=avpriv_strtod
- add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
- _snprintf=avpriv_snprintf \
- vsnprintf=avpriv_vsnprintf
-elif check_cpp_condition stddef.h "defined __KLIBC__"; then
- libc_type=klibc
-fi
+ die "ERROR: MinGW32 runtime version must be >= 3.15."
+ add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
+ eval test \$${pfx_no_}cc_type = "gcc" &&
+ add_${pfx}cppflags -D__printf__=__gnu_printf__
+ elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
+ eval ${pfx}libc_type=msvcrt
+ # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
+ # 0x601 by default unless something else is set by the user.
+ # This can easily lead to us detecting functions only present
+ # in such new versions and producing binaries requiring windows 7.0.
+ # Therefore explicitly set the default to XP unless the user has
+ # set something else on the command line.
+ check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
+ add_${pfx}cppflags -D_WIN32_WINNT=0x0502
+ elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
+ eval ${pfx}libc_type=klibc
+ elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
+ eval ${pfx}libc_type=bionic
+ elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
+ eval ${pfx}libc_type=solaris
+ add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
+ fi
+}
-test -n "$libc_type" && enable $libc_type
+probe_libc
+test -n "$libc_type" && enable libc_$libc_type
+probe_libc host_
+test -n "$host_libc_type" && enable host_libc_$host_libc_type
+
+case $libc_type in
+ bionic)
+ add_compat strtod.o strtod=avpriv_strtod
+ ;;
+ msvcrt)
+ add_compat strtod.o strtod=avpriv_strtod
+ add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
+ _snprintf=avpriv_snprintf \
+ vsnprintf=avpriv_vsnprintf
+ ;;
+esac
# hacks for compiler/libc/os combinations
-if enabled_all tms470 glibc; then
+if enabled_all tms470 libc_glibc; then
CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
add_cppflags -D__USER_LABEL_PREFIX__=
add_cppflags -D__builtin_memset=memset
add_cflags -pds=48 # incompatible redefinition of macro
fi
-if enabled_all ccc glibc; then
+if enabled_all ccc libc_glibc; then
add_ldflags -Wl,-z,now # calls to libots crash without this
fi
echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
-check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
+check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
set_default $PATHS_LIST
set_default nm
disabled optimizations || check_cflags -fomit-frame-pointer
-enable_pic() {
+enable_weak_pic() {
+ disabled pic && return
enable pic
add_cppflags -DPIC
- add_cflags -fPIC
+ case "$target_os" in
+ mingw*|cygwin*)
+ ;;
+ *)
+ add_cflags -fPIC
+ ;;
+ esac
add_asflags -fPIC
}
-enabled pic && enable_pic
+enabled pic && enable_weak_pic
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
done
+check_cc <<EOF && enable pragma_deprecated
+void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
+EOF
+
check_cc <<EOF && enable attribute_packed
struct { int x; } __attribute__((packed)) x;
EOF
EOF
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
-if enabled alpha; then
+check_inline_asm inline_asm_labels '"1:\n"'
+
+if enabled aarch64; then
+ # internal assembler in clang 3.3 does not support this instruction
+ enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
+ enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
+
+ map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
+
+elif enabled alpha; then
check_cflags -mieee
check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
- enabled_all armv6t2 shared !pic && enable_pic
+ [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
elif enabled mips; then
elif enabled x86; then
- check_code ld intrin.h "__rdtsc()" && enable rdtsc
-
- check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
+ check_builtin rdtsc intrin.h "__rdtsc()"
+ check_builtin mm_empty mmintrin.h "_mm_empty()"
enable local_aligned_8 local_aligned_16
elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
esac
- check_yasm "vextractf128 xmm0, ymm0, 0" && enable yasm ||
- die "yasm not found, use --disable-yasm for a crippled build"
+ check_yasm "movbe ecx, [5]" && enable yasm ||
+ die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
check_yasm "CPU amdnop" && enable cpunop
fi
check_func_headers winsock2.h closesocket -lws2 &&
network_extralibs="-lws2" ||
{ check_func_headers winsock2.h closesocket -lws2_32 &&
- network_extralibs="-lws2_32"; }
+ network_extralibs="-lws2_32"; } || disable winsock2_h network
check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
check_type ws2tcpip.h socklen_t
check_type ws2tcpip.h "struct addrinfo"
check_func fcntl
check_func fork
+check_func_headers stdlib.h getenv
check_func gethrtime
check_func getopt
check_func getrusage
check_func strptime
check_func strtok_r
check_func sched_getaffinity
+check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
+check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
+check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
+check_builtin MemoryBarrier windows.h "MemoryBarrier()"
check_func sysconf
check_func sysctl
check_func usleep
check_header sys/resource.h
check_header sys/select.h
check_header sys/time.h
+check_header sys/un.h
check_header unistd.h
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
+check_header VideoDecodeAcceleration/VDADecoder.h
check_header windows.h
check_header X11/extensions/XvMClib.h
-disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
-disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
-
if ! disabled w32threads && ! enabled pthreads; then
- check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
+ check_func_headers "windows.h process.h" _beginthreadex &&
+ enable w32threads || disable w32threads
fi
# 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
+ if check_func pthread_join -pthread; then
add_cflags -pthread
add_extralibs -pthread
- elif check_func pthread_create -pthreads; then
+ elif check_func pthread_join -pthreads; then
add_cflags -pthreads
add_extralibs -pthreads
- elif check_func pthread_create -lpthreadGC2; then
+ elif check_func pthread_join -lpthreadGC2; then
add_extralibs -lpthreadGC2
- elif ! check_lib pthread.h pthread_create -lpthread; then
+ elif check_lib pthread.h pthread_join -lpthread; then
+ :
+ elif ! check_func pthread_join; then
disable pthreads
fi
fi
fi
done
+disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
+disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
+
check_lib math.h sin -lm && LIBM="-lm"
enabled vaapi && require vaapi va/va.h vaInitialize -lva
done
# these are off by default, so fail if requested and not available
-enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
-enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
-enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
-enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
-enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
-enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
-enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
- check_lib "${gsm_hdr}" gsm_create -lgsm && break;
- done || die "ERROR: libgsm not found"; }
-enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
-enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
-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 && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
-enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
-enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
-enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
-enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
-enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
-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 libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
-enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
-enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
-enabled libvpx && {
+enabled avisynth && { { check_header "avisynth/avisynth_c.h" && check_lib2 "windows.h" LoadLibrary; } ||
+ { check_header "avxsynth/avxsynth_c.h" && check_lib2 "dlfcn.h" dlopen -ldl; } ||
+ die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
+enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
+enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
+enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
+enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
+enabled libfreetype && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
+enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
+ check_lib "${gsm_hdr}" gsm_create -lgsm && break;
+ done || die "ERROR: libgsm not found"; }
+enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
+enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
+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 && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
+enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
+enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
+enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
+enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
+enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
+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 libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
+enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
+enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
+enabled libvpx && {
enabled libvpx_vp8_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"; }
+ die "ERROR: libvpx decoder version must be >=0.9.1"; }
enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
- die "ERROR: libvpx encoder version must be >=0.9.6"; }
- enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
+ die "ERROR: libvpx encoder version must be >=0.9.6"; }
+ enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
-enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
- { check_cpp_condition x264.h "X264_BUILD >= 118" ||
- die "ERROR: libx264 version must be >= 0.118."; }
-enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
-enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
-enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
- check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
- check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
- die "ERROR: openssl not found"; }
+enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
+enabled libwebp && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
+enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
+ { check_cpp_condition x264.h "X264_BUILD >= 118" ||
+ die "ERROR: libx264 version must be >= 0.118."; }
+enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
+enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
+enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
+ check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
+ check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
+ die "ERROR: openssl not found"; }
if enabled gnutls; then
{ check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
- enable sdl &&
- check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
+ check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
+ enable sdl
fi
+pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
check_header linux/fb.h
check_header sys/soundcard.h
check_header soundcard.h
-enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
+enabled_any alsa_indev alsa_outdev &&
+ check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
check_func jack_port_get_latency_range -ljack
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
if enabled libcdio; then
- check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
+ check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
+ check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
fi
+check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
+
enabled x11grab &&
-require X11 X11/Xlib.h XOpenDisplay -lX11 &&
require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
-require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
+require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes &&
+{ enabled xlib || die "ERROR: Xlib not found"; }
-# check for VDA header
-if ! disabled vda && check_header VideoDecodeAcceleration/VDADecoder.h; then
- enable vda && add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
-fi
-
-if ! disabled vdpau && enabled vdpau_vdpau_h; then
+enabled vdpau &&
check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
- { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." && disable vdpau; }
-fi
+ disable vdpau
+
+enabled vdpau && enabled xlib &&
+ check_lib2 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
+ enable vdpau_x11
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
check_cflags -Wall
-check_cflags -Wno-parentheses
-check_cflags -Wno-switch
-check_cflags -Wno-format-zero-length
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 -Wstrict-prototypes
enabled extra_warnings && check_cflags -Winline
+check_disable_warning(){
+ warning_flag=-W${1#-Wno-}
+ test_cflags $warning_flag && add_cflags $1
+}
+
+check_disable_warning -Wno-parentheses
+check_disable_warning -Wno-switch
+check_disable_warning -Wno-format-zero-length
+check_disable_warning -Wno-pointer-sign
+
# add some linker flags
check_ldflags -Wl,--warn-common
check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
+# add some strip flags
+# -wN '..@*' is more selective than -x, but not available everywhere.
+check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'
+
+enabled neon_clobber_test &&
+ check_ldflags -Wl,--wrap,avcodec_open2 \
+ -Wl,--wrap,avcodec_decode_audio4 \
+ -Wl,--wrap,avcodec_decode_video2 \
+ -Wl,--wrap,avcodec_decode_subtitle2 \
+ -Wl,--wrap,avcodec_encode_audio2 \
+ -Wl,--wrap,avcodec_encode_video2 \
+ -Wl,--wrap,avcodec_encode_subtitle \
+ -Wl,--wrap,avresample_convert ||
+ disable neon_clobber_test
+
enabled xmm_clobber_test &&
check_ldflags -Wl,--wrap,avcodec_open2 \
-Wl,--wrap,avcodec_decode_audio4 \
-Wl,--wrap,avcodec_decode_video2 \
-Wl,--wrap,avcodec_decode_subtitle2 \
-Wl,--wrap,avcodec_encode_audio2 \
- -Wl,--wrap,avcodec_encode_video \
+ -Wl,--wrap,avcodec_encode_video2 \
-Wl,--wrap,avcodec_encode_subtitle \
+ -Wl,--wrap,avresample_convert \
-Wl,--wrap,sws_scale ||
disable xmm_clobber_test
# 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
if enabled x86_32; then
check_cflags -Werror=return-type
check_cflags -Werror=declaration-after-statement
check_cflags -Werror=vla
+ enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
elif enabled llvm_gcc; then
check_cflags -mllvm -stack-alignment=16
elif enabled clang; then
check_cflags -Werror=implicit-function-declaration
check_cflags -Werror=missing-prototypes
check_cflags -Werror=return-type
+elif enabled cparser; then
+ add_cflags -Wno-missing-variable-declarations
+ add_cflags -Wno-empty-statement
elif enabled armcc; then
# 2523: use of inline assembler is deprecated
add_cflags -W${armcc_opt},--diag_suppress=2523
add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
elif enabled tms470; then
add_cflags -pds=824 -pds=837
+ disable inline_asm
elif enabled pathscale; then
add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
-elif enabled msvc; then
+elif enabled_any msvc icl; then
enabled x86_32 && disable aligned_stack
+ enabled_all x86_32 debug && add_cflags -Oy-
+ enabled debug && add_ldflags -debug
+ enable pragma_deprecated
+ if enabled icl; then
+ # -Qansi-alias is basically -fstrict-aliasing, but does not work
+ # (correctly) on icl 13.x.
+ check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
+ add_cflags -Qansi-alias
+ # icl will pass the inline asm tests but inline asm is currently
+ # not supported (build will fail)
+ disable inline_asm
+ fi
fi
case $target_os in
;;
esac
-enabled_any $THREADS_LIST && enable threads
-
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
check_deps $CONFIG_LIST \
echo "install prefix $prefix"
echo "source path $source_path"
echo "C compiler $cc"
+echo "C library $libc_type"
+if test "$host_cc" != "$cc"; then
+ echo "host C compiler $host_cc"
+ echo "host C library $host_libc_type"
+fi
echo "ARCH $arch ($cpu)"
if test "$build_suffix" != ""; then
echo "build suffix $build_suffix"
echo "SSSE3 enabled ${ssse3-no}"
echo "AVX enabled ${avx-no}"
echo "FMA4 enabled ${fma4-no}"
- echo "CMOV enabled ${cmov-no}"
+ echo "i686 features enabled ${i686-no}"
echo "CMOV is fast ${fast_cmov-no}"
echo "EBX available ${ebx_available-no}"
echo "EBP available ${ebp_available-no}"
fi
+if enabled aarch64; then
+ echo "NEON enabled ${neon-no}"
+ echo "VFP enabled ${vfp-no}"
+fi
if enabled arm; then
echo "ARMv5TE enabled ${armv5te-no}"
echo "ARMv6 enabled ${armv6-no}"
echo "threading support ${thread_type-no}"
echo "safe bitstream reader ${safe_bitstream_reader-no}"
echo "SDL support ${sdl-no}"
-echo "libdxva2 enabled ${dxva2-no}"
-echo "libva enabled ${vaapi-no}"
-echo "libvdpau enabled ${vdpau-no}"
-echo "AVISynth enabled ${avisynth-no}"
-echo "frei0r enabled ${frei0r-no}"
-echo "gnutls enabled ${gnutls-no}"
-echo "libcdio support ${libcdio-no}"
-echo "libdc1394 support ${libdc1394-no}"
-echo "libfaac enabled ${libfaac-no}"
-echo "libfdk-aac enabled ${libfdk_aac-no}"
-echo "libgsm enabled ${libgsm-no}"
-echo "libilbc enabled ${libilbc-no}"
-echo "libmp3lame enabled ${libmp3lame-no}"
-echo "libopencore-amrnb support ${libopencore_amrnb-no}"
-echo "libopencore-amrwb support ${libopencore_amrwb-no}"
-echo "libopencv support ${libopencv-no}"
-echo "libopenjpeg enabled ${libopenjpeg-no}"
-echo "libopus enabled ${libopus-no}"
-echo "libpulse enabled ${libpulse-no}"
-echo "librtmp enabled ${librtmp-no}"
-echo "libschroedinger enabled ${libschroedinger-no}"
-echo "libspeex enabled ${libspeex-no}"
-echo "libtheora enabled ${libtheora-no}"
-echo "libvo-aacenc support ${libvo_aacenc-no}"
-echo "libvo-amrwbenc support ${libvo_amrwbenc-no}"
-echo "libvorbis enabled ${libvorbis-no}"
-echo "libvpx enabled ${libvpx-no}"
-echo "libx264 enabled ${libx264-no}"
-echo "libxavs enabled ${libxavs-no}"
-echo "libxvid enabled ${libxvid-no}"
-echo "openssl enabled ${openssl-no}"
-echo "zlib enabled ${zlib-no}"
-echo "bzlib enabled ${bzlib-no}"
test -n "$random_seed" &&
echo "random seed ${random_seed}"
echo
+echo "External libraries:"
+print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
+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
- print_enabled '_*' $list | sort | pr -r -3 -t
+ print_enabled '_*' $list | print_3_columns
echo
done
echo "Creating config.mak and config.h..."
-test -e Makefile || $ln_s "$source_path/Makefile" .
+test -e Makefile || echo "include $source_path/Makefile" > Makefile
config_files="$TMPH config.mak"
INCDIR=\$(DESTDIR)$incdir
BINDIR=\$(DESTDIR)$bindir
DATADIR=\$(DESTDIR)$datadir
+DOCDIR=\$(DESTDIR)$docdir
MANDIR=\$(DESTDIR)$mandir
SRC_PATH=$source_path
CC_IDENT=$cc_ident
ARFLAGS=$arflags
AR_O=$ar_o
RANLIB=$ranlib
+STRIP=$strip
LN_S=$ln_s
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
LD_PATH=$LD_PATH
DLLTOOL=$dlltool
LDFLAGS=$LDFLAGS
-LDFLAGS-avserver=$AVSERVERLDFLAGS
SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
+STRIPFLAGS=$STRIPFLAGS
YASMFLAGS=$YASMFLAGS
BUILDSUF=$build_suffix
FULLNAME=$FULLNAME
HOSTCC=$host_cc
HOSTLD=$host_ld
HOSTCFLAGS=$host_cflags
+HOSTCPPFLAGS=$host_cppflags
HOSTEXESUF=$HOSTEXESUF
HOSTLDFLAGS=$host_ldflags
HOSTLIBS=$host_libs
HOSTCC_C=$HOSTCC_C
HOSTCC_O=$HOSTCC_O
HOSTLD_O=$HOSTLD_O
-TARGET_EXEC=$target_exec
+TARGET_EXEC=$target_exec $target_exec_args
TARGET_PATH=$target_path
+TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
LIBS-avplay=$sdl_libs
CFLAGS-avplay=$sdl_cflags
ZLIB=$($ldflags_filter -lz)
eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
+ eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
}
map 'get_version $v' $LIBRARY_LIST
printf '' >$TMPASM
fi
+enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
+
print_config ARCH_ "$config_files" $ARCH_LIST
print_config HAVE_ "$config_files" $HAVE_LIST
print_config CONFIG_ "$config_files" $CONFIG_LIST \
EOF
}
-pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBM"
-pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
-pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
-pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
-pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
+lavfi_libs="libavutil = $LIBAVUTIL_VERSION"
+enabled movie_filter && prepend lavfi_libs "libavformat >= $LIBAVFORMAT_VERSION, libavcodec >= $LIBAVCODEC_VERSION,"
+enabled resample_filter && prepend lavfi_libs "libavresample >= $LIBAVRESAMPLE_VERSION,"
+enabled scale_filter && prepend lavfi_libs "libswscale >= $LIBSWSCALE_VERSION,"
+
+pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBM"
+pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
+pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
+pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
+pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$lavfi_libs"
pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
-pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
+pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"