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