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