X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=configure;h=9f2cfaa0c1cbec2e7709f773bb0790d02aefe408;hb=078ae66b4b982ae249b4000aaaff90b7facbdbce;hp=0b76e8b66909fbaf1f88c57f214c0f08d266e2e1;hpb=07876e25c8773b28967f8992c77f69e25f8cf7c8;p=ffmpeg diff --git a/configure b/configure index 0b76e8b6690..9f2cfaa0c1c 100755 --- a/configure +++ b/configure @@ -61,7 +61,7 @@ Options: [defaults in brackets after descriptions] Standard options: --help print this message - --logfile=FILE log tests and output to FILE [config.err] + --logfile=FILE log tests and output to FILE [config.log] --disable-logging do not log configure debug information --prefix=PREFIX install in PREFIX [$prefix] --bindir=DIR install binaries in DIR [PREFIX/bin] @@ -86,14 +86,12 @@ Configuration options: --disable-ffserver disable ffserver build --disable-avdevice disable libavdevice build --disable-avcodec disable libavcodec build + --disable-avcore disable libavcore build --disable-avformat disable libavformat build --disable-swscale disable libswscale build --enable-postproc enable GPLed postprocessing support [no] - --enable-avfilter video filter support [no] - --enable-avfilter-lavf video filters dependent on avformat [no] - --enable-beosthreads use BeOS threads [no] - --enable-os2threads use OS/2 threads [no] - --enable-pthreads use pthreads [no] + --disable-avfilter disable video filter support [no] + --disable-pthreads disable pthreads [auto] --enable-w32threads use Win32 threads [no] --enable-x11grab enable X11 grabbing [no] --disable-network disable network support [no] @@ -106,6 +104,7 @@ Configuration options: --disable-dct disable DCT code --disable-fft disable FFT code --disable-golomb disable Golomb code + --disable-huffman disable Huffman code --disable-lpc disable LPC code --disable-mdct disable MDCT code --disable-rdft disable RDFT code @@ -115,7 +114,6 @@ Configuration options: --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary) --enable-hardcoded-tables use hardcoded tables instead of runtime generation --enable-memalign-hack emulate memalign, interferes with memory debuggers - --enable-beos-netserver enable BeOS netserver --disable-everything disable all components listed below --disable-encoder=NAME disable encoder NAME --enable-encoder=NAME enable encoder NAME @@ -170,8 +168,6 @@ External library support: and libraw1394 [no] --enable-libdirac enable Dirac support via libdirac [no] --enable-libfaac enable FAAC support via libfaac [no] - --enable-libfaad enable FAAD support via libfaad [no] - --enable-libfaadbin open libfaad.so.0 at runtime [no] --enable-libgsm enable GSM support via libgsm [no] --enable-libmp3lame enable MP3 encoding via libmp3lame [no] --enable-libnut enable NUT (de)muxing via libnut, @@ -183,7 +179,9 @@ External library support: --enable-libtheora enable Theora encoding via libtheora [no] --enable-libvorbis enable Vorbis encoding via libvorbis, native implementation exists [no] + --enable-libvpx enable VP8 support via libvpx [no] --enable-libx264 enable H.264 encoding via x264 [no] + --enable-libxavs enable AVS encoding via xavs [no] --enable-libxvid enable Xvid encoding via xvidcore, native MPEG-4/Xvid encoder exists [no] --enable-mlib enable Sun medialib [no] @@ -199,6 +197,7 @@ Advanced options (experts only): --target-exec=CMD command to run executables on target --target-path=DIR path to view of build directory on target --nm=NM use nm tool + --ar=AR use archive tool AR [$ar_default] --as=AS use assembler AS [$as_default] --cc=CC use C compiler CC [$cc_default] --ld=LD use linker LD @@ -214,8 +213,6 @@ Advanced options (experts only): --arch=ARCH select architecture [$arch] --cpu=CPU select the minimum required CPU (affects instruction selection, may crash on older CPUs) - --enable-powerpc-perf enable performance report on PPC - (requires enabling PMC) --disable-asm disable all assembler optimizations --disable-altivec disable AltiVec optimizations --disable-amd3dnow disable 3DNow! optimizations @@ -240,7 +237,6 @@ Advanced options (experts only): Developer options (useful when working on FFmpeg itself): --disable-debug disable debugging symbols --enable-debug=LEVEL set the debug level [$debuglevel] - --enable-gprof enable profiling with gprof [$gprof] --disable-optimizations disable compiler optimizations --enable-extra-warnings enable more compiler warnings --disable-stripping disable stripping of executables and shared libraries @@ -251,6 +247,8 @@ EOF exit 0 } +quotes='""' + log(){ echo "$@" >> $logfile } @@ -266,6 +264,11 @@ echolog(){ echo "$@" } +warn(){ + log "WARNING: $*" + WARNINGS="${WARNINGS}WARNING: $*\n" +} + die(){ echolog "$@" cat < /dev/null -} - -save_flags(){ - flags_saved && return - SAVE_CFLAGS="$CFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - SAVE_extralibs="$extralibs" -} - -restore_flags(){ - flags_saved || return - CFLAGS="$SAVE_CFLAGS" - LDFLAGS="$SAVE_LDFLAGS" - extralibs="$SAVE_extralibs" - unset SAVE_CFLAGS - unset SAVE_LDFLAGS - unset SAVE_extralibs -} - -temp_cflags(){ - save_flags - CFLAGS="$CFLAGS $*" -} - -temp_ldflags(){ - save_flags - LDFLAGS="$LDFLAGS $*" -} - -temp_extralibs(){ - save_flags - extralibs="$extralibs $*" +print_enabled(){ + test "$1" = -n && end=" " && shift || end="\n" + suf=$1 + shift + for v; do + enabled $v && printf "%s$end" ${v%$suf}; + done } append(){ var=$1 shift - flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\"" eval "$var=\"\$$var $*\"" } +prepend(){ + var=$1 + shift + eval "$var=\"$* \$$var\"" +} + add_cppflags(){ append CPPFLAGS $($filter_cppflags "$@") } @@ -569,7 +550,7 @@ add_ldflags(){ } add_extralibs(){ - append extralibs "$@" + prepend extralibs "$@" } check_cmd(){ @@ -727,11 +708,7 @@ check_lib(){ header="$1" func="$2" shift 2 - temp_extralibs "$@" - check_header $header && check_func $func && add_extralibs "$@" - err=$? - restore_flags - return $err + check_header $header && check_func $func "$@" && add_extralibs "$@" } check_lib2(){ @@ -823,23 +800,6 @@ require2(){ check_lib2 "$headers" $func "$@" || die "ERROR: $name not found" } -check_foo_config(){ - cfg=$1 - pkg=$2 - header=$3 - func=$4 - shift 4 - disable $cfg - check_cmd ${pkg}-config --version - err=$? - if test "$err" = 0; then - temp_cflags $(${pkg}-config --cflags) - temp_extralibs $(${pkg}-config --libs) - check_lib "$@" $header $func && enable $cfg - fi - return $err -} - check_host_cc(){ log check_host_cc "$@" cat > $TMPC @@ -887,12 +847,11 @@ CONFIG_LIST=" $COMPONENT_LIST aandct avcodec + avcore avdevice avfilter - avfilter_lavf avformat avisynth - beos_netserver bzlib dct doc @@ -906,15 +865,14 @@ CONFIG_LIST=" fft golomb gpl - gprof gray h264dsp + h264pred hardcoded_tables + huffman libdc1394 libdirac libfaac - libfaad - libfaadbin libgsm libmp3lame libnut @@ -926,7 +884,9 @@ CONFIG_LIST=" libspeex libtheora libvorbis + libvpx libx264 + libxavs libxvid lpc lsp @@ -938,7 +898,6 @@ CONFIG_LIST=" nonfree pic postproc - powerpc_perf rdft runtime_cpudetect shared @@ -955,8 +914,6 @@ CONFIG_LIST=" " THREADS_LIST=' - beosthreads - os2threads pthreads w32threads ' @@ -1006,6 +963,7 @@ ARCH_EXT_LIST=' HAVE_LIST_PUB=' bigendian + fast_unaligned ' HAVE_LIST=" @@ -1037,14 +995,16 @@ HAVE_LIST=" fast_64bit fast_clz fast_cmov - fast_unaligned + fcntl fork getaddrinfo gethrtime GetProcessMemoryInfo GetProcessTimes getrusage + gnu_as struct_rusage_ru_maxrss + ibm_asm inet_aton inline_asm isatty @@ -1083,6 +1043,9 @@ HAVE_LIST=" struct_sockaddr_in6 struct_sockaddr_sa_len struct_sockaddr_storage + symver + symver_gnu_asm + symver_asm_label sys_mman_h sys_resource_h sys_select_h @@ -1132,6 +1095,7 @@ PATHS_LIST=' CMDLINE_SET=" $PATHS_LIST + ar arch as build_suffix @@ -1196,12 +1160,15 @@ fast_unaligned_if_any="armv6 ppc x86" need_memalign="altivec neon sse" inline_asm_deps="!tms470" +symver_if_any="symver_asm_label symver_gnu_asm" + # subsystems +dct_select="rdft" mdct_select="fft" rdft_select="fft" # decoders / encoders / hardware accelerators -aac_decoder_select="mdct rdft aac_parser" +aac_decoder_select="mdct rdft" aac_encoder_select="mdct" ac3_decoder_select="mdct ac3_parser" alac_encoder_select="lpc" @@ -1227,13 +1194,14 @@ flashsv_decoder_select="zlib" flashsv_encoder_select="zlib" flv_decoder_select="h263_decoder" flv_encoder_select="h263_encoder" +fraps_decoder_select="huffman" h261_encoder_select="aandct" h263_decoder_select="h263_parser" h263_encoder_select="aandct" h263_vaapi_hwaccel_select="vaapi h263_decoder" h263i_decoder_select="h263_decoder" h263p_encoder_select="h263_encoder" -h264_decoder_select="golomb h264dsp" +h264_decoder_select="golomb h264dsp h264pred" h264_dxva2_hwaccel_deps="dxva2api_h" h264_dxva2_hwaccel_select="dxva2 h264_decoder" h264_vaapi_hwaccel_select="vaapi" @@ -1245,12 +1213,19 @@ ljpeg_encoder_select="aandct" loco_decoder_select="golomb" mjpeg_encoder_select="aandct" mlp_decoder_select="mlp_parser" +mp1float_decoder_select="dct" +mp2float_decoder_select="dct" +mp3adufloat_decoder_select="dct" +mp3float_decoder_select="dct" +mp3on4float_decoder_select="dct" mpeg1video_encoder_select="aandct" mpeg2video_encoder_select="aandct" mpeg4_decoder_select="h263_decoder mpeg4video_parser" mpeg4_encoder_select="h263_encoder" mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder" mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder" +mpeg2_dxva2_hwaccel_deps="dxva2api_h" +mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder" mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder" mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder" mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder" @@ -1268,12 +1243,13 @@ png_decoder_select="zlib" png_encoder_select="zlib" qcelp_decoder_select="lsp" qdm2_decoder_select="mdct rdft" +ra_144_encoder_select="lpc" rv10_decoder_select="h263_decoder" rv10_encoder_select="h263_encoder" rv20_decoder_select="h263_decoder" rv20_encoder_select="h263_encoder" -rv30_decoder_select="golomb h264dsp" -rv40_decoder_select="golomb h264dsp" +rv30_decoder_select="golomb h264pred" +rv40_decoder_select="golomb h264pred" shorten_decoder_select="golomb" sipr_decoder_select="lsp" snow_decoder_select="dwt" @@ -1282,7 +1258,7 @@ sonic_decoder_select="golomb" sonic_encoder_select="golomb" sonic_ls_encoder_select="golomb" svq1_encoder_select="aandct" -svq3_decoder_select="golomb h264dsp" +svq3_decoder_select="golomb h264dsp h264pred" svq3_decoder_suggest="zlib" theora_decoder_select="vp3_decoder" tiff_decoder_suggest="zlib" @@ -1297,14 +1273,16 @@ vc1_vaapi_hwaccel_select="vaapi vc1_decoder" vc1_vdpau_decoder_select="vdpau vc1_decoder" vorbis_decoder_select="mdct" vorbis_encoder_select="mdct" +vp6_decoder_select="huffman" vp6a_decoder_select="vp6_decoder" vp6f_decoder_select="vp6_decoder" +vp8_decoder_select="h264pred" wmapro_decoder_select="mdct" wmav1_decoder_select="mdct" wmav1_encoder_select="mdct" wmav2_decoder_select="mdct" wmav2_encoder_select="mdct" -wmavoice_decoder_select="lsp" +wmavoice_decoder_select="lsp rdft dct mdct" wmv1_decoder_select="h263_decoder" wmv1_encoder_select="h263_encoder" wmv2_decoder_select="h263_decoder" @@ -1322,17 +1300,12 @@ vaapi_deps="va_va_h" vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h" # parsers -h264_parser_select="golomb h264dsp" - -# bitstream_filters -aac_adtstoasc_bsf_select="aac_parser" +h264_parser_select="golomb h264dsp h264pred" # external libraries libdirac_decoder_deps="libdirac !libschroedinger" libdirac_encoder_deps="libdirac" libfaac_encoder_deps="libfaac" -libfaad_decoder_deps="libfaad" -libfaadbin_decoder_extralibs='$ldl' libgsm_decoder_deps="libgsm" libgsm_encoder_deps="libgsm" libgsm_ms_decoder_deps="libgsm" @@ -1347,7 +1320,10 @@ libschroedinger_encoder_deps="libschroedinger" libspeex_decoder_deps="libspeex" libtheora_encoder_deps="libtheora" libvorbis_encoder_deps="libvorbis" +libvpx_decoder_deps="libvpx" +libvpx_encoder_deps="libvpx" libx264_encoder_deps="libx264" +libxavs_encoder_deps="libxavs" libxvid_encoder_deps="libxvid" # demuxers / muxers @@ -1380,23 +1356,16 @@ w64_demuxer_deps="wav_demuxer" # indevs / outdevs alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp" -alsa_indev_extralibs="-lasound" alsa_outdev_deps="alsa_asoundlib_h" -alsa_outdev_extralibs="-lasound" -audio_beos_indev_deps="audio_beos" -audio_beos_indev_extralibs="-lmedia -lbe" -audio_beos_outdev_deps="audio_beos" -audio_beos_outdev_extralibs="-lmedia -lbe" bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h" dv1394_indev_deps="dv1394 dv_demuxer" jack_indev_deps="jack_jack_h" -jack_indev_extralibs="-ljack" libdc1394_indev_deps="libdc1394" oss_indev_deps_any="soundcard_h sys_soundcard_h" oss_outdev_deps_any="soundcard_h sys_soundcard_h" v4l_indev_deps="linux_videodev_h" v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h" -vfwcap_indev_deps="capCreateCaptureWindow" +vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines" vfwcap_indev_extralibs="-lavicap32" x11_grab_device_indev_deps="x11grab XShmCreateImage" x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes" @@ -1405,21 +1374,20 @@ x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes" gopher_protocol_deps="network" http_protocol_deps="network" http_protocol_select="tcp_protocol" -rtmp_protocol_deps="tcp_protocol" -rtp_protocol_deps="udp_protocol" +mmsh_protocol_select="http_protocol" +mmst_protocol_deps="network" +rtmp_protocol_select="tcp_protocol" +rtp_protocol_select="udp_protocol" tcp_protocol_deps="network" udp_protocol_deps="network" -# filters -movie_filter_deps="avfilter_lavf" -avfilter_lavf_deps="avformat" - # libraries avdevice_deps="avcodec avformat" avformat_deps="avcodec" # programs ffmpeg_deps="avcodec avformat swscale" +ffmpeg_select="buffer_filter" ffplay_deps="avcodec avformat swscale sdl" ffplay_select="rdft" ffprobe_deps="avcodec avformat" @@ -1428,9 +1396,112 @@ ffserver_extralibs='$ldl' doc_deps="texi2html" +# tests + +test_deps(){ + suf1=$1 + suf2=$2 + shift 2 + for v; do + dep=${v%=*} + tests=${v#*=} + for name in ${tests}; do + eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'" + done + done +} + +set_ne_test_deps(){ + eval ${1}_be_test_deps="bigendian" + eval ${1}_le_test_deps="!bigendian" +} + +test_deps _encoder _decoder \ + ac3 \ + adpcm_g726=g726 \ + adpcm_ima_qt \ + adpcm_ima_wav \ + adpcm_ms \ + adpcm_swf \ + adpcm_yamaha=adpcm_yam \ + alac \ + asv1 \ + asv2 \ + bmp \ + dnxhd="hdxhd_1080i dnxhd_720p dnxhd_720p_rd" \ + dvvideo="dv dv50" \ + ffv1 \ + flac \ + flashsv \ + flv \ + gif \ + h261 \ + h263="h263 h263p" \ + huffyuv \ + jpegls \ + mjpeg="jpg mjpeg ljpeg" \ + mp2 \ + mpeg1video="mpeg mpeg1b" \ + mpeg2video="mpeg2 mpeg2thread" \ + mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc" \ + msmpeg4v3=msmpeg4 \ + msmpeg4v2 \ + pbm=pbmpipe \ + pcx \ + pgm="pgm pgmpipe" \ + ppm="ppm ppmpipe" \ + rawvideo="rgb yuv" \ + roq \ + rv10 \ + rv20 \ + sgi \ + snow="snow snowll" \ + svq1 \ + targa=tga \ + tiff \ + wmav1 \ + wmav2 \ + wmv1 \ + wmv2 \ + +test_deps _muxer _demuxer \ + aiff \ + pcm_alaw=alaw \ + asf \ + au \ + avi \ + dv=dv_fmt \ + ffm \ + flv=flv_fmt \ + gxf \ + matroska=mkv \ + mmf \ + mov \ + pcm_mulaw=mulaw \ + mxf \ + nut \ + ogg \ + rawvideo=pixfmt \ + rm \ + swf \ + mpegts=ts \ + voc \ + wav \ + yuv4mpegpipe=yuv4mpeg \ + +mpg_test_deps="mpeg1system_muxer mpegps_demuxer" + +set_ne_test_deps pixdesc +set_ne_test_deps pixfmts_crop +set_ne_test_deps pixfmts_hflip +set_ne_test_deps pixfmts_null +set_ne_test_deps pixfmts_pad +set_ne_test_deps pixfmts_scale +set_ne_test_deps pixfmts_vflip + # default parameters -logfile="config.err" +logfile="config.log" # installation paths prefix_default="/usr/local" @@ -1442,7 +1513,7 @@ mandir_default='${prefix}/share/man' shlibdir_default="$libdir_default" # toolchain -ar="ar" +ar_default="ar" cc_default="gcc" cc_version=\"unknown\" host_cc_default="gcc" @@ -1452,6 +1523,7 @@ objformat="elf" ranlib="ranlib" strip_default="strip" yasmexe="yasm" +nogas=":" nm_opts='-g' @@ -1465,7 +1537,9 @@ host_os=$target_os_default # configurable options enable avcodec +enable avcore enable avdevice +enable avfilter enable avformat enable avutil enable asm @@ -1506,8 +1580,8 @@ host_libs='-lm' target_path='$(CURDIR)' -# gcc stupidly only outputs the basename of targets with -MM, but we need the -# full relative path for objects in subdirectories for non-recursive Make. +# since the object filename is not given with the -MM flag, the compiler +# is only able to print the basename, and we must add the path ourselves DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)' DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM' @@ -1551,13 +1625,25 @@ INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c) PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c) FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c) +find_tests(){ + map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]') +} + +ACODEC_TESTS=$(find_tests acodec) +VCODEC_TESTS=$(find_tests vsynth1) +LAVF_TESTS=$(find_tests lavf) +LAVFI_TESTS=$(find_tests lavfi) +SEEK_TESTS=$(find_tests seek seek_) + +pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST)) + for n in $COMPONENT_LIST; do v=$(toupper ${n%s})_LIST eval enable \$$v eval ${n}_if_any="\$$v" done -enable $ARCH_EXT_LIST +enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS die_unknown(){ echo "Unknown option \"$1\"." @@ -1584,7 +1670,7 @@ for opt do --enable-debug=*) debuglevel="$optval" ;; --disable-everything) - map 'eval disable \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST + map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST ;; --enable-*=*|--disable-*=*) eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/') @@ -1641,7 +1727,7 @@ fi set_default arch target_os -ar="${cross_prefix}${ar}" +ar_default="${cross_prefix}${ar_default}" cc_default="${cross_prefix}${cc_default}" nm_default="${cross_prefix}${nm_default}" ranlib="${cross_prefix}${ranlib}" @@ -1716,6 +1802,8 @@ filter_asflags=echo if $cc -v 2>&1 | grep -qi ^gcc; then cc_type=gcc cc_version=__VERSION__ + gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)') + cc_ident="gcc $($cc -dumpversion) $gcc_extra_ver" if ! $cc -dumpversion | grep -q '^2\.'; then CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@' AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@' @@ -1725,18 +1813,22 @@ if $cc -v 2>&1 | grep -qi ^gcc; then elif $cc --version 2>/dev/null | grep -q Intel; then cc_type=icc cc_version="AV_STRINGIFY(__INTEL_COMPILER)" + cc_ident=$($cc --version | head -n1) CC_DEPFLAGS='-MMD' AS_DEPFLAGS='-MMD' speed_cflags='-O3' size_cflags='-Os' + noopt_cflags='-O1' elif $cc -v 2>&1 | grep -q xlc; then cc_type=xlc cc_version="AV_STRINGIFY(__IBMC__)" + cc_ident=$($cc -qversion 2>/dev/null | head -n1) speed_cflags='-O5' size_cflags='-O5 -qcompact' elif $cc -V 2>/dev/null | grep -q Compaq; then cc_type=ccc cc_version="AV_STRINGIFY(__DECC_VER)" + cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3) DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M' debuglevel=3 add_ldflags -Wl,-z,now # calls to libots crash without this @@ -1746,6 +1838,7 @@ elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then test -d "$sysroot" || die "No valid sysroot specified." cc_type=armcc cc_version="AV_STRINGIFY(__ARMCC_VERSION)" + cc_ident=$($cc --vsn | head -n1) armcc_conf="$PWD/armcc.conf" $cc --arm_linux_configure \ --arm_linux_config_file="$armcc_conf" \ @@ -1761,6 +1854,7 @@ elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then elif $cc -version 2>/dev/null | grep -q TMS470; then cc_type=tms470 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)" + cc_ident=$($cc -version | head -n1 | tr -s ' ') cc="$cc --gcc --abi=eabi -eo=.o -mc -me" CC_O='-fr=$(@D)' as_default="${cross_prefix}gcc" @@ -1799,7 +1893,9 @@ elif $cc -version 2>/dev/null | grep -q TMS470; then } elif $cc -v 2>&1 | grep -q clang; then cc_type=clang - cc_version=__VERSION__ + $cc -dM -E $TMPC | grep -q __clang_version__ && + cc_version=__clang_version__ || cc_version=__VERSION__ + cc_ident=$($cc --version | head -n1) CC_DEPFLAGS='-MMD' AS_DEPFLAGS='-MMD' speed_cflags='-O3' @@ -1807,6 +1903,7 @@ elif $cc -v 2>&1 | grep -q clang; then elif $cc -V 2>&1 | grep -q Sun; then cc_type=suncc cc_version="AV_STRINGIFY(__SUNPRO_C)" + cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-) DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)' DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1' speed_cflags='-O5' @@ -1818,9 +1915,9 @@ elif $cc -V 2>&1 | grep -q Sun; then -march=*|-mcpu=*) case "${flag#*=}" in native) echo -xtarget=native ;; - v9) echo -xarch=sparc ;; + v9|niagara) echo -xarch=sparc ;; ultrasparc) echo -xarch=sparcvis ;; - ultrasparc3|niagara*) echo -xarch=sparcvis2 ;; + ultrasparc3|niagara2) echo -xarch=sparcvis2 ;; i586|pentium) echo -xchip=pentium ;; i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;; pentium3*|c3-2) echo -xtarget=pentium3 ;; @@ -1845,14 +1942,23 @@ elif $cc -V 2>&1 | grep -q Sun; then esac done } +elif $cc -v 2>&1 | grep -q PathScale; then + cc_type=pathscale + cc_version=__PATHSCALE__ + cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :) + CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@' + AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@' + speed_cflags='-O2' + size_cflags='-Os' fi -test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc" +test -n "$cc_type" && enable $cc_type || + warn "Unknown C compiler $cc, unable to select optimal CFLAGS" : ${as_default:=$cc} : ${dep_cc_default:=$cc} : ${ld_default:=$cc} -set_default as dep_cc ld +set_default ar as dep_cc ld test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD @@ -1938,7 +2044,7 @@ case "$arch" in ;; esac -is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch" +is_in $arch $ARCH_LIST || warn "unknown architecture $arch" enable $arch # Add processor-specific flags @@ -1999,7 +2105,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) + i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona) cpuflags="-march=$cpu" enable cmov enable fast_cmov @@ -2015,6 +2121,10 @@ elif enabled x86; then elif enabled sparc; then case $cpu in + niagara) + cpuflags="-mcpu=$cpu" + disable vis + ;; sparc64) cpuflags="-mcpu=v9" ;; @@ -2025,9 +2135,18 @@ elif enabled arm; then case $cpu in armv*) cpuflags="-march=$cpu" + subarch=$(echo $cpu | sed 's/[^a-z0-9]//g') ;; *) cpuflags="-mcpu=$cpu" + case $cpu in + cortex-a*) subarch=armv7a ;; + cortex-r*) subarch=armv7r ;; + cortex-m*) subarch=armv7m ;; + arm11*) subarch=armv6 ;; + arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;; + armv4*|arm7*|arm9[24]*) subarch=armv4 ;; + esac ;; esac @@ -2113,30 +2232,10 @@ enabled spic && enable pic # OS specific case $target_os in - beos|haiku|zeta) - prefix_default="$HOME/config" - # 3 gcc releases known for BeOS, each with ugly bugs - gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)" - case "$gcc_version" in - 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc" - disable mmx - ;; - *20010315*) echo "BeBits gcc" - add_cflags -fno-expensive-optimizations - ;; - esac - SHFLAGS=-nostart - # enable BeOS things - enable audio_beos - # no need for libm, but the inet stuff - # Check for BONE - # XXX: actually should check for NOT net_server - if echo $BEINCLUDES | grep -q 'headers/be/bone'; then - network_extralibs="-lbind -lsocket" - else - enable beos_netserver - network_extralibs="-lnet" - fi ;; + haiku) + prefix_default="/boot/common" + network_extralibs="-lnetwork" + ;; sunos) FFSERVERLDFLAGS="" SHFLAGS='-shared -Wl,-h,$$(@F)' @@ -2166,14 +2265,16 @@ case $target_os in enable malloc_aligned ;; bsd/os) - osextralibs="-lpoll -lgnugetopt" + add_extralibs -lpoll -lgnugetopt strip="strip -d" ;; darwin) enable malloc_aligned + gas="gas-preprocessor.pl $cc" + enabled ppc && add_asflags -force_cpusubtype_ALL SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress' - strip="strip -x" - FFLDFLAGS="-Wl,-dynamic,-search_paths_first" + 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)' @@ -2212,13 +2313,9 @@ case $target_os in objformat="win32" enable dos_paths check_cflags -fno-common - if ! enabled x86_64; then - check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" || + 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." - enabled_any avisynth vfwcap_indev && - { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" || - die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; } - fi ;; cygwin*) target_os=cygwin @@ -2249,7 +2346,7 @@ case $target_os in os/2*) strip="lxlite" ln_s="cp -f" - FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap" + add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf' FFSERVERLDFLAGS="" LIBSUF="_s.a" @@ -2284,11 +2381,6 @@ check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PI set_default $PATHS_LIST -add_extralibs $osextralibs - -# Combine FFLDFLAGS and the LDFLAGS environment variable. -LDFLAGS="$FFLDFLAGS $LDFLAGS" - # we need to build at least one lib type if ! enabled_any static shared; then cat < -#ifndef FAAD2_VERSION -ok faad1 -#endif -int main(void) { return 0; } -EOF - test $? = 0 && enable libfaad2 - else - die "FAAD test failed." - fi -fi - - die_license_disabled() { enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; } } -die_license_disabled gpl libfaad2 die_license_disabled gpl libx264 +die_license_disabled gpl libxavs die_license_disabled gpl libxvid die_license_disabled gpl postproc die_license_disabled gpl x11grab @@ -2385,6 +2461,7 @@ if enabled alpha; then elif enabled arm; then check_cflags -marm + nogas=die check_ld < 4MB and shared libs are built - enabled shared && enable_weak hardcoded_tables - elif enabled mips; then check_asm loongson '"dmult.g $1, $2, $3"' @@ -2417,12 +2489,14 @@ elif enabled ppc; then enable local_aligned_8 local_aligned_16 - check_asm dcbzl '"dcbzl 0, 1"' + check_asm dcbzl '"dcbzl 0, %0" :: "r"(0)' + check_asm ibm_asm '"add 0, 0, 0"' check_asm ppc4xx '"maclhw r10, r11, r12"' check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)' # AltiVec flags: The FSF version of GCC differs from the Apple version if enabled altivec; then + nogas=warn check_cflags -maltivec -mabi=altivec && { check_header altivec.h && inc_altivec_h="#include " ; } || check_cflags -faltivec @@ -2494,7 +2568,10 @@ EOF case "$objformat" in elf) enabled debug && append YASMFLAGS "-g dwarf2" ;; esac - disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; } + if ! disabled yasm; then + check_yasm "pabsw xmm0, xmm0" && enable yasm || + warn "yasm not found, performance will suffer" + fi case "$cpu" in athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode) @@ -2504,6 +2581,12 @@ EOF fi +if enabled asm; then + as=${gas:=$as} + check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' || + $nogas "GNU assembler not found, install gas-preprocessor" +fi + if check_func dlopen; then ldl= elif check_func dlopen -ldl; then @@ -2513,6 +2596,7 @@ fi # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; } +check_func fcntl check_func fork check_func getaddrinfo $network_extralibs check_func gethrtime @@ -2556,7 +2640,8 @@ disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib # check for some common methods of building with pthread support # do this before the optional library checks as some of them require pthreads -if enabled pthreads; then +if ! disabled pthreads && ! enabled w32threads; then + enable pthreads if check_func pthread_create; then : elif check_func pthread_create -pthread; then @@ -2568,7 +2653,7 @@ if enabled pthreads; then elif check_func pthread_create -lpthreadGC2; then add_extralibs -lpthreadGC2 elif ! check_lib pthread.h pthread_create -lpthread; then - die "ERROR: can't find pthreads library" + disable pthreads fi fi @@ -2581,7 +2666,7 @@ for thread in $THREADS_LIST; do done check_lib math.h sin -lm -check_lib va/va.h vaInitialize -lva +disabled vaapi || check_lib va/va.h vaInitialize -lva check_mathfunc exp2 check_mathfunc exp2f @@ -2601,22 +2686,28 @@ enabled libdirac && add_cflags $(pkg-config --cflags dirac) && require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) && require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac) enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac -enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm -enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm +enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame enabled libnut && require libnut libnut.h nut_demuxer_init -lnut -enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm -enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm +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 libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg -enabled librtmp && require librtmp librtmp/rtmp.h RTMP_Init -lrtmp +enabled librtmp && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) || + die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; } enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) && require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0) enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg -enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm && - { check_cpp_condition x264.h "X264_BUILD >= 83" || - die "ERROR: libx264 version must be >= 0.83."; } +enabled libvpx && { + enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx || + die "ERROR: libvpx decoder version must be >=0.9.1"; } + enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx || + die "ERROR: libvpx encoder version must be >=0.9.1"; } } +enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 && + { check_cpp_condition x264.h "X264_BUILD >= 98" || + die "ERROR: libx264 version must be >= 0.98."; } +enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib @@ -2672,6 +2763,9 @@ check_header linux/videodev2.h check_header sys/videoio.h check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs" +# check that WM_CAP_DRIVER_CONNECT is defined to the proper value +# w32api 3.12 had it defined wrong +check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines # check for ioctl_meteor.h, ioctl_bt848.h and alternatives { check_header dev/bktr/ioctl_meteor.h && @@ -2709,6 +2803,7 @@ enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel" # add some useful compiler flags if supported check_cflags -Wdeclaration-after-statement check_cflags -Wall +check_cflags -Wno-parentheses check_cflags -Wno-switch check_cflags -Wdisabled-optimization check_cflags -Wpointer-arith @@ -2724,18 +2819,29 @@ enabled extra_warnings && check_cflags -Winline # add some linker flags check_ldflags -Wl,--warn-common check_ldflags -Wl,--as-needed -check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil' +check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavcore -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil' check_ldflags -Wl,-Bsymbolic echo "X{};" > $TMPV -test_ldflags -Wl,--version-script,$TMPV && +if test_ldflags -Wl,--version-script,$TMPV; then append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver' + check_cc < $TMPH < $TMPH <>config.mak <> $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 +touch .config cat > $TMPH <> $TMPH cp_if_changed $TMPH libavutil/avconfig.h +echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate + +test -n "$WARNINGS" && printf "\n$WARNINGS" + # build pkg-config files pkgconfig_generate(){ @@ -3106,6 +3218,7 @@ comment=$2 version=$3 libs=$4 requires=$5 +enabled ${name#lib} || return 0 cat < $name/$name.pc prefix=$prefix exec_prefix=\${prefix} @@ -3139,11 +3252,10 @@ EOF } pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION" +pkgconfig_generate libavcore "FFmpeg multimedia shared core utilities library" "$LIBAVCORE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION" +pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION" pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION" pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION" -enabled avfilter && - pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION" -enabled postproc && - pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" +pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION" +pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"