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