1#!/bin/sh 2# 3# FFmpeg configure script 4# 5# Copyright (c) 2000-2002 Fabrice Bellard 6# Copyright (c) 2005-2008 Diego Biurrun 7# Copyright (c) 2005-2008 Mans Rullgard 8# 9 10# Prevent locale nonsense from breaking basic text processing. 11LC_ALL=C 12export LC_ALL 13 14# make sure we are running under a compatible shell 15# try to make this part work with most shells 16 17try_exec(){ 18 echo "Trying shell $1" 19 type "$1" > /dev/null 2>&1 && exec "$@" 20} 21 22unset foo 23(: ${foo%%bar}) 2> /dev/null 24E1="$?" 25 26(: ${foo?}) 2> /dev/null 27E2="$?" 28 29if test "$E1" != 0 || test "$E2" = 0; then 30 echo "Broken shell detected. Trying alternatives." 31 export FF_CONF_EXEC 32 if test "0$FF_CONF_EXEC" -lt 1; then 33 FF_CONF_EXEC=1 34 try_exec bash "$0" "$@" 35 fi 36 if test "0$FF_CONF_EXEC" -lt 2; then 37 FF_CONF_EXEC=2 38 try_exec ksh "$0" "$@" 39 fi 40 if test "0$FF_CONF_EXEC" -lt 3; then 41 FF_CONF_EXEC=3 42 try_exec /usr/xpg4/bin/sh "$0" "$@" 43 fi 44 echo "No compatible shell script interpreter found." 45 echo "This configure script requires a POSIX-compatible shell" 46 echo "such as bash or ksh." 47 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH." 48 echo "Instead, install a working POSIX-compatible shell." 49 echo "Disabling this configure test will create a broken FFmpeg." 50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then 51 echo "This bash version ($BASH_VERSION) is broken on your platform." 52 echo "Upgrade to a later version if available." 53 fi 54 exit 1 55fi 56 57show_help(){ 58cat <<EOF 59Usage: configure [options] 60Options: [defaults in brackets after descriptions] 61 62Standard options: 63 --help print this message 64 --logfile=FILE log tests and output to FILE [config.err] 65 --disable-logging do not log configure debug information 66 --prefix=PREFIX install in PREFIX [$prefix] 67 --bindir=DIR install binaries in DIR [PREFIX/bin] 68 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg] 69 --libdir=DIR install libs in DIR [PREFIX/lib] 70 --shlibdir=DIR install shared libs in DIR [PREFIX/lib] 71 --incdir=DIR install includes in DIR [PREFIX/include] 72 --mandir=DIR install man page in DIR [PREFIX/share/man] 73 74Configuration options: 75 --disable-static do not build static libraries [no] 76 --enable-shared build shared libraries [no] 77 --enable-gpl allow use of GPL code, the resulting libs 78 and binaries will be under GPL [no] 79 --enable-version3 upgrade (L)GPL to version 3 [no] 80 --enable-nonfree allow use of nonfree code, the resulting libs 81 and binaries will be unredistributable [no] 82 --disable-doc do not build documentation 83 --disable-ffmpeg disable ffmpeg build 84 --disable-ffplay disable ffplay build 85 --disable-ffprobe disable ffprobe build 86 --disable-ffserver disable ffserver build 87 --disable-avdevice disable libavdevice build 88 --disable-avcodec disable libavcodec build 89 --disable-avformat disable libavformat build 90 --disable-swscale disable libswscale build 91 --enable-postproc enable GPLed postprocessing support [no] 92 --enable-avfilter video filter support [no] 93 --enable-avfilter-lavf video filters dependent on avformat [no] 94 --enable-beosthreads use BeOS threads [no] 95 --enable-os2threads use OS/2 threads [no] 96 --enable-pthreads use pthreads [no] 97 --enable-w32threads use Win32 threads [no] 98 --enable-x11grab enable X11 grabbing [no] 99 --disable-network disable network support [no] 100 --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no] 101 --enable-gray enable full grayscale support (slower color) 102 --disable-swscale-alpha disable alpha channel support in swscale 103 --disable-fastdiv disable table-based division 104 --enable-small optimize for size instead of speed 105 --disable-aandct disable AAN DCT code 106 --disable-dct disable DCT code 107 --disable-fft disable FFT code 108 --disable-golomb disable Golomb code 109 --disable-lpc disable LPC code 110 --disable-mdct disable MDCT code 111 --disable-rdft disable RDFT code 112 --disable-vaapi disable VAAPI code 113 --disable-vdpau disable VDPAU code 114 --disable-dxva2 disable DXVA2 code 115 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary) 116 --enable-hardcoded-tables use hardcoded tables instead of runtime generation 117 --enable-memalign-hack emulate memalign, interferes with memory debuggers 118 --enable-beos-netserver enable BeOS netserver 119 --disable-everything disable all components listed below 120 --disable-encoder=NAME disable encoder NAME 121 --enable-encoder=NAME enable encoder NAME 122 --disable-encoders disable all encoders 123 --disable-decoder=NAME disable decoder NAME 124 --enable-decoder=NAME enable decoder NAME 125 --disable-decoders disable all decoders 126 --disable-hwaccel=NAME disable hwaccel NAME 127 --enable-hwaccel=NAME enable hwaccel NAME 128 --disable-hwaccels disable all hwaccels 129 --disable-muxer=NAME disable muxer NAME 130 --enable-muxer=NAME enable muxer NAME 131 --disable-muxers disable all muxers 132 --disable-demuxer=NAME disable demuxer NAME 133 --enable-demuxer=NAME enable demuxer NAME 134 --disable-demuxers disable all demuxers 135 --enable-parser=NAME enable parser NAME 136 --disable-parser=NAME disable parser NAME 137 --disable-parsers disable all parsers 138 --enable-bsf=NAME enable bitstream filter NAME 139 --disable-bsf=NAME disable bitstream filter NAME 140 --disable-bsfs disable all bitstream filters 141 --enable-protocol=NAME enable protocol NAME 142 --disable-protocol=NAME disable protocol NAME 143 --disable-protocols disable all protocols 144 --disable-indev=NAME disable input device NAME 145 --disable-outdev=NAME disable output device NAME 146 --disable-indevs disable input devices 147 --disable-outdevs disable output devices 148 --disable-devices disable all devices 149 --enable-filter=NAME enable filter NAME 150 --disable-filter=NAME disable filter NAME 151 --disable-filters disable all filters 152 --list-decoders show all available decoders 153 --list-encoders show all available encoders 154 --list-hwaccels show all available hardware accelerators 155 --list-muxers show all available muxers 156 --list-demuxers show all available demuxers 157 --list-parsers show all available parsers 158 --list-protocols show all available protocols 159 --list-bsfs show all available bitstream filters 160 --list-indevs show all available input devices 161 --list-outdevs show all available output devices 162 --list-filters show all available filters 163 164External library support: 165 --enable-avisynth enable reading of AVISynth script files [no] 166 --enable-bzlib enable bzlib [autodetect] 167 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no] 168 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no] 169 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 170 and libraw1394 [no] 171 --enable-libdirac enable Dirac support via libdirac [no] 172 --enable-libfaac enable FAAC support via libfaac [no] 173 --enable-libfaad enable FAAD support via libfaad [no] 174 --enable-libfaadbin open libfaad.so.0 at runtime [no] 175 --enable-libgsm enable GSM support via libgsm [no] 176 --enable-libmp3lame enable MP3 encoding via libmp3lame [no] 177 --enable-libnut enable NUT (de)muxing via libnut, 178 native (de)muxer exists [no] 179 --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no] 180 --enable-librtmp enable RTMP[E] support via librtmp [no] 181 --enable-libschroedinger enable Dirac support via libschroedinger [no] 182 --enable-libspeex enable Speex decoding via libspeex [no] 183 --enable-libtheora enable Theora encoding via libtheora [no] 184 --enable-libvorbis enable Vorbis encoding via libvorbis, 185 native implementation exists [no] 186 --enable-libvpx enable VP8 support via libvpx [no] 187 --enable-libx264 enable H.264 encoding via x264 [no] 188 --enable-libxvid enable Xvid encoding via xvidcore, 189 native MPEG-4/Xvid encoder exists [no] 190 --enable-mlib enable Sun medialib [no] 191 --enable-zlib enable zlib [autodetect] 192 193Advanced options (experts only): 194 --source-path=PATH path to source code [$source_path] 195 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix] 196 --enable-cross-compile assume a cross-compiler is used 197 --sysroot=PATH root of cross-build tree 198 --sysinclude=PATH location of cross-build system headers 199 --target-os=OS compiler targets OS [$target_os] 200 --target-exec=CMD command to run executables on target 201 --target-path=DIR path to view of build directory on target 202 --nm=NM use nm tool 203 --ar=AR use archive tool AR [$ar_default] 204 --as=AS use assembler AS [$as_default] 205 --cc=CC use C compiler CC [$cc_default] 206 --ld=LD use linker LD 207 --host-cc=HOSTCC use host C compiler HOSTCC 208 --host-cflags=HCFLAGS use HCFLAGS when compiling for host 209 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host 210 --host-libs=HLIBS use libs HLIBS when linking for host 211 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS] 212 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS] 213 --extra-libs=ELIBS add ELIBS [$ELIBS] 214 --extra-version=STRING version string suffix [] 215 --build-suffix=SUFFIX library name suffix [] 216 --arch=ARCH select architecture [$arch] 217 --cpu=CPU select the minimum required CPU (affects 218 instruction selection, may crash on older CPUs) 219 --enable-powerpc-perf enable performance report on PPC 220 (requires enabling PMC) 221 --disable-asm disable all assembler optimizations 222 --disable-altivec disable AltiVec optimizations 223 --disable-amd3dnow disable 3DNow! optimizations 224 --disable-amd3dnowext disable 3DNow! extended optimizations 225 --disable-mmx disable MMX optimizations 226 --disable-mmx2 disable MMX2 optimizations 227 --disable-sse disable SSE optimizations 228 --disable-ssse3 disable SSSE3 optimizations 229 --disable-armv5te disable armv5te optimizations 230 --disable-armv6 disable armv6 optimizations 231 --disable-armv6t2 disable armv6t2 optimizations 232 --disable-armvfp disable ARM VFP optimizations 233 --disable-iwmmxt disable iwmmxt optimizations 234 --disable-mmi disable MMI optimizations 235 --disable-neon disable neon optimizations 236 --disable-vis disable VIS optimizations 237 --disable-yasm disable use of yasm assembler 238 --enable-pic build position-independent code 239 --malloc-prefix=PFX prefix malloc and related names with PFX 240 --enable-sram allow use of on-chip SRAM 241 242Developer options (useful when working on FFmpeg itself): 243 --disable-debug disable debugging symbols 244 --enable-debug=LEVEL set the debug level [$debuglevel] 245 --enable-gprof enable profiling with gprof [$gprof] 246 --disable-optimizations disable compiler optimizations 247 --enable-extra-warnings enable more compiler warnings 248 --disable-stripping disable stripping of executables and shared libraries 249 --samples=PATH location of test samples for FATE 250 251NOTE: Object files are built at the place where configure is launched. 252EOF 253 exit 0 254} 255 256quotes='""' 257 258log(){ 259 echo "$@" >> $logfile 260} 261 262log_file(){ 263 log BEGIN $1 264 pr -n -t $1 >> $logfile 265 log END $1 266} 267 268echolog(){ 269 log "$@" 270 echo "$@" 271} 272 273die(){ 274 echolog "$@" 275 cat <<EOF 276 277If you think configure made a mistake, make sure you are using the latest 278version from SVN. If the latest version fails, report the problem to the 279ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net. 280EOF 281 if disabled logging; then 282 cat <<EOF 283Rerun configure with logging enabled (do not use --disable-logging), and 284include the log this produces with your report. 285EOF 286 else 287cat <<EOF 288Include the log file "$logfile" produced by configure as this will help 289solving the problem. 290EOF 291 fi 292 exit 1 293} 294 295# Avoid locale weirdness, besides we really just want to translate ASCII. 296toupper(){ 297 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 298} 299 300tolower(){ 301 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 302} 303 304c_escape(){ 305 echo "$*" | sed 's/["\\]/\\\0/g' 306} 307 308sh_quote(){ 309 v=$(echo "$1" | sed "s/'/'\\\\''/g") 310 test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'" 311 echo "$v" 312} 313 314filter(){ 315 pat=$1 316 shift 317 for v; do 318 eval "case $v in $pat) echo $v ;; esac" 319 done 320} 321 322map(){ 323 m=$1 324 shift 325 for v; do eval $m; done 326} 327 328set_all(){ 329 value=$1 330 shift 331 for var in $*; do 332 eval $var=$value 333 done 334} 335 336set_weak(){ 337 value=$1 338 shift 339 for var; do 340 eval : \${$var:=$value} 341 done 342} 343 344pushvar(){ 345 for var in $*; do 346 eval level=\${${var}_level:=0} 347 eval ${var}_${level}="\$$var" 348 eval ${var}_level=$(($level+1)) 349 done 350} 351 352popvar(){ 353 for var in $*; do 354 eval level=\${${var}_level:-0} 355 test $level = 0 && continue 356 eval level=$(($level-1)) 357 eval $var="\${${var}_${level}}" 358 eval ${var}_level=$level 359 eval unset ${var}_${level} 360 done 361} 362 363enable(){ 364 set_all yes $* 365} 366 367disable(){ 368 set_all no $* 369} 370 371enable_weak(){ 372 set_weak yes $* 373} 374 375disable_weak(){ 376 set_weak no $* 377} 378 379enable_safe(){ 380 for var; do 381 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g') 382 done 383} 384 385disable_safe(){ 386 for var; do 387 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g') 388 done 389} 390 391do_enable_deep(){ 392 for var; do 393 enabled $var && continue 394 eval sel="\$${var}_select" 395 eval sgs="\$${var}_suggest" 396 pushvar var sgs 397 enable_deep $sel 398 popvar sgs 399 enable_deep_weak $sgs 400 popvar var 401 done 402} 403 404enable_deep(){ 405 do_enable_deep $* 406 enable $* 407} 408 409enable_deep_weak(){ 410 do_enable_deep $* 411 enable_weak $* 412} 413 414enabled(){ 415 test "${1#!}" = "$1" && op== || op=!= 416 eval test "x\$${1#!}" $op "xyes" 417} 418 419disabled(){ 420 test "${1#!}" = "$1" && op== || op=!= 421 eval test "x\$${1#!}" $op "xno" 422} 423 424enabled_all(){ 425 for opt; do 426 enabled $opt || return 1 427 done 428} 429 430disabled_all(){ 431 for opt; do 432 disabled $opt || return 1 433 done 434} 435 436enabled_any(){ 437 for opt; do 438 enabled $opt && return 0 439 done 440} 441 442disabled_any(){ 443 for opt; do 444 disabled $opt && return 0 445 done 446 return 1 447} 448 449set_default(){ 450 for opt; do 451 eval : \${$opt:=\$${opt}_default} 452 done 453} 454 455is_in(){ 456 value=$1 457 shift 458 for var in $*; do 459 [ $var = $value ] && return 0 460 done 461 return 1 462} 463 464check_deps(){ 465 for cfg; do 466 cfg="${cfg#!}" 467 enabled ${cfg}_checking && die "Circular dependency for $cfg." 468 disabled ${cfg}_checking && continue 469 enable ${cfg}_checking 470 471 eval dep_all="\$${cfg}_deps" 472 eval dep_any="\$${cfg}_deps_any" 473 eval dep_sel="\$${cfg}_select" 474 eval dep_sgs="\$${cfg}_suggest" 475 eval dep_ifa="\$${cfg}_if" 476 eval dep_ifn="\$${cfg}_if_any" 477 478 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn 479 check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn 480 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn 481 482 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; } 483 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; } 484 enabled_all $dep_all || disable $cfg 485 enabled_any $dep_any || disable $cfg 486 disabled_any $dep_sel && disable $cfg 487 488 if enabled $cfg; then 489 eval dep_extralibs="\$${cfg}_extralibs" 490 test -n "$dep_extralibs" && add_extralibs $dep_extralibs 491 enable_deep $dep_sel 492 enable_deep_weak $dep_sgs 493 fi 494 495 disable ${cfg}_checking 496 done 497} 498 499print_config(){ 500 pfx=$1 501 header=$2 502 makefile=$3 503 shift 3 504 for cfg; do 505 ucname="$(toupper $cfg)" 506 if enabled $cfg; then 507 echo "#define ${pfx}${ucname} 1" >> $header 508 echo "${pfx}${ucname}=yes" >> $makefile 509 else 510 echo "#define ${pfx}${ucname} 0" >> $header 511 echo "!${pfx}${ucname}=yes" >> $makefile 512 fi 513 done 514} 515 516flags_saved(){ 517 (: ${SAVE_CFLAGS?}) 2> /dev/null 518} 519 520save_flags(){ 521 flags_saved && return 522 SAVE_CFLAGS="$CFLAGS" 523 SAVE_LDFLAGS="$LDFLAGS" 524 SAVE_extralibs="$extralibs" 525} 526 527restore_flags(){ 528 flags_saved || return 529 CFLAGS="$SAVE_CFLAGS" 530 LDFLAGS="$SAVE_LDFLAGS" 531 extralibs="$SAVE_extralibs" 532 unset SAVE_CFLAGS 533 unset SAVE_LDFLAGS 534 unset SAVE_extralibs 535} 536 537temp_cflags(){ 538 save_flags 539 CFLAGS="$CFLAGS $*" 540} 541 542temp_ldflags(){ 543 save_flags 544 LDFLAGS="$LDFLAGS $*" 545} 546 547temp_extralibs(){ 548 save_flags 549 extralibs="$extralibs $*" 550} 551 552append(){ 553 var=$1 554 shift 555 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\"" 556 eval "$var=\"\$$var $*\"" 557} 558 559add_cppflags(){ 560 append CPPFLAGS $($filter_cppflags "$@") 561} 562 563add_cflags(){ 564 append CFLAGS $($filter_cflags "$@") 565} 566 567add_asflags(){ 568 append ASFLAGS $($filter_asflags "$@") 569} 570 571add_ldflags(){ 572 append LDFLAGS "$@" 573} 574 575add_extralibs(){ 576 append extralibs "$@" 577} 578 579check_cmd(){ 580 log "$@" 581 "$@" >> $logfile 2>&1 582} 583 584check_cc(){ 585 log check_cc "$@" 586 cat > $TMPC 587 log_file $TMPC 588 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC 589} 590 591check_cpp(){ 592 log check_cpp "$@" 593 cat > $TMPC 594 log_file $TMPC 595 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC 596} 597 598check_as(){ 599 log check_as "$@" 600 cat > $TMPC 601 log_file $TMPC 602 check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC 603} 604 605check_asm(){ 606 log check_asm "$@" 607 name="$1" 608 code="$2" 609 shift 2 610 disable $name 611 check_as "$@" <<EOF && enable $name 612void foo(void){ __asm__ volatile($code); } 613EOF 614} 615 616check_yasm(){ 617 log check_yasm "$@" 618 echo "$1" > $TMPS 619 log_file $TMPS 620 shift 1 621 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS 622} 623 624check_ld(){ 625 log check_ld "$@" 626 flags='' 627 libs='' 628 for f; do 629 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f" 630 done 631 check_cc $($filter_cflags $flags) || return 632 check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs 633} 634 635check_cppflags(){ 636 log check_cppflags "$@" 637 set -- $($filter_cppflags "$@") 638 check_cc "$@" <<EOF && append CPPFLAGS "$@" 639int x; 640EOF 641} 642 643check_cflags(){ 644 log check_cflags "$@" 645 set -- $($filter_cflags "$@") 646 check_cc "$@" <<EOF && append CFLAGS "$@" 647int x; 648EOF 649} 650 651test_ldflags(){ 652 log test_ldflags "$@" 653 check_ld "$@" <<EOF 654int main(void){ return 0; } 655EOF 656} 657 658check_ldflags(){ 659 log check_ldflags "$@" 660 test_ldflags "$@" && add_ldflags "$@" 661} 662 663check_header(){ 664 log check_header "$@" 665 header=$1 666 shift 667 disable_safe $header 668 check_cpp "$@" <<EOF && enable_safe $header 669#include <$header> 670int x; 671EOF 672} 673 674check_func(){ 675 log check_func "$@" 676 func=$1 677 shift 678 disable $func 679 check_ld "$@" <<EOF && enable $func 680extern int $func(); 681int main(void){ $func(); } 682EOF 683} 684 685check_mathfunc(){ 686 log check_mathfunc "$@" 687 func=$1 688 shift 689 disable $func 690 check_ld "$@" <<EOF && enable $func 691#include <math.h> 692float foo(float f) { return $func(f); } 693int main(void){ return 0; } 694EOF 695} 696 697check_func_headers(){ 698 log check_func_headers "$@" 699 headers=$1 700 func=$2 701 shift 2 702 disable $func 703 incs="" 704 for hdr in $headers; do 705 incs="$incs 706#include <$hdr>" 707 done 708 check_ld "$@" <<EOF && enable $func && enable_safe $headers 709$incs 710int main(int argc, char **argv){ 711 return (long) $func; 712} 713EOF 714} 715 716check_cpp_condition(){ 717 log check_cpp_condition "$@" 718 header=$1 719 condition=$2 720 shift 2 721 check_cpp $($filter_cppflags "$@") <<EOF 722#include <$header> 723#if !($condition) 724#error "unsatisfied condition: $condition" 725#endif 726EOF 727} 728 729check_lib(){ 730 log check_lib "$@" 731 header="$1" 732 func="$2" 733 shift 2 734 temp_extralibs "$@" 735 check_header $header && check_func $func && add_extralibs "$@" 736 err=$? 737 restore_flags 738 return $err 739} 740 741check_lib2(){ 742 log check_lib2 "$@" 743 headers="$1" 744 func="$2" 745 shift 2 746 check_func_headers "$headers" $func "$@" && add_extralibs "$@" 747} 748 749check_exec(){ 750 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; } 751} 752 753check_exec_crash(){ 754 code=$(cat) 755 756 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX) 757 # are safe but may not be available everywhere. Thus we use 758 # raise(SIGTERM) instead. The check is run in a subshell so we 759 # can redirect the "Terminated" message from the shell. SIGBUS 760 # is not defined by standard C so it is used conditionally. 761 762 (check_exec "$@") >> $logfile 2>&1 <<EOF 763#include <signal.h> 764static void sighandler(int sig){ 765 raise(SIGTERM); 766} 767int main(void){ 768 signal(SIGILL, sighandler); 769 signal(SIGFPE, sighandler); 770 signal(SIGSEGV, sighandler); 771#ifdef SIGBUS 772 signal(SIGBUS, sighandler); 773#endif 774 { $code } 775} 776EOF 777} 778 779check_type(){ 780 log check_type "$@" 781 headers=$1 782 type=$2 783 shift 2 784 disable_safe "$type" 785 incs="" 786 for hdr in $headers; do 787 incs="$incs 788#include <$hdr>" 789 done 790 check_cc "$@" <<EOF && enable_safe "$type" 791$incs 792$type v; 793EOF 794} 795 796check_struct(){ 797 log check_type "$@" 798 headers=$1 799 struct=$2 800 member=$3 801 shift 3 802 disable_safe "${struct}_${member}" 803 incs="" 804 for hdr in $headers; do 805 incs="$incs 806#include <$hdr>" 807 done 808 check_cc "$@" <<EOF && enable_safe "${struct}_${member}" 809$incs 810const void *p = &(($struct *)0)->$member; 811EOF 812} 813 814require(){ 815 name="$1" 816 header="$2" 817 func="$3" 818 shift 3 819 check_lib $header $func "$@" || die "ERROR: $name not found" 820} 821 822require2(){ 823 name="$1" 824 headers="$2" 825 func="$3" 826 shift 3 827 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found" 828} 829 830check_foo_config(){ 831 cfg=$1 832 pkg=$2 833 header=$3 834 func=$4 835 shift 4 836 disable $cfg 837 check_cmd ${pkg}-config --version 838 err=$? 839 if test "$err" = 0; then 840 temp_cflags $(${pkg}-config --cflags) 841 temp_extralibs $(${pkg}-config --libs) 842 check_lib "$@" $header $func && enable $cfg 843 fi 844 return $err 845} 846 847check_host_cc(){ 848 log check_host_cc "$@" 849 cat > $TMPC 850 log_file $TMPC 851 check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC 852} 853 854check_host_cflags(){ 855 log check_host_cflags "$@" 856 check_host_cc "$@" <<EOF && append host_cflags "$@" 857int x; 858EOF 859} 860 861apply(){ 862 file=$1 863 shift 864 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp" 865} 866 867cp_if_changed(){ 868 cmp -s "$1" "$2" && 869 echo "$2 is unchanged" || 870 cp -f "$1" "$2" 871} 872 873# CONFIG_LIST contains configurable options, while HAVE_LIST is for 874# system-dependent things. 875 876COMPONENT_LIST=" 877 bsfs 878 decoders 879 demuxers 880 encoders 881 filters 882 hwaccels 883 indevs 884 muxers 885 outdevs 886 parsers 887 protocols 888" 889 890CONFIG_LIST=" 891 $COMPONENT_LIST 892 aandct 893 avcodec 894 avdevice 895 avfilter 896 avfilter_lavf 897 avformat 898 avisynth 899 beos_netserver 900 bzlib 901 dct 902 doc 903 dwt 904 dxva2 905 fastdiv 906 ffmpeg 907 ffplay 908 ffprobe 909 ffserver 910 fft 911 golomb 912 gpl 913 gprof 914 gray 915 h264dsp 916 hardcoded_tables 917 libdc1394 918 libdirac 919 libfaac 920 libfaad 921 libfaadbin 922 libgsm 923 libmp3lame 924 libnut 925 libopencore_amrnb 926 libopencore_amrwb 927 libopenjpeg 928 librtmp 929 libschroedinger 930 libspeex 931 libtheora 932 libvorbis 933 libvpx 934 libx264 935 libxvid 936 lpc 937 lsp 938 mdct 939 memalign_hack 940 mlib 941 mpegaudio_hp 942 network 943 nonfree 944 pic 945 postproc 946 powerpc_perf 947 rdft 948 runtime_cpudetect 949 shared 950 small 951 sram 952 static 953 swscale 954 swscale_alpha 955 vaapi 956 vdpau 957 version3 958 x11grab 959 zlib 960" 961 962THREADS_LIST=' 963 beosthreads 964 os2threads 965 pthreads 966 w32threads 967' 968 969ARCH_LIST=' 970 alpha 971 arm 972 avr32 973 avr32_ap 974 avr32_uc 975 bfin 976 ia64 977 m68k 978 mips 979 mips64 980 parisc 981 ppc 982 ppc64 983 s390 984 sh4 985 sparc 986 sparc64 987 tomi 988 x86 989 x86_32 990 x86_64 991' 992 993ARCH_EXT_LIST=' 994 altivec 995 amd3dnow 996 amd3dnowext 997 armv5te 998 armv6 999 armv6t2 1000 armvfp 1001 iwmmxt 1002 mmi 1003 mmx 1004 mmx2 1005 neon 1006 ppc4xx 1007 sse 1008 ssse3 1009 vis 1010' 1011 1012HAVE_LIST_PUB=' 1013 bigendian 1014' 1015 1016HAVE_LIST=" 1017 $ARCH_EXT_LIST 1018 $HAVE_LIST_PUB 1019 $THREADS_LIST 1020 alsa_asoundlib_h 1021 altivec_h 1022 arpa_inet_h 1023 attribute_may_alias 1024 attribute_packed 1025 bswap 1026 closesocket 1027 cmov 1028 conio_h 1029 dcbzl 1030 dev_bktr_ioctl_bt848_h 1031 dev_bktr_ioctl_meteor_h 1032 dev_ic_bt8xx_h 1033 dev_video_meteor_ioctl_meteor_h 1034 dev_video_bktr_ioctl_bt848_h 1035 dlfcn_h 1036 dlopen 1037 dos_paths 1038 ebp_available 1039 ebx_available 1040 exp2 1041 exp2f 1042 fast_64bit 1043 fast_clz 1044 fast_cmov 1045 fast_unaligned 1046 fork 1047 getaddrinfo 1048 gethrtime 1049 GetProcessMemoryInfo 1050 GetProcessTimes 1051 getrusage 1052 struct_rusage_ru_maxrss 1053 inet_aton 1054 inline_asm 1055 isatty 1056 ldbrx 1057 libdc1394_1 1058 libdc1394_2 1059 llrint 1060 llrintf 1061 local_aligned_16 1062 local_aligned_8 1063 log2 1064 log2f 1065 loongson 1066 lrint 1067 lrintf 1068 lzo1x_999_compress 1069 machine_ioctl_bt848_h 1070 machine_ioctl_meteor_h 1071 malloc_h 1072 memalign 1073 mkstemp 1074 pld 1075 posix_memalign 1076 round 1077 roundf 1078 sdl 1079 sdl_video_size 1080 setmode 1081 socklen_t 1082 soundcard_h 1083 poll_h 1084 setrlimit 1085 strerror_r 1086 struct_addrinfo 1087 struct_ipv6_mreq 1088 struct_sockaddr_in6 1089 struct_sockaddr_sa_len 1090 struct_sockaddr_storage 1091 symver 1092 symver_gnu_asm 1093 symver_asm_label 1094 sys_mman_h 1095 sys_resource_h 1096 sys_select_h 1097 sys_soundcard_h 1098 sys_videoio_h 1099 ten_operands 1100 termios_h 1101 threads 1102 truncf 1103 vfp_args 1104 VirtualAlloc 1105 winsock2_h 1106 xform_asm 1107 yasm 1108" 1109 1110# options emitted with CONFIG_ prefix but not available on command line 1111CONFIG_EXTRA=" 1112 avutil 1113 gplv3 1114 lgplv3 1115" 1116 1117CMDLINE_SELECT=" 1118 $ARCH_EXT_LIST 1119 $CONFIG_LIST 1120 $THREADS_LIST 1121 asm 1122 cross_compile 1123 debug 1124 extra_warnings 1125 logging 1126 optimizations 1127 stripping 1128 yasm 1129" 1130 1131PATHS_LIST=' 1132 bindir 1133 datadir 1134 incdir 1135 libdir 1136 mandir 1137 prefix 1138 shlibdir 1139' 1140 1141CMDLINE_SET=" 1142 $PATHS_LIST 1143 ar 1144 arch 1145 as 1146 build_suffix 1147 cc 1148 cpu 1149 cross_prefix 1150 dep_cc 1151 extra_version 1152 host_cc 1153 host_cflags 1154 host_ldflags 1155 host_libs 1156 host_os 1157 ld 1158 logfile 1159 malloc_prefix 1160 nm 1161 samples 1162 source_path 1163 strip 1164 sysinclude 1165 sysroot 1166 target_exec 1167 target_os 1168 target_path 1169" 1170 1171CMDLINE_APPEND=" 1172 extra_cflags 1173" 1174 1175# code dependency declarations 1176 1177# architecture extensions 1178 1179armv5te_deps="arm" 1180armv6_deps="arm" 1181armv6t2_deps="arm" 1182armvfp_deps="arm" 1183iwmmxt_deps="arm" 1184neon_deps="arm" 1185 1186mmi_deps="mips" 1187 1188altivec_deps="ppc" 1189ppc4xx_deps="ppc" 1190 1191vis_deps="sparc" 1192 1193x86_64_suggest="cmov fast_cmov" 1194amd3dnow_deps="mmx" 1195amd3dnowext_deps="amd3dnow" 1196mmx_deps="x86" 1197mmx2_deps="mmx" 1198sse_deps="mmx" 1199ssse3_deps="sse" 1200 1201fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64" 1202fast_clz_if_any="alpha armv5te avr32 mips ppc x86" 1203fast_unaligned_if_any="armv6 ppc x86" 1204 1205need_memalign="altivec neon sse" 1206inline_asm_deps="!tms470" 1207 1208symver_if_any="symver_asm_label symver_gnu_asm" 1209 1210# subsystems 1211mdct_select="fft" 1212rdft_select="fft" 1213 1214# decoders / encoders / hardware accelerators 1215aac_decoder_select="mdct rdft aac_parser" 1216aac_encoder_select="mdct" 1217ac3_decoder_select="mdct ac3_parser" 1218alac_encoder_select="lpc" 1219amrnb_decoder_select="lsp" 1220atrac1_decoder_select="mdct" 1221atrac3_decoder_select="mdct" 1222binkaudio_dct_decoder_select="mdct rdft dct" 1223binkaudio_rdft_decoder_select="mdct rdft" 1224cavs_decoder_select="golomb" 1225cook_decoder_select="mdct" 1226cscd_decoder_suggest="zlib" 1227dca_decoder_select="mdct" 1228dnxhd_encoder_select="aandct" 1229dxa_decoder_select="zlib" 1230eac3_decoder_select="ac3_decoder" 1231eamad_decoder_select="aandct" 1232eatgq_decoder_select="aandct" 1233eatqi_decoder_select="aandct" 1234ffv1_decoder_select="golomb" 1235flac_decoder_select="golomb" 1236flac_encoder_select="golomb lpc" 1237flashsv_decoder_select="zlib" 1238flashsv_encoder_select="zlib" 1239flv_decoder_select="h263_decoder" 1240flv_encoder_select="h263_encoder" 1241h261_encoder_select="aandct" 1242h263_decoder_select="h263_parser" 1243h263_encoder_select="aandct" 1244h263_vaapi_hwaccel_select="vaapi h263_decoder" 1245h263i_decoder_select="h263_decoder" 1246h263p_encoder_select="h263_encoder" 1247h264_decoder_select="golomb h264dsp" 1248h264_dxva2_hwaccel_deps="dxva2api_h" 1249h264_dxva2_hwaccel_select="dxva2 h264_decoder" 1250h264_vaapi_hwaccel_select="vaapi" 1251h264_vdpau_decoder_select="vdpau h264_decoder" 1252imc_decoder_select="fft mdct" 1253jpegls_decoder_select="golomb" 1254jpegls_encoder_select="golomb" 1255ljpeg_encoder_select="aandct" 1256loco_decoder_select="golomb" 1257mjpeg_encoder_select="aandct" 1258mlp_decoder_select="mlp_parser" 1259mpeg1video_encoder_select="aandct" 1260mpeg2video_encoder_select="aandct" 1261mpeg4_decoder_select="h263_decoder mpeg4video_parser" 1262mpeg4_encoder_select="h263_encoder" 1263mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder" 1264mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder" 1265mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder" 1266mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder" 1267mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder" 1268mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h" 1269mpeg_xvmc_decoder_select="mpegvideo_decoder" 1270msmpeg4v1_decoder_select="h263_decoder" 1271msmpeg4v1_encoder_select="h263_encoder" 1272msmpeg4v2_decoder_select="h263_decoder" 1273msmpeg4v2_encoder_select="h263_encoder" 1274msmpeg4v3_decoder_select="h263_decoder" 1275msmpeg4v3_encoder_select="h263_encoder" 1276nellymoser_decoder_select="mdct" 1277nellymoser_encoder_select="mdct" 1278png_decoder_select="zlib" 1279png_encoder_select="zlib" 1280qcelp_decoder_select="lsp" 1281qdm2_decoder_select="mdct rdft" 1282rv10_decoder_select="h263_decoder" 1283rv10_encoder_select="h263_encoder" 1284rv20_decoder_select="h263_decoder" 1285rv20_encoder_select="h263_encoder" 1286rv30_decoder_select="golomb h264dsp" 1287rv40_decoder_select="golomb h264dsp" 1288shorten_decoder_select="golomb" 1289sipr_decoder_select="lsp" 1290snow_decoder_select="dwt" 1291snow_encoder_select="aandct dwt" 1292sonic_decoder_select="golomb" 1293sonic_encoder_select="golomb" 1294sonic_ls_encoder_select="golomb" 1295svq1_encoder_select="aandct" 1296svq3_decoder_select="golomb h264dsp" 1297svq3_decoder_suggest="zlib" 1298theora_decoder_select="vp3_decoder" 1299tiff_decoder_suggest="zlib" 1300tiff_encoder_suggest="zlib" 1301truehd_decoder_select="mlp_decoder" 1302tscc_decoder_select="zlib" 1303twinvq_decoder_select="mdct lsp" 1304vc1_decoder_select="h263_decoder" 1305vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex" 1306vc1_dxva2_hwaccel_select="dxva2 vc1_decoder" 1307vc1_vaapi_hwaccel_select="vaapi vc1_decoder" 1308vc1_vdpau_decoder_select="vdpau vc1_decoder" 1309vorbis_decoder_select="mdct" 1310vorbis_encoder_select="mdct" 1311vp6a_decoder_select="vp6_decoder" 1312vp6f_decoder_select="vp6_decoder" 1313wmapro_decoder_select="mdct" 1314wmav1_decoder_select="mdct" 1315wmav1_encoder_select="mdct" 1316wmav2_decoder_select="mdct" 1317wmav2_encoder_select="mdct" 1318wmavoice_decoder_select="lsp rdft dct" 1319wmv1_decoder_select="h263_decoder" 1320wmv1_encoder_select="h263_encoder" 1321wmv2_decoder_select="h263_decoder" 1322wmv2_encoder_select="h263_encoder" 1323wmv3_decoder_select="vc1_decoder" 1324wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel" 1325wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel" 1326wmv3_vdpau_decoder_select="vc1_vdpau_decoder" 1327zlib_decoder_select="zlib" 1328zlib_encoder_select="zlib" 1329zmbv_decoder_select="zlib" 1330zmbv_encoder_select="zlib" 1331 1332vaapi_deps="va_va_h" 1333vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h" 1334 1335# parsers 1336h264_parser_select="golomb h264dsp" 1337 1338# bitstream_filters 1339aac_adtstoasc_bsf_select="aac_parser" 1340 1341# external libraries 1342libdirac_decoder_deps="libdirac !libschroedinger" 1343libdirac_encoder_deps="libdirac" 1344libfaac_encoder_deps="libfaac" 1345libfaad_decoder_deps="libfaad" 1346libfaadbin_extralibs='$ldl' 1347libgsm_decoder_deps="libgsm" 1348libgsm_encoder_deps="libgsm" 1349libgsm_ms_decoder_deps="libgsm" 1350libgsm_ms_encoder_deps="libgsm" 1351libmp3lame_encoder_deps="libmp3lame" 1352libopencore_amrnb_decoder_deps="libopencore_amrnb" 1353libopencore_amrnb_encoder_deps="libopencore_amrnb" 1354libopencore_amrwb_decoder_deps="libopencore_amrwb" 1355libopenjpeg_decoder_deps="libopenjpeg" 1356libschroedinger_decoder_deps="libschroedinger" 1357libschroedinger_encoder_deps="libschroedinger" 1358libspeex_decoder_deps="libspeex" 1359libtheora_encoder_deps="libtheora" 1360libvorbis_encoder_deps="libvorbis" 1361libvpx_decoder_deps="libvpx" 1362libvpx_encoder_deps="libvpx" 1363libx264_encoder_deps="libx264" 1364libxvid_encoder_deps="libxvid" 1365 1366# demuxers / muxers 1367ac3_demuxer_deps="ac3_parser" 1368asf_stream_muxer_select="asf_muxer" 1369avisynth_demuxer_deps="avisynth" 1370dirac_demuxer_deps="dirac_parser" 1371eac3_demuxer_select="ac3_parser" 1372ipod_muxer_select="mov_muxer" 1373libnut_demuxer_deps="libnut" 1374libnut_muxer_deps="libnut" 1375matroska_audio_muxer_select="matroska_muxer" 1376matroska_demuxer_suggest="zlib bzlib" 1377mov_demuxer_suggest="zlib" 1378mp3_demuxer_deps="mpegaudio_parser" 1379mp4_muxer_select="mov_muxer" 1380mpegtsraw_demuxer_select="mpegts_demuxer" 1381mxf_d10_muxer_select="mxf_muxer" 1382ogg_demuxer_select="golomb" 1383psp_muxer_select="mov_muxer" 1384rtsp_demuxer_deps="sdp_demuxer" 1385rtsp_muxer_deps="sdp_demuxer" 1386rtsp_muxer_select="rtp_muxer" 1387sdp_demuxer_deps="rtp_protocol mpegts_demuxer" 1388sdp_demuxer_select="asf_demuxer rm_demuxer" 1389spdif_muxer_select="aac_parser" 1390tg2_muxer_select="mov_muxer" 1391tgp_muxer_select="mov_muxer" 1392w64_demuxer_deps="wav_demuxer" 1393 1394# indevs / outdevs 1395alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp" 1396alsa_indev_extralibs="-lasound" 1397alsa_outdev_deps="alsa_asoundlib_h" 1398alsa_outdev_extralibs="-lasound" 1399audio_beos_indev_deps="audio_beos" 1400audio_beos_indev_extralibs="-lmedia -lbe" 1401audio_beos_outdev_deps="audio_beos" 1402audio_beos_outdev_extralibs="-lmedia -lbe" 1403bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h" 1404dv1394_indev_deps="dv1394 dv_demuxer" 1405jack_indev_deps="jack_jack_h" 1406jack_indev_extralibs="-ljack" 1407libdc1394_indev_deps="libdc1394" 1408oss_indev_deps_any="soundcard_h sys_soundcard_h" 1409oss_outdev_deps_any="soundcard_h sys_soundcard_h" 1410v4l_indev_deps="linux_videodev_h" 1411v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h" 1412vfwcap_indev_deps="capCreateCaptureWindow" 1413vfwcap_indev_extralibs="-lavicap32" 1414x11_grab_device_indev_deps="x11grab XShmCreateImage" 1415x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes" 1416 1417# protocols 1418gopher_protocol_deps="network" 1419http_protocol_deps="network" 1420http_protocol_select="tcp_protocol" 1421rtmp_protocol_deps="tcp_protocol" 1422rtp_protocol_deps="udp_protocol" 1423tcp_protocol_deps="network" 1424udp_protocol_deps="network" 1425 1426# filters 1427movie_filter_deps="avfilter_lavf" 1428avfilter_lavf_deps="avformat" 1429 1430# libraries 1431avdevice_deps="avcodec avformat" 1432avformat_deps="avcodec" 1433 1434# programs 1435ffmpeg_deps="avcodec avformat swscale" 1436ffplay_deps="avcodec avformat swscale sdl" 1437ffplay_select="rdft" 1438ffprobe_deps="avcodec avformat" 1439ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer" 1440ffserver_extralibs='$ldl' 1441 1442doc_deps="texi2html" 1443 1444# default parameters 1445 1446logfile="config.err" 1447 1448# installation paths 1449prefix_default="/usr/local" 1450bindir_default='${prefix}/bin' 1451datadir_default='${prefix}/share/ffmpeg' 1452incdir_default='${prefix}/include' 1453libdir_default='${prefix}/lib' 1454mandir_default='${prefix}/share/man' 1455shlibdir_default="$libdir_default" 1456 1457# toolchain 1458ar_default="ar" 1459cc_default="gcc" 1460cc_version=\"unknown\" 1461host_cc_default="gcc" 1462ln_s="ln -sf" 1463nm_default="nm" 1464objformat="elf" 1465ranlib="ranlib" 1466strip_default="strip" 1467yasmexe="yasm" 1468 1469nm_opts='-g' 1470 1471# machine 1472arch_default=$(uname -m) 1473cpu="generic" 1474 1475# OS 1476target_os_default=$(tolower $(uname -s)) 1477host_os=$target_os_default 1478 1479# configurable options 1480enable avcodec 1481enable avdevice 1482enable avformat 1483enable avutil 1484enable asm 1485enable debug 1486enable doc 1487enable fastdiv 1488enable ffmpeg 1489enable ffplay 1490enable ffprobe 1491enable ffserver 1492enable mpegaudio_hp 1493enable network 1494enable optimizations 1495enable protocols 1496enable static 1497enable stripping 1498enable swscale 1499enable swscale_alpha 1500 1501# build settings 1502SHFLAGS='-shared -Wl,-soname,$$(@F)' 1503FFSERVERLDFLAGS=-Wl,-E 1504LIBPREF="lib" 1505LIBSUF=".a" 1506FULLNAME='$(NAME)$(BUILDSUF)' 1507LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)' 1508SLIBPREF="lib" 1509SLIBSUF=".so" 1510SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)' 1511SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)' 1512SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' 1513LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' 1514 1515CC_O='-o $@' 1516 1517host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall' 1518host_libs='-lm' 1519 1520target_path='$(CURDIR)' 1521 1522# gcc stupidly only outputs the basename of targets with -MM, but we need the 1523# full relative path for objects in subdirectories for non-recursive Make. 1524DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)' 1525DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM' 1526 1527# find source path 1528source_path="$(dirname "$0")" 1529enable source_path_used 1530if test -f configure; then 1531 source_path="$(pwd)" 1532 disable source_path_used 1533else 1534 source_path="$(cd "$source_path"; pwd)" 1535 echo "$source_path" | grep -q '[[:blank:]]' && 1536 die "Out of tree builds are impossible with whitespace in source path." 1537 test -e "$source_path/config.h" && 1538 die "Out of tree builds are impossible with config.h in source dir." 1539fi 1540 1541for v in "$@"; do 1542 r=${v#*=} 1543 l=${v%"$r"} 1544 r=$(sh_quote "$r") 1545 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}" 1546done 1547 1548find_things(){ 1549 thing=$1 1550 pattern=$2 1551 file=$source_path/$3 1552 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file" 1553} 1554 1555ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c) 1556DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c) 1557HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c) 1558PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c) 1559BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c) 1560MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c) 1561DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c) 1562OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c) 1563INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c) 1564PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c) 1565FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c) 1566 1567for n in $COMPONENT_LIST; do 1568 v=$(toupper ${n%s})_LIST 1569 eval enable \$$v 1570 eval ${n}_if_any="\$$v" 1571done 1572 1573enable $ARCH_EXT_LIST 1574 1575die_unknown(){ 1576 echo "Unknown option \"$1\"." 1577 echo "See $0 --help for available options." 1578 exit 1 1579} 1580 1581show_list() { 1582 suffix=_$1 1583 shift 1584 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t 1585 exit 0 1586} 1587 1588for opt do 1589 optval="${opt#*=}" 1590 case "$opt" in 1591 --extra-ldflags=*) add_ldflags $optval 1592 ;; 1593 --extra-libs=*) add_extralibs $optval 1594 ;; 1595 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST 1596 ;; 1597 --enable-debug=*) debuglevel="$optval" 1598 ;; 1599 --disable-everything) 1600 map 'eval disable \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST 1601 ;; 1602 --enable-*=*|--disable-*=*) 1603 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/') 1604 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt" 1605 eval list=\$$(toupper $thing)_LIST 1606 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing} 1607 $action $(filter "$name" $list) 1608 ;; 1609 --enable-?*|--disable-?*) 1610 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g') 1611 if is_in $option $COMPONENT_LIST; then 1612 test $action = disable && action=unset 1613 eval $action \$$(toupper ${option%s})_LIST 1614 elif is_in $option $CMDLINE_SELECT; then 1615 $action $option 1616 else 1617 die_unknown $opt 1618 fi 1619 ;; 1620 --list-*) 1621 NAME="${opt#--list-}" 1622 is_in $NAME $COMPONENT_LIST || die_unknown $opt 1623 NAME=${NAME%s} 1624 eval show_list $NAME \$$(toupper $NAME)_LIST 1625 ;; 1626 --help|-h) show_help 1627 ;; 1628 *) 1629 optname="${opt%%=*}" 1630 optname="${optname#--}" 1631 optname=$(echo "$optname" | sed 's/-/_/g') 1632 if is_in $optname $CMDLINE_SET; then 1633 eval $optname='$optval' 1634 elif is_in $optname $CMDLINE_APPEND; then 1635 append $optname "$optval" 1636 else 1637 die_unknown $opt 1638 fi 1639 ;; 1640 esac 1641done 1642 1643disabled logging && logfile=/dev/null 1644 1645echo "# $0 $FFMPEG_CONFIGURATION" > $logfile 1646set >> $logfile 1647 1648test -n "$cross_prefix" && enable cross_compile 1649 1650if enabled cross_compile; then 1651 test -n "$arch" && test -n "$target_os" || 1652 die "Must specify target arch and OS when cross-compiling" 1653fi 1654 1655set_default arch target_os 1656 1657ar_default="${cross_prefix}${ar_default}" 1658cc_default="${cross_prefix}${cc_default}" 1659nm_default="${cross_prefix}${nm_default}" 1660ranlib="${cross_prefix}${ranlib}" 1661strip_default="${cross_prefix}${strip_default}" 1662 1663sysinclude_default="${sysroot}/usr/include" 1664 1665set_default cc nm strip sysinclude 1666enabled cross_compile || host_cc_default=$cc 1667set_default host_cc 1668 1669exesuf() { 1670 case $1 in 1671 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;; 1672 esac 1673} 1674 1675EXESUF=$(exesuf $target_os) 1676HOSTEXESUF=$(exesuf $host_os) 1677 1678# set temporary file name 1679: ${TMPDIR:=$TEMPDIR} 1680: ${TMPDIR:=$TMP} 1681: ${TMPDIR:=/tmp} 1682 1683if ! check_cmd type mktemp; then 1684 # simple replacement for missing mktemp 1685 # NOT SAFE FOR GENERAL USE 1686 mktemp(){ 1687 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$" 1688 } 1689fi 1690 1691tmpfile(){ 1692 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 && 1693 (set -C; exec > $tmp) 2>/dev/null || 1694 die "Unable to create temporary file in $TMPDIR." 1695 append TMPFILES $tmp 1696 eval $1=$tmp 1697} 1698 1699trap 'rm -f -- $TMPFILES' EXIT 1700trap exit HUP INT TERM 1701 1702tmpfile TMPC .c 1703tmpfile TMPE $EXESUF 1704tmpfile TMPH .h 1705tmpfile TMPO .o 1706tmpfile TMPS .S 1707tmpfile TMPV .ver 1708tmpfile TMPSH .sh 1709 1710unset -f mktemp 1711 1712# make sure we can execute files in $TMPDIR 1713cat > $TMPSH 2>> $logfile <<EOF 1714#! /bin/sh 1715EOF 1716chmod +x $TMPSH >> $logfile 2>&1 1717if ! $TMPSH >> $logfile 2>&1; then 1718 cat <<EOF 1719Unable to create and execute files in $TMPDIR. Set the TMPDIR environment 1720variable to another directory and make sure that it is not mounted noexec. 1721EOF 1722 die "Sanity test failed." 1723fi 1724 1725filter_cflags=echo 1726filter_cppflags=echo 1727filter_asflags=echo 1728 1729if $cc -v 2>&1 | grep -qi ^gcc; then 1730 cc_type=gcc 1731 cc_version=__VERSION__ 1732 if ! $cc -dumpversion | grep -q '^2\.'; then 1733 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@' 1734 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@' 1735 fi 1736 speed_cflags='-O3' 1737 size_cflags='-Os' 1738elif $cc --version 2>/dev/null | grep -q Intel; then 1739 cc_type=icc 1740 cc_version="AV_STRINGIFY(__INTEL_COMPILER)" 1741 CC_DEPFLAGS='-MMD' 1742 AS_DEPFLAGS='-MMD' 1743 speed_cflags='-O3' 1744 size_cflags='-Os' 1745 noopt_cflags='-O1' 1746elif $cc -v 2>&1 | grep -q xlc; then 1747 cc_type=xlc 1748 cc_version="AV_STRINGIFY(__IBMC__)" 1749 speed_cflags='-O5' 1750 size_cflags='-O5 -qcompact' 1751elif $cc -V 2>/dev/null | grep -q Compaq; then 1752 cc_type=ccc 1753 cc_version="AV_STRINGIFY(__DECC_VER)" 1754 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M' 1755 debuglevel=3 1756 add_ldflags -Wl,-z,now # calls to libots crash without this 1757 speed_cflags='-fast' 1758 size_cflags='-O1' 1759elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then 1760 test -d "$sysroot" || die "No valid sysroot specified." 1761 cc_type=armcc 1762 cc_version="AV_STRINGIFY(__ARMCC_VERSION)" 1763 armcc_conf="$PWD/armcc.conf" 1764 $cc --arm_linux_configure \ 1765 --arm_linux_config_file="$armcc_conf" \ 1766 --configure_sysroot="$sysroot" \ 1767 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 || 1768 die "Error creating armcc configuration file." 1769 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc" 1770 as_default="${cross_prefix}gcc" 1771 CC_DEPFLAGS='-MMD' 1772 AS_DEPFLAGS='-MMD' 1773 speed_cflags='-O3' 1774 size_cflags='-Os' 1775elif $cc -version 2>/dev/null | grep -q TMS470; then 1776 cc_type=tms470 1777 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)" 1778 cc="$cc --gcc --abi=eabi -eo=.o -mc -me" 1779 CC_O='-fr=$(@D)' 1780 as_default="${cross_prefix}gcc" 1781 ld_default="${cross_prefix}gcc" 1782 TMPO=$(basename $TMPC .c).o 1783 append TMPFILES $TMPO 1784 add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__= 1785 CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)' 1786 AS_DEPFLAGS='-MMD' 1787 speed_cflags='-O3 -mf=5' 1788 size_cflags='-O3 -mf=2' 1789 filter_cflags=tms470_flags 1790 tms470_flags(){ 1791 for flag; do 1792 case $flag in 1793 -march=*|-mcpu=*) 1794 case "${flag#*=}" in 1795 armv7-a|cortex-a*) echo -mv=7a8 ;; 1796 armv7-r|cortex-r*) echo -mv=7r4 ;; 1797 armv7-m|cortex-m*) echo -mv=7m3 ;; 1798 armv6*|arm11*) echo -mv=6 ;; 1799 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) 1800 echo -mv=5e ;; 1801 armv4*|arm7*|arm9[24]*) echo -mv=4 ;; 1802 esac 1803 ;; 1804 -mfpu=neon) echo --float_support=vfpv3 --neon ;; 1805 -mfpu=vfp) echo --float_support=vfpv2 ;; 1806 -mfpu=vfpv3) echo --float_support=vfpv3 ;; 1807 -msoft-float) echo --float_support=vfplib ;; 1808 -O[0-3]|-mf=*) echo $flag ;; 1809 -g) echo -g -mn ;; 1810 -pds=*) echo $flag ;; 1811 esac 1812 done 1813 } 1814elif $cc -v 2>&1 | grep -q clang; then 1815 cc_type=clang 1816 cc_version=__VERSION__ 1817 CC_DEPFLAGS='-MMD' 1818 AS_DEPFLAGS='-MMD' 1819 speed_cflags='-O3' 1820 size_cflags='-Os' 1821elif $cc -V 2>&1 | grep -q Sun; then 1822 cc_type=suncc 1823 cc_version="AV_STRINGIFY(__SUNPRO_C)" 1824 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)' 1825 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1' 1826 speed_cflags='-O5' 1827 size_cflags='-O5 -xspace' 1828 filter_cflags=suncc_flags 1829 suncc_flags(){ 1830 for flag; do 1831 case $flag in 1832 -march=*|-mcpu=*) 1833 case "${flag#*=}" in 1834 native) echo -xtarget=native ;; 1835 v9) echo -xarch=sparc ;; 1836 ultrasparc) echo -xarch=sparcvis ;; 1837 ultrasparc3|niagara*) echo -xarch=sparcvis2 ;; 1838 i586|pentium) echo -xchip=pentium ;; 1839 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;; 1840 pentium3*|c3-2) echo -xtarget=pentium3 ;; 1841 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;; 1842 pentium4*) echo -xtarget=pentium4 ;; 1843 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;; 1844 *-sse3) echo -xarch=sse3 ;; 1845 core2) echo -xarch=ssse3 -xchip=core2 ;; 1846 amdfam10|barcelona) echo -xarch=sse4_1 ;; 1847 athlon-4|athlon-[mx]p) echo -xarch=ssea ;; 1848 k8|opteron|athlon64|athlon-fx) 1849 echo -xarch=sse2a ;; 1850 athlon*) echo -xarch=pentium_proa ;; 1851 esac 1852 ;; 1853 -std=c99) echo -xc99 ;; 1854 -fomit-frame-pointer) echo -xregs=frameptr ;; 1855 -fPIC) echo -KPIC -xcode=pic32 ;; 1856 -W*,*) echo $flag ;; 1857 -f*-*|-W*) ;; 1858 *) echo $flag ;; 1859 esac 1860 done 1861 } 1862fi 1863 1864test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc" 1865 1866: ${as_default:=$cc} 1867: ${dep_cc_default:=$cc} 1868: ${ld_default:=$cc} 1869set_default ar as dep_cc ld 1870 1871test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD 1872test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD 1873 1874add_cflags $extra_cflags 1875add_asflags $extra_cflags 1876 1877if test -n "$sysroot"; then 1878 case "$cc_type" in 1879 gcc) 1880 add_cppflags --sysroot="$sysroot" 1881 add_ldflags --sysroot="$sysroot" 1882 ;; 1883 tms470) 1884 add_cppflags -I"$sysinclude" 1885 add_ldflags --sysroot="$sysroot" 1886 ;; 1887 clang) 1888 add_cppflags -isysroot "$sysroot" 1889 add_ldflags -isysroot "$sysroot" 1890 ;; 1891 esac 1892fi 1893 1894if test "$cpu" = host; then 1895 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling." 1896 1897 case "$cc_type" in 1898 gcc) 1899 check_native(){ 1900 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return 1901 sed -n "/$1=/{ 1902 s/.*$1=\\([^ ]*\\).*/\\1/ 1903 p 1904 q 1905 }" $TMPE 1906 } 1907 cpu=$(check_native -march || check_native -mcpu) 1908 ;; 1909 esac 1910 1911 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc" 1912fi 1913 1914# Deal with common $arch aliases 1915case "$arch" in 1916 arm*) 1917 arch="arm" 1918 ;; 1919 mips|mipsel|IP*) 1920 arch="mips" 1921 ;; 1922 mips64*) 1923 arch="mips" 1924 subarch="mips64" 1925 ;; 1926 parisc|hppa) 1927 arch="parisc" 1928 ;; 1929 parisc64|hppa64) 1930 arch="parisc" 1931 subarch="parisc64" 1932 ;; 1933 "Power Macintosh"|ppc|powerpc) 1934 arch="ppc" 1935 ;; 1936 ppc64|powerpc64) 1937 arch="ppc" 1938 subarch="ppc64" 1939 ;; 1940 s390|s390x) 1941 arch="s390" 1942 ;; 1943 sh4|sh) 1944 arch="sh4" 1945 ;; 1946 sun4u|sparc64) 1947 arch="sparc" 1948 subarch="sparc64" 1949 ;; 1950 i[3-6]86|i86pc|BePC|x86_64|amd64) 1951 arch="x86" 1952 ;; 1953esac 1954 1955is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch" 1956enable $arch 1957 1958# Add processor-specific flags 1959if test "$cpu" = generic; then 1960 : do nothing 1961elif enabled ppc; then 1962 1963 case $(tolower $cpu) in 1964 601|ppc601|powerpc601) 1965 cpuflags="-mcpu=601" 1966 disable altivec 1967 ;; 1968 603*|ppc603*|powerpc603*) 1969 cpuflags="-mcpu=603" 1970 disable altivec 1971 ;; 1972 604*|ppc604*|powerpc604*) 1973 cpuflags="-mcpu=604" 1974 disable altivec 1975 ;; 1976 g3|75*|ppc75*|powerpc75*) 1977 cpuflags="-mcpu=750 -mpowerpc-gfxopt" 1978 disable altivec 1979 ;; 1980 g4|745*|ppc745*|powerpc745*) 1981 cpuflags="-mcpu=7450 -mpowerpc-gfxopt" 1982 ;; 1983 74*|ppc74*|powerpc74*) 1984 cpuflags="-mcpu=7400 -mpowerpc-gfxopt" 1985 ;; 1986 g5|970|ppc970|powerpc970|power4*) 1987 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64" 1988 ;; 1989 cell) 1990 cpuflags="-mcpu=cell" 1991 enable ldbrx 1992 ;; 1993 e500v2) 1994 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double" 1995 disable altivec 1996 ;; 1997 e500) 1998 cpuflags="-mcpu=8540 -mhard-float" 1999 disable altivec 2000 ;; 2001 esac 2002 2003elif enabled x86; then 2004 2005 case $cpu in 2006 i[345]86|pentium) 2007 cpuflags="-march=$cpu" 2008 disable mmx 2009 ;; 2010 # targets that do NOT support conditional mov (cmov) 2011 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3) 2012 cpuflags="-march=$cpu" 2013 disable cmov 2014 ;; 2015 # targets that do support conditional mov (cmov) 2016 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10) 2017 cpuflags="-march=$cpu" 2018 enable cmov 2019 enable fast_cmov 2020 ;; 2021 # targets that do support conditional mov but on which it's slow 2022 pentium4|pentium4m|prescott|nocona) 2023 cpuflags="-march=$cpu" 2024 enable cmov 2025 disable fast_cmov 2026 ;; 2027 esac 2028 2029elif enabled sparc; then 2030 2031 case $cpu in 2032 sparc64) 2033 cpuflags="-mcpu=v9" 2034 ;; 2035 esac 2036 2037elif enabled arm; then 2038 2039 case $cpu in 2040 armv*) 2041 cpuflags="-march=$cpu" 2042 ;; 2043 *) 2044 cpuflags="-mcpu=$cpu" 2045 ;; 2046 esac 2047 2048elif enabled alpha; then 2049 2050 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu" 2051 2052elif enabled bfin; then 2053 2054 cpuflags="-mcpu=$cpu" 2055 2056elif enabled mips; then 2057 2058 cpuflags="-march=$cpu" 2059 2060elif enabled avr32; then 2061 2062 case $cpu in 2063 ap7[02]0[0-2]) 2064 subarch="avr32_ap" 2065 cpuflags="-mpart=$cpu" 2066 ;; 2067 ap) 2068 subarch="avr32_ap" 2069 cpuflags="-march=$cpu" 2070 ;; 2071 uc3[ab]*) 2072 subarch="avr32_uc" 2073 cpuflags="-mcpu=$cpu" 2074 ;; 2075 uc) 2076 subarch="avr32_uc" 2077 cpuflags="-march=$cpu" 2078 ;; 2079 esac 2080 2081fi 2082 2083add_cflags $cpuflags 2084add_asflags $cpuflags 2085 2086# compiler sanity check 2087check_exec <<EOF 2088int main(void){ return 0; } 2089EOF 2090if test "$?" != 0; then 2091 echo "$cc is unable to create an executable file." 2092 if test -z "$cross_prefix" && ! enabled cross_compile ; then 2093 echo "If $cc is a cross-compiler, use the --enable-cross-compile option." 2094 echo "Only do this if you know what cross compiling means." 2095 fi 2096 die "C compiler test failed." 2097fi 2098 2099add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 2100check_cflags -std=c99 2101check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64 2102#include <stdlib.h> 2103EOF 2104check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE 2105#include <stdlib.h> 2106EOF 2107 2108check_host_cflags -std=c99 2109 2110case "$arch" in 2111 alpha|ia64|mips|parisc|sparc) 2112 spic=$shared 2113 ;; 2114 x86) 2115 subarch="x86_32" 2116 check_cc <<EOF && subarch="x86_64" 2117 int test[(int)sizeof(char*) - 7]; 2118EOF 2119 if test "$subarch" = "x86_64"; then 2120 spic=$shared 2121 fi 2122 ;; 2123esac 2124 2125enable $subarch 2126enabled spic && enable pic 2127 2128# OS specific 2129case $target_os in 2130 beos|haiku|zeta) 2131 prefix_default="$HOME/config" 2132 # 3 gcc releases known for BeOS, each with ugly bugs 2133 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)" 2134 case "$gcc_version" in 2135 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc" 2136 disable mmx 2137 ;; 2138 *20010315*) echo "BeBits gcc" 2139 add_cflags -fno-expensive-optimizations 2140 ;; 2141 esac 2142 SHFLAGS=-nostart 2143 # enable BeOS things 2144 enable audio_beos 2145 # no need for libm, but the inet stuff 2146 # Check for BONE 2147 # XXX: actually should check for NOT net_server 2148 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then 2149 network_extralibs="-lbind -lsocket" 2150 else 2151 enable beos_netserver 2152 network_extralibs="-lnet" 2153 fi ;; 2154 sunos) 2155 FFSERVERLDFLAGS="" 2156 SHFLAGS='-shared -Wl,-h,$$(@F)' 2157 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS" 2158 network_extralibs="-lsocket -lnsl" 2159 add_cppflags -D__EXTENSIONS__ 2160 nm_opts='-P -g' 2161 ;; 2162 netbsd) 2163 oss_indev_extralibs="-lossaudio" 2164 oss_outdev_extralibs="-lossaudio" 2165 add_cppflags -D_XOPEN_SOURCE=600 2166 ;; 2167 openbsd) 2168 enable malloc_aligned 2169 # On OpenBSD 4.5. the compiler does not use PIC unless 2170 # explicitly using -fPIC. FFmpeg builds fine without PIC, 2171 # however the generated executable will not do anything 2172 # (simply quits with exit-code 1, no crash, no output). 2173 # Thus explicitly enable PIC here. 2174 enable pic 2175 SHFLAGS='-shared' 2176 oss_indev_extralibs="-lossaudio" 2177 oss_outdev_extralibs="-lossaudio" 2178 ;; 2179 freebsd|dragonfly) 2180 enable malloc_aligned 2181 ;; 2182 bsd/os) 2183 osextralibs="-lpoll -lgnugetopt" 2184 strip="strip -d" 2185 ;; 2186 darwin) 2187 enable malloc_aligned 2188 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress' 2189 strip="strip -x" 2190 FFLDFLAGS="-Wl,-dynamic,-search_paths_first" 2191 SLIBSUF=".dylib" 2192 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)' 2193 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)' 2194 FFSERVERLDFLAGS=-Wl,-bind_at_load 2195 objformat="macho" 2196 enabled x86_64 && objformat="macho64" 2197 enabled_any pic shared || 2198 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; } 2199 ;; 2200 mingw32*) 2201 if test $target_os = "mingw32ce"; then 2202 disable network 2203 else 2204 target_os=mingw32 2205 fi 2206 LIBTARGET=i386 2207 if enabled x86_64; then 2208 enable malloc_aligned 2209 LIBTARGET=x64 2210 elif enabled arm; then 2211 LIBTARGET=arm 2212 fi 2213 shlibdir_default="$bindir_default" 2214 disable ffserver 2215 SLIBPREF="" 2216 SLIBSUF=".dll" 2217 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' 2218 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' 2219 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)' 2220 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \ 2221 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \ 2222 install -d "$(LIBDIR)"; \ 2223 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"' 2224 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"' 2225 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' 2226 objformat="win32" 2227 enable dos_paths 2228 check_cflags -fno-common 2229 if ! enabled x86_64; then 2230 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" || 2231 die "ERROR: MinGW runtime version must be >= 3.15." 2232 enabled_any avisynth vfwcap_indev && 2233 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" || 2234 die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; } 2235 fi 2236 ;; 2237 cygwin*) 2238 target_os=cygwin 2239 shlibdir_default="$bindir_default" 2240 SLIBPREF="cyg" 2241 SLIBSUF=".dll" 2242 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' 2243 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' 2244 SHFLAGS='-shared -Wl,--enable-auto-image-base' 2245 objformat="win32" 2246 enable dos_paths 2247 check_cflags -fno-common 2248 ;; 2249 *-dos|freedos|opendos) 2250 disable ffplay ffserver 2251 disable $INDEV_LIST $OUTDEV_LIST 2252 network_extralibs="-lsocket" 2253 objformat="coff" 2254 enable dos_paths 2255 ;; 2256 linux) 2257 enable dv1394 2258 ;; 2259 irix*) 2260 target_os=irix 2261 ranlib="echo ignoring ranlib" 2262 ;; 2263 os/2*) 2264 strip="lxlite" 2265 ln_s="cp -f" 2266 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap" 2267 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf' 2268 FFSERVERLDFLAGS="" 2269 LIBSUF="_s.a" 2270 SLIBPREF="" 2271 SLIBSUF=".dll" 2272 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)' 2273 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)' 2274 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \ 2275 echo PROTMODE >> $(SUBDIR)$(NAME).def; \ 2276 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \ 2277 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \ 2278 echo EXPORTS >> $(SUBDIR)$(NAME).def; \ 2279 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def' 2280 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \ 2281 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;' 2282 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"' 2283 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib' 2284 enable dos_paths 2285 ;; 2286 gnu/kfreebsd) 2287 ;; 2288 gnu) 2289 ;; 2290 none) 2291 ;; 2292 *) 2293 die "Unknown OS '$target_os'." 2294 ;; 2295esac 2296 2297check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic 2298 2299set_default $PATHS_LIST 2300 2301add_extralibs $osextralibs 2302 2303# Combine FFLDFLAGS and the LDFLAGS environment variable. 2304LDFLAGS="$FFLDFLAGS $LDFLAGS" 2305 2306# we need to build at least one lib type 2307if ! enabled_any static shared; then 2308 cat <<EOF 2309At least one library type must be built. 2310Specify --enable-static to build the static libraries or --enable-shared to 2311build the shared libraries as well. To only build the shared libraries specify 2312--disable-static in addition to --enable-shared. 2313EOF 2314 exit 1; 2315fi 2316 2317disabled static && LIBNAME="" 2318 2319if enabled_any libfaad libfaadbin ; then 2320 if check_header faad.h; then 2321 check_cc <<EOF 2322#include <faad.h> 2323#ifndef FAAD2_VERSION 2324ok faad1 2325#endif 2326int main(void) { return 0; } 2327EOF 2328 test $? = 0 && enable libfaad2 2329 else 2330 die "FAAD test failed." 2331 fi 2332fi 2333 2334 2335die_license_disabled() { 2336 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; } 2337} 2338 2339die_license_disabled gpl libfaad2 2340die_license_disabled gpl libx264 2341die_license_disabled gpl libxvid 2342die_license_disabled gpl postproc 2343die_license_disabled gpl x11grab 2344 2345die_license_disabled nonfree libfaac 2346 2347die_license_disabled version3 libopencore_amrnb 2348die_license_disabled version3 libopencore_amrwb 2349 2350enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; } 2351 2352check_deps $ARCH_EXT_LIST 2353 2354disabled optimizations || check_cflags -fomit-frame-pointer 2355 2356enable_pic() { 2357 enable pic 2358 add_cppflags -DPIC 2359 add_cflags -fPIC 2360 add_asflags -fPIC 2361} 2362 2363enabled pic && enable_pic 2364 2365check_cc <<EOF || die "Symbol mangling check failed." 2366int ff_extern; 2367EOF 2368sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }') 2369extern_prefix=${sym%%ff_extern*} 2370 2371check_cc <<EOF && enable inline_asm 2372void foo(void) { __asm__ volatile ("" ::); } 2373EOF 2374 2375_restrict= 2376for restrict_keyword in restrict __restrict__ __restrict; do 2377 check_cc <<EOF && _restrict=$restrict_keyword && break 2378void foo(char * $restrict_keyword p); 2379EOF 2380done 2381 2382check_cc <<EOF && enable attribute_packed 2383struct { int x; } __attribute__((packed)) x; 2384EOF 2385 2386check_cc <<EOF && enable attribute_may_alias 2387union { int x; } __attribute__((may_alias)) x; 2388EOF 2389 2390check_cc <<EOF || die "endian test failed" 2391unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E'; 2392EOF 2393od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian 2394 2395if enabled alpha; then 2396 2397 check_cflags -mieee 2398 2399elif enabled arm; then 2400 2401 check_cflags -marm 2402 2403 check_ld <<EOF && enable vfp_args 2404__asm__ (".eabi_attribute 28, 1"); 2405int main(void) { return 0; } 2406EOF 2407 2408 # We have to check if pld is a nop and disable it. 2409 check_asm pld '"pld [r0]"' 2410 2411 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"' 2412 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"' 2413 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"' 2414 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"' 2415 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"' 2416 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"' 2417 2418 enabled_all armv6t2 shared !pic && enable_pic 2419 2420elif enabled mips; then 2421 2422 check_asm loongson '"dmult.g $1, $2, $3"' 2423 enabled mmi && check_asm mmi '"lq $2, 0($2)"' 2424 2425elif enabled ppc; then 2426 2427 enable local_aligned_8 local_aligned_16 2428 2429 check_asm dcbzl '"dcbzl 0, 1"' 2430 check_asm ppc4xx '"maclhw r10, r11, r12"' 2431 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)' 2432 2433 # AltiVec flags: The FSF version of GCC differs from the Apple version 2434 if enabled altivec; then 2435 check_cflags -maltivec -mabi=altivec && 2436 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } || 2437 check_cflags -faltivec 2438 2439 # check if our compiler supports Motorola AltiVec C API 2440 check_cc <<EOF || disable altivec 2441$inc_altivec_h 2442int main(void) { 2443 vector signed int v1, v2, v3; 2444 v1 = vec_add(v2,v3); 2445 return 0; 2446} 2447EOF 2448 2449 # check if our compiler supports braces for vector declarations 2450 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations." 2451$inc_altivec_h 2452int main (void) { (vector int) {1}; return 0; } 2453EOF 2454 fi 2455 2456elif enabled sparc; then 2457 2458 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc && 2459 add_cflags -mcpu=ultrasparc -mtune=ultrasparc 2460 2461elif enabled x86; then 2462 2463 enable local_aligned_8 local_aligned_16 2464 2465 # check whether EBP is available on x86 2466 # As 'i' is stored on the stack, this program will crash 2467 # if the base pointer is used to access it because the 2468 # base pointer is cleared in the inline assembly code. 2469 check_exec_crash <<EOF && enable ebp_available 2470 volatile int i=0; 2471 __asm__ volatile ( 2472 "xorl %%ebp, %%ebp" 2473 ::: "%ebp"); 2474 return i; 2475EOF 2476 2477 # check whether EBX is available on x86 2478 check_asm ebx_available '""::"b"(0)' && 2479 check_asm ebx_available '"":::"%ebx"' 2480 2481 # check whether more than 10 operands are supported 2482 check_cc <<EOF && enable ten_operands 2483int main(void) { 2484 int x=0; 2485 __asm__ volatile( 2486 "" 2487 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x) 2488 ); 2489 return 0; 2490} 2491EOF 2492 2493 # check whether binutils is new enough to compile SSSE3/MMX2 2494 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"' 2495 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"' 2496 2497 check_asm bswap '"bswap %%eax" ::: "%eax"' 2498 2499 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)" 2500 enabled x86_64 && append YASMFLAGS "-m amd64" 2501 enabled pic && append YASMFLAGS "-DPIC" 2502 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX" 2503 case "$objformat" in 2504 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;; 2505 esac 2506 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; } 2507 2508 case "$cpu" in 2509 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode) 2510 disable fast_clz 2511 ;; 2512 esac 2513 2514fi 2515 2516if check_func dlopen; then 2517 ldl= 2518elif check_func dlopen -ldl; then 2519 ldl=-ldl 2520fi 2521 2522# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that 2523check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; } 2524 2525check_func fork 2526check_func getaddrinfo $network_extralibs 2527check_func gethrtime 2528check_func getrusage 2529check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss 2530check_func inet_aton $network_extralibs 2531check_func isatty 2532check_func ${malloc_prefix}memalign && enable memalign 2533check_func mkstemp 2534check_func ${malloc_prefix}posix_memalign && enable posix_memalign 2535check_func setrlimit 2536check_func strerror_r 2537check_func_headers io.h setmode 2538check_func_headers lzo/lzo1x.h lzo1x_999_compress 2539check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi 2540check_func_headers windows.h GetProcessTimes 2541check_func_headers windows.h VirtualAlloc 2542 2543check_header conio.h 2544check_header dlfcn.h 2545check_header dxva2api.h 2546check_header malloc.h 2547check_header poll.h 2548check_header sys/mman.h 2549check_header sys/resource.h 2550check_header sys/select.h 2551check_header termios.h 2552check_header vdpau/vdpau.h 2553check_header vdpau/vdpau_x11.h 2554check_header X11/extensions/XvMClib.h 2555 2556check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex 2557 2558if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned && 2559 enabled_any $need_memalign ; then 2560 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack." 2561fi 2562 2563disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib 2564disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib 2565 2566# check for some common methods of building with pthread support 2567# do this before the optional library checks as some of them require pthreads 2568if enabled pthreads; then 2569 if check_func pthread_create; then 2570 : 2571 elif check_func pthread_create -pthread; then 2572 add_cflags -pthread 2573 add_extralibs -pthread 2574 elif check_func pthread_create -pthreads; then 2575 add_cflags -pthreads 2576 add_extralibs -pthreads 2577 elif check_func pthread_create -lpthreadGC2; then 2578 add_extralibs -lpthreadGC2 2579 elif ! check_lib pthread.h pthread_create -lpthread; then 2580 die "ERROR: can't find pthreads library" 2581 fi 2582fi 2583 2584for thread in $THREADS_LIST; do 2585 if enabled $thread; then 2586 test -n "$thread_type" && 2587 die "ERROR: Only one thread type must be selected." || 2588 thread_type="$thread" 2589 fi 2590done 2591 2592check_lib math.h sin -lm 2593check_lib va/va.h vaInitialize -lva 2594 2595check_mathfunc exp2 2596check_mathfunc exp2f 2597check_mathfunc llrint 2598check_mathfunc llrintf 2599check_mathfunc log2 2600check_mathfunc log2f 2601check_mathfunc lrint 2602check_mathfunc lrintf 2603check_mathfunc round 2604check_mathfunc roundf 2605check_mathfunc truncf 2606 2607# these are off by default, so fail if requested and not available 2608enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32 2609enabled libdirac && add_cflags $(pkg-config --cflags dirac) && 2610 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) && 2611 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac) 2612enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac 2613enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad 2614enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm 2615enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm 2616enabled libnut && require libnut libnut.h nut_demuxer_init -lnut 2617enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm 2618enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm 2619enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg 2620enabled librtmp && require librtmp librtmp/rtmp.h RTMP_Init $(pkg-config --libs librtmp) 2621enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) && 2622 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0) 2623enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex 2624enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg 2625enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg 2626enabled libvpx && require2 libvpx "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver" -lvpx && 2627 require2 libvpx "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver" -lvpx 2628enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm && 2629 { check_cpp_condition x264.h "X264_BUILD >= 83" || 2630 die "ERROR: libx264 version must be >= 0.83."; } 2631enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore 2632enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib 2633 2634# libdc1394 check 2635if enabled libdc1394; then 2636 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 && 2637 enable libdc1394_2; } || 2638 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 && 2639 enable libdc1394_1; } || 2640 die "ERROR: No version of libdc1394 found " 2641fi 2642 2643SDL_CONFIG="${cross_prefix}sdl-config" 2644if "${SDL_CONFIG}" --version > /dev/null 2>&1; then 2645 sdl_cflags=$("${SDL_CONFIG}" --cflags) 2646 sdl_libs=$("${SDL_CONFIG}" --libs) 2647 check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs && 2648 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags && 2649 enable sdl && 2650 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size 2651fi 2652 2653texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html 2654 2655if enabled network; then 2656 check_type "sys/types.h sys/socket.h" socklen_t 2657 check_type netdb.h "struct addrinfo" 2658 check_type netinet/in.h "struct ipv6_mreq" 2659 check_type netinet/in.h "struct sockaddr_in6" 2660 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage" 2661 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len 2662 # Prefer arpa/inet.h over winsock2 2663 if check_header arpa/inet.h ; then 2664 check_func closesocket 2665 elif check_header winsock2.h ; then 2666 check_func_headers winsock2.h closesocket -lws2 && \ 2667 network_extralibs="-lws2" || \ 2668 { check_func_headers winsock2.h closesocket -lws2_32 && \ 2669 network_extralibs="-lws2_32"; } 2670 check_type ws2tcpip.h socklen_t 2671 check_type ws2tcpip.h "struct addrinfo" 2672 check_type ws2tcpip.h "struct ipv6_mreq" 2673 check_type ws2tcpip.h "struct sockaddr_in6" 2674 check_type ws2tcpip.h "struct sockaddr_storage" 2675 check_struct winsock2.h "struct sockaddr" sa_len 2676 else 2677 disable network 2678 fi 2679fi 2680 2681check_header linux/videodev.h 2682check_header linux/videodev2.h 2683check_header sys/videoio.h 2684 2685check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs" 2686 2687# check for ioctl_meteor.h, ioctl_bt848.h and alternatives 2688{ check_header dev/bktr/ioctl_meteor.h && 2689 check_header dev/bktr/ioctl_bt848.h; } || 2690{ check_header machine/ioctl_meteor.h && 2691 check_header machine/ioctl_bt848.h; } || 2692{ check_header dev/video/meteor/ioctl_meteor.h && 2693 check_header dev/video/bktr/ioctl_bt848.h; } || 2694check_header dev/ic/bt8xx.h 2695 2696check_header sys/soundcard.h 2697check_header soundcard.h 2698 2699enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound 2700 2701enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack 2702 2703enabled x11grab && 2704check_header X11/Xlib.h && 2705check_header X11/extensions/XShm.h && 2706check_header X11/extensions/Xfixes.h && 2707check_func XOpenDisplay -lX11 && 2708check_func XShmCreateImage -lX11 -lXext && 2709check_func XFixesGetCursorImage -lX11 -lXext -lXfixes 2710 2711if ! disabled vdpau && enabled vdpau_vdpau_h; then 2712check_cpp_condition \ 2713 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" || 2714 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." && 2715 disable vdpau; } 2716fi 2717 2718enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel" 2719 2720# add some useful compiler flags if supported 2721check_cflags -Wdeclaration-after-statement 2722check_cflags -Wall 2723check_cflags -Wno-switch 2724check_cflags -Wdisabled-optimization 2725check_cflags -Wpointer-arith 2726check_cflags -Wredundant-decls 2727check_cflags -Wno-pointer-sign 2728check_cflags -Wcast-qual 2729check_cflags -Wwrite-strings 2730check_cflags -Wtype-limits 2731check_cflags -Wundef 2732check_cflags -Wmissing-prototypes 2733enabled extra_warnings && check_cflags -Winline 2734 2735# add some linker flags 2736check_ldflags -Wl,--warn-common 2737check_ldflags -Wl,--as-needed 2738check_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' 2739check_ldflags -Wl,-Bsymbolic 2740 2741echo "X{};" > $TMPV 2742if test_ldflags -Wl,--version-script,$TMPV; then 2743 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver' 2744 check_cc <<EOF && enable symver_asm_label 2745void ff_foo(void) __asm__ ("av_foo@VERSION"); 2746void ff_foo(void) { ${inline_asm+__asm__($quotes);} } 2747EOF 2748 check_cc <<EOF && enable symver_gnu_asm 2749__asm__(".symver ff_foo,av_foo@VERSION"); 2750void ff_foo(void) {} 2751EOF 2752fi 2753 2754if enabled small; then 2755 add_cflags $size_cflags 2756 optimizations="small" 2757elif enabled optimizations; then 2758 add_cflags $speed_cflags 2759else 2760 add_cflags $noopt_cflags 2761fi 2762check_cflags -fno-math-errno 2763check_cflags -fno-signed-zeros 2764 2765if enabled icc; then 2766 # Just warnings, no remarks 2767 check_cflags -w1 2768 # -wd: Disable following warnings 2769 # 144, 167, 556: -Wno-pointer-sign 2770 # 10006: ignoring unknown option -fno-signed-zeros 2771 # 10156: ignoring option '-W'; no argument required 2772 check_cflags -wd144,167,556,10006,10156 2773 # 11030: Warning unknown option --as-needed 2774 # 10156: ignoring option '-export'; no argument required 2775 check_ldflags -wd10156,11030 2776 # Allow to compile with optimizations 2777 check_ldflags -march=$cpu 2778 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test 2779 enable ebp_available 2780elif enabled ccc; then 2781 # disable some annoying warnings 2782 add_cflags -msg_disable cvtu32to64 2783 add_cflags -msg_disable embedcomment 2784 add_cflags -msg_disable needconstext 2785 add_cflags -msg_disable nomainieee 2786 add_cflags -msg_disable ptrmismatch1 2787 add_cflags -msg_disable unreachcode 2788elif enabled gcc; then 2789 check_cflags -fno-tree-vectorize 2790 check_cflags -Werror=implicit 2791 check_cflags -Werror=missing-prototypes 2792elif enabled clang; then 2793 check_cflags -Qunused-arguments 2794elif enabled armcc; then 2795 # 2523: use of inline assembler is deprecated 2796 add_cflags -Wrvct,--diag_suppress=2523 2797 add_cflags -Wrvct,--diag_suppress=1207 2798elif enabled tms470; then 2799 add_cflags -pds=824 -pds=837 2800fi 2801 2802if enabled gprof; then 2803 add_cflags -p 2804 add_ldflags -p 2805fi 2806 2807# Find out if the .align argument is a power of two or not. 2808check_asm asmalign_pot '".align 3"' 2809 2810enabled_any $THREADS_LIST && enable threads 2811 2812check_deps $CONFIG_LIST \ 2813 $CONFIG_EXTRA \ 2814 $HAVE_LIST \ 2815 $DECODER_LIST \ 2816 $ENCODER_LIST \ 2817 $HWACCEL_LIST \ 2818 $PARSER_LIST \ 2819 $BSF_LIST \ 2820 $DEMUXER_LIST \ 2821 $MUXER_LIST \ 2822 $FILTER_LIST \ 2823 $INDEV_LIST \ 2824 $OUTDEV_LIST \ 2825 $PROTOCOL_LIST \ 2826 2827enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; } 2828 2829echo "install prefix $prefix" 2830echo "source path $source_path" 2831echo "C compiler $cc" 2832echo ".align is power-of-two $asmalign_pot" 2833echo "ARCH $arch ($cpu)" 2834if test "$build_suffix" != ""; then 2835 echo "build suffix $build_suffix" 2836fi 2837if test "$extra_version" != ""; then 2838 echo "version string suffix $extra_version" 2839fi 2840echo "big-endian ${bigendian-no}" 2841echo "runtime cpu detection ${runtime_cpudetect-no}" 2842if enabled x86; then 2843 echo "yasm ${yasm-no}" 2844 echo "MMX enabled ${mmx-no}" 2845 echo "MMX2 enabled ${mmx2-no}" 2846 echo "3DNow! enabled ${amd3dnow-no}" 2847 echo "3DNow! extended enabled ${amd3dnowext-no}" 2848 echo "SSE enabled ${sse-no}" 2849 echo "SSSE3 enabled ${ssse3-no}" 2850 echo "CMOV enabled ${cmov-no}" 2851 echo "CMOV is fast ${fast_cmov-no}" 2852 echo "EBX available ${ebx_available-no}" 2853 echo "EBP available ${ebp_available-no}" 2854 echo "10 operands supported ${ten_operands-no}" 2855fi 2856if enabled arm; then 2857 echo "ARMv5TE enabled ${armv5te-no}" 2858 echo "ARMv6 enabled ${armv6-no}" 2859 echo "ARMv6T2 enabled ${armv6t2-no}" 2860 echo "ARM VFP enabled ${armvfp-no}" 2861 echo "IWMMXT enabled ${iwmmxt-no}" 2862 echo "NEON enabled ${neon-no}" 2863fi 2864if enabled mips; then 2865 echo "MMI enabled ${mmi-no}" 2866fi 2867if enabled ppc; then 2868 echo "AltiVec enabled ${altivec-no}" 2869 echo "PPC 4xx optimizations ${ppc4xx-no}" 2870 echo "dcbzl available ${dcbzl-no}" 2871 echo "performance report ${powerpc_perf-no}" 2872fi 2873if enabled sparc; then 2874 echo "VIS enabled ${vis-no}" 2875fi 2876echo "gprof enabled ${gprof-no}" 2877echo "debug symbols ${debug-no}" 2878echo "strip symbols ${stripping-no}" 2879echo "optimizations ${optimizations-no}" 2880echo "static ${static-no}" 2881echo "shared ${shared-no}" 2882echo "postprocessing support ${postproc-no}" 2883echo "new filter support ${avfilter-no}" 2884echo "filters using lavformat ${avfilter_lavf-no}" 2885echo "network support ${network-no}" 2886echo "threading support ${thread_type-no}" 2887echo "SDL support ${sdl-no}" 2888echo "Sun medialib support ${mlib-no}" 2889echo "AVISynth enabled ${avisynth-no}" 2890echo "libdc1394 support ${libdc1394-no}" 2891echo "libdirac enabled ${libdirac-no}" 2892echo "libfaac enabled ${libfaac-no}" 2893echo "libfaad enabled ${libfaad-no}" 2894echo "libfaad dlopened ${libfaadbin-no}" 2895echo "libgsm enabled ${libgsm-no}" 2896echo "libmp3lame enabled ${libmp3lame-no}" 2897echo "libnut enabled ${libnut-no}" 2898echo "libopencore-amrnb support ${libopencore_amrnb-no}" 2899echo "libopencore-amrwb support ${libopencore_amrwb-no}" 2900echo "libopenjpeg enabled ${libopenjpeg-no}" 2901echo "librtmp enabled ${librtmp-no}" 2902echo "libschroedinger enabled ${libschroedinger-no}" 2903echo "libspeex enabled ${libspeex-no}" 2904echo "libtheora enabled ${libtheora-no}" 2905echo "libvorbis enabled ${libvorbis-no}" 2906echo "libvpx enabled ${libvpx-no}" 2907echo "libx264 enabled ${libx264-no}" 2908echo "libxvid enabled ${libxvid-no}" 2909echo "zlib enabled ${zlib-no}" 2910echo "bzlib enabled ${bzlib-no}" 2911echo 2912 2913for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do 2914 echo "Enabled ${type}s:" 2915 eval list=\$$(toupper $type)_LIST 2916 for part in $list; do 2917 enabled $part && echo ${part%_*} 2918 done | sort | pr -3 -t 2919 echo 2920done 2921 2922license="LGPL version 2.1 or later" 2923if enabled nonfree; then 2924 license="nonfree and unredistributable" 2925elif enabled gplv3; then 2926 license="GPL version 3 or later" 2927elif enabled lgplv3; then 2928 license="LGPL version 3 or later" 2929elif enabled gpl; then 2930 license="GPL version 2 or later" 2931fi 2932 2933echo "License: $license" 2934 2935echo "Creating config.mak and config.h..." 2936 2937# build tree in object directory if source path is different from current one 2938if enabled source_path_used; then 2939 DIRS=" 2940 doc 2941 libavcodec 2942 libavcodec/$arch 2943 libavdevice 2944 libavfilter 2945 libavformat 2946 libavutil 2947 libavutil/$arch 2948 libpostproc 2949 libswscale 2950 libswscale/$arch 2951 tests 2952 tools 2953 " 2954 FILES=" 2955 Makefile 2956 common.mak 2957 subdir.mak 2958 doc/texi2pod.pl 2959 libavcodec/Makefile 2960 libavcodec/${arch}/Makefile 2961 libavdevice/Makefile 2962 libavfilter/Makefile 2963 libavformat/Makefile 2964 libavutil/Makefile 2965 libpostproc/Makefile 2966 libswscale/Makefile 2967 " 2968 map 'mkdir -p $v' $DIRS; 2969 map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES 2970fi 2971 2972enabled stripping || strip="echo skipping strip" 2973 2974cat > config.mak <<EOF 2975# Automatically generated by configure - do not modify! 2976ifndef FFMPEG_CONFIG_MAK 2977FFMPEG_CONFIG_MAK=1 2978FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION 2979prefix=$prefix 2980LIBDIR=\$(DESTDIR)$libdir 2981SHLIBDIR=\$(DESTDIR)$shlibdir 2982INCDIR=\$(DESTDIR)$incdir 2983BINDIR=\$(DESTDIR)$bindir 2984DATADIR=\$(DESTDIR)$datadir 2985MANDIR=\$(DESTDIR)$mandir 2986SRC_PATH="$source_path" 2987SRC_PATH_BARE=$source_path 2988BUILD_ROOT="$PWD" 2989ARCH=$arch 2990CC=$cc 2991AS=$as 2992LD=$ld 2993DEPCC=$dep_cc 2994YASM=$yasmexe 2995YASMDEP=$yasmexe 2996AR=$ar 2997RANLIB=$ranlib 2998CP=cp -p 2999LN_S=$ln_s 3000STRIP=$strip 3001CPPFLAGS=$CPPFLAGS 3002CFLAGS=$CFLAGS 3003ASFLAGS=$ASFLAGS 3004CC_O=$CC_O 3005LDFLAGS=$LDFLAGS 3006FFSERVERLDFLAGS=$FFSERVERLDFLAGS 3007SHFLAGS=$SHFLAGS 3008YASMFLAGS=$YASMFLAGS 3009BUILDSUF=$build_suffix 3010FULLNAME=$FULLNAME 3011LIBPREF=$LIBPREF 3012LIBSUF=$LIBSUF 3013LIBNAME=$LIBNAME 3014SLIBPREF=$SLIBPREF 3015SLIBSUF=$SLIBSUF 3016EXESUF=$EXESUF 3017EXTRA_VERSION=$extra_version 3018DEPFLAGS=$DEPFLAGS 3019CCDEP=$CCDEP 3020ASDEP=$ASDEP 3021CC_DEPFLAGS=$CC_DEPFLAGS 3022AS_DEPFLAGS=$AS_DEPFLAGS 3023HOSTCC=$host_cc 3024HOSTCFLAGS=$host_cflags 3025HOSTEXESUF=$HOSTEXESUF 3026HOSTLDFLAGS=$host_ldflags 3027HOSTLIBS=$host_libs 3028TARGET_EXEC=$target_exec 3029TARGET_PATH=$target_path 3030SDL_LIBS=$sdl_libs 3031SDL_CFLAGS=$sdl_cflags 3032LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD 3033EXTRALIBS=$extralibs 3034INSTALL=install 3035LIBTARGET=${LIBTARGET} 3036SLIBNAME=${SLIBNAME} 3037SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION} 3038SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR} 3039SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD} 3040SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD} 3041SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD} 3042SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD} 3043SAMPLES=$samples 3044EOF 3045 3046get_version(){ 3047 name=$1 3048 file=$source_path/$2 3049 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }') 3050 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO 3051 lcname=$(tolower $name) 3052 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak 3053 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak 3054} 3055 3056get_version LIBSWSCALE libswscale/swscale.h 3057get_version LIBPOSTPROC libpostproc/postprocess.h 3058get_version LIBAVCODEC libavcodec/avcodec.h 3059get_version LIBAVDEVICE libavdevice/avdevice.h 3060get_version LIBAVFORMAT libavformat/avformat.h 3061get_version LIBAVUTIL libavutil/avutil.h 3062get_version LIBAVFILTER libavfilter/avfilter.h 3063 3064enabled asmalign_pot || align_shift="1 <<" 3065 3066cat > $TMPH <<EOF 3067/* Automatically generated by configure - do not modify! */ 3068#ifndef FFMPEG_CONFIG_H 3069#define FFMPEG_CONFIG_H 3070#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)" 3071#define FFMPEG_LICENSE "$(c_escape $license)" 3072#define FFMPEG_DATADIR "$(eval c_escape $datadir)" 3073#define CC_TYPE "$cc_type" 3074#define CC_VERSION $cc_version 3075#define restrict $_restrict 3076#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t" 3077#define EXTERN_PREFIX "${extern_prefix}" 3078#define EXTERN_ASM ${extern_prefix} 3079EOF 3080 3081test -n "$malloc_prefix" && 3082 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH 3083 3084if enabled small || disabled optimizations; then 3085 echo "#undef av_always_inline" >> $TMPH 3086 echo "#define av_always_inline" >> $TMPH 3087fi 3088 3089print_config ARCH_ $TMPH config.mak $ARCH_LIST 3090print_config HAVE_ $TMPH config.mak $HAVE_LIST 3091print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \ 3092 $CONFIG_EXTRA \ 3093 $DECODER_LIST \ 3094 $ENCODER_LIST \ 3095 $HWACCEL_LIST \ 3096 $PARSER_LIST \ 3097 $BSF_LIST \ 3098 $DEMUXER_LIST \ 3099 $MUXER_LIST \ 3100 $FILTER_LIST \ 3101 $PROTOCOL_LIST \ 3102 $INDEV_LIST \ 3103 $OUTDEV_LIST \ 3104 3105echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH 3106echo "endif # FFMPEG_CONFIG_MAK" >> config.mak 3107 3108# Do not overwrite an unchanged config.h to avoid superfluous rebuilds. 3109cp_if_changed $TMPH config.h 3110 3111cat > $TMPH <<EOF 3112/* Generated by ffconf */ 3113#ifndef AVUTIL_AVCONFIG_H 3114#define AVUTIL_AVCONFIG_H 3115EOF 3116 3117print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB 3118 3119echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH 3120 3121cp_if_changed $TMPH libavutil/avconfig.h 3122 3123# build pkg-config files 3124 3125pkgconfig_generate(){ 3126name=$1 3127shortname=${name#lib}${build_suffix} 3128comment=$2 3129version=$3 3130libs=$4 3131requires=$5 3132cat <<EOF > $name/$name.pc 3133prefix=$prefix 3134exec_prefix=\${prefix} 3135libdir=$libdir 3136includedir=$incdir 3137 3138Name: $name 3139Description: $comment 3140Version: $version 3141Requires: $(enabled shared || echo $requires) 3142Requires.private: $(enabled shared && echo $requires) 3143Conflicts: 3144Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs) 3145Libs.private: $(enabled shared && echo $libs) 3146Cflags: -I\${includedir} 3147EOF 3148cat <<EOF > $name/$name-uninstalled.pc 3149prefix= 3150exec_prefix= 3151libdir=\${pcfiledir} 3152includedir=${source_path} 3153 3154Name: $name 3155Description: $comment 3156Version: $version 3157Requires: $requires 3158Conflicts: 3159Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs 3160Cflags: -I\${includedir} 3161EOF 3162} 3163 3164pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" 3165pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION" 3166pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION" 3167pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION" 3168enabled avfilter && 3169 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION" 3170enabled postproc && 3171 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" 3172pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION" 3173