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