fate: add bitexact flag to fate-sub-movtextenc
[ffmpeg.git] / configure
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.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if 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
55 fi
56
57 show_help(){
58 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 Help options:
63   --help                   print this message
64   --list-decoders          show all available decoders
65   --list-encoders          show all available encoders
66   --list-hwaccels          show all available hardware accelerators
67   --list-demuxers          show all available demuxers
68   --list-muxers            show all available muxers
69   --list-parsers           show all available parsers
70   --list-protocols         show all available protocols
71   --list-bsfs              show all available bitstream filters
72   --list-indevs            show all available input devices
73   --list-outdevs           show all available output devices
74   --list-filters           show all available filters
75
76 Standard options:
77   --logfile=FILE           log tests and output to FILE [config.log]
78   --disable-logging        do not log configure debug information
79   --prefix=PREFIX          install in PREFIX [$prefix]
80   --bindir=DIR             install binaries in DIR [PREFIX/bin]
81   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
82   --libdir=DIR             install libs in DIR [PREFIX/lib]
83   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
84   --incdir=DIR             install includes in DIR [PREFIX/include]
85   --mandir=DIR             install man page in DIR [PREFIX/share/man]
86
87 Licensing options:
88   --enable-gpl             allow use of GPL code, the resulting libs
89                            and binaries will be under GPL [no]
90   --enable-version3        upgrade (L)GPL to version 3 [no]
91   --enable-nonfree         allow use of nonfree code, the resulting libs
92                            and binaries will be unredistributable [no]
93
94 Configuration options:
95   --disable-static         do not build static libraries [no]
96   --enable-shared          build shared libraries [no]
97   --enable-small           optimize for size instead of speed
98   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
99   --enable-gray            enable full grayscale support (slower color)
100   --disable-swscale-alpha  disable alpha channel support in swscale
101
102 Component options:
103   --disable-doc            do not build documentation
104   --disable-ffmpeg         disable ffmpeg build
105   --disable-ffplay         disable ffplay build
106   --disable-ffprobe        disable ffprobe build
107   --disable-ffserver       disable ffserver build
108   --disable-avdevice       disable libavdevice build
109   --disable-avcodec        disable libavcodec build
110   --disable-avformat       disable libavformat build
111   --disable-swresample     disable libswresample build
112   --disable-swscale        disable libswscale build
113   --disable-postproc       disable libpostproc build
114   --disable-avfilter       disable libavfilter build
115   --enable-avresample      enable libavresample build [no]
116   --disable-pthreads       disable pthreads [auto]
117   --disable-w32threads     disable Win32 threads [auto]
118   --disable-os2threads     disable OS/2 threads [auto]
119   --enable-x11grab         enable X11 grabbing [no]
120   --disable-network        disable network support [no]
121   --disable-dct            disable DCT code
122   --disable-dwt            disable DWT code
123   --disable-lsp            disable LSP code
124   --disable-mdct           disable MDCT code
125   --disable-rdft           disable RDFT code
126   --disable-fft            disable FFT code
127   --enable-dxva2           enable DXVA2 code
128   --enable-vaapi           enable VAAPI code [autodetect]
129   --enable-vda             enable VDA code   [autodetect]
130   --enable-vdpau           enable VDPAU code [autodetect]
131
132 Individual component options:
133   --disable-everything     disable all components listed below
134   --disable-encoder=NAME   disable encoder NAME
135   --enable-encoder=NAME    enable encoder NAME
136   --disable-encoders       disable all encoders
137   --disable-decoder=NAME   disable decoder NAME
138   --enable-decoder=NAME    enable decoder NAME
139   --disable-decoders       disable all decoders
140   --disable-hwaccel=NAME   disable hwaccel NAME
141   --enable-hwaccel=NAME    enable hwaccel NAME
142   --disable-hwaccels       disable all hwaccels
143   --disable-muxer=NAME     disable muxer NAME
144   --enable-muxer=NAME      enable muxer NAME
145   --disable-muxers         disable all muxers
146   --disable-demuxer=NAME   disable demuxer NAME
147   --enable-demuxer=NAME    enable demuxer NAME
148   --disable-demuxers       disable all demuxers
149   --enable-parser=NAME     enable parser NAME
150   --disable-parser=NAME    disable parser NAME
151   --disable-parsers        disable all parsers
152   --enable-bsf=NAME        enable bitstream filter NAME
153   --disable-bsf=NAME       disable bitstream filter NAME
154   --disable-bsfs           disable all bitstream filters
155   --enable-protocol=NAME   enable protocol NAME
156   --disable-protocol=NAME  disable protocol NAME
157   --disable-protocols      disable all protocols
158   --enable-indev=NAME      enable input device NAME
159   --disable-indev=NAME     disable input device NAME
160   --disable-indevs         disable input devices
161   --enable-outdev=NAME     enable output device NAME
162   --disable-outdev=NAME    disable output device NAME
163   --disable-outdevs        disable output devices
164   --disable-devices        disable all devices
165   --enable-filter=NAME     enable filter NAME
166   --disable-filter=NAME    disable filter NAME
167   --disable-filters        disable all filters
168
169 External library support:
170   --enable-avisynth        enable reading of AVISynth script files [no]
171   --enable-bzlib           enable bzlib [autodetect]
172   --enable-fontconfig      enable fontconfig
173   --enable-frei0r          enable frei0r video filtering
174   --enable-gnutls          enable gnutls [no]
175   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
176   --enable-libass          enable libass subtitles rendering [no]
177   --enable-libbluray       enable BluRay reading using libbluray [no]
178   --enable-libcaca         enable textual display using libcaca
179   --enable-libcelt         enable CELT decoding via libcelt [no]
180   --enable-libcdio         enable audio CD grabbing with libcdio
181   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
182                            and libraw1394 [no]
183   --enable-libfaac         enable AAC encoding via libfaac [no]
184   --enable-libfdk-aac      enable AAC encoding via libfdk-aac [no]
185   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
186   --enable-libfreetype     enable libfreetype [no]
187   --enable-libgsm          enable GSM de/encoding via libgsm [no]
188   --enable-libiec61883     enable iec61883 via libiec61883 [no]
189   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
190   --enable-libmodplug      enable ModPlug via libmodplug [no]
191   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
192   --enable-libnut          enable NUT (de)muxing via libnut,
193                            native (de)muxer exists [no]
194   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
195   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
196   --enable-libopencv       enable video filtering via libopencv [no]
197   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
198   --enable-libopus         enable Opus decoding via libopus [no]
199   --enable-libpulse        enable Pulseaudio input via libpulse [no]
200   --enable-librtmp         enable RTMP[E] support via librtmp [no]
201   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
202   --enable-libspeex        enable Speex de/encoding via libspeex [no]
203   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
204   --enable-libtheora       enable Theora encoding via libtheora [no]
205   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
206   --enable-libv4l2         enable libv4l2/v4l-utils [no]
207   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
208   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
209   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
210                            native implementation exists [no]
211   --enable-libvpx          enable VP8 de/encoding via libvpx [no]
212   --enable-libx264         enable H.264 encoding via x264 [no]
213   --enable-libxavs         enable AVS encoding via xavs [no]
214   --enable-libxvid         enable Xvid encoding via xvidcore,
215                            native MPEG-4/Xvid encoder exists [no]
216   --enable-openal          enable OpenAL 1.1 capture support [no]
217   --enable-openssl         enable openssl [no]
218   --enable-zlib            enable zlib [autodetect]
219
220 Advanced options (experts only):
221   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
222   --enable-cross-compile   assume a cross-compiler is used
223   --sysroot=PATH           root of cross-build tree
224   --sysinclude=PATH        location of cross-build system headers
225   --target-os=OS           compiler targets OS [$target_os]
226   --target-exec=CMD        command to run executables on target
227   --target-path=DIR        path to view of build directory on target
228   --nm=NM                  use nm tool NM [$nm_default]
229   --ar=AR                  use archive tool AR [$ar_default]
230   --as=AS                  use assembler AS [$as_default]
231   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
232   --cc=CC                  use C compiler CC [$cc_default]
233   --cxx=CXX                use C compiler CXX [$cxx_default]
234   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
235   --ld=LD                  use linker LD [$ld_default]
236   --host-cc=HOSTCC         use host C compiler HOSTCC
237   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
238   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
239   --host-libs=HLIBS        use libs HLIBS when linking for host
240   --host-os=OS             compiler host OS [$target_os]
241   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
242   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
243   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
244   --extra-libs=ELIBS       add ELIBS [$ELIBS]
245   --extra-version=STRING   version string suffix []
246   --optflags=OPTFLAGS      override optimization-related compiler flags
247   --build-suffix=SUFFIX    library name suffix []
248   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
249   --progs-suffix=SUFFIX    program name suffix []
250   --arch=ARCH              select architecture [$arch]
251   --cpu=CPU                select the minimum required CPU (affects
252                            instruction selection, may crash on older CPUs)
253   --enable-pic             build position-independent code
254   --enable-sram            allow use of on-chip SRAM
255   --enable-thumb           compile for Thumb instruction set
256   --disable-symver         disable symbol versioning
257   --disable-fastdiv        disable table-based division
258   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
259   --disable-safe-bitstream-reader
260                            disable buffer boundary checking in bitreaders
261                            (faster, but may crash)
262   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
263
264 Optimization options (experts only):
265   --disable-asm            disable all assembler optimizations
266   --disable-altivec        disable AltiVec optimizations
267   --disable-amd3dnow       disable 3DNow! optimizations
268   --disable-amd3dnowext    disable 3DNow! extended optimizations
269   --disable-mmx            disable MMX optimizations
270   --disable-mmxext         disable MMXEXT optimizations
271   --disable-sse            disable SSE optimizations
272   --disable-ssse3          disable SSSE3 optimizations
273   --disable-avx            disable AVX optimizations
274   --disable-fma4           disable FMA4 optimizations
275   --disable-armv5te        disable armv5te optimizations
276   --disable-armv6          disable armv6 optimizations
277   --disable-armv6t2        disable armv6t2 optimizations
278   --disable-armvfp         disable ARM VFP optimizations
279   --disable-mmi            disable MMI optimizations
280   --disable-neon           disable NEON optimizations
281   --disable-vis            disable VIS optimizations
282   --disable-yasm           disable use of yasm assembler
283   --disable-mips32r2       disable MIPS32R2 optimizations
284   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
285   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
286   --disable-mipsfpu        disable floating point MIPS optimizations
287   --disable-fast-unaligned consider unaligned accesses slow
288   --postproc-version=V     build libpostproc version V.
289                            Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
290
291 Developer options (useful when working on FFmpeg itself):
292   --enable-coverage        build with test coverage instrumentation
293   --disable-debug          disable debugging symbols
294   --enable-debug=LEVEL     set the debug level [$debuglevel]
295   --disable-optimizations  disable compiler optimizations
296   --enable-extra-warnings  enable more compiler warnings
297   --disable-stripping      disable stripping of executables and shared libraries
298   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
299                            2 causes a slowdown at runtime.
300   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
301   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
302                            leaks and errors, using the specified valgrind binary.
303                            Cannot be combined with --target-exec
304   --samples=PATH           location of test samples for FATE, if not set use
305                            \$FATE_SAMPLES at make invocation time.
306   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
307                            should be used only for debugging purposes)
308   --enable-random          randomly enable/disable components
309   --disable-random
310   --enable-random=LIST     randomly enable/disable specific components or
311   --disable-random=LIST    component groups. LIST is a comma-separated list
312                            of NAME[:PROB] entries where NAME is a component
313                            (group) and PROB the probability associated with
314                            NAME (default 0.5).
315   --random-seed=VALUE      seed value for --enable/disable-random
316
317 NOTE: Object files are built at the place where configure is launched.
318 EOF
319   exit 0
320 }
321
322 quotes='""'
323
324 log(){
325     echo "$@" >> $logfile
326 }
327
328 log_file(){
329     log BEGIN $1
330     pr -n -t $1 >> $logfile
331     log END $1
332 }
333
334 echolog(){
335     log "$@"
336     echo "$@"
337 }
338
339 warn(){
340     log "WARNING: $*"
341     WARNINGS="${WARNINGS}WARNING: $*\n"
342 }
343
344 die(){
345     echolog "$@"
346     cat <<EOF
347
348 If you think configure made a mistake, make sure you are using the latest
349 version from Git.  If the latest version fails, report the problem to the
350 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
351 EOF
352     if disabled logging; then
353         cat <<EOF
354 Rerun configure with logging enabled (do not use --disable-logging), and
355 include the log this produces with your report.
356 EOF
357     else
358 cat <<EOF
359 Include the log file "$logfile" produced by configure as this will help
360 solving the problem.
361 EOF
362     fi
363     exit 1
364 }
365
366 # Avoid locale weirdness, besides we really just want to translate ASCII.
367 toupper(){
368     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
369 }
370
371 tolower(){
372     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
373 }
374
375 c_escape(){
376     echo "$*" | sed 's/["\\]/\\\0/g'
377 }
378
379 sh_quote(){
380     v=$(echo "$1" | sed "s/'/'\\\\''/g")
381     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
382     echo "$v"
383 }
384
385 cleanws(){
386     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
387 }
388
389 filter(){
390     pat=$1
391     shift
392     for v; do
393         eval "case $v in $pat) echo $v ;; esac"
394     done
395 }
396
397 filter_out(){
398     pat=$1
399     shift
400     for v; do
401         eval "case $v in $pat) ;; *) echo $v ;; esac"
402     done
403 }
404
405 map(){
406     m=$1
407     shift
408     for v; do eval $m; done
409 }
410
411 set_all(){
412     value=$1
413     shift
414     for var in $*; do
415         eval $var=$value
416     done
417 }
418
419 set_weak(){
420     value=$1
421     shift
422     for var; do
423         eval : \${$var:=$value}
424     done
425 }
426
427 set_safe(){
428     var=$1
429     shift
430     eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
431 }
432
433 get_safe(){
434     eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
435 }
436
437 pushvar(){
438     for var in $*; do
439         eval level=\${${var}_level:=0}
440         eval ${var}_${level}="\$$var"
441         eval ${var}_level=$(($level+1))
442     done
443 }
444
445 popvar(){
446     for var in $*; do
447         eval level=\${${var}_level:-0}
448         test $level = 0 && continue
449         eval level=$(($level-1))
450         eval $var="\${${var}_${level}}"
451         eval ${var}_level=$level
452         eval unset ${var}_${level}
453     done
454 }
455
456 enable(){
457     set_all yes $*
458 }
459
460 disable(){
461     set_all no $*
462 }
463
464 enable_weak(){
465     set_weak yes $*
466 }
467
468 disable_weak(){
469     set_weak no $*
470 }
471
472 enable_safe(){
473     for var; do
474         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
475     done
476 }
477
478 disable_safe(){
479     for var; do
480         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
481     done
482 }
483
484 do_enable_deep(){
485     for var; do
486         enabled $var && continue
487         eval sel="\$${var}_select"
488         eval sgs="\$${var}_suggest"
489         pushvar var sgs
490         enable_deep $sel
491         popvar sgs
492         enable_deep_weak $sgs
493         popvar var
494     done
495 }
496
497 enable_deep(){
498     do_enable_deep $*
499     enable $*
500 }
501
502 enable_deep_weak(){
503     do_enable_deep $*
504     enable_weak $*
505 }
506
507 enabled(){
508     test "${1#!}" = "$1" && op== || op=!=
509     eval test "x\$${1#!}" $op "xyes"
510 }
511
512 disabled(){
513     test "${1#!}" = "$1" && op== || op=!=
514     eval test "x\$${1#!}" $op "xno"
515 }
516
517 enabled_all(){
518     for opt; do
519         enabled $opt || return 1
520     done
521 }
522
523 disabled_all(){
524     for opt; do
525         disabled $opt || return 1
526     done
527 }
528
529 enabled_any(){
530     for opt; do
531         enabled $opt && return 0
532     done
533 }
534
535 disabled_any(){
536     for opt; do
537         disabled $opt && return 0
538     done
539     return 1
540 }
541
542 set_default(){
543     for opt; do
544         eval : \${$opt:=\$${opt}_default}
545     done
546 }
547
548 is_in(){
549     value=$1
550     shift
551     for var in $*; do
552         [ $var = $value ] && return 0
553     done
554     return 1
555 }
556
557 check_deps(){
558     for cfg; do
559         cfg="${cfg#!}"
560         enabled ${cfg}_checking && die "Circular dependency for $cfg."
561         disabled ${cfg}_checking && continue
562         enable ${cfg}_checking
563
564         eval dep_all="\$${cfg}_deps"
565         eval dep_any="\$${cfg}_deps_any"
566         eval dep_sel="\$${cfg}_select"
567         eval dep_sgs="\$${cfg}_suggest"
568         eval dep_ifa="\$${cfg}_if"
569         eval dep_ifn="\$${cfg}_if_any"
570
571         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
572         check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
573         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
574
575         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
576         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
577         enabled_all  $dep_all || disable $cfg
578         enabled_any  $dep_any || disable $cfg
579         disabled_any $dep_sel && disable $cfg
580
581         if enabled $cfg; then
582             eval dep_extralibs="\$${cfg}_extralibs"
583             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
584             enable_deep $dep_sel
585             enable_deep_weak $dep_sgs
586         fi
587
588         disable ${cfg}_checking
589     done
590 }
591
592 print_config_h(){
593     enabled $1 && v=1 || v=0
594     echo "#define $2 $v"
595 }
596
597 print_config_mak(){
598     enabled $1 && v= || v=!
599     echo "$v$2=yes"
600 }
601
602 print_config_asm(){
603     enabled $1 && v=1 || v=0
604     echo "%define $2 $v"
605 }
606
607 print_config(){
608     pfx=$1
609     files=$2
610     shift 2
611     for cfg; do
612         ucname="$(toupper $cfg)"
613         for f in $files; do
614             "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
615         done
616     done
617 }
618
619 print_enabled(){
620     test "$1" = -n && end=" " && shift || end="\n"
621     suf=$1
622     shift
623     for v; do
624         enabled $v && printf "%s$end" ${v%$suf};
625     done
626 }
627
628 append(){
629     var=$1
630     shift
631     eval "$var=\"\$$var $*\""
632 }
633
634 prepend(){
635     var=$1
636     shift
637     eval "$var=\"$* \$$var\""
638 }
639
640 add_cppflags(){
641     append CPPFLAGS "$@"
642 }
643
644 add_cflags(){
645     append CFLAGS $($cflags_filter "$@")
646 }
647
648 add_cxxflags(){
649     append CXXFLAGS $($cflags_filter "$@")
650 }
651
652 add_asflags(){
653     append ASFLAGS $($asflags_filter "$@")
654 }
655
656 add_ldflags(){
657     append LDFLAGS $($ldflags_filter "$@")
658 }
659
660 add_extralibs(){
661     prepend extralibs $($ldflags_filter "$@")
662 }
663
664 add_host_cflags(){
665     append host_cflags $($host_cflags_filter "$@")
666 }
667
668 add_host_ldflags(){
669     append host_ldflags $($host_ldflags_filter "$@")
670 }
671
672 check_cmd(){
673     log "$@"
674     "$@" >> $logfile 2>&1
675 }
676
677 cc_o(){
678     eval printf '%s\\n' $CC_O
679 }
680
681 cc_e(){
682     eval printf '%s\\n' $CC_E
683 }
684
685 check_cc(){
686     log check_cc "$@"
687     cat > $TMPC
688     log_file $TMPC
689     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
690 }
691
692 check_cxx(){
693     log check_cxx "$@"
694     cat > $TMPCPP
695     log_file $TMPCPP
696     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
697 }
698
699 check_cpp(){
700     log check_cpp "$@"
701     cat > $TMPC
702     log_file $TMPC
703     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
704 }
705
706 check_as(){
707     log check_as "$@"
708     cat > $TMPC
709     log_file $TMPC
710     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C -o $TMPO $TMPC
711 }
712
713 check_asm(){
714     log check_asm "$@"
715     name="$1"
716     code="$2"
717     shift 2
718     disable $name
719     check_as "$@" <<EOF && enable $name
720 void foo(void){ __asm__ volatile($code); }
721 EOF
722 }
723
724 check_yasm(){
725     log check_yasm "$@"
726     echo "$1" > $TMPS
727     log_file $TMPS
728     shift 1
729     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
730 }
731
732 check_ld(){
733     log check_ld "$@"
734     type=$1
735     shift 1
736     flags=''
737     libs=''
738     for f; do
739         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
740     done
741     check_$type $($cflags_filter $flags) || return
742     flags=$($ldflags_filter $flags)
743     libs=$($ldflags_filter $libs)
744     check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
745 }
746
747 check_code(){
748     log check_code "$@"
749     check=$1
750     headers=$2
751     code=$3
752     shift 3
753     {
754         for hdr in $headers; do
755             echo "#include <$hdr>"
756         done
757         echo "int main(void) { $code; return 0; }"
758     } | check_$check "$@"
759 }
760
761 check_cppflags(){
762     log check_cppflags "$@"
763     check_cc "$@" <<EOF && append CPPFLAGS "$@"
764 int x;
765 EOF
766 }
767
768 check_cflags(){
769     log check_cflags "$@"
770     set -- $($cflags_filter "$@")
771     check_cc "$@" <<EOF && append CFLAGS "$@"
772 int x;
773 EOF
774 }
775
776 check_cxxflags(){
777     log check_cxxflags "$@"
778     set -- $($cflags_filter "$@")
779     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
780 int x;
781 EOF
782 }
783
784 test_ldflags(){
785     log test_ldflags "$@"
786     check_ld "cc" "$@" <<EOF
787 int main(void){ return 0; }
788 EOF
789 }
790
791 check_ldflags(){
792     log check_ldflags "$@"
793     test_ldflags "$@" && add_ldflags "$@"
794 }
795
796 check_header(){
797     log check_header "$@"
798     header=$1
799     shift
800     disable_safe $header
801     check_cpp "$@" <<EOF && enable_safe $header
802 #include <$header>
803 int x;
804 EOF
805 }
806
807 check_func(){
808     log check_func "$@"
809     func=$1
810     shift
811     disable $func
812     check_ld "cc" "$@" <<EOF && enable $func
813 extern int $func();
814 int main(void){ $func(); }
815 EOF
816 }
817
818 check_mathfunc(){
819     log check_mathfunc "$@"
820     func=$1
821     shift
822     disable $func
823     check_ld "cc" "$@" <<EOF && enable $func
824 #include <math.h>
825 float foo(float f) { return $func(f); }
826 int main(void){ return (int) foo; }
827 EOF
828 }
829
830 check_func_headers(){
831     log check_func_headers "$@"
832     headers=$1
833     funcs=$2
834     shift 2
835     {
836         for hdr in $headers; do
837             echo "#include <$hdr>"
838         done
839         for func in $funcs; do
840             echo "long check_$func(void) { return (long) $func; }"
841         done
842         echo "int main(void) { return 0; }"
843     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
844 }
845
846 check_class_headers_cpp(){
847     log check_class_headers_cpp "$@"
848     headers=$1
849     classes=$2
850     shift 2
851     {
852         for hdr in $headers; do
853             echo "#include <$hdr>"
854         done
855         echo "int main(void) { "
856         i=1
857         for class in $classes; do
858             echo "$class obj$i;"
859             i=$(expr $i + 1)
860         done
861         echo "return 0; }"
862     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
863 }
864
865 check_cpp_condition(){
866     log check_cpp_condition "$@"
867     header=$1
868     condition=$2
869     shift 2
870     check_cpp "$@" <<EOF
871 #include <$header>
872 #if !($condition)
873 #error "unsatisfied condition: $condition"
874 #endif
875 EOF
876 }
877
878 check_lib(){
879     log check_lib "$@"
880     header="$1"
881     func="$2"
882     shift 2
883     check_header $header && check_func $func "$@" && add_extralibs "$@"
884 }
885
886 check_lib2(){
887     log check_lib2 "$@"
888     headers="$1"
889     funcs="$2"
890     shift 2
891     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
892 }
893
894 check_lib_cpp(){
895     log check_lib_cpp "$@"
896     headers="$1"
897     classes="$2"
898     shift 2
899     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
900 }
901
902 check_pkg_config(){
903     log check_pkg_config "$@"
904     pkg="$1"
905     headers="$2"
906     funcs="$3"
907     shift 3
908     $pkg_config --exists $pkg 2>/dev/null || return
909     pkg_cflags=$($pkg_config --cflags $pkg)
910     pkg_libs=$($pkg_config --libs $pkg)
911     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
912         set_safe ${pkg}_cflags $pkg_cflags   &&
913         set_safe ${pkg}_libs   $pkg_libs
914 }
915
916 check_exec(){
917     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
918 }
919
920 check_exec_crash(){
921     code=$(cat)
922
923     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
924     # are safe but may not be available everywhere.  Thus we use
925     # raise(SIGTERM) instead.  The check is run in a subshell so we
926     # can redirect the "Terminated" message from the shell.  SIGBUS
927     # is not defined by standard C so it is used conditionally.
928
929     (check_exec "$@") >> $logfile 2>&1 <<EOF
930 #include <signal.h>
931 static void sighandler(int sig){
932     raise(SIGTERM);
933 }
934 int func(void){
935     $code
936 }
937 int (*func_ptr)(void) = func;
938 int main(void){
939     signal(SIGILL, sighandler);
940     signal(SIGFPE, sighandler);
941     signal(SIGSEGV, sighandler);
942 #ifdef SIGBUS
943     signal(SIGBUS, sighandler);
944 #endif
945     return func_ptr();
946 }
947 EOF
948 }
949
950 check_type(){
951     log check_type "$@"
952     headers=$1
953     type=$2
954     shift 2
955     disable_safe "$type"
956     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
957 }
958
959 check_struct(){
960     log check_type "$@"
961     headers=$1
962     struct=$2
963     member=$3
964     shift 3
965     disable_safe "${struct}_${member}"
966     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
967         enable_safe "${struct}_${member}"
968 }
969
970 require(){
971     name="$1"
972     header="$2"
973     func="$3"
974     shift 3
975     check_lib $header $func "$@" || die "ERROR: $name not found"
976 }
977
978 require2(){
979     name="$1"
980     headers="$2"
981     func="$3"
982     shift 3
983     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
984 }
985
986 require_cpp(){
987     name="$1"
988     headers="$2"
989     classes="$3"
990     shift 3
991     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
992 }
993
994 require_pkg_config(){
995     pkg="$1"
996     check_pkg_config "$@" || die "ERROR: $pkg not found"
997     add_cflags    $(get_safe ${pkg}_cflags)
998     add_extralibs $(get_safe ${pkg}_libs)
999 }
1000
1001 check_host_cc(){
1002     log check_host_cc "$@"
1003     cat > $TMPC
1004     log_file $TMPC
1005     check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
1006 }
1007
1008 check_host_cflags(){
1009     log check_host_cflags "$@"
1010     set -- $($host_cflags_filter "$@")
1011     check_host_cc "$@" <<EOF && append host_cflags "$@"
1012 int x;
1013 EOF
1014 }
1015
1016 apply(){
1017     file=$1
1018     shift
1019     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1020 }
1021
1022 cp_if_changed(){
1023     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1024     mkdir -p "$(dirname $2)"
1025     cp -f "$1" "$2"
1026 }
1027
1028 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1029 # system-dependent things.
1030
1031 COMPONENT_LIST="
1032     bsfs
1033     decoders
1034     demuxers
1035     encoders
1036     filters
1037     hwaccels
1038     indevs
1039     muxers
1040     outdevs
1041     parsers
1042     protocols
1043 "
1044
1045 PROGRAM_LIST="
1046     ffplay
1047     ffprobe
1048     ffserver
1049     ffmpeg
1050 "
1051
1052 CONFIG_LIST="
1053     $COMPONENT_LIST
1054     $PROGRAM_LIST
1055     avcodec
1056     avdevice
1057     avfilter
1058     avformat
1059     avresample
1060     avisynth
1061     bzlib
1062     crystalhd
1063     dct
1064     doc
1065     dwt
1066     dxva2
1067     fast_unaligned
1068     fastdiv
1069     fft
1070     fontconfig
1071     frei0r
1072     gnutls
1073     gpl
1074     gray
1075     hardcoded_tables
1076     libaacplus
1077     libass
1078     libbluray
1079     libcaca
1080     libcdio
1081     libcelt
1082     libdc1394
1083     libfaac
1084     libfdk_aac
1085     libflite
1086     libfreetype
1087     libgsm
1088     libiec61883
1089     libilbc
1090     libmodplug
1091     libmp3lame
1092     libnut
1093     libopencore_amrnb
1094     libopencore_amrwb
1095     libopencv
1096     libopenjpeg
1097     libopus
1098     libpulse
1099     librtmp
1100     libschroedinger
1101     libspeex
1102     libstagefright_h264
1103     libtheora
1104     libutvideo
1105     libv4l2
1106     libvo_aacenc
1107     libvo_amrwbenc
1108     libvorbis
1109     libvpx
1110     libx264
1111     libxavs
1112     libxvid
1113     lsp
1114     mdct
1115     memalign_hack
1116     memory_poisoning
1117     network
1118     nonfree
1119     openal
1120     openssl
1121     pic
1122     postproc
1123     rdft
1124     runtime_cpudetect
1125     safe_bitstream_reader
1126     shared
1127     small
1128     sram
1129     static
1130     swresample
1131     swscale
1132     swscale_alpha
1133     thumb
1134     vaapi
1135     vda
1136     vdpau
1137     version3
1138     xmm_clobber_test
1139     x11grab
1140     zlib
1141 "
1142
1143 THREADS_LIST='
1144     pthreads
1145     w32threads
1146     os2threads
1147 '
1148
1149 ARCH_LIST='
1150     alpha
1151     arm
1152     avr32
1153     avr32_ap
1154     avr32_uc
1155     bfin
1156     ia64
1157     m68k
1158     mips
1159     mips64
1160     parisc
1161     ppc
1162     ppc64
1163     s390
1164     sh4
1165     sparc
1166     sparc64
1167     tomi
1168     x86
1169     x86_32
1170     x86_64
1171 '
1172
1173 ARCH_EXT_LIST='
1174     altivec
1175     amd3dnow
1176     amd3dnowext
1177     armv5te
1178     armv6
1179     armv6t2
1180     armvfp
1181     avx
1182     fma4
1183     mmi
1184     mmx
1185     mmxext
1186     neon
1187     ppc4xx
1188     sse
1189     ssse3
1190     vfpv3
1191     vis
1192     mipsfpu
1193     mips32r2
1194     mipsdspr1
1195     mipsdspr2
1196 '
1197
1198 HAVE_LIST_PUB='
1199     bigendian
1200     fast_unaligned
1201 '
1202
1203 HAVE_LIST="
1204     $ARCH_EXT_LIST
1205     $HAVE_LIST_PUB
1206     $THREADS_LIST
1207     aligned_malloc
1208     aligned_stack
1209     alsa_asoundlib_h
1210     altivec_h
1211     arpa_inet_h
1212     asm_mod_y
1213     asm_types_h
1214     attribute_may_alias
1215     attribute_packed
1216     cbrtf
1217     clock_gettime
1218     closesocket
1219     cmov
1220     cpuid
1221     dcbzl
1222     dev_bktr_ioctl_bt848_h
1223     dev_bktr_ioctl_meteor_h
1224     dev_ic_bt8xx_h
1225     dev_video_bktr_ioctl_bt848_h
1226     dev_video_meteor_ioctl_meteor_h
1227     dlfcn_h
1228     dlopen
1229     dos_paths
1230     dxva_h
1231     ebp_available
1232     ebx_available
1233     exp2
1234     exp2f
1235     fast_64bit
1236     fast_clz
1237     fast_cmov
1238     fcntl
1239     fork
1240     getaddrinfo
1241     gethrtime
1242     getopt
1243     GetProcessAffinityMask
1244     GetProcessMemoryInfo
1245     GetProcessTimes
1246     GetSystemTimeAsFileTime
1247     getrusage
1248     gettimeofday
1249     glob
1250     gnu_as
1251     ibm_asm
1252     inet_aton
1253     inline_asm
1254     isatty
1255     isinf
1256     isnan
1257     jack_port_get_latency_range
1258     kbhit
1259     ldbrx
1260     libdc1394_1
1261     libdc1394_2
1262     llrint
1263     llrintf
1264     local_aligned_16
1265     local_aligned_8
1266     localtime_r
1267     log2
1268     log2f
1269     loongson
1270     lrint
1271     lrintf
1272     lzo1x_999_compress
1273     machine_ioctl_bt848_h
1274     machine_ioctl_meteor_h
1275     makeinfo
1276     malloc_h
1277     MapViewOfFile
1278     memalign
1279     mkstemp
1280     mm_empty
1281     mmap
1282     nanosleep
1283     netinet_sctp_h
1284     PeekNamedPipe
1285     pod2man
1286     poll_h
1287     posix_memalign
1288     pthread_cancel
1289     rdtsc
1290     rint
1291     round
1292     roundf
1293     rweflags
1294     sched_getaffinity
1295     sdl
1296     sdl_video_size
1297     setmode
1298     setrlimit
1299     Sleep
1300     sndio_h
1301     socklen_t
1302     soundcard_h
1303     strerror_r
1304     strptime
1305     struct_addrinfo
1306     struct_group_source_req
1307     struct_ip_mreq_source
1308     struct_ipv6_mreq
1309     struct_pollfd
1310     struct_rusage_ru_maxrss
1311     struct_sockaddr_in6
1312     struct_sockaddr_sa_len
1313     struct_sockaddr_storage
1314     struct_v4l2_frmivalenum_discrete
1315     symver
1316     symver_asm_label
1317     symver_gnu_asm
1318     sysconf
1319     sysctl
1320     sys_mman_h
1321     sys_param_h
1322     sys_resource_h
1323     sys_select_h
1324     sys_soundcard_h
1325     sys_time_h
1326     sys_videoio_h
1327     termios_h
1328     texi2html
1329     threads
1330     trunc
1331     truncf
1332     unistd_h
1333     usleep
1334     vfp_args
1335     VirtualAlloc
1336     windows_h
1337     winsock2_h
1338     xform_asm
1339     xgetbv
1340     xmm_clobbers
1341     yasm
1342 "
1343
1344 # options emitted with CONFIG_ prefix but not available on command line
1345 CONFIG_EXTRA="
1346     aandcttables
1347     ac3dsp
1348     avutil
1349     gcrypt
1350     golomb
1351     gplv3
1352     h264chroma
1353     h264dsp
1354     h264pred
1355     h264qpel
1356     huffman
1357     lgplv3
1358     lpc
1359     mpegaudiodsp
1360     nettle
1361     rtpdec
1362     sinewin
1363     vp3dsp
1364 "
1365
1366 CMDLINE_SELECT="
1367     $ARCH_EXT_LIST
1368     $CONFIG_LIST
1369     $THREADS_LIST
1370     asm
1371     coverage
1372     cross_compile
1373     debug
1374     extra_warnings
1375     logging
1376     optimizations
1377     stripping
1378     symver
1379     yasm
1380 "
1381
1382 PATHS_LIST='
1383     bindir
1384     datadir
1385     incdir
1386     libdir
1387     mandir
1388     prefix
1389     shlibdir
1390 '
1391
1392 CMDLINE_SET="
1393     $PATHS_LIST
1394     ar
1395     arch
1396     as
1397     assert_level
1398     build_suffix
1399     cc
1400     cpu
1401     cross_prefix
1402     cxx
1403     dep_cc
1404     extra_version
1405     host_cc
1406     host_cflags
1407     host_ldflags
1408     host_libs
1409     host_os
1410     install
1411     ld
1412     logfile
1413     malloc_prefix
1414     nm
1415     optflags
1416     pkg_config
1417     postproc_version
1418     progs_suffix
1419     random_seed
1420     samples
1421     strip
1422     sysinclude
1423     sysroot
1424     target_exec
1425     target_os
1426     target_path
1427     valgrind
1428     yasmexe
1429 "
1430
1431 CMDLINE_APPEND="
1432     extra_cflags
1433     extra_cxxflags
1434 "
1435
1436 # code dependency declarations
1437
1438 # architecture extensions
1439
1440 armv5te_deps="arm"
1441 armv6_deps="arm"
1442 armv6t2_deps="arm"
1443 armvfp_deps="arm"
1444 neon_deps="arm"
1445 vfpv3_deps="armvfp"
1446
1447 mipsfpu_deps="mips"
1448 mips32r2_deps="mips"
1449 mipsdspr1_deps="mips"
1450 mipsdspr2_deps="mips"
1451 mmi_deps="mips"
1452
1453 altivec_deps="ppc"
1454 ppc4xx_deps="ppc"
1455
1456 vis_deps="sparc"
1457
1458 x86_64_suggest="cmov fast_cmov"
1459 amd3dnow_deps="mmx"
1460 amd3dnowext_deps="amd3dnow"
1461 mmx_deps="x86"
1462 mmxext_deps="mmx"
1463 sse_deps="mmx"
1464 ssse3_deps="sse"
1465 avx_deps="ssse3"
1466 fma4_deps="avx"
1467
1468 aligned_stack_if_any="ppc x86"
1469 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1470 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1471 fast_unaligned_if_any="armv6 ppc x86"
1472
1473 inline_asm_deps="!tms470"
1474 need_memalign="altivec neon sse"
1475
1476 symver_if_any="symver_asm_label symver_gnu_asm"
1477
1478 # subsystems
1479 dct_select="rdft"
1480 mdct_select="fft"
1481 rdft_select="fft"
1482 mpegaudiodsp_select="dct"
1483
1484 # decoders / encoders / hardware accelerators
1485 aac_decoder_select="mdct sinewin"
1486 aac_encoder_select="mdct sinewin"
1487 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1488 ac3_decoder_select="mdct ac3dsp ac3_parser"
1489 ac3_encoder_select="mdct ac3dsp"
1490 ac3_fixed_encoder_select="mdct ac3dsp"
1491 alac_encoder_select="lpc"
1492 amrnb_decoder_select="lsp"
1493 amrwb_decoder_select="lsp"
1494 amv_encoder_select="aandcttables"
1495 atrac1_decoder_select="mdct sinewin"
1496 atrac3_decoder_select="mdct"
1497 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1498 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1499 cavs_decoder_select="golomb"
1500 cook_decoder_select="mdct sinewin"
1501 cscd_decoder_suggest="zlib"
1502 dca_decoder_select="mdct"
1503 dirac_decoder_select="dwt golomb"
1504 dnxhd_encoder_select="aandcttables"
1505 dxa_decoder_select="zlib"
1506 eac3_decoder_select="ac3_decoder"
1507 eac3_encoder_select="mdct ac3dsp"
1508 eamad_decoder_select="aandcttables"
1509 eatgq_decoder_select="aandcttables"
1510 eatqi_decoder_select="aandcttables"
1511 exr_decoder_select="zlib"
1512 ffv1_decoder_select="golomb"
1513 flac_decoder_select="golomb"
1514 flac_encoder_select="golomb lpc"
1515 flashsv_decoder_select="zlib"
1516 flashsv_encoder_select="zlib"
1517 flashsv2_encoder_select="zlib"
1518 flashsv2_decoder_select="zlib"
1519 flv_decoder_select="h263_decoder"
1520 flv_encoder_select="h263_encoder"
1521 fraps_decoder_select="huffman"
1522 h261_encoder_select="aandcttables"
1523 h263_decoder_select="h263_parser"
1524 h263_encoder_select="aandcttables"
1525 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1526 h263i_decoder_select="h263_decoder"
1527 h263p_encoder_select="h263_encoder"
1528 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1529 h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1530 h264_dxva2_hwaccel_deps="dxva2api_h"
1531 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1532 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1533 h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1534 h264_vda_hwaccel_select="vda h264_decoder"
1535 h264_vdpau_decoder_select="vdpau h264_decoder"
1536 iac_decoder_select="fft mdct sinewin"
1537 imc_decoder_select="fft mdct sinewin"
1538 jpegls_decoder_select="golomb"
1539 jpegls_encoder_select="golomb"
1540 ljpeg_encoder_select="aandcttables"
1541 loco_decoder_select="golomb"
1542 mjpeg_encoder_select="aandcttables"
1543 mlp_decoder_select="mlp_parser"
1544 mp1_decoder_select="mpegaudiodsp"
1545 mp1float_decoder_select="mpegaudiodsp"
1546 mp2_decoder_select="mpegaudiodsp"
1547 mp2float_decoder_select="mpegaudiodsp"
1548 mp3_decoder_select="mpegaudiodsp"
1549 mp3adu_decoder_select="mpegaudiodsp"
1550 mp3adufloat_decoder_select="mpegaudiodsp"
1551 mp3float_decoder_select="mpegaudiodsp"
1552 mp3on4_decoder_select="mpegaudiodsp"
1553 mp3on4float_decoder_select="mpegaudiodsp"
1554 mpc7_decoder_select="mpegaudiodsp"
1555 mpc8_decoder_select="mpegaudiodsp"
1556 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1557 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1558 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1559 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1560 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1561 mpeg1video_encoder_select="aandcttables"
1562 mpeg2_crystalhd_decoder_select="crystalhd"
1563 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1564 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1565 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1566 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1567 mpeg2video_encoder_select="aandcttables"
1568 mpeg4_crystalhd_decoder_select="crystalhd"
1569 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1570 mpeg4_encoder_select="h263_encoder"
1571 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1572 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1573 msmpeg4_crystalhd_decoder_select="crystalhd"
1574 msmpeg4v1_decoder_select="h263_decoder"
1575 msmpeg4v1_encoder_select="h263_encoder"
1576 msmpeg4v2_decoder_select="h263_decoder"
1577 msmpeg4v2_encoder_select="h263_encoder"
1578 msmpeg4v3_decoder_select="h263_decoder"
1579 msmpeg4v3_encoder_select="h263_encoder"
1580 nellymoser_decoder_select="mdct sinewin"
1581 nellymoser_encoder_select="mdct sinewin"
1582 png_decoder_select="zlib"
1583 png_encoder_select="zlib"
1584 qcelp_decoder_select="lsp"
1585 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1586 ra_144_encoder_select="lpc"
1587 ralf_decoder_select="golomb"
1588 rv10_decoder_select="h263_decoder"
1589 rv10_encoder_select="h263_encoder"
1590 rv20_decoder_select="h263_decoder"
1591 rv20_encoder_select="h263_encoder"
1592 rv30_decoder_select="golomb h264chroma h264pred h264qpel"
1593 rv40_decoder_select="golomb h264chroma h264pred h264qpel"
1594 shorten_decoder_select="golomb"
1595 sipr_decoder_select="lsp"
1596 snow_decoder_select="dwt"
1597 snow_encoder_select="aandcttables dwt"
1598 sonic_decoder_select="golomb"
1599 sonic_encoder_select="golomb"
1600 sonic_ls_encoder_select="golomb"
1601 svq1_encoder_select="aandcttables"
1602 svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1603 svq3_decoder_suggest="zlib"
1604 theora_decoder_select="vp3_decoder"
1605 tiff_decoder_suggest="zlib"
1606 tiff_encoder_suggest="zlib"
1607 tscc_decoder_select="zlib"
1608 twinvq_decoder_select="mdct lsp sinewin"
1609 vc1_crystalhd_decoder_select="crystalhd"
1610 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1611 vc1_dxva2_hwaccel_deps="dxva2api_h"
1612 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1613 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1614 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1615 vc1image_decoder_select="vc1_decoder"
1616 vorbis_decoder_select="mdct"
1617 vorbis_encoder_select="mdct"
1618 vp3_decoder_select="vp3dsp"
1619 vp5_decoder_select="vp3dsp"
1620 vp6_decoder_select="huffman vp3dsp"
1621 vp6a_decoder_select="vp6_decoder"
1622 vp6f_decoder_select="vp6_decoder"
1623 vp8_decoder_select="h264pred h264qpel"
1624 wmapro_decoder_select="mdct sinewin"
1625 wmav1_decoder_select="mdct sinewin"
1626 wmav1_encoder_select="mdct sinewin"
1627 wmav2_decoder_select="mdct sinewin"
1628 wmav2_encoder_select="mdct sinewin"
1629 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1630 wmv1_decoder_select="h263_decoder"
1631 wmv1_encoder_select="h263_encoder"
1632 wmv2_decoder_select="h263_decoder"
1633 wmv2_encoder_select="h263_encoder"
1634 wmv3_decoder_select="vc1_decoder"
1635 wmv3_crystalhd_decoder_select="crystalhd"
1636 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1637 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1638 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1639 wmv3image_decoder_select="wmv3_decoder"
1640 zerocodec_decoder_select="zlib"
1641 zlib_decoder_select="zlib"
1642 zlib_encoder_select="zlib"
1643 zmbv_decoder_select="zlib"
1644 zmbv_encoder_select="zlib"
1645
1646 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1647 vaapi_deps="va_va_h"
1648 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1649 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1650
1651 # parsers
1652 h264_parser_select="golomb h264dsp h264pred"
1653
1654 # external libraries
1655 libaacplus_encoder_deps="libaacplus"
1656 libcelt_decoder_deps="libcelt"
1657 libfaac_encoder_deps="libfaac"
1658 libfdk_aac_encoder_deps="libfdk_aac"
1659 libgsm_decoder_deps="libgsm"
1660 libgsm_encoder_deps="libgsm"
1661 libgsm_ms_decoder_deps="libgsm"
1662 libgsm_ms_encoder_deps="libgsm"
1663 libilbc_decoder_deps="libilbc"
1664 libilbc_encoder_deps="libilbc"
1665 libmodplug_demuxer_deps="libmodplug"
1666 libmp3lame_encoder_deps="libmp3lame"
1667 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1668 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1669 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1670 libopenjpeg_decoder_deps="libopenjpeg"
1671 libopenjpeg_encoder_deps="libopenjpeg"
1672 libopus_decoder_deps="libopus"
1673 libschroedinger_decoder_deps="libschroedinger"
1674 libschroedinger_encoder_deps="libschroedinger"
1675 libspeex_decoder_deps="libspeex"
1676 libspeex_encoder_deps="libspeex"
1677 libstagefright_h264_decoder_deps="libstagefright_h264"
1678 libtheora_encoder_deps="libtheora"
1679 libvo_aacenc_encoder_deps="libvo_aacenc"
1680 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1681 libvorbis_decoder_deps="libvorbis"
1682 libvorbis_encoder_deps="libvorbis"
1683 libvpx_decoder_deps="libvpx"
1684 libvpx_encoder_deps="libvpx"
1685 libx264_encoder_deps="libx264"
1686 libx264rgb_encoder_deps="libx264"
1687 libxavs_encoder_deps="libxavs"
1688 libxvid_encoder_deps="libxvid"
1689 libutvideo_decoder_deps="libutvideo"
1690 libutvideo_encoder_deps="libutvideo"
1691
1692 # demuxers / muxers
1693 ac3_demuxer_select="ac3_parser"
1694 asf_stream_muxer_select="asf_muxer"
1695 avisynth_demuxer_deps="avisynth"
1696 dirac_demuxer_select="dirac_parser"
1697 eac3_demuxer_select="ac3_parser"
1698 flac_demuxer_select="flac_parser"
1699 ipod_muxer_select="mov_muxer"
1700 libnut_demuxer_deps="libnut"
1701 libnut_muxer_deps="libnut"
1702 matroska_audio_muxer_select="matroska_muxer"
1703 matroska_demuxer_suggest="zlib bzlib"
1704 mov_demuxer_suggest="zlib"
1705 mp3_demuxer_select="mpegaudio_parser"
1706 mp4_muxer_select="mov_muxer"
1707 mpegts_muxer_select="adts_muxer latm_muxer"
1708 mpegtsraw_demuxer_select="mpegts_demuxer"
1709 mxf_d10_muxer_select="mxf_muxer"
1710 ogg_demuxer_select="golomb"
1711 psp_muxer_select="mov_muxer"
1712 rtp_demuxer_select="sdp_demuxer"
1713 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1714 rtsp_demuxer_select="http_protocol rtpdec"
1715 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1716 sap_demuxer_select="sdp_demuxer"
1717 sap_muxer_select="rtp_muxer rtp_protocol"
1718 sdp_demuxer_select="rtpdec"
1719 spdif_muxer_select="aac_parser"
1720 tg2_muxer_select="mov_muxer"
1721 tgp_muxer_select="mov_muxer"
1722 w64_demuxer_deps="wav_demuxer"
1723
1724 # indevs / outdevs
1725 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1726 alsa_outdev_deps="alsa_asoundlib_h"
1727 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1728 caca_outdev_deps="libcaca"
1729 dshow_indev_deps="IBaseFilter"
1730 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1731 dv1394_indev_deps="dv1394 dv_demuxer"
1732 fbdev_indev_deps="linux_fb_h"
1733 iec61883_indev_deps="libiec61883"
1734 jack_indev_deps="jack_jack_h sem_timedwait"
1735 lavfi_indev_deps="avfilter"
1736 libcdio_indev_deps="libcdio"
1737 libdc1394_indev_deps="libdc1394"
1738 libv4l2_indev_deps="libv4l2"
1739 openal_indev_deps="openal"
1740 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1741 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1742 pulse_indev_deps="libpulse"
1743 sdl_outdev_deps="sdl"
1744 sndio_indev_deps="sndio_h"
1745 sndio_outdev_deps="sndio_h"
1746 v4l_indev_deps="linux_videodev_h"
1747 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1748 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1749 vfwcap_indev_extralibs="-lavicap32"
1750 x11grab_indev_deps="x11grab"
1751
1752 # protocols
1753 bluray_protocol_deps="libbluray"
1754 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1755 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1756 ffrtmpcrypt_protocol_select="tcp_protocol"
1757 ffrtmphttp_protocol_deps="!librtmp_protocol"
1758 ffrtmphttp_protocol_select="http_protocol"
1759 gopher_protocol_deps="network"
1760 httpproxy_protocol_deps="network"
1761 httpproxy_protocol_select="tcp_protocol"
1762 http_protocol_deps="network"
1763 http_protocol_select="tcp_protocol"
1764 https_protocol_select="tls_protocol"
1765 librtmp_protocol_deps="librtmp"
1766 librtmpe_protocol_deps="librtmp"
1767 librtmps_protocol_deps="librtmp"
1768 librtmpt_protocol_deps="librtmp"
1769 librtmpte_protocol_deps="librtmp"
1770 mmsh_protocol_select="http_protocol"
1771 mmst_protocol_deps="network"
1772 rtmp_protocol_deps="!librtmp_protocol"
1773 rtmp_protocol_select="tcp_protocol"
1774 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1775 rtmps_protocol_deps="!librtmp_protocol"
1776 rtmps_protocol_select="tls_protocol"
1777 rtmpt_protocol_select="ffrtmphttp_protocol"
1778 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1779 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1780 rtp_protocol_select="udp_protocol"
1781 sctp_protocol_deps="network netinet_sctp_h"
1782 tcp_protocol_deps="network"
1783 tls_protocol_deps_any="openssl gnutls"
1784 tls_protocol_select="tcp_protocol"
1785 udp_protocol_deps="network"
1786
1787 # filters
1788 aconvert_filter_deps="swresample"
1789 amovie_filter_deps="avcodec avformat"
1790 aresample_filter_deps="swresample"
1791 ass_filter_deps="libass"
1792 asyncts_filter_deps="avresample"
1793 atempo_filter_deps="avcodec rdft"
1794 blackframe_filter_deps="gpl"
1795 boxblur_filter_deps="gpl"
1796 colormatrix_filter_deps="gpl"
1797 cropdetect_filter_deps="gpl"
1798 delogo_filter_deps="gpl"
1799 deshake_filter_deps="avcodec"
1800 drawtext_filter_deps="libfreetype"
1801 flite_filter_deps="libflite"
1802 frei0r_filter_deps="frei0r dlopen"
1803 frei0r_filter_extralibs='$ldl'
1804 frei0r_src_filter_deps="frei0r dlopen"
1805 frei0r_src_filter_extralibs='$ldl'
1806 hqdn3d_filter_deps="gpl"
1807 movie_filter_deps="avcodec avformat"
1808 mp_filter_deps="gpl avcodec swscale postproc"
1809 mptestsrc_filter_deps="gpl"
1810 negate_filter_deps="lut_filter"
1811 resample_filter_deps="avresample"
1812 ocv_filter_deps="libopencv"
1813 pan_filter_deps="swresample"
1814 removelogo_filter_deps="avcodec avformat swscale"
1815 scale_filter_deps="swscale"
1816 select_filter_deps="avcodec"
1817 super2xsai_filter_deps="gpl"
1818 tinterlace_filter_deps="gpl"
1819 yadif_filter_deps="gpl"
1820
1821 # libraries
1822 avdevice_deps="avcodec avformat"
1823 avformat_deps="avcodec"
1824 postproc_deps="gpl"
1825
1826 # programs
1827 ffmpeg_deps="avcodec avfilter avformat swscale swresample"
1828 ffmpeg_select="buffersink_filter format_filter aformat_filter
1829                setpts_filter null_filter anull_filter abuffersink_filter"
1830 ffplay_deps="avcodec avformat swscale swresample sdl"
1831 ffplay_select="buffersink_filter rdft"
1832 ffprobe_deps="avcodec avformat"
1833 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1834 ffserver_extralibs='$ldl'
1835
1836 doc_deps_any="texi2html makeinfo pod2man"
1837
1838 # tests
1839 colormatrix1_test_deps="colormatrix_filter"
1840 colormatrix2_test_deps="colormatrix_filter"
1841 flashsv2_test_deps="zlib"
1842 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1843 mpng_test_deps="zlib"
1844 pp_test_deps="mp_filter"
1845 pp2_test_deps="mp_filter"
1846 pp3_test_deps="mp_filter"
1847 pp4_test_deps="mp_filter"
1848 pp5_test_deps="mp_filter"
1849 pp6_test_deps="mp_filter"
1850 seek_lavf_mxf_d10_test_deps="mxf_d10_test"
1851 zlib_test_deps="zlib"
1852 zmbv_test_deps="zlib"
1853
1854 test_deps(){
1855     suf1=$1
1856     suf2=$2
1857     shift 2
1858     for v; do
1859         dep=${v%=*}
1860         tests=${v#*=}
1861         for name in ${tests}; do
1862             append ${name}_test_deps ${dep}$suf1 ${dep}$suf2
1863         done
1864     done
1865 }
1866
1867 test_deps _muxer _demuxer                                               \
1868     aiff                                                                \
1869     pcm_alaw=alaw                                                       \
1870     asf                                                                 \
1871     au                                                                  \
1872     avi                                                                 \
1873     dv=dv_fmt                                                           \
1874     ffm                                                                 \
1875     flv=flv_fmt                                                         \
1876     gxf                                                                 \
1877     matroska=mkv                                                        \
1878     mmf                                                                 \
1879     mov="mov ismv"                                                      \
1880     pcm_mulaw=mulaw                                                     \
1881     mxf="mxf mxf_d10"                                                   \
1882     nut                                                                 \
1883     ogg="ogg ogg_vp3"                                                   \
1884     rawvideo=pixfmt                                                     \
1885     rm                                                                  \
1886     swf                                                                 \
1887     mpegts=ts                                                           \
1888     voc                                                                 \
1889     wav                                                                 \
1890     yuv4mpegpipe=yuv4mpeg                                               \
1891
1892 # default parameters
1893
1894 logfile="config.log"
1895
1896 # installation paths
1897 prefix_default="/usr/local"
1898 bindir_default='${prefix}/bin'
1899 datadir_default='${prefix}/share/ffmpeg'
1900 incdir_default='${prefix}/include'
1901 libdir_default='${prefix}/lib'
1902 mandir_default='${prefix}/share/man'
1903 shlibdir_default="$libdir_default"
1904 postproc_version_default="current"
1905
1906 # toolchain
1907 ar_default="ar"
1908 cc_default="gcc"
1909 cxx_default="g++"
1910 host_cc_default="gcc"
1911 install="install"
1912 ln_s="ln -sf"
1913 nm_default="nm"
1914 objformat="elf"
1915 pkg_config_default=pkg-config
1916 ranlib="ranlib"
1917 strip_default="strip"
1918 yasmexe_default="yasm"
1919
1920 nm_opts='-g'
1921 nogas=":"
1922
1923 # machine
1924 arch_default=$(uname -m)
1925 cpu="generic"
1926
1927 # OS
1928 target_os_default=$(tolower $(uname -s))
1929 host_os=$target_os_default
1930
1931 # alternative libpostproc version
1932 ALT_PP_VER_MAJOR=51
1933 ALT_PP_VER_MINOR=2
1934 ALT_PP_VER_MICRO=101
1935 ALT_PP_VER=$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO
1936
1937 # configurable options
1938 enable $PROGRAM_LIST
1939
1940 enable avcodec
1941 enable avdevice
1942 enable avfilter
1943 enable avformat
1944 enable avutil
1945 enable postproc
1946 enable stripping
1947 enable swresample
1948 enable swscale
1949
1950 enable asm
1951 enable debug
1952 enable doc
1953 enable fastdiv
1954 enable network
1955 enable optimizations
1956 enable safe_bitstream_reader
1957 enable static
1958 enable swscale_alpha
1959
1960 # build settings
1961 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1962 FFSERVERLDFLAGS=-Wl,-E
1963 LIBPREF="lib"
1964 LIBSUF=".a"
1965 FULLNAME='$(NAME)$(BUILDSUF)'
1966 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1967 SLIBPREF="lib"
1968 SLIBSUF=".so"
1969 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1970 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1971 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1972 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1973 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1974 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1975
1976 asflags_filter=echo
1977 cflags_filter=echo
1978 ldflags_filter=echo
1979
1980 AS_C='-c'
1981 AS_O='-o $@'
1982 CC_C='-c'
1983 CC_E='-E -o $@'
1984 CC_O='-o $@'
1985 CXX_C='-c'
1986 CXX_O='-o $@'
1987 LD_O='-o $@'
1988 HOSTCC_C='-c'
1989 HOSTCC_O='-o $@'
1990
1991 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
1992 host_libs='-lm'
1993 host_cflags_filter=echo
1994 host_ldflags_filter=echo
1995
1996 target_path='$(CURDIR)'
1997
1998 # since the object filename is not given with the -MM flag, the compiler
1999 # is only able to print the basename, and we must add the path ourselves
2000 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2001 DEPFLAGS='-MM'
2002
2003 # find source path
2004 if test -f configure; then
2005     source_path=.
2006 else
2007     source_path=$(cd $(dirname "$0"); pwd)
2008     echo "$source_path" | grep -q '[[:blank:]]' &&
2009         die "Out of tree builds are impossible with whitespace in source path."
2010     test -e "$source_path/config.h" &&
2011         die "Out of tree builds are impossible with config.h in source dir."
2012 fi
2013
2014 for v in "$@"; do
2015     r=${v#*=}
2016     l=${v%"$r"}
2017     r=$(sh_quote "$r")
2018     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2019 done
2020
2021 find_things(){
2022     thing=$1
2023     pattern=$2
2024     file=$source_path/$3
2025     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2026 }
2027
2028 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2029 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2030 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2031 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2032 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2033 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2034 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2035 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2036 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2037 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2038 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2039
2040 ALL_COMPONENTS="
2041     $BSF_LIST
2042     $DECODER_LIST
2043     $DEMUXER_LIST
2044     $ENCODER_LIST
2045     $FILTER_LIST
2046     $HWACCEL_LIST
2047     $INDEV_LIST
2048     $MUXER_LIST
2049     $OUTDEV_LIST
2050     $PARSER_LIST
2051     $PROTOCOL_LIST
2052 "
2053
2054 find_tests(){
2055     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
2056 }
2057
2058 LAVF_FATE_TESTS=$(find_tests lavf-fate)
2059 LAVF_TESTS=$(find_tests lavf)
2060 LAVFI_TESTS=$(find_tests lavfi)
2061 SEEK_TESTS=$(find_tests seek seek_)
2062
2063 ALL_TESTS="$LAVF_FATE_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS"
2064
2065 for n in $COMPONENT_LIST; do
2066     v=$(toupper ${n%s})_LIST
2067     eval enable \$$v
2068     eval ${n}_if_any="\$$v"
2069 done
2070
2071 enable $ARCH_EXT_LIST $ALL_TESTS
2072
2073 die_unknown(){
2074     echo "Unknown option \"$1\"."
2075     echo "See $0 --help for available options."
2076     exit 1
2077 }
2078
2079 show_list() {
2080     suffix=_$1
2081     shift
2082     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
2083     exit 0
2084 }
2085
2086 rand_list(){
2087     IFS=', '
2088     set -- $*
2089     unset IFS
2090     for thing; do
2091         comp=${thing%:*}
2092         prob=${thing#$comp}
2093         prob=${prob#:}
2094         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2095         echo "prob ${prob:-0.5}"
2096         printf '%s\n' $comp
2097     done
2098 }
2099
2100 do_random(){
2101     action=$1
2102     shift
2103     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2104     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2105 }
2106
2107 for opt do
2108     optval="${opt#*=}"
2109     case "$opt" in
2110     --extra-ldflags=*) add_ldflags $optval
2111     ;;
2112     --extra-libs=*) add_extralibs $optval
2113     ;;
2114     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
2115     ;;
2116     --enable-debug=*) debuglevel="$optval"
2117     ;;
2118     --disable-everything)
2119     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2120     ;;
2121     --enable-random|--disable-random)
2122     action=${opt%%-random}
2123     do_random ${action#--} $COMPONENT_LIST
2124     ;;
2125     --enable-random=*|--disable-random=*)
2126     action=${opt%%-random=*}
2127     do_random ${action#--} $optval
2128     ;;
2129     --enable-*=*|--disable-*=*)
2130     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2131     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2132     eval list=\$$(toupper $thing)_LIST
2133     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2134     $action $(filter "$name" $list)
2135     ;;
2136     --enable-?*|--disable-?*)
2137     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2138     if is_in $option $COMPONENT_LIST; then
2139         test $action = disable && action=unset
2140         eval $action \$$(toupper ${option%s})_LIST
2141     elif is_in $option $CMDLINE_SELECT; then
2142         $action $option
2143     else
2144         die_unknown $opt
2145     fi
2146     ;;
2147     --list-*)
2148         NAME="${opt#--list-}"
2149         is_in $NAME $COMPONENT_LIST || die_unknown $opt
2150         NAME=${NAME%s}
2151         eval show_list $NAME \$$(toupper $NAME)_LIST
2152     ;;
2153     --help|-h) show_help
2154     ;;
2155     *)
2156     optname="${opt%%=*}"
2157     optname="${optname#--}"
2158     optname=$(echo "$optname" | sed 's/-/_/g')
2159     if is_in $optname $CMDLINE_SET; then
2160         eval $optname='$optval'
2161     elif is_in $optname $CMDLINE_APPEND; then
2162         append $optname "$optval"
2163     else
2164          die_unknown $opt
2165     fi
2166     ;;
2167     esac
2168 done
2169
2170 disabled logging && logfile=/dev/null
2171
2172 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2173 set >> $logfile
2174
2175 test -n "$cross_prefix" && enable cross_compile
2176
2177 if enabled cross_compile; then
2178     test -n "$arch" && test -n "$target_os" ||
2179         die "Must specify target arch and OS when cross-compiling"
2180 fi
2181
2182 set_default arch target_os postproc_version
2183
2184 # Check if we should build alternative libpostproc version instead of current
2185 if   test "$postproc_version" = $ALT_PP_VER; then
2186   LIBPOSTPROC_VERSION=$ALT_PP_VER
2187   LIBPOSTPROC_VERSION_MAJOR=$ALT_PP_VER_MAJOR
2188   LIBPOSTPROC_VERSION_MINOR=$ALT_PP_VER_MINOR
2189   LIBPOSTPROC_VERSION_MICRO=$ALT_PP_VER_MICRO
2190 elif test "$postproc_version" != current; then
2191   die "Invalid argument to --postproc-version. See --help output."
2192 fi
2193
2194 ar_default="${cross_prefix}${ar_default}"
2195 cc_default="${cross_prefix}${cc_default}"
2196 cxx_default="${cross_prefix}${cxx_default}"
2197 nm_default="${cross_prefix}${nm_default}"
2198 pkg_config_default="${cross_prefix}${pkg_config_default}"
2199 ranlib="${cross_prefix}${ranlib}"
2200 strip_default="${cross_prefix}${strip_default}"
2201
2202 sysinclude_default="${sysroot}/usr/include"
2203
2204 set_default cc cxx nm pkg_config strip sysinclude yasmexe
2205 enabled cross_compile || host_cc_default=$cc
2206 set_default host_cc
2207
2208 if ! $pkg_config --version >/dev/null 2>&1; then
2209     warn "$pkg_config not found, library detection may fail."
2210     pkg_config=false
2211 fi
2212
2213 exesuf() {
2214     case $1 in
2215         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2216     esac
2217 }
2218
2219 EXESUF=$(exesuf $target_os)
2220 HOSTEXESUF=$(exesuf $host_os)
2221
2222 # set temporary file name
2223 : ${TMPDIR:=$TEMPDIR}
2224 : ${TMPDIR:=$TMP}
2225 : ${TMPDIR:=/tmp}
2226
2227 if ! check_cmd mktemp -u XXXXXX; then
2228     # simple replacement for missing mktemp
2229     # NOT SAFE FOR GENERAL USE
2230     mktemp(){
2231         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2232     }
2233 fi
2234
2235 tmpfile(){
2236     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2237         (set -C; exec > $tmp) 2>/dev/null ||
2238         die "Unable to create temporary file in $TMPDIR."
2239     append TMPFILES $tmp
2240     eval $1=$tmp
2241 }
2242
2243 trap 'rm -f -- $TMPFILES' EXIT
2244
2245 tmpfile TMPASM .asm
2246 tmpfile TMPC   .c
2247 tmpfile TMPCPP .cpp
2248 tmpfile TMPE   $EXESUF
2249 tmpfile TMPH   .h
2250 tmpfile TMPO   .o
2251 tmpfile TMPS   .S
2252 tmpfile TMPSH  .sh
2253 tmpfile TMPV   .ver
2254
2255 unset -f mktemp
2256
2257 chmod +x $TMPE
2258
2259 # make sure we can execute files in $TMPDIR
2260 cat > $TMPSH 2>> $logfile <<EOF
2261 #! /bin/sh
2262 EOF
2263 chmod +x $TMPSH >> $logfile 2>&1
2264 if ! $TMPSH >> $logfile 2>&1; then
2265     cat <<EOF
2266 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2267 variable to another directory and make sure that it is not mounted noexec.
2268 EOF
2269     die "Sanity test failed."
2270 fi
2271
2272 pgi_flags(){
2273     for flag; do
2274         case $flag in
2275             -fomit-frame-pointer) echo -Mnoframe ;;
2276             -g)                   echo -gopt ;;
2277             *)                    echo $flag ;;
2278         esac
2279     done
2280 }
2281
2282 suncc_flags(){
2283     for flag; do
2284         case $flag in
2285             -march=*|-mcpu=*)
2286                 case "${flag#*=}" in
2287                     native)                   echo -xtarget=native       ;;
2288                     v9|niagara)               echo -xarch=sparc          ;;
2289                     ultrasparc)               echo -xarch=sparcvis       ;;
2290                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2291                     i586|pentium)             echo -xchip=pentium        ;;
2292                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2293                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2294                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2295                     pentium4*)          echo -xtarget=pentium4           ;;
2296                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2297                     *-sse3)             echo -xarch=sse3                 ;;
2298                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2299                     amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2300                     athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2301                     k8|opteron|athlon64|athlon-fx)
2302                                               echo -xarch=sse2a          ;;
2303                     athlon*)                  echo -xarch=pentium_proa   ;;
2304                 esac
2305                 ;;
2306             -std=c99)             echo -xc99              ;;
2307             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2308             -fPIC)                echo -KPIC -xcode=pic32 ;;
2309             -W*,*)                echo $flag              ;;
2310             -f*-*|-W*)                                    ;;
2311             *)                    echo $flag              ;;
2312         esac
2313     done
2314 }
2315
2316 tms470_flags(){
2317     for flag; do
2318         case $flag in
2319             -march=*|-mcpu=*)
2320                 case "${flag#*=}" in
2321                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2322                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2323                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2324                     armv6*|arm11*)          echo -mv=6   ;;
2325                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2326                                             echo -mv=5e  ;;
2327                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2328                 esac
2329                 ;;
2330             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2331             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2332             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2333             -msoft-float)   echo --float_support=vfplib       ;;
2334             -O[0-3]|-mf=*)  echo $flag                        ;;
2335             -g)             echo -g -mn                       ;;
2336             -pds=*)         echo $flag                        ;;
2337             -D*|-I*)        echo $flag                        ;;
2338             --gcc|--abi=*)  echo $flag                        ;;
2339             -me)            echo $flag                        ;;
2340         esac
2341     done
2342 }
2343
2344 probe_cc(){
2345     pfx=$1
2346     _cc=$2
2347
2348     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags _ldflags
2349     unset _depflags _DEPCMD _DEPFLAGS
2350     _flags_filter=echo
2351
2352     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2353         _type=llvm_gcc
2354         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2355         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2356         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2357         _cflags_speed='-O3'
2358         _cflags_size='-Os'
2359     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2360         _type=gcc
2361         gcc_version=$($_cc --version | head -n1)
2362         gcc_basever=$($_cc -dumpversion)
2363         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2364         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2365         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2366         if ! $_cc -dumpversion | grep -q '^2\.'; then
2367             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2368         fi
2369         _cflags_speed='-O3'
2370         _cflags_size='-Os'
2371     elif $_cc --version 2>/dev/null | grep -q Intel; then
2372         _type=icc
2373         _ident=$($_cc --version | head -n1)
2374         _depflags='-MMD'
2375         _cflags_speed='-O3'
2376         _cflags_size='-Os'
2377         _cflags_noopt='-O1'
2378     elif $_cc -v 2>&1 | grep -q xlc; then
2379         _type=xlc
2380         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2381         _cflags_speed='-O5'
2382         _cflags_size='-O5 -qcompact'
2383     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2384         _type=ccc
2385         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2386         _DEPFLAGS='-M'
2387         debuglevel=3
2388         _ldflags='-Wl,-z,now' # calls to libots crash without this
2389         _cflags_speed='-fast'
2390         _cflags_size='-O1'
2391     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2392         test -d "$sysroot" || die "No valid sysroot specified."
2393         _type=armcc
2394         _ident=$($_cc --vsn | head -n1)
2395         armcc_conf="$PWD/armcc.conf"
2396         $_cc --arm_linux_configure                 \
2397              --arm_linux_config_file="$armcc_conf" \
2398              --configure_sysroot="$sysroot"        \
2399              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2400              die "Error creating armcc configuration file."
2401         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2402         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2403         as_default="${cross_prefix}gcc"
2404         _depflags='-MMD'
2405         _cflags_speed='-O3'
2406         _cflags_size='-Os'
2407     elif $_cc -version 2>/dev/null | grep -q TMS470; then
2408         _type=tms470
2409         _ident=$($_cc -version | head -n1 | tr -s ' ')
2410         _flags='--gcc --abi=eabi -me'
2411         _cflags='-D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__='
2412         _cc_e='-ppl -fe=$@'
2413         _cc_o='-fe=$@'
2414         as_default="${cross_prefix}gcc"
2415         ld_default="${cross_prefix}gcc"
2416         _depflags='-ppa -ppd=$(@:.o=.d)'
2417         _cflags_speed='-O3 -mf=5'
2418         _cflags_size='-O3 -mf=2'
2419         _flags_filter=tms470_flags
2420     elif $_cc -v 2>&1 | grep -q clang; then
2421         _type=clang
2422         _ident=$($_cc --version | head -n1)
2423         _depflags='-MMD'
2424         _cflags_speed='-O3'
2425         _cflags_size='-Os'
2426     elif $_cc -V 2>&1 | grep -q Sun; then
2427         _type=suncc
2428         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2429         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2430         _DEPFLAGS='-xM1'
2431         _ldflags='-std=c99'
2432         _cflags_speed='-O5'
2433         _cflags_size='-O5 -xspace'
2434         _flags_filter=suncc_flags
2435     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2436         _type=pathscale
2437         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2438         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2439         _cflags_speed='-O2'
2440         _cflags_size='-Os'
2441         _flags_filter='filter_out -Wdisabled-optimization'
2442     elif $_cc -v 2>&1 | grep -q Open64; then
2443         _type=open64
2444         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2445         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2446         _cflags_speed='-O2'
2447         _cflags_size='-Os'
2448         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2449     elif $_cc -V 2>&1 | grep -q Portland; then
2450         _type=pgi
2451         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2452         opt_common='-alias=ansi -Mlre -Mpre'
2453         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2454         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2455         _cflags_noopt="-O1"
2456         _flags_filter=pgi_flags
2457     fi
2458
2459     eval ${pfx}_type=\$_type
2460     eval ${pfx}_ident=\$_ident
2461 }
2462
2463 set_ccvars(){
2464     eval ${1}_C=\${_cc_c-\${${1}_C}}
2465     eval ${1}_E=\${_cc_e-\${${1}_E}}
2466     eval ${1}_O=\${_cc_o-\${${1}_O}}
2467
2468     if [ -n "$_depflags" ]; then
2469         eval ${1}_DEPFLAGS=\$_depflags
2470     else
2471         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2472         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2473         eval DEP${1}FLAGS=\$_flags
2474     fi
2475 }
2476
2477 probe_cc cc "$cc"
2478 cflags_filter=$_flags_filter
2479 cflags_speed=$_cflags_speed
2480 cflags_size=$_cflags_size
2481 cflags_noopt=$_cflags_noopt
2482 add_cflags $_flags $_cflags
2483 cc_ldflags=$_ldflags
2484 set_ccvars CC
2485
2486 probe_cc hostcc "$host_cc"
2487 host_cflags_filter=$_flags_filter
2488 host_ldflags_filter=$_flags_filter
2489 add_host_cflags  $_flags $_cflags
2490 add_host_ldflags $_flags $_ldflags
2491 set_ccvars HOSTCC
2492
2493 test -n "$cc_type" && enable $cc_type ||
2494     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2495
2496 : ${as_default:=$cc}
2497 : ${dep_cc_default:=$cc}
2498 : ${ld_default:=$cc}
2499 set_default ar as dep_cc ld
2500
2501 probe_cc as "$as"
2502 asflags_filter=$_flags_filter
2503 add_asflags $_flags $_cflags
2504 set_ccvars AS
2505
2506 probe_cc ld "$ld"
2507 ldflags_filter=$_flags_filter
2508 add_ldflags $_flags $_ldflags
2509 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2510 LD_O=${_cc_o-$LD_O}
2511
2512 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2513     probe_cc depcc "$dep_cc"
2514     CCDEP=${_DEPCMD:-$DEPCMD}
2515     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2516     DEPCCFLAGS=$_flags
2517 fi
2518
2519 add_cflags $extra_cflags
2520 add_cxxflags $extra_cxxflags
2521 add_asflags $extra_cflags
2522
2523 if test -n "$sysroot"; then
2524     case "$cc_type" in
2525         gcc|llvm_gcc|clang)
2526             add_cppflags --sysroot="$sysroot"
2527             add_ldflags --sysroot="$sysroot"
2528         ;;
2529         tms470)
2530             add_cppflags -I"$sysinclude"
2531             add_ldflags  --sysroot="$sysroot"
2532         ;;
2533     esac
2534 fi
2535
2536 if test "$cpu" = host; then
2537     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2538
2539     case "$cc_type" in
2540         gcc|llvm_gcc)
2541             check_native(){
2542                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2543                 sed -n "/cc1.*$1=/{
2544                             s/.*$1=\\([^ ]*\\).*/\\1/
2545                             p
2546                             q
2547                         }" $TMPE
2548             }
2549             cpu=$(check_native -march || check_native -mcpu)
2550         ;;
2551     esac
2552
2553     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2554 fi
2555
2556 # Deal with common $arch aliases
2557 case "$arch" in
2558     arm*|iPad*)
2559         arch="arm"
2560     ;;
2561     mips|mipsel|IP*)
2562         arch="mips"
2563     ;;
2564     mips64*)
2565         arch="mips"
2566         subarch="mips64"
2567     ;;
2568     parisc|hppa)
2569         arch="parisc"
2570     ;;
2571     parisc64|hppa64)
2572         arch="parisc"
2573         subarch="parisc64"
2574     ;;
2575     "Power Macintosh"|ppc|powerpc|ppc64|powerpc64)
2576         arch="ppc"
2577     ;;
2578     s390|s390x)
2579         arch="s390"
2580     ;;
2581     sh4|sh)
2582         arch="sh4"
2583     ;;
2584     sun4u|sparc64)
2585         arch="sparc"
2586         subarch="sparc64"
2587     ;;
2588     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2589         arch="x86"
2590     ;;
2591 esac
2592
2593 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2594 enable $arch
2595
2596 # Add processor-specific flags
2597 if test "$cpu" = generic; then
2598     : do nothing
2599 elif enabled ppc; then
2600
2601     case $(tolower $cpu) in
2602         601|ppc601|powerpc601)
2603             cpuflags="-mcpu=601"
2604             disable altivec
2605         ;;
2606         603*|ppc603*|powerpc603*)
2607             cpuflags="-mcpu=603"
2608             disable altivec
2609         ;;
2610         604*|ppc604*|powerpc604*)
2611             cpuflags="-mcpu=604"
2612             disable altivec
2613         ;;
2614         g3|75*|ppc75*|powerpc75*)
2615             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2616             disable altivec
2617         ;;
2618         g4|745*|ppc745*|powerpc745*)
2619             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2620         ;;
2621         74*|ppc74*|powerpc74*)
2622             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2623         ;;
2624         g5|970|ppc970|powerpc970)
2625             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2626         ;;
2627         power[3-7]*)
2628             cpuflags="-mcpu=$cpu -mpowerpc-gfxopt -mpowerpc64"
2629         ;;
2630         cell)
2631             cpuflags="-mcpu=cell"
2632             enable ldbrx
2633         ;;
2634         e500v2)
2635             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2636             disable altivec
2637         ;;
2638         e500)
2639             cpuflags="-mcpu=8540 -mhard-float"
2640             disable altivec
2641         ;;
2642     esac
2643
2644 elif enabled x86; then
2645
2646     case $cpu in
2647         i[345]86|pentium)
2648             cpuflags="-march=$cpu"
2649             disable mmx
2650         ;;
2651         # targets that do NOT support conditional mov (cmov)
2652         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2653             cpuflags="-march=$cpu"
2654             disable cmov
2655         ;;
2656         # targets that do support conditional mov (cmov)
2657         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
2658             cpuflags="-march=$cpu"
2659             enable cmov
2660             enable fast_cmov
2661         ;;
2662         # targets that do support conditional mov but on which it's slow
2663         pentium4|pentium4m|prescott|nocona)
2664             cpuflags="-march=$cpu"
2665             enable cmov
2666             disable fast_cmov
2667         ;;
2668     esac
2669
2670 elif enabled sparc; then
2671
2672     case $cpu in
2673         niagara)
2674             cpuflags="-mcpu=$cpu"
2675             disable vis
2676         ;;
2677         sparc64)
2678             cpuflags="-mcpu=v9"
2679         ;;
2680     esac
2681
2682 elif enabled arm; then
2683
2684     case $cpu in
2685         armv*)
2686             cpuflags="-march=$cpu"
2687             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2688         ;;
2689         *)
2690             cpuflags="-mcpu=$cpu"
2691             case $cpu in
2692                 cortex-a*)                               subarch=armv7a  ;;
2693                 cortex-r*)                               subarch=armv7r  ;;
2694                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2695                 arm11*)                                  subarch=armv6   ;;
2696                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2697                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2698             esac
2699         ;;
2700     esac
2701
2702 elif enabled alpha; then
2703
2704     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2705
2706 elif enabled bfin; then
2707
2708     cpuflags="-mcpu=$cpu"
2709
2710 elif enabled mips; then
2711
2712     cpuflags="-march=$cpu"
2713
2714     case $cpu in
2715         24kc)
2716             disable mipsfpu
2717             disable mipsdspr1
2718             disable mipsdspr2
2719         ;;
2720         24kf*)
2721             disable mipsdspr1
2722             disable mipsdspr2
2723         ;;
2724         24kec|34kc|1004kc)
2725             disable mipsfpu
2726             disable mipsdspr2
2727         ;;
2728         24kef*|34kf*|1004kf*)
2729             disable mipsdspr2
2730         ;;
2731         74kc)
2732             disable mipsfpu
2733         ;;
2734     esac
2735
2736 elif enabled avr32; then
2737
2738     case $cpu in
2739         ap7[02]0[0-2])
2740             subarch="avr32_ap"
2741             cpuflags="-mpart=$cpu"
2742         ;;
2743         ap)
2744             subarch="avr32_ap"
2745             cpuflags="-march=$cpu"
2746         ;;
2747         uc3[ab]*)
2748             subarch="avr32_uc"
2749             cpuflags="-mcpu=$cpu"
2750         ;;
2751         uc)
2752             subarch="avr32_uc"
2753             cpuflags="-march=$cpu"
2754         ;;
2755     esac
2756
2757 fi
2758
2759 add_cflags $cpuflags
2760 add_asflags $cpuflags
2761
2762 # compiler sanity check
2763 check_exec <<EOF
2764 int main(void){ return 0; }
2765 EOF
2766 if test "$?" != 0; then
2767     echo "$cc is unable to create an executable file."
2768     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2769         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2770         echo "Only do this if you know what cross compiling means."
2771     fi
2772     die "C compiler test failed."
2773 fi
2774
2775 add_cppflags -D_ISOC99_SOURCE
2776 add_cxxflags -D__STDC_CONSTANT_MACROS
2777 check_cflags -std=c99
2778 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2779 #include <stdlib.h>
2780 EOF
2781 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2782 #include <stdlib.h>
2783 EOF
2784
2785 check_host_cflags -std=c99
2786 check_host_cflags -Wall
2787
2788 case "$arch" in
2789     alpha|ia64|mips|parisc|sparc)
2790         spic=$shared
2791     ;;
2792     x86)
2793         subarch="x86_32"
2794         check_code cc "" "int test[(int)sizeof(char*) - 7]" && subarch="x86_64"
2795         if test "$subarch" = "x86_64"; then
2796             spic=$shared
2797         fi
2798     ;;
2799     ppc)
2800         check_cc <<EOF && subarch="ppc64"
2801         int test[(int)sizeof(char*) - 7];
2802 EOF
2803     ;;
2804 esac
2805
2806 enable $subarch
2807 enabled spic && enable pic
2808
2809 # OS specific
2810 case $target_os in
2811     haiku)
2812         prefix_default="/boot/common"
2813         network_extralibs="-lnetwork"
2814         host_libs=
2815         ;;
2816     sunos)
2817         FFSERVERLDFLAGS=""
2818         SHFLAGS='-shared -Wl,-h,$$(@F)'
2819         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2820         network_extralibs="-lsocket -lnsl"
2821         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
2822         # When using suncc to build, the Solaris linker will mark
2823         # an executable with each instruction set encountered by
2824         # the Solaris assembler.  As our libraries contain their own
2825         # guards for processor-specific code, instead suppress
2826         # generation of the HWCAPS ELF section on Solaris x86 only.
2827         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2828         nm_opts='-P -g'
2829         ;;
2830     netbsd)
2831         disable symver
2832         oss_indev_extralibs="-lossaudio"
2833         oss_outdev_extralibs="-lossaudio"
2834         ;;
2835     openbsd|bitrig)
2836         # On OpenBSD 4.5. the compiler does not use PIC unless
2837         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2838         # however the generated executable will not do anything
2839         # (simply quits with exit-code 1, no crash, no output).
2840         # Thus explicitly enable PIC here.
2841         enable pic
2842         disable symver
2843         SHFLAGS='-shared'
2844         SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
2845         oss_indev_extralibs="-lossaudio"
2846         oss_outdev_extralibs="-lossaudio"
2847         ;;
2848     dragonfly)
2849         disable symver
2850         ;;
2851     freebsd)
2852         ;;
2853     bsd/os)
2854         add_extralibs -lpoll -lgnugetopt
2855         strip="strip -d"
2856         ;;
2857     darwin)
2858         gas="gas-preprocessor.pl $cc"
2859         enabled ppc && add_asflags -force_cpusubtype_ALL
2860         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2861         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2862         strip="${strip} -x"
2863         add_ldflags -Wl,-dynamic,-search_paths_first
2864         SLIBSUF=".dylib"
2865         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2866         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2867         FFSERVERLDFLAGS=-Wl,-bind_at_load
2868         objformat="macho"
2869         enabled x86_64 && objformat="macho64"
2870         enabled_any pic shared ||
2871             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2872         ;;
2873     mingw32*)
2874         if test $target_os = "mingw32ce"; then
2875             disable network
2876         else
2877             target_os=mingw32
2878         fi
2879         LIBTARGET=i386
2880         if enabled x86_64; then
2881             LIBTARGET="i386:x86-64"
2882         elif enabled arm; then
2883             LIBTARGET=arm-wince
2884         fi
2885         shlibdir_default="$bindir_default"
2886         SLIBPREF=""
2887         SLIBSUF=".dll"
2888         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2889         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2890         dlltool="${cross_prefix}dlltool"
2891         if check_cmd lib.exe -list; then
2892             SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2893             if enabled x86_64; then
2894                 LIBTARGET=x64
2895             fi
2896         elif check_cmd $dlltool --version; then
2897             SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
2898         fi
2899         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2900         SLIB_INSTALL_LINKS=
2901         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2902         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2903         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'
2904         objformat="win32"
2905         enable dos_paths
2906         check_cflags -fno-common
2907         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2908                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2909                 die "ERROR: MinGW runtime version must be >= 3.15."
2910         add_cppflags -U__STRICT_ANSI__
2911         ;;
2912     cygwin*)
2913         target_os=cygwin
2914         shlibdir_default="$bindir_default"
2915         SLIBPREF="cyg"
2916         SLIBSUF=".dll"
2917         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2918         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2919         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2920         objformat="win32"
2921         enable dos_paths
2922         check_cflags -fno-common
2923         add_cppflags -U__STRICT_ANSI__
2924         ;;
2925     *-dos|freedos|opendos)
2926         network_extralibs="-lsocket"
2927         objformat="coff"
2928         enable dos_paths
2929         add_cppflags -U__STRICT_ANSI__
2930         ;;
2931     linux)
2932         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2933         enable dv1394
2934         ;;
2935     irix*)
2936         target_os=irix
2937         ranlib="echo ignoring ranlib"
2938         ;;
2939     os/2*)
2940         strip="lxlite -CS"
2941         ln_s="cp -f"
2942         objformat="aout"
2943         add_cppflags -D_GNU_SOURCE
2944         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2945         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2946         FFSERVERLDFLAGS=""
2947         LIBSUF="_s.a"
2948         SLIBPREF=""
2949         SLIBSUF=".dll"
2950         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2951         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2952         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2953           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2954           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2955           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2956           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2957           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2958         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2959           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2960         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2961         enable dos_paths
2962         enable_weak os2threads
2963         ;;
2964     gnu/kfreebsd)
2965         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
2966         ;;
2967     gnu)
2968         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2969         ;;
2970     qnx)
2971         add_cppflags -D_QNX_SOURCE
2972         network_extralibs="-lsocket"
2973         ;;
2974     symbian)
2975         SLIBSUF=".dll"
2976         enable dos_paths
2977         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2978         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2979         add_ldflags -Wl,--target1-abs,--no-undefined \
2980                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2981                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2982         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2983                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2984                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
2985         ;;
2986     none)
2987         ;;
2988     *)
2989         die "Unknown OS '$target_os'."
2990         ;;
2991 esac
2992
2993 esc(){
2994     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
2995 }
2996
2997 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
2998
2999 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3000
3001 set_default $PATHS_LIST
3002
3003 # we need to build at least one lib type
3004 if ! enabled_any static shared; then
3005     cat <<EOF
3006 At least one library type must be built.
3007 Specify --enable-static to build the static libraries or --enable-shared to
3008 build the shared libraries as well. To only build the shared libraries specify
3009 --disable-static in addition to --enable-shared.
3010 EOF
3011     exit 1;
3012 fi
3013
3014 die_license_disabled() {
3015     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3016 }
3017
3018 die_license_disabled_gpl() {
3019     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3020 }
3021
3022 die_license_disabled gpl libcdio
3023 die_license_disabled gpl libutvideo
3024 die_license_disabled gpl libx264
3025 die_license_disabled gpl libxavs
3026 die_license_disabled gpl libxvid
3027 die_license_disabled gpl x11grab
3028
3029 die_license_disabled nonfree libaacplus
3030 die_license_disabled nonfree libfaac
3031 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3032 enabled gpl && die_license_disabled_gpl nonfree openssl
3033
3034 die_license_disabled version3 libopencore_amrnb
3035 die_license_disabled version3 libopencore_amrwb
3036 die_license_disabled version3 libvo_aacenc
3037 die_license_disabled version3 libvo_amrwbenc
3038
3039 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3040
3041 disabled optimizations || check_cflags -fomit-frame-pointer
3042
3043 enable_pic() {
3044     enable pic
3045     add_cppflags -DPIC
3046     add_cflags   -fPIC
3047     add_asflags  -fPIC
3048 }
3049
3050 enabled pic && enable_pic
3051
3052 check_cc <<EOF || die "Symbol mangling check failed."
3053 int ff_extern;
3054 EOF
3055 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3056 extern_prefix=${sym%%ff_extern*}
3057
3058 check_cc <<EOF && enable inline_asm
3059 void foo(void) { __asm__ volatile ("" ::); }
3060 EOF
3061
3062 _restrict=
3063 for restrict_keyword in restrict __restrict__ __restrict; do
3064     check_cc <<EOF && _restrict=$restrict_keyword && break
3065 void foo(char * $restrict_keyword p);
3066 EOF
3067 done
3068
3069 check_cc <<EOF && enable attribute_packed
3070 struct { int x; } __attribute__((packed)) x;
3071 EOF
3072
3073 check_cc <<EOF && enable attribute_may_alias
3074 union { int x; } __attribute__((may_alias)) x;
3075 EOF
3076
3077 check_cc <<EOF || die "endian test failed"
3078 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3079 EOF
3080 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3081
3082 if enabled alpha; then
3083
3084     check_cflags -mieee
3085
3086 elif enabled arm; then
3087
3088     enabled thumb && check_cflags -mthumb || check_cflags -marm
3089     nogas=die
3090
3091     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3092         enable vfp_args
3093     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3094         case "${cross_prefix:-$cc}" in
3095             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3096             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3097 __asm__ (".eabi_attribute 28, 1");
3098 int main(void) { return 0; }
3099 EOF
3100         esac
3101         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3102     fi
3103
3104     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
3105     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
3106     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
3107     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
3108     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
3109     enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
3110
3111     check_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3112
3113     enabled_all armv6t2 shared !pic && enable_pic
3114
3115 elif enabled mips; then
3116
3117     check_asm loongson '"dmult.g $1, $2, $3"'
3118     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
3119     enabled mips32r2  && add_cflags "-mips32r2" &&
3120      check_asm mips32r2  '"rotr $t0, $t1, 1"'
3121     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3122      check_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3123     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3124      check_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3125     enabled mipsfpu   && add_cflags "-mhard-float" &&
3126      check_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3127
3128
3129 elif enabled ppc; then
3130
3131     enable local_aligned_8 local_aligned_16
3132
3133     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3134     check_asm ibm_asm   '"add 0, 0, 0"'
3135     check_asm ppc4xx    '"maclhw r10, r11, r12"'
3136     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3137
3138     # AltiVec flags: The FSF version of GCC differs from the Apple version
3139     if enabled altivec; then
3140         nogas=warn
3141         check_cflags -maltivec -mabi=altivec &&
3142         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3143         check_cflags -faltivec
3144
3145         # check if our compiler supports Motorola AltiVec C API
3146         check_cc <<EOF || disable altivec
3147 $inc_altivec_h
3148 int main(void) {
3149     vector signed int v1, v2, v3;
3150     v1 = vec_add(v2,v3);
3151     return 0;
3152 }
3153 EOF
3154
3155         # check if our compiler supports braces for vector declarations
3156         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
3157 $inc_altivec_h
3158 int main (void) { (vector int) {1}; return 0; }
3159 EOF
3160     fi
3161
3162 elif enabled sparc; then
3163
3164     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
3165         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
3166
3167 elif enabled x86; then
3168
3169     check_code ld immintrin.h "__xgetbv(0)" "cc" && enable xgetbv
3170     check_code ld intrin.h "int info[4]; __cpuid(info, 0)" "cc" && enable cpuid
3171     check_code ld intrin.h "__rdtsc()" "cc" && enable rdtsc
3172     check_code ld intrin.h "unsigned int x = __readeflags()" "cc" && enable rweflags
3173
3174     check_code ld mmintrin.h "_mm_empty()" "cc" && enable mm_empty
3175
3176     enable local_aligned_8 local_aligned_16
3177
3178     # check whether EBP is available on x86
3179     # As 'i' is stored on the stack, this program will crash
3180     # if the base pointer is used to access it because the
3181     # base pointer is cleared in the inline assembly code.
3182     check_exec_crash <<EOF && enable ebp_available
3183     volatile int i=0;
3184     __asm__ volatile (
3185         "xorl %%ebp, %%ebp"
3186     ::: "%ebp");
3187     return i;
3188 EOF
3189
3190     # check whether EBX is available on x86
3191     check_asm ebx_available '""::"b"(0)' &&
3192         check_asm ebx_available '"":::"%ebx"'
3193
3194     # check whether xmm clobbers are supported
3195     check_asm xmm_clobbers '"":::"%xmm0"'
3196
3197     # check whether binutils is new enough to compile SSSE3/MMXEXT
3198     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
3199     enabled mmxext && check_asm mmxext '"pmaxub %mm0, %mm1"'
3200
3201     if ! disabled_any asm mmx yasm; then
3202         if check_cmd $yasmexe --version; then
3203             enabled x86_64 && yasm_extra="-m amd64"
3204             yasm_debug="-g dwarf2"
3205         elif check_cmd nasm -v; then
3206             yasmexe=nasm
3207             yasm_debug="-g -F dwarf"
3208             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3209         fi
3210
3211         YASMFLAGS="-f $objformat $yasm_extra"
3212         enabled pic               && append YASMFLAGS "-DPIC"
3213         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3214         case "$objformat" in
3215             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3216         esac
3217
3218         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3219             die "yasm not found, use --disable-yasm for a crippled build"
3220         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
3221         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4
3222     fi
3223
3224     case "$cpu" in
3225         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3226             disable fast_clz
3227         ;;
3228     esac
3229
3230 fi
3231
3232 if enabled asm; then
3233     as=${gas:=$as}
3234     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
3235         $nogas "GNU assembler not found, install gas-preprocessor"
3236 fi
3237
3238 check_ldflags -Wl,--as-needed
3239
3240 if check_func dlopen; then
3241     ldl=
3242 elif check_func dlopen -ldl; then
3243     ldl=-ldl
3244 fi
3245
3246 if enabled network; then
3247     check_type "sys/types.h sys/socket.h" socklen_t
3248     check_type netdb.h "struct addrinfo"
3249     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3250     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3251     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3252     check_type netinet/in.h "struct sockaddr_in6"
3253     check_type poll.h "struct pollfd"
3254     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3255     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3256     check_header netinet/sctp.h
3257     check_func getaddrinfo $network_extralibs
3258     # Prefer arpa/inet.h over winsock2
3259     if check_header arpa/inet.h ; then
3260         check_func closesocket
3261     elif check_header winsock2.h ; then
3262         check_func_headers winsock2.h closesocket -lws2 &&
3263             network_extralibs="-lws2" ||
3264         { check_func_headers winsock2.h closesocket -lws2_32 &&
3265             network_extralibs="-lws2_32"; }
3266         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3267         check_type ws2tcpip.h socklen_t
3268         check_type ws2tcpip.h "struct addrinfo"
3269         check_type ws2tcpip.h "struct group_source_req"
3270         check_type ws2tcpip.h "struct ip_mreq_source"
3271         check_type ws2tcpip.h "struct ipv6_mreq"
3272         check_type winsock2.h "struct pollfd"
3273         check_type ws2tcpip.h "struct sockaddr_in6"
3274         check_type ws2tcpip.h "struct sockaddr_storage"
3275         check_struct winsock2.h "struct sockaddr" sa_len
3276     else
3277         disable network
3278     fi
3279 fi
3280
3281 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3282 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3283
3284 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3285 check_func  fcntl
3286 check_func  fork
3287 check_func  gethrtime
3288 check_func  getopt
3289 check_func  getrusage
3290 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3291 check_func  gettimeofday
3292 check_func  inet_aton $network_extralibs
3293 check_func  isatty
3294 check_func  localtime_r
3295 check_func  ${malloc_prefix}memalign            && enable memalign
3296 check_func  mkstemp
3297 check_func  mmap
3298 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3299 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3300 check_func  setrlimit
3301 check_func  strerror_r
3302 check_func  strptime
3303 check_func  sched_getaffinity
3304 check_func  sysconf
3305 check_func  sysctl
3306 check_func  usleep
3307 check_func_headers conio.h kbhit
3308 check_func_headers windows.h PeekNamedPipe
3309 check_func_headers io.h setmode
3310 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3311 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3312 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3313 check_func_headers windows.h GetProcessAffinityMask
3314 check_func_headers windows.h GetProcessTimes
3315 check_func_headers windows.h GetSystemTimeAsFileTime
3316 check_func_headers windows.h MapViewOfFile
3317 check_func_headers windows.h Sleep
3318 check_func_headers windows.h VirtualAlloc
3319 check_func_headers glob.h glob
3320
3321 check_header dlfcn.h
3322 check_header dxva.h
3323 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3324 check_header libcrystalhd/libcrystalhd_if.h
3325 check_header malloc.h
3326 check_header poll.h
3327 check_header sys/mman.h
3328 check_header sys/param.h
3329 check_header sys/resource.h
3330 check_header sys/select.h
3331 check_header sys/time.h
3332 check_header termios.h
3333 check_header unistd.h
3334 check_header vdpau/vdpau.h
3335 check_header vdpau/vdpau_x11.h
3336 check_header windows.h
3337 check_header X11/extensions/XvMClib.h
3338 check_header asm/types.h
3339
3340 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3341 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3342
3343 # check for VDA header
3344 if ! disabled vda; then
3345     if check_header VideoDecodeAcceleration/VDADecoder.h; then
3346         enable vda
3347         add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3348     fi
3349 fi
3350
3351 if ! disabled w32threads && ! enabled pthreads; then
3352     check_func _beginthreadex && enable w32threads
3353 fi
3354
3355 # check for some common methods of building with pthread support
3356 # do this before the optional library checks as some of them require pthreads
3357 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3358     enable pthreads
3359     if check_func pthread_create; then
3360         :
3361     elif check_func pthread_create -pthread; then
3362         add_cflags -pthread
3363         add_extralibs -pthread
3364     elif check_func pthread_create -pthreads; then
3365         add_cflags -pthreads
3366         add_extralibs -pthreads
3367     elif check_func pthread_create -lpthreadGC2; then
3368         add_extralibs -lpthreadGC2
3369     elif ! check_lib pthread.h pthread_create -lpthread; then
3370         disable pthreads
3371     fi
3372 fi
3373
3374 for thread in $THREADS_LIST; do
3375     if enabled $thread; then
3376         test -n "$thread_type" &&
3377             die "ERROR: Only one thread type must be selected." ||
3378             thread_type="$thread"
3379     fi
3380 done
3381
3382 if enabled pthreads; then
3383   check_func pthread_cancel
3384 fi
3385
3386 check_lib math.h sin -lm && LIBM="-lm"
3387 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3388 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3389
3390 check_mathfunc cbrtf
3391 check_mathfunc exp2
3392 check_mathfunc exp2f
3393 check_mathfunc isinf
3394 check_mathfunc isnan
3395 check_mathfunc llrint
3396 check_mathfunc llrintf
3397 check_mathfunc log2
3398 check_mathfunc log2f
3399 check_mathfunc lrint
3400 check_mathfunc lrintf
3401 check_mathfunc rint
3402 check_mathfunc round
3403 check_mathfunc roundf
3404 check_mathfunc trunc
3405 check_mathfunc truncf
3406
3407 # these are off by default, so fail if requested and not available
3408 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3409 enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
3410 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3411 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3412 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
3413 enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3414 enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
3415 enabled libbluray  && require libbluray libbluray/bluray.h bd_open -lbluray
3416 enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
3417                       { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3418                         die "ERROR: libcelt version must be >= 0.11.0."; }
3419 enabled libcaca    && require_pkg_config caca caca.h caca_create_canvas
3420 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3421 enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3422 flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
3423 enabled libflite   && require2 libflite "flite/flite.h" flite_init $flite_libs
3424 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3425 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3426 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3427 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3428 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3429 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3430 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3431 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3432 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3433 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3434 enabled libopus    && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3435 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3436 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3437 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3438 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3439 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3440     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3441     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
3442 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3443 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3444 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3445 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3446 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3447 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3448 enabled libvpx     && {
3449     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3450                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3451     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
3452                                 die "ERROR: libvpx encoder version must be >=0.9.7"; } }
3453 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3454                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3455                         die "ERROR: libx264 version must be >= 0.118."; }
3456 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3457 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3458 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3459                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3460                         die "ERROR: openal not found"; } &&
3461                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3462                         die "ERROR: openal version must be 1.1 or compatible"; }
3463 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3464                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3465                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3466                         die "ERROR: openssl not found"; }
3467
3468 if enabled gnutls; then
3469     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3470     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3471 fi
3472
3473 # libdc1394 check
3474 if enabled libdc1394; then
3475     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3476         enable libdc1394_2; } ||
3477     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3478         enable libdc1394_1; } ||
3479     die "ERROR: No version of libdc1394 found "
3480 fi
3481
3482 SDL_CONFIG="${cross_prefix}sdl-config"
3483 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3484     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3485     enable sdl &&
3486     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3487 else
3488   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3489     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3490     sdl_libs=$("${SDL_CONFIG}" --libs)
3491     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3492     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3493     enable sdl &&
3494     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3495   fi
3496 fi
3497 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3498
3499 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
3500 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3501 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
3502
3503 check_header linux/fb.h
3504 check_header linux/videodev.h
3505 check_header linux/videodev2.h
3506 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3507
3508 check_header sys/videoio.h
3509
3510 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3511 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3512 # w32api 3.12 had it defined wrong
3513 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3514
3515 check_type "dshow.h" IBaseFilter
3516
3517 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3518 { check_header dev/bktr/ioctl_meteor.h &&
3519   check_header dev/bktr/ioctl_bt848.h; } ||
3520 { check_header machine/ioctl_meteor.h &&
3521   check_header machine/ioctl_bt848.h; } ||
3522 { check_header dev/video/meteor/ioctl_meteor.h &&
3523   check_header dev/video/bktr/ioctl_bt848.h; } ||
3524 check_header dev/ic/bt8xx.h
3525
3526 check_header sndio.h
3527 if check_struct sys/soundcard.h audio_buf_info bytes; then
3528     enable_safe sys/soundcard.h
3529 else
3530     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3531     #include <sys/soundcard.h>
3532     audio_buf_info abc;
3533 EOF
3534 fi
3535 check_header soundcard.h
3536
3537 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3538
3539 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
3540     check_func jack_port_get_latency_range -ljack
3541
3542 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3543
3544 enabled libcdio &&
3545     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3546
3547 enabled x11grab                                           &&
3548 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3549 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3550 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3551
3552 if ! disabled vaapi; then
3553     check_lib va/va.h vaInitialize -lva && {
3554         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3555         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3556     } || disable vaapi
3557 fi
3558
3559 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3560 check_cpp_condition \
3561     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3562     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3563       disable vdpau; }
3564 fi
3565
3566 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3567 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3568 test -n "$valgrind" && target_exec="$valgrind --error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
3569
3570 # add some useful compiler flags if supported
3571 check_cflags -Wdeclaration-after-statement
3572 check_cflags -Wall
3573 check_cflags -Wno-parentheses
3574 check_cflags -Wno-switch
3575 check_cflags -Wno-format-zero-length
3576 check_cflags -Wdisabled-optimization
3577 check_cflags -Wpointer-arith
3578 check_cflags -Wredundant-decls
3579 check_cflags -Wno-pointer-sign
3580 check_cflags -Wwrite-strings
3581 check_cflags -Wtype-limits
3582 check_cflags -Wundef
3583 check_cflags -Wmissing-prototypes
3584 check_cflags -Wno-pointer-to-int-cast
3585 check_cflags -Wstrict-prototypes
3586 enabled extra_warnings && check_cflags -Winline
3587
3588 # add some linker flags
3589 check_ldflags -Wl,--warn-common
3590 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3591 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3592
3593 enabled xmm_clobber_test &&
3594     check_ldflags -Wl,--wrap,avcodec_open2              \
3595                   -Wl,--wrap,avcodec_decode_audio4      \
3596                   -Wl,--wrap,avcodec_decode_video2      \
3597                   -Wl,--wrap,avcodec_decode_subtitle2   \
3598                   -Wl,--wrap,avcodec_encode_audio2      \
3599                   -Wl,--wrap,avcodec_encode_video       \
3600                   -Wl,--wrap,avcodec_encode_subtitle    \
3601                   -Wl,--wrap,sws_scale ||
3602     disable xmm_clobber_test
3603
3604 echo "X{};" > $TMPV
3605 if test_ldflags -Wl,--version-script,$TMPV; then
3606     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3607     check_cc <<EOF && enable symver_asm_label
3608 void ff_foo(void) __asm__ ("av_foo@VERSION");
3609 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3610 EOF
3611     check_cc <<EOF && enable symver_gnu_asm
3612 __asm__(".symver ff_foo,av_foo@VERSION");
3613 void ff_foo(void) {}
3614 EOF
3615 fi
3616
3617 if [ -n "$optflags" ]; then
3618     add_cflags $optflags
3619 elif enabled small; then
3620     add_cflags $cflags_size
3621 elif enabled optimizations; then
3622     add_cflags $cflags_speed
3623 else
3624     add_cflags $cflags_noopt
3625 fi
3626 check_cflags -fno-math-errno
3627 check_cflags -fno-signed-zeros
3628 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3629 int x;
3630 EOF
3631
3632
3633 if enabled icc; then
3634     # Just warnings, no remarks
3635     check_cflags -w1
3636     # -wd: Disable following warnings
3637     # 144, 167, 556: -Wno-pointer-sign
3638     # 1292: attribute "foo" ignored
3639     # 1419: external declaration in primary source file
3640     # 10006: ignoring unknown option -fno-signed-zeros
3641     # 10148: ignoring unknown option -Wno-parentheses
3642     # 10156: ignoring option '-W'; no argument required
3643     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3644     # 11030: Warning unknown option --as-needed
3645     # 10156: ignoring option '-export'; no argument required
3646     check_ldflags -wd10156,11030
3647     # Allow to compile with optimizations
3648     check_ldflags -march=$cpu
3649     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3650     enable ebp_available
3651     if enabled x86_32; then
3652         icc_version=$($cc -dumpversion)
3653         test ${icc_version%%.*} -ge 11 &&
3654             check_cflags -falign-stack=maintain-16-byte ||
3655             disable aligned_stack
3656     fi
3657 elif enabled ccc; then
3658     # disable some annoying warnings
3659     add_cflags -msg_disable cvtu32to64
3660     add_cflags -msg_disable embedcomment
3661     add_cflags -msg_disable needconstext
3662     add_cflags -msg_disable nomainieee
3663     add_cflags -msg_disable ptrmismatch1
3664     add_cflags -msg_disable unreachcode
3665 elif enabled gcc; then
3666     check_cflags -fno-tree-vectorize
3667     check_cflags -Werror=implicit-function-declaration
3668     check_cflags -Werror=missing-prototypes
3669 elif enabled llvm_gcc; then
3670     check_cflags -mllvm -stack-alignment=16
3671 elif enabled clang; then
3672     check_cflags -mllvm -stack-alignment=16
3673     check_cflags -Qunused-arguments
3674 elif enabled armcc; then
3675     # 2523: use of inline assembler is deprecated
3676     add_cflags -W${armcc_opt},--diag_suppress=2523
3677     add_cflags -W${armcc_opt},--diag_suppress=1207
3678     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3679     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3680     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3681     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3682 elif enabled tms470; then
3683     add_cflags -pds=824 -pds=837
3684 elif enabled pathscale; then
3685     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3686 fi
3687
3688 enabled_any $THREADS_LIST      && enable threads
3689
3690 check_deps $CONFIG_LIST       \
3691            $CONFIG_EXTRA      \
3692            $HAVE_LIST         \
3693            $ALL_COMPONENTS    \
3694            $ALL_TESTS         \
3695
3696 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3697
3698 if test $target_os = "haiku"; then
3699     disable memalign
3700     disable posix_memalign
3701 fi
3702
3703 ! enabled_any memalign posix_memalign aligned_malloc &&
3704     enabled_any $need_memalign && enable memalign_hack
3705
3706 # add_dep lib dep
3707 # -> enable ${lib}_deps_${dep}
3708 # -> add $dep to ${lib}_deps only once
3709 add_dep() {
3710     lib=$1
3711     dep=$2
3712     enabled "${lib}_deps_${dep}" && return 0
3713     enable  "${lib}_deps_${dep}"
3714     prepend "${lib}_deps" $dep
3715 }
3716
3717 # merge deps lib components
3718 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
3719 merge_deps() {
3720     lib=$1
3721     shift
3722     for comp in $*; do
3723         enabled $comp || continue
3724         eval "dep=\"\$${comp}_deps\""
3725         for d in $dep; do
3726             add_dep $lib $d
3727         done
3728     done
3729 }
3730
3731 merge_deps libavfilter $FILTER_LIST
3732
3733 echo "install prefix            $prefix"
3734 echo "source path               $source_path"
3735 echo "C compiler                $cc"
3736 echo "ARCH                      $arch ($cpu)"
3737 if test "$build_suffix" != ""; then
3738     echo "build suffix              $build_suffix"
3739 fi
3740 if test "$progs_suffix" != ""; then
3741     echo "progs suffix              $progs_suffix"
3742 fi
3743 if test "$extra_version" != ""; then
3744     echo "version string suffix     $extra_version"
3745 fi
3746 echo "big-endian                ${bigendian-no}"
3747 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3748 if enabled x86; then
3749     echo "${yasmexe}                      ${yasm-no}"
3750     echo "MMX enabled               ${mmx-no}"
3751     echo "MMXEXT enabled            ${mmxext-no}"
3752     echo "3DNow! enabled            ${amd3dnow-no}"
3753     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3754     echo "SSE enabled               ${sse-no}"
3755     echo "SSSE3 enabled             ${ssse3-no}"
3756     echo "AVX enabled               ${avx-no}"
3757     echo "FMA4 enabled              ${fma4-no}"
3758     echo "CMOV enabled              ${cmov-no}"
3759     echo "CMOV is fast              ${fast_cmov-no}"
3760     echo "EBX available             ${ebx_available-no}"
3761     echo "EBP available             ${ebp_available-no}"
3762 fi
3763 if enabled arm; then
3764     echo "ARMv5TE enabled           ${armv5te-no}"
3765     echo "ARMv6 enabled             ${armv6-no}"
3766     echo "ARMv6T2 enabled           ${armv6t2-no}"
3767     echo "ARM VFP enabled           ${armvfp-no}"
3768     echo "NEON enabled              ${neon-no}"
3769 fi
3770 if enabled mips; then
3771     echo "MMI enabled               ${mmi-no}"
3772     echo "MIPS FPU enabled          ${mipsfpu-no}"
3773     echo "MIPS32R2 enabled          ${mips32r2-no}"
3774     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
3775     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
3776 fi
3777 if enabled ppc; then
3778     echo "AltiVec enabled           ${altivec-no}"
3779     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3780     echo "dcbzl available           ${dcbzl-no}"
3781 fi
3782 if enabled sparc; then
3783     echo "VIS enabled               ${vis-no}"
3784 fi
3785 echo "debug symbols             ${debug-no}"
3786 echo "strip symbols             ${stripping-no}"
3787 echo "optimize for size         ${small-no}"
3788 echo "optimizations             ${optimizations-no}"
3789 echo "static                    ${static-no}"
3790 echo "shared                    ${shared-no}"
3791 echo "postprocessing support    ${postproc-no}"
3792 echo "new filter support        ${avfilter-no}"
3793 echo "network support           ${network-no}"
3794 echo "threading support         ${thread_type-no}"
3795 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3796 echo "SDL support               ${sdl-no}"
3797 echo "libdxva2 enabled          ${dxva2-no}"
3798 echo "libva enabled             ${vaapi-no}"
3799 echo "libvdpau enabled          ${vdpau-no}"
3800 echo "AVISynth enabled          ${avisynth-no}"
3801 echo "frei0r enabled            ${frei0r-no}"
3802 echo "gnutls enabled            ${gnutls-no}"
3803 echo "libaacplus enabled        ${libaacplus-no}"
3804 echo "libass enabled            ${libass-no}"
3805 echo "libcaca enabled           ${libcaca-no}"
3806 echo "libcdio support           ${libcdio-no}"
3807 echo "libcelt enabled           ${libcelt-no}"
3808 echo "libdc1394 support         ${libdc1394-no}"
3809 echo "libfaac enabled           ${libfaac-no}"
3810 echo "libfdk-aac enabled        ${libfdk_aac-no}"
3811 echo "libgsm enabled            ${libgsm-no}"
3812 echo "libiec61883 support       ${libiec61883-no}"
3813 echo "libilbc enabled           ${libilbc-no}"
3814 echo "libmodplug enabled        ${libmodplug-no}"
3815 echo "libmp3lame enabled        ${libmp3lame-no}"
3816 echo "libnut enabled            ${libnut-no}"
3817 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3818 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3819 echo "libopencv support         ${libopencv-no}"
3820 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3821 echo "libopus enabled           ${libopus-no}"
3822 echo "libpulse enabled          ${libpulse-no}"
3823 echo "librtmp enabled           ${librtmp-no}"
3824 echo "libschroedinger enabled   ${libschroedinger-no}"
3825 echo "libspeex enabled          ${libspeex-no}"
3826 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
3827 echo "libtheora enabled         ${libtheora-no}"
3828 echo "libutvideo enabled        ${libutvideo-no}"
3829 echo "libv4l2 enabled           ${libv4l2-no}"
3830 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3831 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3832 echo "libvorbis enabled         ${libvorbis-no}"
3833 echo "libvpx enabled            ${libvpx-no}"
3834 echo "libx264 enabled           ${libx264-no}"
3835 echo "libxavs enabled           ${libxavs-no}"
3836 echo "libxvid enabled           ${libxvid-no}"
3837 echo "openal enabled            ${openal-no}"
3838 echo "openssl enabled           ${openssl-no}"
3839 echo "zlib enabled              ${zlib-no}"
3840 echo "bzlib enabled             ${bzlib-no}"
3841 echo "texi2html enabled         ${texi2html-no}"
3842 echo "pod2man enabled           ${pod2man-no}"
3843 echo "makeinfo enabled          ${makeinfo-no}"
3844 test -n "$random_seed" &&
3845     echo "random seed               ${random_seed}"
3846 echo
3847
3848 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3849     echo "Enabled ${type}s:"
3850     eval list=\$$(toupper $type)_LIST
3851     print_enabled '_*' $list | sort | pr -r -3 -t
3852     echo
3853 done
3854
3855 license="LGPL version 2.1 or later"
3856 if enabled nonfree; then
3857     license="nonfree and unredistributable"
3858 elif enabled gplv3; then
3859     license="GPL version 3 or later"
3860 elif enabled lgplv3; then
3861     license="LGPL version 3 or later"
3862 elif enabled gpl; then
3863     license="GPL version 2 or later"
3864 fi
3865
3866 echo "License: $license"
3867
3868 echo "Creating config.mak and config.h..."
3869
3870 test -e Makefile || $ln_s "$source_path/Makefile" .
3871
3872 enabled stripping || strip="echo skipping strip"
3873
3874 config_files="$TMPH config.mak"
3875
3876 cat > config.mak <<EOF
3877 # Automatically generated by configure - do not modify!
3878 ifndef FFMPEG_CONFIG_MAK
3879 FFMPEG_CONFIG_MAK=1
3880 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3881 prefix=$prefix
3882 LIBDIR=\$(DESTDIR)$libdir
3883 SHLIBDIR=\$(DESTDIR)$shlibdir
3884 INCDIR=\$(DESTDIR)$incdir
3885 BINDIR=\$(DESTDIR)$bindir
3886 DATADIR=\$(DESTDIR)$datadir
3887 MANDIR=\$(DESTDIR)$mandir
3888 SRC_PATH=$source_path
3889 ifndef MAIN_MAKEFILE
3890 SRC_PATH:=\$(SRC_PATH:.%=..%)
3891 endif
3892 CC_IDENT=$cc_ident
3893 ARCH=$arch
3894 CC=$cc
3895 CXX=$cxx
3896 AS=$as
3897 LD=$ld
3898 DEPCC=$dep_cc
3899 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
3900 DEPAS=$as
3901 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
3902 YASM=$yasmexe
3903 DEPYASM=$yasmexe
3904 AR=$ar
3905 RANLIB=$ranlib
3906 CP=cp -p
3907 LN_S=$ln_s
3908 STRIP=$strip
3909 CPPFLAGS=$CPPFLAGS
3910 CFLAGS=$CFLAGS
3911 CXXFLAGS=$CXXFLAGS
3912 ASFLAGS=$ASFLAGS
3913 AS_C=$AS_C
3914 AS_O=$AS_O
3915 CC_C=$CC_C
3916 CC_O=$CC_O
3917 CXX_C=$CXX_C
3918 CXX_O=$CXX_O
3919 LD_O=$LD_O
3920 DLLTOOL=$dlltool
3921 LDFLAGS=$LDFLAGS
3922 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3923 SHFLAGS=$SHFLAGS
3924 YASMFLAGS=$YASMFLAGS
3925 BUILDSUF=$build_suffix
3926 PROGSSUF=$progs_suffix
3927 FULLNAME=$FULLNAME
3928 LIBPREF=$LIBPREF
3929 LIBSUF=$LIBSUF
3930 LIBNAME=$LIBNAME
3931 SLIBPREF=$SLIBPREF
3932 SLIBSUF=$SLIBSUF
3933 EXESUF=$EXESUF
3934 EXTRA_VERSION=$extra_version
3935 CCDEP=$CCDEP
3936 CXXDEP=$CXXDEP
3937 CCDEP_FLAGS=$CCDEP_FLAGS
3938 ASDEP=$ASDEP
3939 ASDEP_FLAGS=$ASDEP_FLAGS
3940 CC_DEPFLAGS=$CC_DEPFLAGS
3941 AS_DEPFLAGS=$AS_DEPFLAGS
3942 HOSTCC=$host_cc
3943 HOSTCFLAGS=$host_cflags
3944 HOSTEXESUF=$HOSTEXESUF
3945 HOSTLDFLAGS=$host_ldflags
3946 HOSTLIBS=$host_libs
3947 DEPHOSTCC=$host_cc
3948 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
3949 HOSTCCDEP=$HOSTCCDEP
3950 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
3951 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
3952 HOSTCC_C=$HOSTCC_C
3953 HOSTCC_O=$HOSTCC_O
3954 TARGET_EXEC=$target_exec
3955 TARGET_PATH=$target_path
3956 SDL_LIBS=$sdl_libs
3957 SDL_CFLAGS=$sdl_cflags
3958 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3959 EXTRALIBS=$extralibs
3960 INSTALL=$install
3961 LIBTARGET=${LIBTARGET}
3962 SLIBNAME=${SLIBNAME}
3963 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3964 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3965 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3966 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3967 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3968 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3969 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3970 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3971 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3972 NOREDZONE_FLAGS=$noredzone_flags
3973 EOF
3974
3975 get_version(){
3976     lcname=$1
3977     name=$(toupper $lcname)
3978     file=$source_path/$lcname/version.h
3979     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3980     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3981     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3982     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3983 }
3984
3985 get_version_old(){
3986     name=$1
3987     file=$source_path/$2
3988 # This condition will be removed when we stop supporting old libpostproc versions
3989 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
3990     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3991     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3992 fi
3993     lcname=$(tolower $name)
3994     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3995     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3996 }
3997
3998 get_version_old LIBPOSTPROC libpostproc/postprocess.h
3999 get_version_old LIBSWRESAMPLE libswresample/swresample.h
4000
4001 get_version libavcodec
4002 get_version libavdevice
4003 get_version libavfilter
4004 get_version libavformat
4005 get_version libavresample
4006 get_version libavutil
4007 get_version libswscale
4008
4009 cat > $TMPH <<EOF
4010 /* Automatically generated by configure - do not modify! */
4011 #ifndef FFMPEG_CONFIG_H
4012 #define FFMPEG_CONFIG_H
4013 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4014 #define FFMPEG_LICENSE "$(c_escape $license)"
4015 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4016 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
4017 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4018 #define av_restrict $_restrict