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