X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=configure;h=d8a57284c9ae3dcd634c8140c8c40e91323d2afd;hb=52d113ee06ba136e530c11e651a5ae085384d49c;hp=fd903692122baf0b3e16234974554e6987ab1dd8;hpb=a758c5e2594893c0e7e1c5d966d6e486e2a77bb3;p=ffmpeg diff --git a/configure b/configure index fd903692122..d8a57284c9a 100755 --- a/configure +++ b/configure @@ -54,8 +54,10 @@ if test "$E1" != 0 || test "$E2" = 0; then exit 1 fi +test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH + show_help(){ -cat < $TMPC log_file $TMPC - check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c $(cc_o $TMPO) $TMPC + check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC } check_cpp(){ log check_cpp "$@" cat > $TMPC log_file $TMPC - check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC + check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC +} + +as_o(){ + eval printf '%s\\n' $AS_O } check_as(){ log check_as "$@" cat > $TMPC log_file $TMPC - check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC + check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPC } -check_asm(){ - log check_asm "$@" +check_inline_asm(){ + log check_inline_asm "$@" name="$1" code="$2" shift 2 @@ -661,6 +698,10 @@ check_yasm(){ check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS } +ld_o(){ + eval printf '%s\\n' $LD_O +} + check_ld(){ log check_ld "$@" flags='' @@ -671,7 +712,7 @@ check_ld(){ check_cc $($cflags_filter $flags) || return flags=$($ldflags_filter $flags) libs=$($ldflags_filter $libs) - check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs + check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs } check_code(){ @@ -826,6 +867,9 @@ check_exec_crash(){ static void sighandler(int sig){ raise(SIGTERM); } +int foo(void){ + $code +} int main(void){ signal(SIGILL, sighandler); signal(SIGFPE, sighandler); @@ -833,7 +877,7 @@ int main(void){ #ifdef SIGBUS signal(SIGBUS, sighandler); #endif - { $code } + foo(); } EOF } @@ -881,11 +925,15 @@ require_pkg_config(){ add_extralibs $(get_safe ${pkg}_libs) } +hostcc_o(){ + eval printf '%s\\n' $HOSTCC_O +} + check_host_cc(){ log check_host_cc "$@" cat > $TMPC log_file $TMPC - check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC + check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC } check_host_cflags(){ @@ -935,7 +983,6 @@ PROGRAM_LIST=" CONFIG_LIST=" $COMPONENT_LIST $PROGRAM_LIST - ac3dsp avcodec avdevice avfilter @@ -947,10 +994,8 @@ CONFIG_LIST=" doc dwt dxva2 - fastdiv fft frei0r - gcrypt gnutls gpl gray @@ -967,6 +1012,7 @@ CONFIG_LIST=" libopencore_amrwb libopencv libopenjpeg + libopus libpulse librtmp libschroedinger @@ -982,18 +1028,14 @@ CONFIG_LIST=" lsp mdct memalign_hack - mpegaudiodsp - nettle network nonfree openssl pic rdft - rtpdec runtime_cpudetect safe_bitstream_reader shared - sinewin small sram static @@ -1038,24 +1080,38 @@ ARCH_LIST=' x86_64 ' -ARCH_EXT_LIST=' - altivec +ARCH_EXT_LIST_X86=' amd3dnow amd3dnowext + avx + fma4 + mmx + mmxext + sse + sse2 + sse3 + sse4 + sse42 + ssse3 +' + +ARCH_EXT_LIST=" + $ARCH_EXT_LIST_X86 + altivec armv5te armv6 armv6t2 armvfp - avx - mmi - mmx - mmx2 neon ppc4xx - sse - ssse3 vfpv3 vis +" + +HAVE_LIST_CMDLINE=' + inline_asm + symver + yasm ' HAVE_LIST_PUB=' @@ -1065,6 +1121,9 @@ HAVE_LIST_PUB=' HAVE_LIST=" $ARCH_EXT_LIST + $(add_suffix _external $ARCH_EXT_LIST) + $(add_suffix _inline $ARCH_EXT_LIST) + $HAVE_LIST_CMDLINE $HAVE_LIST_PUB $THREADS_LIST aligned_malloc @@ -1072,19 +1131,22 @@ HAVE_LIST=" alsa_asoundlib_h altivec_h arpa_inet_h + asm_mod_q asm_mod_y attribute_may_alias attribute_packed cbrtf closesocket cmov - cpuid + cpunop + CryptGenRandom dcbzl dev_bktr_ioctl_bt848_h dev_bktr_ioctl_meteor_h dev_ic_bt8xx_h dev_video_bktr_ioctl_bt848_h dev_video_meteor_ioctl_meteor_h + direct_h dlfcn_h dlopen dos_paths @@ -1110,7 +1172,6 @@ HAVE_LIST=" gnu_as ibm_asm inet_aton - inline_asm io_h isatty isinf @@ -1137,15 +1198,14 @@ HAVE_LIST=" mkstemp mm_empty mmap + msvcrt nanosleep - netinet_sctp_h poll_h posix_memalign rdtsc rint round roundf - rweflags sched_getaffinity sdl sdl_video_size @@ -1168,7 +1228,6 @@ HAVE_LIST=" struct_sockaddr_sa_len struct_sockaddr_storage struct_v4l2_frmivalenum_discrete - symver symver_asm_label symver_gnu_asm sysconf @@ -1190,15 +1249,16 @@ HAVE_LIST=" windows_h winsock2_h xform_asm - xgetbv xmm_clobbers - yasm " # options emitted with CONFIG_ prefix but not available on command line CONFIG_EXTRA=" aandcttables + ac3dsp avutil + error_resilience + gcrypt golomb gplv3 h264chroma @@ -1208,21 +1268,29 @@ CONFIG_EXTRA=" huffman lgplv3 lpc + mpegaudio + mpegaudiodsp + mpegvideo + mpegvideoenc + nettle + rangecoder + rtpdec + sinewin vp3dsp " CMDLINE_SELECT=" $ARCH_EXT_LIST $CONFIG_LIST + $HAVE_LIST_CMDLINE $THREADS_LIST asm cross_compile debug extra_warnings logging + lto optimizations - symver - yasm " PATHS_LIST=' @@ -1248,6 +1316,7 @@ CMDLINE_SET=" extra_version host_cc host_cflags + host_ld host_ldflags host_libs host_os @@ -1257,12 +1326,14 @@ CMDLINE_SET=" nm optflags pkg_config + random_seed samples sysinclude sysroot target_exec target_os target_path + toolchain " CMDLINE_APPEND=" @@ -1280,21 +1351,36 @@ armvfp_deps="arm" neon_deps="arm" vfpv3_deps="armvfp" -mmi_deps="mips" - altivec_deps="ppc" ppc4xx_deps="ppc" vis_deps="sparc" x86_64_suggest="cmov fast_cmov" + amd3dnow_deps="mmx" amd3dnowext_deps="amd3dnow" mmx_deps="x86" -mmx2_deps="mmx" -sse_deps="mmx" -ssse3_deps="sse" -avx_deps="ssse3" +mmxext_deps="mmx" +sse_deps="mmxext" +sse2_deps="sse" +sse3_deps="sse2" +ssse3_deps="sse3" +sse4_deps="ssse3" +sse42_deps="sse4" +avx_deps="sse42" +fma4_deps="avx" + +mmx_external_deps="yasm" +mmx_inline_deps="inline_asm" +mmx_suggest="mmx_external mmx_inline" + +for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do + eval dep=\$${ext}_deps + eval ${ext}_external_deps='"${dep}_external"' + eval ${ext}_inline_deps='"${dep}_inline"' + 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" @@ -1306,11 +1392,15 @@ need_memalign="altivec neon sse" symver_if_any="symver_asm_label symver_gnu_asm" +log2_deps="!msvcrt" + # subsystems dct_select="rdft" mdct_select="fft" rdft_select="fft" +mpegaudio_select="mpegaudiodsp" mpegaudiodsp_select="dct" +mpegvideoenc_select="mpegvideo" # decoders / encoders / hardware accelerators aac_decoder_select="mdct sinewin" @@ -1326,18 +1416,20 @@ atrac1_decoder_select="mdct sinewin" atrac3_decoder_select="mdct" binkaudio_dct_decoder_select="mdct rdft dct sinewin" binkaudio_rdft_decoder_select="mdct rdft sinewin" -cavs_decoder_select="golomb" +cavs_decoder_select="golomb mpegvideo" cook_decoder_select="mdct sinewin" cscd_decoder_suggest="zlib" dca_decoder_select="mdct" -dnxhd_encoder_select="aandcttables" +dnxhd_encoder_select="aandcttables mpegvideoenc" dxa_decoder_select="zlib" eac3_decoder_select="ac3_decoder" -eac3_encoder_select="mdct ac3dsp" -eamad_decoder_select="aandcttables" +eac3_encoder_select="ac3_encoder" +eamad_decoder_select="aandcttables error_resilience mpegvideo" eatgq_decoder_select="aandcttables" -eatqi_decoder_select="aandcttables" -ffv1_decoder_select="golomb" +eatqi_decoder_select="aandcttables error_resilience mpegvideo" +ffv1_decoder_select="golomb rangecoder" +ffv1_encoder_select="rangecoder" +ffvhuff_encoder_select="huffman" flac_decoder_select="golomb" flac_encoder_select="golomb lpc" flashsv_decoder_select="zlib" @@ -1346,47 +1438,52 @@ flashsv2_decoder_select="zlib" flv_decoder_select="h263_decoder" flv_encoder_select="h263_encoder" fraps_decoder_select="huffman" -h261_encoder_select="aandcttables" -h263_decoder_select="h263_parser" -h263_encoder_select="aandcttables" +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_vaapi_hwaccel_select="vaapi h263_decoder" h263i_decoder_select="h263_decoder" h263p_encoder_select="h263_encoder" -h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel" +h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo" 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" +huffyuv_encoder_select="huffman" iac_decoder_select="fft mdct sinewin" imc_decoder_select="fft mdct sinewin" jpegls_decoder_select="golomb" jpegls_encoder_select="golomb" -ljpeg_encoder_select="aandcttables" +ljpeg_encoder_select="aandcttables mpegvideoenc" loco_decoder_select="golomb" -mjpeg_encoder_select="aandcttables" +mdec_decoder_select="error_resilience mpegvideo" +mjpeg_encoder_select="aandcttables mpegvideoenc" mlp_decoder_select="mlp_parser" -mp1_decoder_select="mpegaudiodsp" -mp1float_decoder_select="mpegaudiodsp" -mp2_decoder_select="mpegaudiodsp" -mp2float_decoder_select="mpegaudiodsp" -mp3_decoder_select="mpegaudiodsp" -mp3adu_decoder_select="mpegaudiodsp" -mp3adufloat_decoder_select="mpegaudiodsp" -mp3float_decoder_select="mpegaudiodsp" -mp3on4_decoder_select="mpegaudiodsp" -mp3on4float_decoder_select="mpegaudiodsp" +mp1_decoder_select="mpegaudio" +mp1float_decoder_select="mpegaudio" +mp2_decoder_select="mpegaudio" +mp2float_decoder_select="mpegaudio" +mp3_decoder_select="mpegaudio" +mp3adu_decoder_select="mpegaudio" +mp3adufloat_decoder_select="mpegaudio" +mp3float_decoder_select="mpegaudio" +mp3on4_decoder_select="mpegaudio" +mp3on4float_decoder_select="mpegaudio" mpc7_decoder_select="mpegaudiodsp" mpc8_decoder_select="mpegaudiodsp" mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder" mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h" mpeg_xvmc_decoder_select="mpegvideo_decoder" mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder" -mpeg1video_encoder_select="aandcttables" +mpeg1video_decoder_select="error_resilience mpegvideo" +mpeg1video_encoder_select="aandcttables error_resilience mpegvideoenc" mpeg2_dxva2_hwaccel_deps="dxva2api_h" mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder" mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder" -mpeg2video_encoder_select="aandcttables" +mpeg2video_decoder_select="error_resilience mpegvideo" +mpeg2video_encoder_select="aandcttables error_resilience mpegvideoenc" mpeg4_decoder_select="h263_decoder mpeg4video_parser" mpeg4_encoder_select="h263_encoder" mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder" @@ -1397,6 +1494,7 @@ 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" nellymoser_decoder_select="mdct sinewin" nellymoser_encoder_select="mdct sinewin" png_decoder_select="zlib" @@ -1409,14 +1507,15 @@ rv10_decoder_select="h263_decoder" rv10_encoder_select="h263_encoder" rv20_decoder_select="h263_decoder" rv20_encoder_select="h263_encoder" -rv30_decoder_select="golomb h264chroma h264pred h264qpel" -rv40_decoder_select="golomb h264chroma h264pred h264qpel" +rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo" +rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo" shorten_decoder_select="golomb" sipr_decoder_select="lsp" -snow_decoder_select="dwt" -snow_encoder_select="aandcttables dwt" -svq1_encoder_select="aandcttables" -svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel" +snow_decoder_select="dwt rangecoder" +snow_encoder_select="aandcttables dwt error_resilience mpegvideoenc rangecoder" +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" theora_decoder_select="vp3_decoder" tiff_decoder_suggest="zlib" @@ -1424,6 +1523,7 @@ tiff_encoder_suggest="zlib" truehd_decoder_select="mlp_decoder" tscc_decoder_select="zlib" twinvq_decoder_select="mdct lsp sinewin" +utvideo_encoder_select="huffman" vc1_decoder_select="h263_decoder h264chroma h264qpel" vc1_dxva2_hwaccel_deps="dxva2api_h" vc1_dxva2_hwaccel_select="dxva2 vc1_decoder" @@ -1464,7 +1564,10 @@ vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads" vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h" # parsers -h264_parser_select="golomb h264dsp h264pred" +h264_parser_select="error_resilience golomb h264dsp h264pred mpegvideo" +mpeg4video_parser_select="error_resilience mpegvideo" +mpegvideo_parser_select="error_resilience mpegvideo" +vc1_parser_select="error_resilience mpegvideo" # external libraries libfaac_encoder_deps="libfaac" @@ -1481,6 +1584,8 @@ libopencore_amrnb_encoder_deps="libopencore_amrnb" libopencore_amrwb_decoder_deps="libopencore_amrwb" libopenjpeg_decoder_deps="libopenjpeg" libopenjpeg_encoder_deps="libopenjpeg" +libopus_decoder_deps="libopus" +libopus_encoder_deps="libopus" libschroedinger_decoder_deps="libschroedinger" libschroedinger_encoder_deps="libschroedinger" libspeex_decoder_deps="libspeex" @@ -1508,18 +1613,20 @@ matroska_demuxer_suggest="zlib bzlib" mov_demuxer_suggest="zlib" mp3_demuxer_select="mpegaudio_parser" mp4_muxer_select="mov_muxer" -mpegts_muxer_select="adts_muxer latm_muxer" +mpegts_muxer_select="adts_muxer latm_muxer mpegvideo" mpegtsraw_demuxer_select="mpegts_demuxer" mxf_d10_muxer_select="mxf_muxer" ogg_demuxer_select="golomb" psp_muxer_select="mov_muxer" rtp_demuxer_select="sdp_demuxer" +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" sap_demuxer_select="sdp_demuxer" sap_muxer_select="rtp_muxer rtp_protocol" sdp_demuxer_select="rtpdec" +smoothstreaming_muxer_select="ismv_muxer" spdif_muxer_select="aac_parser" tg2_muxer_select="mov_muxer" tgp_muxer_select="mov_muxer" @@ -1542,7 +1649,7 @@ sndio_outdev_deps="sndio_h" v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h" vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines" vfwcap_indev_extralibs="-lavicap32" -x11_grab_device_indev_deps="x11grab XShmCreateImage" +x11grab_indev_deps="x11grab XShmCreateImage" # protocols ffrtmpcrypt_protocol_deps="!librtmp_protocol" @@ -1572,7 +1679,7 @@ rtmpt_protocol_select="ffrtmphttp_protocol" rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol" rtmpts_protocol_select="ffrtmphttp_protocol https_protocol" rtp_protocol_select="udp_protocol" -sctp_protocol_deps="network netinet_sctp_h" +sctp_protocol_deps="network struct_sctp_event_subscribe" tcp_protocol_deps="network" tls_protocol_deps_any="openssl gnutls" tls_protocol_select="tcp_protocol" @@ -1671,13 +1778,12 @@ ar_default="ar" cc_default="gcc" host_cc_default="gcc" ln_s="ln -sf" -nm_default="nm" +nm_default="nm -g" objformat="elf" pkg_config_default=pkg-config ranlib="ranlib" yasmexe="yasm" -nm_opts='-g' nogas=":" # machine @@ -1702,7 +1808,6 @@ enable swscale enable asm enable debug enable doc -enable fastdiv enable network enable optimizations enable safe_bitstream_reader @@ -1729,10 +1834,17 @@ asflags_filter=echo cflags_filter=echo ldflags_filter=echo +AS_C='-c' AS_O='-o $@' +CC_C='-c' +CC_E='-E -o $@' CC_O='-o $@' LD_O='-o $@' +LD_LIB='-l%' +LD_PATH='-L' +HOSTCC_C='-c' HOSTCC_O='-o $@' +HOSTLD_O='-o $@' host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g' host_libs='-lm' @@ -1828,6 +1940,27 @@ show_list() { exit 0 } +rand_list(){ + IFS=', ' + set -- $* + unset IFS + for thing; do + comp=${thing%:*} + prob=${thing#$comp} + prob=${prob#:} + is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST + echo "prob ${prob:-0.5}" + printf '%s\n' $comp + done +} + +do_random(){ + action=$1 + shift + random_seed=$(awk "BEGIN { srand($random_seed); print srand() }") + $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }") +} + for opt do optval="${opt#*=}" case "$opt" in @@ -1842,6 +1975,14 @@ for opt do --disable-everything) map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST ;; + --enable-random|--disable-random) + action=${opt%%-random} + do_random ${action#--} $COMPONENT_LIST + ;; + --enable-random=*|--disable-random=*) + action=${opt%%-random=*} + do_random ${action#--} $optval + ;; --enable-*=*|--disable-*=*) eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/') is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt" @@ -1905,7 +2046,19 @@ ranlib="${cross_prefix}${ranlib}" sysinclude_default="${sysroot}/usr/include" -set_default cc nm pkg_config sysinclude +case "$toolchain" in + msvc) + cc_default="c99wrap cl" + ld_default="c99wrap link" + nm_default="dumpbin -symbols" + ar_default="lib" + ;; + ?*) + die "Unknown toolchain $toolchain" + ;; +esac + +set_default cc pkg_config sysinclude enabled cross_compile || host_cc_default=$cc set_default host_cc @@ -1972,9 +2125,32 @@ EOF die "Sanity test failed." fi +msvc_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 ;; + -std=c99) ;; + -fno-math-errno) ;; + -fno-common) ;; + -fno-signed-zeros) ;; + -lz) echo zlib.lib ;; + -lavifil32) echo vfw32.lib ;; + -lavicap32) echo vfw32.lib user32.lib ;; + -l*) echo ${flag#-l}.lib ;; + *) echo $flag ;; + esac + done +} + pgi_flags(){ for flag; do case $flag in + -flto) echo -Mipa=fast,libopt,libinline,vestigial ;; -fomit-frame-pointer) echo -Mnoframe ;; -g) echo -gopt ;; *) echo $flag ;; @@ -1999,7 +2175,7 @@ suncc_flags(){ prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;; *-sse3) echo -xarch=sse3 ;; core2) echo -xarch=ssse3 -xchip=core2 ;; - amdfam10|barcelona) echo -xarch=sse4_1 ;; + amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;; athlon-4|athlon-[mx]p) echo -xarch=ssea ;; k8|opteron|athlon64|athlon-fx) echo -xarch=sse2a ;; @@ -2033,6 +2209,7 @@ tms470_flags(){ -mfpu=neon) echo --float_support=vfpv3 --neon ;; -mfpu=vfp) echo --float_support=vfpv2 ;; -mfpu=vfpv3) echo --float_support=vfpv3 ;; + -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;; -msoft-float) echo --float_support=vfplib ;; -O[0-3]|-mf=*) echo $flag ;; -g) echo -g -mn ;; @@ -2048,7 +2225,9 @@ probe_cc(){ pfx=$1 _cc=$2 - unset _type _ident _cc_o _flags _cflags _ldflags _depflags _DEPCMD _DEPFLAGS + unset _type _ident _cc_c _cc_e _cc_o _flags _cflags + unset _ld_o _ldflags _ld_lib _ld_path + unset _depflags _DEPCMD _DEPFLAGS _flags_filter=echo if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then @@ -2106,14 +2285,12 @@ probe_cc(){ _depflags='-MMD' _cflags_speed='-O3' _cflags_size='-Os' - elif $_cc -version 2>/dev/null | grep -q TMS470; then + elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then _type=tms470 _ident=$($_cc -version | head -n1 | tr -s ' ') _flags='--gcc --abi=eabi -me' - _cflags='-D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=' + _cc_e='-ppl -fe=$@' _cc_o='-fe=$@' - as_default="${cross_prefix}gcc" - ld_default="${cross_prefix}gcc" _depflags='-ppa -ppd=$(@:.o=.d)' _cflags_speed='-O3 -mf=5' _cflags_size='-O3 -mf=2' @@ -2128,7 +2305,7 @@ probe_cc(){ _type=suncc _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-) _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)' - _DEPFLAGS='-xM1' + _DEPFLAGS='-xM1 -xc99' _ldflags='-std=c99' _cflags_speed='-O5' _cflags_size='-O5 -xspace' @@ -2150,11 +2327,34 @@ probe_cc(){ elif $_cc -V 2>&1 | grep -q Portland; then _type=pgi _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')" - opt_common='-alias=ansi -Mlre -Mpre' + 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" _flags_filter=pgi_flags + elif $_cc 2>&1 | grep -q Microsoft; then + _type=msvc + _ident=$($cc 2>&1 | head -n1) + _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)' + _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 $@' + else + _ld_o='-Fe$@' + 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' + if [ $pfx = hostcc ]; then + append _cflags -Dsnprintf=_snprintf + fi fi eval ${pfx}_type=\$_type @@ -2162,6 +2362,8 @@ probe_cc(){ } set_ccvars(){ + eval ${1}_C=\${_cc_c-\${${1}_C}} + eval ${1}_E=\${_cc_e-\${${1}_E}} eval ${1}_O=\${_cc_o-\${${1}_O}} if [ -n "$_depflags" ]; then @@ -2184,9 +2386,7 @@ set_ccvars CC probe_cc hostcc "$host_cc" host_cflags_filter=$_flags_filter -host_ldflags_filter=$_flags_filter add_host_cflags $_flags $_cflags -add_host_ldflags $_flags $_ldflags set_ccvars HOSTCC test -n "$cc_type" && enable $cc_type || @@ -2195,7 +2395,8 @@ test -n "$cc_type" && enable $cc_type || : ${as_default:=$cc} : ${dep_cc_default:=$cc} : ${ld_default:=$cc} -set_default ar as dep_cc ld +: ${host_ld_default:=$host_cc} +set_default ar as dep_cc ld host_ld probe_cc as "$as" asflags_filter=$_flags_filter @@ -2206,7 +2407,14 @@ probe_cc ld "$ld" ldflags_filter=$_flags_filter add_ldflags $_flags $_ldflags test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags -LD_O=${_cc_o-$LD_O} +LD_O=${_ld_o-$LD_O} +LD_LIB=${_ld_lib-$LD_LIB} +LD_PATH=${_ld_path-$LD_PATH} + +probe_cc hostld "$host_ld" +host_ldflags_filter=$_flags_filter +add_host_ldflags $_flags $_ldflags +HOSTLD_O=${_ld_o-$HOSTLD_O} if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then probe_cc depcc "$dep_cc" @@ -2215,6 +2423,17 @@ if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then DEPCCFLAGS=$_flags fi +if $ar 2>&1 | grep -q Microsoft; then + arflags="-nologo" + ar_o='-out:$@' +elif $ar 2>&1 | grep -q 'Texas Instruments'; then + arflags="rq" + ar_o='$@' +else + arflags="rc" + ar_o='$@' +fi + add_cflags $extra_cflags add_asflags $extra_cflags @@ -2333,6 +2552,10 @@ elif enabled ppc; then cpuflags="-mcpu=cell" enable ldbrx ;; + e500mc) + cpuflags="-mcpu=e500mc" + disable altivec + ;; e500v2) cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double" disable altivec @@ -2356,7 +2579,7 @@ elif enabled x86; then disable cmov ;; # targets that do support conditional mov (cmov) - i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom) + i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom|bdver*) cpuflags="-march=$cpu" enable cmov enable fast_cmov @@ -2499,14 +2722,14 @@ case $target_os in # 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 - nm_opts='-P -g' + nm_default='nm -P -g' ;; netbsd) disable symver oss_indev_extralibs="-lossaudio" oss_outdev_extralibs="-lossaudio" ;; - openbsd) + openbsd|bitrig) # On OpenBSD 4.5. the compiler does not use PIC unless # explicitly using -fPIC. Libav builds fine without PIC, # however the generated executable will not do anything @@ -2515,6 +2738,8 @@ case $target_os in enable pic disable symver SHFLAGS='-shared' + SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)' + SLIB_INSTALL_LINKS= oss_indev_extralibs="-lossaudio" oss_outdev_extralibs="-lossaudio" ;; @@ -2566,11 +2791,8 @@ case $target_os in SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base' objformat="win32" dlltool="${cross_prefix}dlltool" + ranlib=: enable dos_paths - check_cflags -fno-common - check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \ - || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" || - die "ERROR: MinGW runtime version must be >= 3.15." add_cppflags -U__STRICT_ANSI__ ;; cygwin*) @@ -2580,10 +2802,12 @@ case $target_os in SLIBSUF=".dll" SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' - SHFLAGS='-shared -Wl,--enable-auto-image-base' + SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' + SLIB_INSTALL_LINKS= + SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a' + SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a' objformat="win32" enable dos_paths - check_cflags -fno-common add_cppflags -U__STRICT_ANSI__ ;; *-dos|freedos|opendos) @@ -2613,13 +2837,13 @@ case $target_os in SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)' SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \ - echo PROTMODE >> $(SUBDIR)$(NAME).def; \ - echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \ - echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \ - echo EXPORTS >> $(SUBDIR)$(NAME).def; \ - emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def' + echo PROTMODE >> $(SUBDIR)$(NAME).def; \ + echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \ + echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \ + echo EXPORTS >> $(SUBDIR)$(NAME).def; \ + emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def' SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \ - emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;' + 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 ;; @@ -2645,6 +2869,12 @@ case $target_os in -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \ -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib ;; + osf1) + add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT + AVSERVERLDFLAGS= + ;; + minix) + ;; none) ;; *) @@ -2652,6 +2882,42 @@ case $target_os in ;; esac +# determine libc flavour + +if check_cpp_condition features.h "defined __UCLIBC__"; then + libc_type=uclibc +elif check_cpp_condition features.h "defined __GLIBC__"; then + libc_type=glibc +elif check_header _mingw.h; then + libc_type=mingw + check_cpp_condition _mingw.h \ + "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \ + (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" || + die "ERROR: MinGW runtime version must be >= 3.15." +elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then + libc_type=newlib +elif check_func_headers stdlib.h _get_doserrno; then + libc_type=msvcrt + add_cflags -Dstrtod=avpriv_strtod + add_cflags -Dsnprintf=avpriv_snprintf \ + -D_snprintf=avpriv_snprintf \ + -Dvsnprintf=avpriv_vsnprintf +elif check_cpp_condition stddef.h "defined __KLIBC__"; then + libc_type=klibc +fi + +test -n "$libc_type" && enable $libc_type + +# hacks for compiler/libc/os combinations + +if enabled_all tms470 glibc; then + CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}" + add_cppflags -D__USER_LABEL_PREFIX__= + add_cppflags -D__builtin_memset=memset + add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED + add_cflags -pds=48 # incompatible redefinition of macro +fi + esc(){ echo "$*" | sed 's/%/%25/g;s/:/%3a/g' } @@ -2661,6 +2927,7 @@ echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIG check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic set_default $PATHS_LIST +set_default nm # we need to build at least one lib type if ! enabled_any static shared; then @@ -2708,10 +2975,10 @@ enabled pic && enable_pic check_cc <= 0.2 if you would like vdpau support." && - disable 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 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel" @@ -3190,17 +3453,31 @@ void ff_foo(void) {} EOF fi -if [ -n "$optflags" ]; then - add_cflags $optflags -elif enabled small; then - add_cflags $cflags_size -elif enabled optimizations; then - add_cflags $cflags_speed -else - add_cflags $cflags_noopt +if [ -z "$optflags" ]; then + if enabled small; then + optflags=$cflags_size + elif enabled optimizations; then + optflags=$cflags_speed + else + optflags=$cflags_noopt + fi +fi + +check_optflags(){ + check_cflags "$@" + enabled lto && check_ldflags "$@" +} + + +if enabled lto; then + test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker" + check_cflags -flto + check_ldflags -flto $cpuflags fi -check_cflags -fno-math-errno -check_cflags -fno-signed-zeros + +check_optflags $optflags +check_optflags -fno-math-errno +check_optflags -fno-signed-zeros if enabled icc; then # Just warnings, no remarks @@ -3235,10 +3512,11 @@ elif enabled ccc; then add_cflags -msg_disable ptrmismatch1 add_cflags -msg_disable unreachcode elif enabled gcc; then - check_cflags -fno-tree-vectorize + check_optflags -fno-tree-vectorize check_cflags -Werror=implicit-function-declaration check_cflags -Werror=missing-prototypes check_cflags -Werror=declaration-after-statement + check_cflags -Werror=vla elif enabled llvm_gcc; then check_cflags -mllvm -stack-alignment=16 elif enabled clang; then @@ -3256,18 +3534,20 @@ elif enabled tms470; then add_cflags -pds=824 -pds=837 elif enabled pathscale; then add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF +elif enabled msvc; then + enabled x86_32 && disable aligned_stack fi enabled_any $THREADS_LIST && enable threads +enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; } + check_deps $CONFIG_LIST \ $CONFIG_EXTRA \ $HAVE_LIST \ $ALL_COMPONENTS \ $ALL_TESTS \ -enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; } - ! enabled_any memalign posix_memalign aligned_malloc && enabled_any $need_memalign && enable memalign_hack @@ -3286,12 +3566,13 @@ echo "runtime cpu detection ${runtime_cpudetect-no}" if enabled x86; then echo "${yasmexe} ${yasm-no}" echo "MMX enabled ${mmx-no}" - echo "MMX2 enabled ${mmx2-no}" + echo "MMXEXT enabled ${mmxext-no}" echo "3DNow! enabled ${amd3dnow-no}" echo "3DNow! extended enabled ${amd3dnowext-no}" echo "SSE enabled ${sse-no}" echo "SSSE3 enabled ${ssse3-no}" echo "AVX enabled ${avx-no}" + echo "FMA4 enabled ${fma4-no}" echo "CMOV enabled ${cmov-no}" echo "CMOV is fast ${fast_cmov-no}" echo "EBX available ${ebx_available-no}" @@ -3304,9 +3585,6 @@ if enabled arm; then echo "ARM VFP enabled ${armvfp-no}" echo "NEON enabled ${neon-no}" fi -if enabled mips; then - echo "MMI enabled ${mmi-no}" -fi if enabled ppc; then echo "AltiVec enabled ${altivec-no}" echo "PPC 4xx optimizations ${ppc4xx-no}" @@ -3342,6 +3620,7 @@ 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}" @@ -3357,6 +3636,8 @@ 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 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do @@ -3406,19 +3687,25 @@ DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS) DEPAS=$as DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS) YASM=$yasmexe -YASMDEP=$yasmexe +DEPYASM=$yasmexe AR=$ar +ARFLAGS=$arflags +AR_O=$ar_o RANLIB=$ranlib LN_S=$ln_s CPPFLAGS=$CPPFLAGS CFLAGS=$CFLAGS ASFLAGS=$ASFLAGS +AS_C=$AS_C AS_O=$AS_O +CC_C=$CC_C CC_O=$CC_O LD_O=$LD_O +LD_LIB=$LD_LIB +LD_PATH=$LD_PATH DLLTOOL=$dlltool LDFLAGS=$LDFLAGS -AVSERVERLDFLAGS=$AVSERVERLDFLAGS +LDFLAGS-avserver=$AVSERVERLDFLAGS SHFLAGS=$SHFLAGS YASMFLAGS=$YASMFLAGS BUILDSUF=$build_suffix @@ -3437,6 +3724,7 @@ ASDEP_FLAGS=$ASDEP_FLAGS CC_DEPFLAGS=$CC_DEPFLAGS AS_DEPFLAGS=$AS_DEPFLAGS HOSTCC=$host_cc +HOSTLD=$host_ld HOSTCFLAGS=$host_cflags HOSTEXESUF=$HOSTEXESUF HOSTLDFLAGS=$host_ldflags @@ -3446,11 +3734,14 @@ DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS) HOSTCCDEP=$HOSTCCDEP HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS +HOSTCC_C=$HOSTCC_C HOSTCC_O=$HOSTCC_O +HOSTLD_O=$HOSTLD_O TARGET_EXEC=$target_exec TARGET_PATH=$target_path -SDL_LIBS=$sdl_libs -SDL_CFLAGS=$sdl_cflags +LIBS-avplay=$sdl_libs +CFLAGS-avplay=$sdl_cflags +ZLIB=$($ldflags_filter -lz) LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD EXTRALIBS=$extralibs INSTALL=install @@ -3544,15 +3835,15 @@ test -n "$WARNINGS" && printf "\n$WARNINGS" # build pkg-config files pkgconfig_generate(){ -name=$1 -shortname=${name#lib}${build_suffix} -comment=$2 -version=$3 -libs=$4 -requires=$5 -enabled ${name#lib} || return 0 -mkdir -p $name -cat < $name/$name.pc + name=$1 + shortname=${name#lib}${build_suffix} + comment=$2 + version=$3 + libs=$4 + requires=$5 + enabled ${name#lib} || return 0 + mkdir -p $name + cat < $name/$name.pc prefix=$prefix exec_prefix=\${prefix} libdir=$libdir @@ -3568,7 +3859,7 @@ Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs) Libs.private: $(enabled shared && echo $libs) Cflags: -I\${includedir} EOF -cat < $name/$name-uninstalled.pc + cat < $name/$name-uninstalled.pc prefix= exec_prefix= libdir=\${pcfiledir}