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