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