diff options
Diffstat (limited to 'configure')
-rwxr-xr-x | configure | 864 |
1 files changed, 723 insertions, 141 deletions
@@ -1,6 +1,6 @@ #!/bin/sh # -# Libav configure script +# FFmpeg configure script # # Copyright (c) 2000-2002 Fabrice Bellard # Copyright (c) 2005-2008 Diego Biurrun @@ -44,9 +44,9 @@ if test "$E1" != 0 || test "$E2" = 0; then 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 LIBAV, DO NOT REPORT IT AS SUCH." + 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 Libav." + 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." @@ -78,9 +78,10 @@ Help options: Standard options: --logfile=FILE log tests and output to FILE [config.log] --disable-logging do not log configure debug information + --fatal-warnings fail if any configure warning is generated --prefix=PREFIX install in PREFIX [$prefix] --bindir=DIR install binaries in DIR [PREFIX/bin] - --datadir=DIR install data files in DIR [PREFIX/share/avconv] + --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg] --libdir=DIR install libs in DIR [PREFIX/lib] --shlibdir=DIR install shared libs in DIR [PREFIX/lib] --incdir=DIR install includes in DIR [PREFIX/include] @@ -97,31 +98,41 @@ Configuration options: --disable-static do not build static libraries [no] --enable-shared build shared libraries [no] --enable-small optimize for size instead of speed - --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary) + --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary) --enable-gray enable full grayscale support (slower color) --disable-swscale-alpha disable alpha channel support in swscale --disable-all disable building components, libraries and programs Program options: --disable-programs do not build command line programs - --disable-avconv disable avconv build - --disable-avplay disable avplay build - --disable-avprobe disable avprobe build - --disable-avserver disable avserver build + --disable-ffmpeg disable ffmpeg build + --disable-ffplay disable ffplay build + --disable-ffprobe disable ffprobe build + --disable-ffserver disable ffserver build -Component options: +Documentation options: --disable-doc do not build documentation + --disable-htmlpages do not build HTML documentation pages + --disable-manpages do not build man documentation pages + --disable-podpages do not build POD documentation pages + --disable-txtpages do not build text documentation pages + +Component options: --disable-avdevice disable libavdevice build --disable-avcodec disable libavcodec build --disable-avformat disable libavformat build --disable-avutil disable libavutil build + --disable-swresample disable libswresample build --disable-swscale disable libswscale build - --disable-avfilter disable video filter support [no] - --disable-avresample disable libavresample build [no] + --disable-postproc disable libpostproc build + --disable-avfilter disable libavfilter build + --enable-avresample enable libavresample build [no] --disable-pthreads disable pthreads [auto] --disable-w32threads disable Win32 threads [auto] + --disable-os2threads disable OS/2 threads [auto] --disable-network disable network support [no] --disable-dct disable DCT code + --disable-dwt disable DWT code --disable-error-resilience disable error resilience code --disable-lsp disable LSP code --disable-lzo disable LZO decoder code @@ -130,10 +141,10 @@ Component options: --disable-fft disable FFT code Hardware accelerators: - --enable-dxva2 enable DXVA2 code - --enable-vaapi enable VAAPI code + --disable-dxva2 disable DXVA2 code [autodetect] + --disable-vaapi disable VAAPI code [autodetect] --enable-vda enable VDA code - --enable-vdpau enable VDPAU code + --disable-vdpau disable VDPAU code [autodetect] Individual component options: --disable-everything disable all components listed below @@ -174,39 +185,63 @@ Individual component options: External library support: --enable-avisynth enable reading of AVISynth script files [no] - --enable-bzlib enable bzlib [autodetect] + --disable-bzlib disable bzlib [autodetect] + --enable-fontconfig enable fontconfig --enable-frei0r enable frei0r video filtering --enable-gnutls enable gnutls [no] + --disable-iconv disable iconv [autodetect] + --enable-libaacplus enable AAC+ encoding via libaacplus [no] + --enable-libass enable libass subtitles rendering [no] + --enable-libbluray enable BluRay reading using libbluray [no] + --enable-libcaca enable textual display using libcaca + --enable-libcelt enable CELT decoding via libcelt [no] --enable-libcdio enable audio CD grabbing with libcdio --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-libflite enable flite (voice synthesis) support via libflite [no] --enable-libfreetype enable libfreetype [no] --enable-libgsm enable GSM de/encoding via libgsm [no] + --enable-libiec61883 enable iec61883 via libiec61883 [no] --enable-libilbc enable iLBC de/encoding via libilbc [no] + --enable-libmodplug enable ModPlug via libmodplug [no] --enable-libmp3lame enable MP3 encoding via libmp3lame [no] + --enable-libnut enable NUT (de)muxing via libnut, + native (de)muxer exists [no] --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no] --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no] --enable-libopencv enable video filtering via libopencv [no] --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no] --enable-libopus enable Opus decoding via libopus [no] --enable-libpulse enable Pulseaudio input via libpulse [no] + --enable-libquvi enable quvi input via libquvi [no] --enable-librtmp enable RTMP[E] support via librtmp [no] --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no] + --enable-libshine enable fixed-point MP3 encoding via libshine [no] + --enable-libsoxr enable Include libsoxr resampling [no] --enable-libspeex enable Speex de/encoding via libspeex [no] + --enable-libstagefright-h264 enable H.264 decoding via libstagefright [no] --enable-libtheora enable Theora encoding via libtheora [no] + --enable-libtwolame enable MP2 encoding via libtwolame [no] + --enable-libutvideo enable Ut Video encoding and decoding via libutvideo [no] + --enable-libv4l2 enable libv4l2/v4l-utils [no] + --enable-libvidstab enable video stabilization using vid.stab [no] --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no] --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no] - --enable-libvorbis enable Vorbis encoding via libvorbis [no] + --enable-libvorbis enable Vorbis en/decoding via libvorbis, + native implementation exists [no] --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no] --enable-libx264 enable H.264 encoding via x264 [no] --enable-libxavs enable AVS encoding via xavs [no] --enable-libxvid enable Xvid encoding via xvidcore, native MPEG-4/Xvid encoder exists [no] + --enable-libzmq enable message passing via libzmq [no] + --enable-openal enable OpenAL 1.1 capture support [no] + --enable-opencl enable OpenCL code --enable-openssl enable openssl [no] --enable-x11grab enable X11 grabbing [no] - --enable-zlib enable zlib [autodetect] + --disable-zlib disable zlib [autodetect] Advanced options (experts only): --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix] @@ -218,12 +253,14 @@ Advanced options (experts only): --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 + --nm=NM use nm tool NM [$nm_default] --ar=AR use archive tool AR [$ar_default] --as=AS use assembler AS [$as_default] + --yasmexe=EXE use yasm-compatible assembler EXE [$yasmexe_default] --cc=CC use C compiler CC [$cc_default] + --cxx=CXX use C compiler CXX [$cxx_default] --dep-cc=DEPCC use dependency generator DEPCC [$cc_default] - --ld=LD use linker LD + --ld=LD use linker LD [$ld_default] --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 @@ -232,12 +269,14 @@ Advanced options (experts only): --host-libs=HLIBS use libs HLIBS when linking for host --host-os=OS compiler host OS [$target_os] --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS] + --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS] --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS] --extra-libs=ELIBS add ELIBS [$ELIBS] --extra-version=STRING version string suffix [] --optflags=OPTFLAGS override optimization-related compiler flags --build-suffix=SUFFIX library name suffix [] --malloc-prefix=PREFIX prefix malloc and related names with PREFIX + --progs-suffix=SUFFIX program name suffix [] --arch=ARCH select architecture [$arch] --cpu=CPU select the minimum required CPU (affects instruction selection, may crash on older CPUs) @@ -275,14 +314,27 @@ Optimization options (experts only): --disable-vis disable VIS optimizations --disable-inline-asm disable use of inline assembler --disable-yasm disable use of yasm assembler + --disable-mips32r2 disable MIPS32R2 optimizations + --disable-mipsdspr1 disable MIPS DSP ASE R1 optimizations + --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations + --disable-mipsfpu disable floating point MIPS optimizations + --disable-fast-unaligned consider unaligned accesses slow -Developer options (useful when working on Libav itself): +Developer options (useful when working on FFmpeg itself): --disable-debug disable debugging symbols --enable-debug=LEVEL set the debug level [$debuglevel] --disable-optimizations disable compiler optimizations --enable-extra-warnings enable more compiler warnings + --disable-stripping disable stripping of executables and shared libraries + --assert-level=level 0(default), 1 or 2, amount of assertion testing, + 2 causes a slowdown at runtime. + --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data + --valgrind=VALGRIND run "make fate" tests through valgrind to detect memory + leaks and errors, using the specified valgrind binary. + Cannot be combined with --target-exec + --enable-ftrapv Trap arithmetic overflows --samples=PATH location of test samples for FATE, if not set use - \$LIBAV_SAMPLES at make invocation time. + \$FATE_SAMPLES at make invocation time. --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only; should be used only for debugging purposes) --enable-random randomly enable/disable components @@ -327,7 +379,7 @@ die(){ 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. +ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net. EOF if disabled logging; then cat <<EOF @@ -615,6 +667,12 @@ print_config(){ } else if (file ~ /\\.mak\$/) { n = -v ? \"\" : \"!\"; printf(\"%s%s=yes\\n\", n, c) >>file; + } else if (file ~ /\\.texi\$/) { + pre = -v ? \"\" : \"@c \"; + yesno = \$2; + c2 = tolower(c); + gsub(/_/, \"-\", c2); + printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file; } } }" @@ -648,6 +706,10 @@ add_cflags(){ append CFLAGS $($cflags_filter "$@") } +add_cxxflags(){ + append CXXFLAGS $($cflags_filter "$@") +} + add_asflags(){ append ASFLAGS $($asflags_filter "$@") } @@ -698,6 +760,13 @@ check_cc(){ check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC } +check_cxx(){ + log check_cxx "$@" + cat > $TMPCPP + log_file $TMPCPP + check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP +} + check_cpp(){ log check_cpp "$@" cat > $TMPC @@ -738,7 +807,7 @@ check_yasm(){ echo "$1" > $TMPS log_file $TMPS shift 1 - check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS + check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS } ld_o(){ @@ -747,9 +816,11 @@ ld_o(){ check_ld(){ log check_ld "$@" - flags=$(filter_out '-l*' "$@") - libs=$(filter '-l*' "$@") - check_cc $($cflags_filter $flags) || return + type=$1 + shift 1 + flags=$(filter_out '-l*|*.so' $@) + libs=$(filter '-l*|*.so' $@) + check_$type $($cflags_filter $flags) || return flags=$($ldflags_filter $flags) libs=$($ldflags_filter $libs) check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs @@ -784,9 +855,17 @@ int x; EOF } +check_cxxflags(){ + log check_cxxflags "$@" + set -- $($cflags_filter "$@") + check_cxx "$@" <<EOF && append CXXFLAGS "$@" +int x; +EOF +} + test_ldflags(){ log test_ldflags "$@" - check_ld "$@" <<EOF + check_ld "cc" "$@" <<EOF int main(void){ return 0; } EOF } @@ -812,7 +891,7 @@ check_func(){ func=$1 shift disable $func - check_ld "$@" <<EOF && enable $func + check_ld "cc" "$@" <<EOF && enable $func extern int $func(); int main(void){ $func(); } EOF @@ -825,10 +904,10 @@ check_mathfunc(){ shift 2 test $narg = 2 && args="f, g" || args="f" disable $func - check_ld "$@" <<EOF && enable $func + check_ld "cc" "$@" <<EOF && enable $func #include <math.h> float foo(float f, float g) { return $func($args); } -int main(void){ return 0; } +int main(void){ return (int) foo; } EOF } @@ -845,7 +924,26 @@ check_func_headers(){ echo "long check_$func(void) { return (long) $func; }" done echo "int main(void) { return 0; }" - } | check_ld "$@" && enable $funcs && enable_safe $headers + } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers +} + +check_class_headers_cpp(){ + log check_class_headers_cpp "$@" + headers=$1 + classes=$2 + shift 2 + { + for hdr in $headers; do + echo "#include <$hdr>" + done + echo "int main(void) { " + i=1 + for class in $classes; do + echo "$class obj$i;" + i=$(expr $i + 1) + done + echo "return 0; }" + } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers } check_cpp_condition(){ @@ -877,13 +975,21 @@ check_lib2(){ check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@" } +check_lib_cpp(){ + log check_lib_cpp "$@" + headers="$1" + classes="$2" + shift 2 + check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@" +} + check_pkg_config(){ log check_pkg_config "$@" pkg="$1" headers="$2" funcs="$3" shift 3 - $pkg_config --exists $pkg || return + $pkg_config --exists $pkg 2>/dev/null || return pkg_cflags=$($pkg_config --cflags $pkg) pkg_libs=$($pkg_config --libs $pkg) check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" && @@ -892,7 +998,7 @@ check_pkg_config(){ } check_exec(){ - check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; } + check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; } } check_exec_crash(){ @@ -952,7 +1058,7 @@ check_builtin(){ builtin=$3 shift 3 disable "$name" - check_code ld "$headers" "$builtin" "$@" && enable "$name" + check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name" } require(){ @@ -971,6 +1077,14 @@ require2(){ check_lib2 "$headers" $func "$@" || die "ERROR: $name not found" } +require_cpp(){ + name="$1" + headers="$2" + classes="$3" + shift 3 + check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found" +} + require_pkg_config(){ pkg="$1" check_pkg_config "$@" || die "ERROR: $pkg not found" @@ -1036,26 +1150,46 @@ COMPONENT_LIST=" EXTERNAL_LIBRARY_LIST=" avisynth bzlib + crystalhd + fontconfig frei0r gnutls + iconv + libaacplus + libass + libbluray + libcaca libcdio + libcelt libdc1394 libfaac libfdk_aac + libflite libfreetype libgsm + libiec61883 libilbc + libmodplug libmp3lame + libnut libopencore_amrnb libopencore_amrwb libopencv libopenjpeg libopus libpulse + libquvi librtmp libschroedinger + libshine + libsoxr libspeex + libstagefright_h264 libtheora + libtwolame + libutvideo + libv4l2 + libvidstab libvo_aacenc libvo_amrwbenc libvorbis @@ -1063,17 +1197,29 @@ EXTERNAL_LIBRARY_LIST=" libx264 libxavs libxvid + libzmq + openal + opencl openssl x11grab zlib " +DOCUMENT_LIST=" + doc + htmlpages + manpages + podpages + txtpages +" + HWACCEL_LIST=" dxva2 vaapi vda vdpau " + LIBRARY_LIST=" avcodec avdevice @@ -1081,33 +1227,40 @@ LIBRARY_LIST=" avformat avresample avutil + postproc + swresample swscale " PROGRAM_LIST=" - avconv - avplay - avprobe - avserver + ffplay + ffprobe + ffserver + ffmpeg " CONFIG_LIST=" $COMPONENT_LIST + $DOCUMENT_LIST $EXTERNAL_LIBRARY_LIST $HWACCEL_LIST $LIBRARY_LIST $PROGRAM_LIST dct - doc + dwt error_resilience + fast_unaligned fft + ftrapv gpl gray hardcoded_tables + incompatible_fork_abi lsp lzo mdct memalign_hack + memory_poisoning network nonfree pic @@ -1127,6 +1280,7 @@ CONFIG_LIST=" THREADS_LIST=' pthreads w32threads + os2threads ' ATOMICS_LIST=' @@ -1192,6 +1346,10 @@ ARCH_EXT_LIST=" altivec ppc4xx vis + mipsfpu + mips32r2 + mipsdspr1 + mipsdspr2 " HAVE_LIST_CMDLINE=' @@ -1203,11 +1361,13 @@ HAVE_LIST_CMDLINE=' HAVE_LIST_PUB=' bigendian fast_unaligned + incompatible_fork_abi ' MATH_FUNCS=" atanf atan2f + cbrt cbrtf cosf exp2 @@ -1241,6 +1401,7 @@ HAVE_LIST=" $THREADS_LIST $ATOMICS_LIST $MATH_FUNCS + access aligned_malloc aligned_stack alsa_asoundlib_h @@ -1248,12 +1409,15 @@ HAVE_LIST=" arpa_inet_h asm_mod_q asm_mod_y + asm_types_h atomic_cas_ptr atomics_native attribute_may_alias attribute_packed cdio_paranoia_h cdio_paranoia_paranoia_h + CL_cl_h + clock_gettime closesocket CommandLineToArgvW cpunop @@ -1286,6 +1450,7 @@ HAVE_LIST=" getrusage getservbyport gettimeofday + glob gnu_as gsm_h i686 @@ -1294,6 +1459,7 @@ HAVE_LIST=" io_h isatty jack_port_get_latency_range + kbhit ldbrx libdc1394_1 libdc1394_2 @@ -1301,9 +1467,11 @@ HAVE_LIST=" local_aligned_8 localtime_r loongson + lzo1x_999_compress machine_ioctl_bt848_h machine_ioctl_meteor_h machine_rw_barrier + makeinfo malloc_h MapViewOfFile memalign @@ -1314,9 +1482,15 @@ HAVE_LIST=" mprotect msvcrt nanosleep + openjpeg_1_5_openjpeg_h + PeekNamedPipe + perl + pod2man poll_h posix_memalign + pthread_cancel rdtsc + rsync_contimeout sched_getaffinity sdl SetConsoleTextAttribute @@ -1327,14 +1501,13 @@ HAVE_LIST=" socklen_t soundcard_h strerror_r - strptime - strtok_r struct_addrinfo struct_group_source_req struct_ip_mreq_source struct_ipv6_mreq struct_pollfd struct_rusage_ru_maxrss + struct_sctp_event_subscribe struct_sockaddr_in6 struct_sockaddr_sa_len struct_sockaddr_storage @@ -1351,6 +1524,8 @@ HAVE_LIST=" sys_soundcard_h sys_time_h sys_videoio_h + termios_h + texi2html threads unistd_h usleep @@ -1368,6 +1543,7 @@ CONFIG_EXTRA=" ac3dsp audio_frame_queue dsputil + frame_thread_encoder gcrypt golomb gplv3 @@ -1404,6 +1580,7 @@ CMDLINE_SELECT=" logging lto optimizations + stripping " PATHS_LIST=' @@ -1421,10 +1598,12 @@ CMDLINE_SET=" ar arch as + assert_level build_suffix cc cpu cross_prefix + cxx dep_cc extra_version host_cc @@ -1433,14 +1612,17 @@ CMDLINE_SET=" host_ldflags host_libs host_os + install ld logfile malloc_prefix nm optflags pkg_config + progs_suffix random_seed samples + strip sysinclude sysroot target_exec @@ -1448,10 +1630,13 @@ CMDLINE_SET=" target_path target_samples toolchain + valgrind + yasmexe " CMDLINE_APPEND=" extra_cflags + extra_cxxflags host_cppflags " @@ -1468,6 +1653,11 @@ vfpv3_deps="vfp" map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM +mipsfpu_deps="mips" +mips32r2_deps="mips" +mipsdspr1_deps="mips" +mipsdspr2_deps="mips" + altivec_deps="ppc" ppc4xx_deps="ppc" @@ -1514,12 +1704,13 @@ log2_deps="!msvcrt" # subsystems dct_select="rdft" error_resilience_select="dsputil" +frame_thread_encoder_deps="encoders threads" lpc_select="dsputil" mdct_select="fft" rdft_select="fft" mpegaudio_select="mpegaudiodsp" mpegaudiodsp_select="dct" -mpegvideo_select="dsputil hpeldsp videodsp" +mpegvideo_select="dsputil h264chroma hpeldsp videodsp" mpegvideoenc_select="mpegvideo" # decoders / encoders @@ -1535,6 +1726,7 @@ als_decoder_select="dsputil" amrnb_decoder_select="lsp" amrwb_decoder_select="lsp" amv_decoder_select="dsputil hpeldsp" +amv_encoder_select="aandcttables" ape_decoder_select="dsputil" asv1_decoder_select="dsputil" asv1_encoder_select="dsputil" @@ -1552,6 +1744,7 @@ cook_decoder_select="dsputil mdct sinewin" cscd_decoder_select="lzo" cscd_decoder_suggest="zlib" dca_decoder_select="mdct" +dirac_decoder_select="dsputil dwt golomb videodsp" dnxhd_decoder_select="dsputil" dnxhd_encoder_select="aandcttables dsputil mpegvideoenc" dvvideo_decoder_select="dsputil" @@ -1560,8 +1753,9 @@ dxa_decoder_select="zlib" eac3_decoder_select="ac3_decoder" eac3_encoder_select="ac3_encoder" eamad_decoder_select="aandcttables dsputil mpegvideo" -eatgq_decoder_select="aandcttables dsputil" +eatgq_decoder_select="aandcttables" eatqi_decoder_select="aandcttables error_resilience mpegvideo" +exr_decoder_select="zlib" ffv1_decoder_select="dsputil golomb rangecoder" ffv1_encoder_select="dsputil rangecoder" ffvhuff_decoder_select="dsputil" @@ -1570,11 +1764,13 @@ flac_decoder_select="golomb" flac_encoder_select="dsputil golomb lpc" flashsv_decoder_select="zlib" flashsv_encoder_select="zlib" +flashsv2_encoder_select="zlib" flashsv2_decoder_select="zlib" flv_decoder_select="h263_decoder" flv_encoder_select="h263_encoder" fourxm_decoder_select="dsputil" fraps_decoder_select="dsputil huffman" +g729_decoder_select="dsputil" h261_decoder_select="error_resilience mpegvideo" h261_encoder_select="aandcttables mpegvideoenc" h263_decoder_select="error_resilience h263_parser mpegvideo" @@ -1632,7 +1828,7 @@ mxpeg_decoder_select="dsputil hpeldsp" nellymoser_decoder_select="mdct sinewin" nellymoser_encoder_select="audio_frame_queue mdct sinewin" nuv_decoder_select="dsputil lzo" -png_decoder_select="dsputil zlib" +png_decoder_select="zlib" png_encoder_select="dsputil zlib" prores_decoder_select="dsputil" prores_encoder_select="dsputil" @@ -1640,6 +1836,7 @@ qcelp_decoder_select="lsp" qdm2_decoder_select="mdct rdft mpegaudiodsp" ra_144_encoder_select="audio_frame_queue lpc" ralf_decoder_select="golomb" +rtjpeg_decoder_select="dsputil" rv10_decoder_select="error_resilience h263_decoder" rv10_encoder_select="h263_encoder" rv20_decoder_select="error_resilience h263_decoder" @@ -1648,6 +1845,11 @@ rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvi rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp" shorten_decoder_select="golomb" sipr_decoder_select="lsp" +snow_decoder_select="dsputil dwt h264qpel hpeldsp rangecoder" +snow_encoder_select="aandcttables dsputil dwt h264qpel hpeldsp mpegvideoenc rangecoder" +sonic_decoder_select="golomb" +sonic_encoder_select="golomb" +sonic_ls_encoder_select="golomb" sp5x_decoder_select="dsputil hpeldsp" svq1_decoder_select="hpeldsp" svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc" @@ -1658,7 +1860,7 @@ theora_decoder_select="vp3_decoder" tiff_decoder_suggest="zlib" tiff_encoder_suggest="zlib" thp_decoder_select="dsputil hpeldsp" -truehd_decoder_select="mlp_decoder" +truehd_decoder_select="mlp_parser" truemotion2_decoder_select="dsputil" truespeech_decoder_select="dsputil" tscc_decoder_select="zlib" @@ -1695,6 +1897,7 @@ zmbv_decoder_select="zlib" zmbv_encoder_select="zlib" # hardware accelerators +crystalhd_deps="libcrystalhd_libcrystalhd_if_h" dxva2_deps="dxva2api_h" vaapi_deps="va_va_h" vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads" @@ -1705,10 +1908,13 @@ h263_vaapi_hwaccel_deps="vaapi" h263_vaapi_hwaccel_select="h263_decoder" h263_vdpau_hwaccel_deps="vdpau" h263_vdpau_hwaccel_select="h263_decoder" +h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser" h264_dxva2_hwaccel_deps="dxva2" h264_dxva2_hwaccel_select="h264_decoder" h264_vaapi_hwaccel_deps="vaapi" h264_vaapi_hwaccel_select="h264_decoder" +h264_vda_decoder_deps="vda" +h264_vda_decoder_select="h264_decoder" h264_vda_hwaccel_deps="vda" h264_vda_hwaccel_select="h264_decoder" h264_vdpau_decoder_deps="vdpau" @@ -1721,18 +1927,22 @@ mpeg1_vdpau_decoder_deps="vdpau" mpeg1_vdpau_decoder_select="mpeg1video_decoder" mpeg1_vdpau_hwaccel_deps="vdpau" mpeg1_vdpau_hwaccel_select="mpeg1video_decoder" +mpeg2_crystalhd_decoder_select="crystalhd" 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_crystalhd_decoder_select="crystalhd" mpeg4_vaapi_hwaccel_deps="vaapi" mpeg4_vaapi_hwaccel_select="mpeg4_decoder" mpeg4_vdpau_decoder_deps="vdpau" mpeg4_vdpau_decoder_select="mpeg4_decoder" mpeg4_vdpau_hwaccel_deps="vdpau" mpeg4_vdpau_hwaccel_select="mpeg4_decoder" +msmpeg4_crystalhd_decoder_select="crystalhd" +vc1_crystalhd_decoder_select="crystalhd" vc1_dxva2_hwaccel_deps="dxva2" vc1_dxva2_hwaccel_select="vc1_decoder" vc1_vaapi_hwaccel_deps="vaapi" @@ -1741,6 +1951,7 @@ vc1_vdpau_decoder_deps="vdpau" vc1_vdpau_decoder_select="vc1_decoder" vc1_vdpau_hwaccel_deps="vdpau" vc1_vdpau_hwaccel_select="vc1_decoder" +wmv3_crystalhd_decoder_select="crystalhd" wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel" wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel" wmv3_vdpau_decoder_select="vc1_vdpau_decoder" @@ -1753,6 +1964,8 @@ mpegvideo_parser_select="error_resilience mpegvideo" vc1_parser_select="mpegvideo" # external libraries +libaacplus_encoder_deps="libaacplus" +libcelt_decoder_deps="libcelt" libfaac_encoder_deps="libfaac" libfaac_encoder_select="audio_frame_queue" libfdk_aac_encoder_deps="libfdk_aac" @@ -1763,6 +1976,7 @@ libgsm_ms_decoder_deps="libgsm" libgsm_ms_encoder_deps="libgsm" libilbc_decoder_deps="libilbc" libilbc_encoder_deps="libilbc" +libmodplug_demuxer_deps="libmodplug" libmp3lame_encoder_deps="libmp3lame" libmp3lame_encoder_select="audio_frame_queue" libopencore_amrnb_decoder_deps="libopencore_amrnb" @@ -1774,15 +1988,21 @@ libopenjpeg_encoder_deps="libopenjpeg" libopus_decoder_deps="libopus" libopus_encoder_deps="libopus" libopus_encoder_select="audio_frame_queue" +libquvi_demuxer_deps="libquvi" libschroedinger_decoder_deps="libschroedinger" libschroedinger_encoder_deps="libschroedinger" +libshine_encoder_deps="libshine" +libshine_encoder_select="audio_frame_queue" libspeex_decoder_deps="libspeex" libspeex_encoder_deps="libspeex" libspeex_encoder_select="audio_frame_queue" +libstagefright_h264_decoder_deps="libstagefright_h264" libtheora_encoder_deps="libtheora" +libtwolame_encoder_deps="libtwolame" libvo_aacenc_encoder_deps="libvo_aacenc" libvo_aacenc_encoder_select="audio_frame_queue" libvo_amrwbenc_encoder_deps="libvo_amrwbenc" +libvorbis_decoder_deps="libvorbis" libvorbis_encoder_deps="libvorbis" libvorbis_encoder_select="audio_frame_queue" libvpx_vp8_decoder_deps="libvpx" @@ -1790,18 +2010,26 @@ libvpx_vp8_encoder_deps="libvpx" libvpx_vp9_decoder_deps="libvpx" libvpx_vp9_encoder_deps="libvpx" libx264_encoder_deps="libx264" +libx264rgb_encoder_deps="libx264" libxavs_encoder_deps="libxavs" libxvid_encoder_deps="libxvid" +libutvideo_decoder_deps="libutvideo" +libutvideo_encoder_deps="libutvideo" # demuxers / muxers ac3_demuxer_select="ac3_parser" asf_stream_muxer_select="asf_muxer" avisynth_demuxer_deps="avisynth" dirac_demuxer_select="dirac_parser" +dts_demuxer_select="dca_parser" +dtshd_demuxer_select="dca_parser" eac3_demuxer_select="ac3_parser" +f4v_muxer_select="mov_muxer" flac_demuxer_select="flac_parser" ipod_muxer_select="mov_muxer" ismv_muxer_select="mov_muxer" +libnut_demuxer_deps="libnut" +libnut_muxer_deps="libnut" matroska_audio_muxer_select="matroska_muxer" matroska_demuxer_suggest="bzlib lzo zlib" mov_demuxer_suggest="zlib" @@ -1825,33 +2053,47 @@ spdif_muxer_select="aac_parser" tak_demuxer_select="tak_parser" tg2_muxer_select="mov_muxer" tgp_muxer_select="mov_muxer" +vobsub_demuxer_select="mpegps_demuxer" w64_demuxer_deps="wav_demuxer" +w64_muxer_deps="wav_muxer" # 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" +caca_outdev_deps="libcaca" +dshow_indev_deps="IBaseFilter" +dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid" dv1394_indev_deps="dv1394 dv_demuxer" fbdev_indev_deps="linux_fb_h" -jack_indev_deps="jack_jack_h pthreads" +iec61883_indev_deps="libiec61883" +jack_indev_deps="jack_jack_h sem_timedwait" +lavfi_indev_deps="avfilter" libcdio_indev_deps="libcdio" libdc1394_indev_deps="libdc1394" +libv4l2_indev_deps="libv4l2" +openal_indev_deps="openal" oss_indev_deps_any="soundcard_h sys_soundcard_h" oss_outdev_deps_any="soundcard_h sys_soundcard_h" pulse_indev_deps="libpulse" +sdl_outdev_deps="sdl" sndio_indev_deps="sndio_h" sndio_outdev_deps="sndio_h" +v4l_indev_deps="linux_videodev_h" v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h" +v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h" vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines" vfwcap_indev_extralibs="-lavicap32" -x11grab_indev_deps="x11grab XShmCreateImage" +x11grab_indev_deps="x11grab" # protocols +bluray_protocol_deps="libbluray" ffrtmpcrypt_protocol_deps="!librtmp_protocol" ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl" ffrtmpcrypt_protocol_select="tcp_protocol" ffrtmphttp_protocol_deps="!librtmp_protocol" ffrtmphttp_protocol_select="http_protocol" +ftp_protocol_select="tcp_protocol" gopher_protocol_select="network" httpproxy_protocol_select="tcp_protocol" http_protocol_select="tcp_protocol" @@ -1881,21 +2123,60 @@ tls_protocol_select="tcp_protocol" udp_protocol_select="network" # filters +aconvert_filter_deps="swresample" +amovie_filter_deps="avcodec avformat" +aresample_filter_deps="swresample" +ass_filter_deps="libass" +asyncts_filter_deps="avresample" +atempo_filter_deps="avcodec rdft" +azmq_filter_deps="libzmq" blackframe_filter_deps="gpl" boxblur_filter_deps="gpl" +colormatrix_filter_deps="gpl" cropdetect_filter_deps="gpl" +dctdnoiz_filter_deps="avcodec fft" delogo_filter_deps="gpl" +deshake_filter_deps="avcodec" +deshake_filter_select="dsputil" drawtext_filter_deps="libfreetype" -frei0r_filter_deps="frei0r dlopen strtok_r" +ebur128_filter_deps="gpl" +flite_filter_deps="libflite" +frei0r_filter_deps="frei0r dlopen" frei0r_filter_extralibs='$ldl' -frei0r_src_filter_deps="frei0r dlopen strtok_r" +frei0r_src_filter_deps="frei0r dlopen" frei0r_src_filter_extralibs='$ldl' +geq_filter_deps="gpl" +histeq_filter_deps="gpl" hqdn3d_filter_deps="gpl" +hue_filter_deps="gpl" interlace_filter_deps="gpl" +kerndeint_filter_deps="gpl" +movie_filter_deps="avcodec avformat" +mp_filter_deps="gpl avcodec swscale inline_asm" +mpdecimate_filter_deps="gpl avcodec" +mptestsrc_filter_deps="gpl" +negate_filter_deps="lut_filter" +noise_filter_deps="gpl" resample_filter_deps="avresample" ocv_filter_deps="libopencv" +owdenoise_filter_deps="gpl" +pan_filter_deps="swresample" +pp_filter_deps="gpl postproc" +removelogo_filter_deps="avcodec avformat swscale" scale_filter_deps="swscale" +smartblur_filter_deps="gpl swscale" +showspectrum_filter_deps="avcodec rdft" +stereo3d_filter_deps="gpl" +subtitles_filter_deps="avformat avcodec libass" +super2xsai_filter_deps="gpl" +tinterlace_filter_deps="gpl" +vidstabdetect_filter_deps="libvidstab" +vidstabtransform_filter_deps="libvidstab" yadif_filter_deps="gpl" +pixfmts_super2xsai_test_deps="super2xsai_filter" +tinterlace_merge_test_deps="tinterlace_filter" +tinterlace_pad_test_deps="tinterlace_filter" +zmq_filter_deps="libzmq" # libraries avcodec_deps="avutil" @@ -1903,20 +2184,26 @@ avdevice_deps="avutil avcodec avformat" avfilter_deps="avutil" avformat_deps="avutil avcodec" avresample_deps="avutil" +postproc_deps="avutil gpl" swscale_deps="avutil" # programs -avconv_deps="avcodec avfilter avformat avresample swscale" -avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter - fps_filter null_filter resample_filter scale_filter +ffmpeg_deps="avcodec avfilter avformat swscale swresample" +ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter + null_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_extralibs='$ldl' - -doc_deps="texi2html" +ffplay_deps="avcodec avformat swscale swresample sdl" +ffplay_select="rdft crop_filter" +ffprobe_deps="avcodec avformat" +ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer" +ffserver_extralibs='$ldl' + +# documentation +podpages_deps="perl" +manpages_deps="perl pod2man" +htmlpages_deps="texi2html" +txtpages_deps="makeinfo" +doc_deps_any="manpages htmlpages podpages txtpages" # default parameters @@ -1925,7 +2212,7 @@ logfile="config.log" # installation paths prefix_default="/usr/local" bindir_default='${prefix}/bin' -datadir_default='${prefix}/share/avconv' +datadir_default='${prefix}/share/ffmpeg' incdir_default='${prefix}/include' libdir_default='${prefix}/lib' mandir_default='${prefix}/share/man' @@ -1934,14 +2221,17 @@ shlibdir_default="$libdir_default" # toolchain ar_default="ar" cc_default="gcc" +cxx_default="g++" host_cc_default="gcc" cp_f="cp -f" +install="install" ln_s="ln -s -f" nm_default="nm -g" objformat="elf" pkg_config_default=pkg-config ranlib="ranlib" -yasmexe="yasm" +strip_default="strip" +yasmexe_default="yasm" nogas=":" @@ -1954,22 +2244,26 @@ target_os_default=$(tolower $(uname -s)) host_os=$target_os_default # configurable options -enable $LIBRARY_LIST $PROGRAM_LIST +enable $PROGRAM_LIST +enable $DOCUMENT_LIST +enable $(filter_out avresample $LIBRARY_LIST) +enable stripping enable asm enable debug enable doc enable optimizations +enable runtime_cpudetect enable safe_bitstream_reader enable static enable swscale_alpha -# By default, enable only those hwaccels that have no external dependencies. -enable dxva2 vdpau +# Enable hwaccels by default. +enable dxva2 vaapi vdpau # build settings SHFLAGS='-shared -Wl,-soname,$$(@F)' -AVSERVERLDFLAGS=-Wl,-E +FFSERVERLDFLAGS=-Wl,-E LIBPREF="lib" LIBSUF=".a" FULLNAME='$(NAME)$(BUILDSUF)' @@ -1992,6 +2286,8 @@ AS_O='-o $@' CC_C='-c' CC_E='-E -o $@' CC_O='-o $@' +CXX_C='-c' +CXX_O='-o $@' LD_O='-o $@' LD_LIB='-l%' LD_PATH='-L' @@ -2027,7 +2323,7 @@ for v in "$@"; do r=${v#*=} l=${v%"$r"} r=$(sh_quote "$r") - LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}" + FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}" done find_things(){ @@ -2147,7 +2443,9 @@ for opt do is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt" eval list=\$$(toupper $thing)_LIST name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing} - $action $(filter "$name" $list) + list=$(filter "$name" $list) + [ "$list" = "" ] && warn "Option $opt did not match anything" + $action $list ;; --enable-?*|--disable-?*) eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g') @@ -2168,6 +2466,8 @@ for opt do ;; --help|-h) show_help ;; + --fatal-warnings) enable fatal_warnings + ;; *) optname="${opt%%=*}" optname="${optname#--}" @@ -2185,7 +2485,7 @@ done disabled logging && logfile=/dev/null -echo "# $0 $LIBAV_CONFIGURATION" > $logfile +echo "# $0 $FFMPEG_CONFIGURATION" > $logfile set >> $logfile test -n "$cross_prefix" && enable cross_compile @@ -2197,12 +2497,16 @@ fi ar_default="${cross_prefix}${ar_default}" cc_default="${cross_prefix}${cc_default}" +cxx_default="${cross_prefix}${cxx_default}" nm_default="${cross_prefix}${nm_default}" pkg_config_default="${cross_prefix}${pkg_config_default}" ranlib="${cross_prefix}${ranlib}" +strip_default="${cross_prefix}${strip_default}" sysinclude_default="${sysroot}/usr/include" +test -n "$valgrind" && toolchain="valgrind-memcheck" + case "$toolchain" in clang-asan) cc_default="clang" @@ -2225,12 +2529,12 @@ case "$toolchain" in add_ldflags -fsanitize=thread -pie -fPIC ;; valgrind-massif) - target_exec_default="valgrind" - target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz" + target_exec_default=${valgrind:-"valgrind"} + target_exec_args="--tool=massif --alloc-fn=av_malloc --alloc-fn=av_mallocz --alloc-fn=av_calloc --alloc-fn=av_fast_padded_malloc --alloc-fn=av_fast_malloc --alloc-fn=av_realloc_f --alloc-fn=av_fast_realloc --alloc-fn=av_realloc" ;; valgrind-memcheck) - target_exec_default="valgrind" - target_exec_args="--track-origins=yes --leak-check=full" + target_exec_default=${valgrind:-"valgrind"} + target_exec_args="--error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp" ;; msvc) cc_default="c99wrap cl" @@ -2255,7 +2559,7 @@ case "$toolchain" in ;; esac -set_default arch cc pkg_config sysinclude target_exec target_os +set_default arch cc cxx pkg_config strip sysinclude target_exec target_os yasmexe enabled cross_compile || host_cc_default=$cc set_default host_cc @@ -2298,6 +2602,7 @@ trap 'rm -f -- $TMPFILES' EXIT tmpfile TMPASM .asm tmpfile TMPC .c +tmpfile TMPCPP .cpp tmpfile TMPE $EXESUF tmpfile TMPH .h tmpfile TMPO .o @@ -2348,6 +2653,7 @@ msvc_flags(){ -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \ -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \ -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \ + -wd4554 \ -wd4996 -wd4273 ;; -std=c99) ;; -fno-math-errno) ;; @@ -2393,7 +2699,8 @@ suncc_flags(){ core2) echo -xarch=ssse3 -xchip=core2 ;; corei7) echo -xarch=sse4_2 -xchip=nehalem ;; corei7-avx) echo -xarch=avx -xchip=sandybridge ;; - amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;; + amdfam10|barcelona) echo -xtarget=barcelona ;; + bdver*) echo -xarch=avx ;; athlon-4|athlon-[mx]p) echo -xarch=ssea ;; k8|opteron|athlon64|athlon-fx) echo -xarch=sse2a ;; @@ -2548,7 +2855,7 @@ probe_cc(){ opt_common='-alias=ansi -Mdse -Mlre -Mpre' _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common" _cflags_size="-O2 -Munroll=c:1 $opt_common" - _cflags_noopt="-O1" + _cflags_noopt="-O" _flags_filter=pgi_flags elif $_cc 2>&1 | grep -q Microsoft; then _type=msvc @@ -2573,6 +2880,7 @@ probe_cc(){ if [ $pfx = hostcc ]; then append _cflags -Dsnprintf=_snprintf fi + disable stripping elif $_cc 2>&1 | grep -q Intel; then _type=icl _ident=$($cc 2>&1 | head -n1) @@ -2678,6 +2986,7 @@ else fi add_cflags $extra_cflags +add_cxxflags $extra_cxxflags add_asflags $extra_cflags if test -n "$sysroot"; then @@ -2718,7 +3027,7 @@ case "$arch" in aarch64|arm64) arch="aarch64" ;; - arm*) + arm*|iPad*) arch="arm" ;; mips*|IP*) @@ -2742,7 +3051,7 @@ case "$arch" in tilegx|tile-gx) arch="tilegx" ;; - i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64) + i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64) arch="x86" ;; esac @@ -2852,6 +3161,28 @@ elif enabled mips; then cpuflags="-march=$cpu" + case $cpu in + 24kc) + disable mipsfpu + disable mipsdspr1 + disable mipsdspr2 + ;; + 24kf*) + disable mipsdspr1 + disable mipsdspr2 + ;; + 24kec|34kc|1004kc) + disable mipsfpu + disable mipsdspr2 + ;; + 24kef*|34kf*|1004kf*) + disable mipsdspr2 + ;; + 74kc) + disable mipsfpu + ;; + esac + elif enabled ppc; then case $(tolower $cpu) in @@ -2960,6 +3291,7 @@ if test "$?" != 0; then fi add_cppflags -D_ISOC99_SOURCE +add_cxxflags -D__STDC_CONSTANT_MACROS check_cflags -std=c99 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64 #include <stdlib.h> @@ -3005,6 +3337,11 @@ case "$arch" in spic=$shared fi ;; + ppc) + check_cc <<EOF && subarch="ppc64" + int test[(int)sizeof(char*) - 7]; +EOF + ;; esac enable $subarch @@ -3018,7 +3355,7 @@ case $target_os in host_libs= ;; sunos) - AVSERVERLDFLAGS="" + FFSERVERLDFLAGS="" SHFLAGS='-shared -Wl,-h,$$(@F)' enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS" network_extralibs="-lsocket -lnsl" @@ -3035,6 +3372,7 @@ case $target_os in disable symver oss_indev_extralibs="-lossaudio" oss_outdev_extralibs="-lossaudio" + enabled gcc || check_ldflags -Wl,-zmuldefs ;; openbsd|bitrig) disable symver @@ -3051,17 +3389,19 @@ case $target_os in ;; bsd/os) add_extralibs -lpoll -lgnugetopt + strip="strip -d" ;; darwin) gas="gas-preprocessor.pl $cc" enabled ppc && add_asflags -force_cpusubtype_ALL SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)' enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress + strip="${strip} -x" add_ldflags -Wl,-dynamic,-search_paths_first SLIBSUF=".dylib" SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)' - AVSERVERLDFLAGS=-Wl,-bind_at_load + FFSERVERLDFLAGS=-Wl,-bind_at_load objformat="macho" enabled x86_64 && objformat="macho64" enabled_any pic shared || @@ -3086,14 +3426,21 @@ case $target_os in SLIBSUF=".dll" SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' - SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)' + dlltool="${cross_prefix}dlltool" + if check_cmd lib.exe -list; then + SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)' + if enabled x86_64; then + LIBTARGET=x64 + fi + elif check_cmd $dlltool --version; then + SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)' + fi SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS= SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)' SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)' SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base' objformat="win32" - dlltool="${cross_prefix}dlltool" ranlib=: enable dos_paths disable pic @@ -3152,12 +3499,13 @@ case $target_os in ranlib="echo ignoring ranlib" ;; os/2*) + strip="lxlite -CS" ln_s="cp -f" objformat="aout" add_cppflags -D_GNU_SOURCE add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf' - AVSERVERLDFLAGS="" + FFSERVERLDFLAGS="" LIBSUF="_s.a" SLIBPREF="" SLIBSUF=".dll" @@ -3173,6 +3521,7 @@ case $target_os in emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;' SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib' enable dos_paths + enable_weak os2threads ;; gnu/kfreebsd) add_cppflags -D_BSD_SOURCE @@ -3197,7 +3546,7 @@ case $target_os in ;; osf1) add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT - AVSERVERLDFLAGS= + FFSERVERLDFLAGS= ;; minix) ;; @@ -3210,7 +3559,7 @@ case $target_os in add_compat strtod.o strtod=avpriv_strtod network_extralibs='-lbsd' exeobjs=compat/plan9/main.o - disable avserver + disable ffserver cp_f='cp' ;; none) @@ -3240,6 +3589,11 @@ elif check_header _mingw.h; then (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" || die "ERROR: MinGW runtime version must be >= 3.15." add_cppflags -U__STRICT_ANSI__ + if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \ + __MINGW64_VERSION_MAJOR < 3"; then + add_compat msvcrt/snprintf.o + add_cflags "-include $source_path/compat/msvcrt/snprintf.h" + fi elif check_func_headers stdlib.h _get_doserrno; then libc_type=msvcrt add_compat strtod.o strtod=avpriv_strtod @@ -3280,7 +3634,7 @@ esc(){ echo "$*" | sed 's/%/%25/g;s/:/%3a/g' } -echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate +echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic @@ -3302,15 +3656,22 @@ die_license_disabled() { enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; } } +die_license_disabled_gpl() { + enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; } +} + die_license_disabled gpl libcdio +die_license_disabled gpl libutvideo +die_license_disabled gpl libvidstab die_license_disabled gpl libx264 die_license_disabled gpl libxavs die_license_disabled gpl libxvid die_license_disabled gpl x11grab +die_license_disabled nonfree libaacplus die_license_disabled nonfree libfaac -die_license_disabled nonfree libfdk_aac -die_license_disabled nonfree openssl +enabled gpl && die_license_disabled_gpl nonfree libfdk_aac +enabled gpl && die_license_disabled_gpl nonfree openssl die_license_disabled version3 libopencore_amrnb die_license_disabled version3 libopencore_amrwb @@ -3367,7 +3728,10 @@ if enabled alpha; then elif enabled arm; then - check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb + check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb +float func(float a, float b){ return a+b; } +EOF + enabled thumb && check_cflags -mthumb || check_cflags -marm nogas=die @@ -3376,7 +3740,7 @@ elif enabled arm; then elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then case "${cross_prefix:-$cc}" in *hardfloat*) enable vfp_args; fpabi=vfp ;; - *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;; + *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;; __asm__ (".eabi_attribute 28, 1"); int main(void) { return 0; } EOF @@ -3403,6 +3767,14 @@ EOF elif enabled mips; then check_inline_asm loongson '"dmult.g $1, $2, $3"' + enabled mips32r2 && add_cflags "-mips32r2" && add_asflags "-mips32r2" && + check_inline_asm mips32r2 '"rotr $t0, $t1, 1"' + enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" && + check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"' + enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" && + check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"' + enabled mipsfpu && add_cflags "-mhard-float" && add_asflags "-mhard-float" && + check_inline_asm mipsfpu '"madd.d $f0, $f2, $f4, $f6"' elif enabled parisc; then @@ -3491,8 +3863,9 @@ EOF elf*) enabled debug && append YASMFLAGS $yasm_debug ;; esac - check_yasm "vextractf128 xmm0, ymm0, 0" && enable yasm || + check_yasm "pextrd [eax], xmm0, 1" && enable yasm || die "yasm not found, use --disable-yasm for a crippled build" + check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx_external check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external check_yasm "CPU amdnop" && enabled i686 && enable cpunop fi @@ -3563,6 +3936,8 @@ fi # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; } +check_func access +check_func clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; } check_func fcntl check_func fork check_func_headers stdlib.h getenv @@ -3582,8 +3957,6 @@ check_func ${malloc_prefix}posix_memalign && enable posix_memalign check_func_headers malloc.h _aligned_malloc && enable aligned_malloc check_func setrlimit check_func strerror_r -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()" @@ -3592,7 +3965,10 @@ check_builtin MemoryBarrier windows.h "MemoryBarrier()" check_func sysconf check_func sysctl check_func usleep +check_func_headers conio.h kbhit +check_func_headers windows.h PeekNamedPipe check_func_headers io.h setmode +check_func_headers lzo/lzo1x.h lzo1x_999_compress check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi @@ -3603,12 +3979,15 @@ check_func_headers windows.h MapViewOfFile check_func_headers windows.h SetConsoleTextAttribute check_func_headers windows.h Sleep check_func_headers windows.h VirtualAlloc +check_func_headers glob.h glob +check_header cl/cl.h check_header direct.h check_header dlfcn.h check_header dxva.h -check_header dxva2api.h +check_header dxva2api.h -D_WIN32_WINNT=0x0600 check_header io.h +check_header libcrystalhd/libcrystalhd_if.h check_header malloc.h check_header poll.h check_header sys/mman.h @@ -3616,12 +3995,14 @@ check_header sys/param.h check_header sys/resource.h check_header sys/select.h check_header sys/time.h +check_header termios.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 +check_header asm/types.h disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib @@ -3632,7 +4013,7 @@ 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 +if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then enable pthreads if check_func pthread_create; then : @@ -3657,12 +4038,16 @@ for thread in $THREADS_LIST; do fi done +if enabled pthreads; then + check_func pthread_cancel +fi + enabled sync_val_compare_and_swap && enable atomics_gcc enabled machine_rw_barrier && enabled atomic_cas_ptr && enable atomics_suncc enabled MemoryBarrier && enable atomics_win32 check_lib math.h sin -lm && LIBM="-lm" -enabled vaapi && require vaapi va/va.h vaInitialize -lva +disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd atan2f_args=2 ldexpf_args=2 @@ -3673,42 +4058,83 @@ for func in $MATH_FUNCS; do done # these are off by default, so fail if requested and not available -enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32 +enabled avisynth && { { check_lib2 "windows.h" LoadLibrary; } || + { check_lib2 "dlfcn.h" dlopen -ldl; } || + die "ERROR: LoadLibrary/dlopen not found for avisynth"; } +enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit 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 libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883 +enabled libaacplus && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus +enabled libass && require_pkg_config libass ass/ass.h ass_library_init +enabled libbluray && require libbluray libbluray/bluray.h bd_open -lbluray +enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 && + { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 || + die "ERROR: libcelt must be installed and version must be >= 0.11.0."; } +enabled libcaca && require_pkg_config caca caca.h caca_create_canvas enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac +flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite" +enabled libflite && require2 libflite "flite/flite.h" flite_init $flite_libs 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 libmodplug && require libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame +enabled libnut && require libnut libnut.h nut_demuxer_init -lnut enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader -enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg +enabled libopencv && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader +enabled libopenjpeg && { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg || + check_lib openjpeg.h opj_version -lopenjpeg || + die "ERROR: libopenjpeg not found"; } 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 libquvi && require_pkg_config libquvi quvi/quvi.h quvi_init 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 libshine && require_pkg_config shine shine/layer3.h shine_encode_frame +enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex +enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h + media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h + media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg +enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame && + { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame || + die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; } +enabled libutvideo && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++ +enabled libv4l2 && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl +enabled libvidstab && require_pkg_config vidstab vid.stab/libvidstab.h vsMotionDetectInit 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"; } - 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_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx || + die "ERROR: libvpx encoder version must be >=0.9.7"; } 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."; } + die "ERROR: libx264 must be installed and 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 libzmq && require_pkg_config libzmq zmq.h zmq_ctx_new +enabled openal && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do + check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } || + die "ERROR: openal not found"; } && + { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" || + die "ERROR: openal must be installed and version must be 1.1 or compatible"; } +enabled opencl && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL || + check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL || + die "ERROR: opencl not found"; } && + { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" || + check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" || + die "ERROR: opencl must be installed and version must be 1.2 or compatible"; } 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 || @@ -3728,17 +4154,33 @@ if enabled libdc1394; then die "ERROR: No version of libdc1394 found " fi +SDL_CONFIG="${cross_prefix}sdl-config" 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 && check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags && enable sdl +else + if "${SDL_CONFIG}" --version > /dev/null 2>&1; then + sdl_cflags=$("${SDL_CONFIG}" --cflags) + sdl_libs=$("${SDL_CONFIG}" --libs) + check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs && + check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags && + check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags && + enable sdl + fi fi +enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs -texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html +texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html +makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo +perl --version > /dev/null 2>&1 && enable perl || disable perl +pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man +rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout check_header linux/fb.h +check_header linux/videodev.h check_header linux/videodev2.h -check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete +check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete check_header sys/videoio.h @@ -3747,6 +4189,8 @@ check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extra # w32api 3.12 had it defined wrong check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines +check_type "dshow.h" IBaseFilter + # check for ioctl_meteor.h, ioctl_bt848.h and alternatives { check_header dev/bktr/ioctl_meteor.h && check_header dev/bktr/ioctl_bt848.h; } || @@ -3757,12 +4201,19 @@ check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_def check_header dev/ic/bt8xx.h check_header sndio.h -check_header sys/soundcard.h +if check_struct sys/soundcard.h audio_buf_info bytes; then + enable_safe sys/soundcard.h +else + check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h + #include <sys/soundcard.h> + audio_buf_info abc; +EOF +fi check_header soundcard.h 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 && +enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait && check_func jack_port_get_latency_range -ljack enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio @@ -3776,10 +4227,17 @@ require X11 X11/Xlib.h XOpenDisplay -lX11 && require Xext X11/extensions/XShm.h XShmCreateImage -lXext && require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes +enabled vaapi && + check_lib va/va.h vaInitialize -lva || + disable vaapi + enabled vdpau && check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" || disable vdpau +# Funny iconv installations are not unusual, so check it after all flags have been set +disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv + enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel" # add some useful compiler flags if supported @@ -3792,17 +4250,17 @@ 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 check_cflags -Wmissing-prototypes +check_cflags -Wno-pointer-to-int-cast check_cflags -Wstrict-prototypes enabled extra_warnings && check_cflags -Winline # add some linker flags check_ldflags -Wl,--warn-common -check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample +check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic enabled xmm_clobber_test && @@ -3855,17 +4313,25 @@ check_optflags $optflags check_optflags -fno-math-errno check_optflags -fno-signed-zeros +enabled ftrapv && check_cflags -ftrapv + +check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone" +int x; +EOF + + if enabled icc; then # Just warnings, no remarks check_cflags -w1 # -wd: Disable following warnings # 144, 167, 556: -Wno-pointer-sign + # 188: enumerated type mixed with another type # 1292: attribute "foo" ignored # 1419: external declaration in primary source file # 10006: ignoring unknown option -fno-signed-zeros # 10148: ignoring unknown option -Wno-parentheses # 10156: ignoring option '-W'; no argument required - check_cflags -wd144,167,556,1292,1419,10006,10148,10156 + check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156 # 11030: Warning unknown option --as-needed # 10156: ignoring option '-export'; no argument required check_ldflags -wd10156,11030 @@ -3888,7 +4354,6 @@ elif enabled gcc; then check_cflags -Werror=implicit-function-declaration check_cflags -Werror=missing-prototypes check_cflags -Werror=return-type - check_cflags -Werror=declaration-after-statement check_cflags -Werror=vla elif enabled llvm_gcc; then check_cflags -mllvm -stack-alignment=16 @@ -3930,6 +4395,7 @@ case $target_os in ;; esac +enable frame_thread_encoder enabled_any $THREADS_LIST && enable threads enabled_any $ATOMICS_LIST && enable atomics_native @@ -3940,9 +4406,42 @@ check_deps $CONFIG_LIST \ $HAVE_LIST \ $ALL_COMPONENTS \ + +if test $target_os = "haiku"; then + disable memalign + disable posix_memalign +fi + ! enabled_any memalign posix_memalign aligned_malloc && enabled_any $need_memalign && enable memalign_hack +# add_dep lib dep +# -> enable ${lib}_deps_${dep} +# -> add $dep to ${lib}_deps only once +add_dep() { + lib=$1 + dep=$2 + enabled "${lib}_deps_${dep}" && return 0 + enable "${lib}_deps_${dep}" + prepend "${lib}_deps" $dep +} + +# merge deps lib components +# merge all ${component}_deps into ${lib}_deps and ${lib}_deps_* +merge_deps() { + lib=$1 + shift + for comp in $*; do + enabled $comp || continue + eval "dep=\"\$${comp}_deps\"" + for d in $dep; do + add_dep $lib $d + done + done +} + +merge_deps libavfilter $FILTER_LIST + echo "install prefix $prefix" echo "source path $source_path" echo "C compiler $cc" @@ -3950,6 +4449,9 @@ echo "ARCH $arch ($cpu)" if test "$build_suffix" != ""; then echo "build suffix $build_suffix" fi +if test "$progs_suffix" != ""; then + echo "progs suffix $progs_suffix" +fi if test "$extra_version" != ""; then echo "version string suffix $extra_version" fi @@ -3976,6 +4478,13 @@ if enabled arm; then echo "ARMv6T2 enabled ${armv6t2-no}" echo "VFP enabled ${vfp-no}" echo "NEON enabled ${neon-no}" + echo "THUMB enabled ${thumb-no}" +fi +if enabled mips; then + echo "MIPS FPU enabled ${mipsfpu-no}" + echo "MIPS32R2 enabled ${mips32r2-no}" + echo "MIPS DSP R1 enabled ${mipsdspr1-no}" + echo "MIPS DSP R2 enabled ${mipsdspr2-no}" fi if enabled ppc; then echo "AltiVec enabled ${altivec-no}" @@ -3986,15 +4495,23 @@ if enabled sparc; then echo "VIS enabled ${vis-no}" fi echo "debug symbols ${debug-no}" +echo "strip symbols ${stripping-no}" echo "optimize for size ${small-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 "network support ${network-no}" echo "threading support ${thread_type-no}" echo "safe bitstream reader ${safe_bitstream_reader-no}" echo "SDL support ${sdl-no}" +echo "opencl enabled ${opencl-no}" +echo "libshine enabled ${libshine-no}" +echo "texi2html enabled ${texi2html-no}" +echo "perl enabled ${perl-no}" +echo "pod2man enabled ${pod2man-no}" +echo "makeinfo enabled ${makeinfo-no}" test -n "$random_seed" && echo "random seed ${random_seed}" echo @@ -4023,15 +4540,19 @@ fi echo "License: $license" -echo "Creating config.mak and config.h..." +echo "Creating config.mak, config.h, and doc/config.texi..." test -e Makefile || $ln_s "$source_path/Makefile" . -config_files="$TMPH config.mak" +enabled stripping || strip="echo skipping strip" + +config_files="$TMPH config.mak doc/config.texi" cat > config.mak <<EOF # Automatically generated by configure - do not modify! -LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION +ifndef FFMPEG_CONFIG_MAK +FFMPEG_CONFIG_MAK=1 +FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION prefix=$prefix LIBDIR=\$(DESTDIR)$libdir SHLIBDIR=\$(DESTDIR)$shlibdir @@ -4040,9 +4561,13 @@ BINDIR=\$(DESTDIR)$bindir DATADIR=\$(DESTDIR)$datadir MANDIR=\$(DESTDIR)$mandir SRC_PATH=$source_path +ifndef MAIN_MAKEFILE +SRC_PATH:=\$(SRC_PATH:.%=..%) +endif CC_IDENT=$cc_ident ARCH=$arch CC=$cc +CXX=$cxx AS=$as LD=$ld DEPCC=$dep_cc @@ -4055,24 +4580,30 @@ AR=$ar ARFLAGS=$arflags AR_O=$ar_o RANLIB=$ranlib +CP=cp -p LN_S=$ln_s +STRIP=$strip CPPFLAGS=$CPPFLAGS CFLAGS=$CFLAGS +CXXFLAGS=$CXXFLAGS ASFLAGS=$ASFLAGS AS_C=$AS_C AS_O=$AS_O CC_C=$CC_C CC_E=$CC_E CC_O=$CC_O +CXX_C=$CXX_C +CXX_O=$CXX_O LD_O=$LD_O LD_LIB=$LD_LIB LD_PATH=$LD_PATH DLLTOOL=$dlltool LDFLAGS=$LDFLAGS -LDFLAGS-avserver=$AVSERVERLDFLAGS +LDFLAGS-ffserver=$FFSERVERLDFLAGS SHFLAGS=$(echo $($ldflags_filter $SHFLAGS)) YASMFLAGS=$YASMFLAGS BUILDSUF=$build_suffix +PROGSSUF=$progs_suffix FULLNAME=$FULLNAME LIBPREF=$LIBPREF LIBSUF=$LIBSUF @@ -4082,6 +4613,7 @@ SLIBSUF=$SLIBSUF EXESUF=$EXESUF EXTRA_VERSION=$extra_version CCDEP=$CCDEP +CXXDEP=$CXXDEP CCDEP_FLAGS=$CCDEP_FLAGS ASDEP=$ASDEP ASDEP_FLAGS=$ASDEP_FLAGS @@ -4105,14 +4637,14 @@ HOSTLD_O=$HOSTLD_O TARGET_EXEC=$target_exec $target_exec_args TARGET_PATH=$target_path TARGET_SAMPLES=${target_samples:-\$(SAMPLES)} -LIBS-avplay=$sdl_libs -CFLAGS-avplay=$sdl_cflags +LIBS-ffplay=$sdl_libs +CFLAGS-ffplay=$sdl_cflags ZLIB=$($ldflags_filter -lz) LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD EXTRALIBS=$extralibs COMPAT_OBJS=$compat_objs EXEOBJS=$exeobjs -INSTALL=install +INSTALL=$install LIBTARGET=${LIBTARGET} SLIBNAME=${SLIBNAME} SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION} @@ -4123,7 +4655,8 @@ SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME} SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS} SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB} SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB} -SAMPLES:=${samples:-\$(LIBAV_SAMPLES)} +SAMPLES:=${samples:-\$(FATE_SAMPLES)} +NOREDZONE_FLAGS=$noredzone_flags EOF get_version(){ @@ -4141,18 +4674,23 @@ map 'get_version $v' $LIBRARY_LIST cat > $TMPH <<EOF /* Automatically generated by configure - do not modify! */ -#ifndef LIBAV_CONFIG_H -#define LIBAV_CONFIG_H -#define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)" -#define LIBAV_LICENSE "$(c_escape $license)" +#ifndef FFMPEG_CONFIG_H +#define FFMPEG_CONFIG_H +#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)" +#define FFMPEG_LICENSE "$(c_escape $license)" +#define FFMPEG_DATADIR "$(eval c_escape $datadir)" #define AVCONV_DATADIR "$(eval c_escape $datadir)" #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})" -#define restrict $_restrict +#define av_restrict $_restrict #define EXTERN_PREFIX "${extern_prefix}" #define EXTERN_ASM ${extern_prefix} #define SLIBSUF "$SLIBSUF" +#define HAVE_MMX2 HAVE_MMXEXT EOF +test -n "$assert_level" && + echo "#define ASSERT_LEVEL $assert_level" >>$TMPH + test -n "$malloc_prefix" && echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH @@ -4163,13 +4701,18 @@ fi enabled getenv || echo "#define getenv(x) NULL" >> $TMPH + +mkdir -p doc +echo "@c auto-generated by configure" > doc/config.texi + print_config ARCH_ "$config_files" $ARCH_LIST print_config HAVE_ "$config_files" $HAVE_LIST print_config CONFIG_ "$config_files" $CONFIG_LIST \ $CONFIG_EXTRA \ $ALL_COMPONENTS \ -echo "#endif /* LIBAV_CONFIG_H */" >> $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. cp_if_changed $TMPH config.h @@ -4189,7 +4732,10 @@ echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH cp_if_changed $TMPH libavutil/avconfig.h -test -n "$WARNINGS" && printf "\n$WARNINGS" +if test -n "$WARNINGS"; then + printf "\n$WARNINGS" + enabled fatal_warnings && exit 1 +fi # build pkg-config files @@ -4202,7 +4748,7 @@ pkgconfig_generate(){ requires=$5 enabled ${name#lib} || return 0 mkdir -p $name - cat <<EOF > $name/$name.pc + cat <<EOF > $name/$name${build_suffix}.pc prefix=$prefix exec_prefix=\${prefix} libdir=$libdir @@ -4218,31 +4764,67 @@ Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs) Libs.private: $(enabled shared && echo $libs) Cflags: -I\${includedir} EOF - cat <<EOF > $name/$name-uninstalled.pc + +mkdir -p doc/examples/pc-uninstalled +includedir=${source_path} +[ "$includedir" = . ] && includedir="\${pcfiledir}/../../.." + cat <<EOF > doc/examples/pc-uninstalled/$name.pc prefix= exec_prefix= -libdir=\${pcfiledir} -includedir=${source_path} +libdir=\${pcfiledir}/../../../$name +includedir=${includedir} Name: $name Description: $comment Version: $version Requires: $requires Conflicts: -Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs +Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs) Cflags: -I\${includedir} EOF } -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," +lavfi_libs="libavutil${build_suffix} = $LIBAVUTIL_VERSION" +enabled libavfilter_deps_avcodec && prepend lavfi_libs "libavcodec${build_suffix} = $LIBAVCODEC_VERSION," +enabled libavfilter_deps_avformat && prepend lavfi_libs "libavformat${build_suffix} = $LIBAVFORMAT_VERSION," +enabled libavfilter_deps_avresample && prepend lavfi_libs "libavresample${build_suffix} = $LIBAVRESAMPLE_VERSION," +enabled libavfilter_deps_swscale && prepend lavfi_libs "libswscale${build_suffix} = $LIBSWSCALE_VERSION," +enabled libavfilter_deps_swresample && prepend lavfi_libs "libswresample${build_suffix} = $LIBSWRESAMPLE_VERSION," +enabled libavfilter_deps_postproc && prepend lavfi_libs "libpostproc${build_suffix} = $LIBPOSTPROC_VERSION," +lavfi_libs=${lavfi_libs%, } + +lavd_libs="libavformat${build_suffix} = $LIBAVFORMAT_VERSION" +enabled lavfi_indev && prepend lavd_libs "libavfilter${build_suffix} = $LIBAVFILTER_VERSION," + +pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM" +pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION" +pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec${build_suffix} = $LIBAVCODEC_VERSION" +pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$lavd_libs" +pkgconfig_generate libavfilter "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$lavfi_libs" +pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil${build_suffix} = $LIBAVUTIL_VERSION" +pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION" +pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil${build_suffix} = $LIBAVUTIL_VERSION" +pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil${build_suffix} = $LIBAVUTIL_VERSION" + +fix_ffmpeg_remote(){ + git_remote_from=$1 + git_remote_to=$2 + fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq) + if [ "$fixme_remote" != "" ]; then + echolog " +Outdated domain in git config, the official domain for ffmpeg git is since +November 2011, source.ffmpeg.org, both the old and the new point to the same +repository and server. To update it enter the following commands: +" + for remote in $fixme_remote; do + echolog "git remote set-url $remote $git_remote_to" + done + fi +} -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" +if test -f "$source_path/.git/config"; then + remote_from=git.videolan.org + remote_to=source.ffmpeg.org + fix_ffmpeg_remote git@$remote_from:ffmpeg git@$remote_to:ffmpeg + fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg +fi |