avconv: fix broken indentation.
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # Libav configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken Libav."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 Standard options:
63   --help                   print this message
64   --logfile=FILE           log tests and output to FILE [config.log]
65   --disable-logging        do not log configure debug information
66   --prefix=PREFIX          install in PREFIX [$prefix]
67   --bindir=DIR             install binaries in DIR [PREFIX/bin]
68   --datadir=DIR            install data files in DIR [PREFIX/share/avconv]
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-avconv         disable avconv build
85   --disable-avplay         disable avplay build
86   --disable-avprobe        disable avprobe build
87   --disable-avserver       disable avserver build
88   --disable-avdevice       disable libavdevice build
89   --disable-avcodec        disable libavcodec build
90   --disable-avformat       disable libavformat build
91   --disable-swscale        disable libswscale build
92   --disable-postproc       disable libpostproc build
93   --disable-avfilter       disable video filter support [no]
94   --disable-pthreads       disable pthreads [auto]
95   --enable-w32threads      use Win32 threads [no]
96   --enable-x11grab         enable X11 grabbing [no]
97   --disable-network        disable network support [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   --enable-vaapi           enable VAAPI code
111   --enable-vdpau           enable 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   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
196   --enable-cross-compile   assume a cross-compiler is used
197   --sysroot=PATH           root of cross-build tree
198   --sysinclude=PATH        location of cross-build system headers
199   --target-os=OS           compiler targets OS [$target_os]
200   --target-exec=CMD        command to run executables on target
201   --target-path=DIR        path to view of build directory on target
202   --nm=NM                  use nm tool
203   --ar=AR                  use archive tool AR [$ar_default]
204   --as=AS                  use assembler AS [$as_default]
205   --cc=CC                  use C compiler CC [$cc_default]
206   --ld=LD                  use linker LD
207   --host-cc=HOSTCC         use host C compiler HOSTCC
208   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
209   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
210   --host-libs=HLIBS        use libs HLIBS when linking for host
211   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
212   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
213   --extra-libs=ELIBS       add ELIBS [$ELIBS]
214   --extra-version=STRING   version string suffix []
215   --build-suffix=SUFFIX    library name suffix []
216   --arch=ARCH              select architecture [$arch]
217   --cpu=CPU                select the minimum required CPU (affects
218                            instruction selection, may crash on older CPUs)
219   --disable-asm            disable all assembler optimizations
220   --disable-altivec        disable AltiVec optimizations
221   --disable-amd3dnow       disable 3DNow! optimizations
222   --disable-amd3dnowext    disable 3DNow! extended optimizations
223   --disable-mmx            disable MMX optimizations
224   --disable-mmx2           disable MMX2 optimizations
225   --disable-sse            disable SSE optimizations
226   --disable-ssse3          disable SSSE3 optimizations
227   --disable-avx            disable AVX optimizations
228   --disable-armv5te        disable armv5te optimizations
229   --disable-armv6          disable armv6 optimizations
230   --disable-armv6t2        disable armv6t2 optimizations
231   --disable-armvfp         disable ARM VFP optimizations
232   --disable-iwmmxt         disable iwmmxt optimizations
233   --disable-mmi            disable MMI optimizations
234   --disable-neon           disable neon optimizations
235   --disable-vis            disable VIS optimizations
236   --disable-yasm           disable use of yasm assembler
237   --enable-pic             build position-independent code
238   --malloc-prefix=PFX      prefix malloc and related names with PFX
239   --enable-sram            allow use of on-chip SRAM
240   --disable-symver         disable symbol versioning
241   --optflags               override optimization-related compiler flags
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" && echo "$2 is unchanged" && return
880     mkdir -p "$(dirname $2)"
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     avconv
918     avplay
919     avprobe
920     avserver
921     fft
922     frei0r
923     golomb
924     gpl
925     gray
926     h264dsp
927     h264pred
928     hardcoded_tables
929     huffman
930     libdc1394
931     libdirac
932     libfaac
933     libfreetype
934     libgsm
935     libmp3lame
936     libnut
937     libopencore_amrnb
938     libopencore_amrwb
939     libopencv
940     libopenjpeg
941     librtmp
942     libschroedinger
943     libspeex
944     libtheora
945     libvo_aacenc
946     libvo_amrwbenc
947     libvorbis
948     libvpx
949     libx264
950     libxavs
951     libxvid
952     lpc
953     lsp
954     mdct
955     memalign_hack
956     mlib
957     mpegaudiodsp
958     network
959     nonfree
960     pic
961     postproc
962     rdft
963     rtpdec
964     runtime_cpudetect
965     shared
966     sinewin
967     small
968     sram
969     static
970     swscale
971     swscale_alpha
972     thumb
973     vaapi
974     vdpau
975     version3
976     x11grab
977     zlib
978 "
979
980 THREADS_LIST='
981     pthreads
982     w32threads
983 '
984
985 ARCH_LIST='
986     alpha
987     arm
988     avr32
989     avr32_ap
990     avr32_uc
991     bfin
992     ia64
993     m68k
994     mips
995     mips64
996     parisc
997     ppc
998     ppc64
999     s390
1000     sh4
1001     sparc
1002     sparc64
1003     tomi
1004     x86
1005     x86_32
1006     x86_64
1007 '
1008
1009 ARCH_EXT_LIST='
1010     altivec
1011     amd3dnow
1012     amd3dnowext
1013     armv5te
1014     armv6
1015     armv6t2
1016     armvfp
1017     avx
1018     iwmmxt
1019     mmi
1020     mmx
1021     mmx2
1022     neon
1023     ppc4xx
1024     sse
1025     ssse3
1026     vfpv3
1027     vis
1028 '
1029
1030 HAVE_LIST_PUB='
1031     bigendian
1032     fast_unaligned
1033 '
1034
1035 HAVE_LIST="
1036     $ARCH_EXT_LIST
1037     $HAVE_LIST_PUB
1038     $THREADS_LIST
1039     aligned_stack
1040     alsa_asoundlib_h
1041     altivec_h
1042     arpa_inet_h
1043     attribute_may_alias
1044     attribute_packed
1045     bswap
1046     closesocket
1047     cmov
1048     dcbzl
1049     dev_bktr_ioctl_bt848_h
1050     dev_bktr_ioctl_meteor_h
1051     dev_ic_bt8xx_h
1052     dev_video_meteor_ioctl_meteor_h
1053     dev_video_bktr_ioctl_bt848_h
1054     dlfcn_h
1055     dlopen
1056     dos_paths
1057     ebp_available
1058     ebx_available
1059     exp2
1060     exp2f
1061     fast_64bit
1062     fast_clz
1063     fast_cmov
1064     fcntl
1065     fork
1066     getaddrinfo
1067     gethrtime
1068     GetProcessMemoryInfo
1069     GetProcessTimes
1070     getrusage
1071     gnu_as
1072     struct_rusage_ru_maxrss
1073     ibm_asm
1074     inet_aton
1075     inline_asm
1076     isatty
1077     ldbrx
1078     libdc1394_1
1079     libdc1394_2
1080     llrint
1081     llrintf
1082     local_aligned_16
1083     local_aligned_8
1084     localtime_r
1085     log2
1086     log2f
1087     loongson
1088     lrint
1089     lrintf
1090     lzo1x_999_compress
1091     machine_ioctl_bt848_h
1092     machine_ioctl_meteor_h
1093     malloc_h
1094     MapViewOfFile
1095     memalign
1096     mkstemp
1097     mmap
1098     posix_memalign
1099     round
1100     roundf
1101     sdl
1102     sdl_video_size
1103     setmode
1104     sndio_h
1105     socklen_t
1106     soundcard_h
1107     poll_h
1108     setrlimit
1109     strerror_r
1110     strptime
1111     strtok_r
1112     struct_addrinfo
1113     struct_ipv6_mreq
1114     struct_sockaddr_in6
1115     struct_sockaddr_sa_len
1116     struct_sockaddr_storage
1117     symver
1118     symver_gnu_asm
1119     symver_asm_label
1120     sys_mman_h
1121     sys_resource_h
1122     sys_select_h
1123     sys_soundcard_h
1124     sys_videoio_h
1125     threads
1126     trunc
1127     truncf
1128     vfp_args
1129     VirtualAlloc
1130     winsock2_h
1131     xform_asm
1132     xmm_clobbers
1133     yasm
1134 "
1135
1136 # options emitted with CONFIG_ prefix but not available on command line
1137 CONFIG_EXTRA="
1138     avutil
1139     gplv3
1140     lgplv3
1141 "
1142
1143 CMDLINE_SELECT="
1144     $ARCH_EXT_LIST
1145     $CONFIG_LIST
1146     $THREADS_LIST
1147     asm
1148     cross_compile
1149     debug
1150     extra_warnings
1151     logging
1152     optimizations
1153     symver
1154     yasm
1155 "
1156
1157 PATHS_LIST='
1158     bindir
1159     datadir
1160     incdir
1161     libdir
1162     mandir
1163     prefix
1164     shlibdir
1165 '
1166
1167 CMDLINE_SET="
1168     $PATHS_LIST
1169     ar
1170     arch
1171     as
1172     build_suffix
1173     cc
1174     cpu
1175     cross_prefix
1176     dep_cc
1177     extra_version
1178     host_cc
1179     host_cflags
1180     host_ldflags
1181     host_libs
1182     host_os
1183     ld
1184     logfile
1185     malloc_prefix
1186     nm
1187     optflags
1188     pkg_config
1189     samples
1190     sysinclude
1191     sysroot
1192     target_exec
1193     target_os
1194     target_path
1195 "
1196
1197 CMDLINE_APPEND="
1198     extra_cflags
1199 "
1200
1201 # code dependency declarations
1202
1203 # architecture extensions
1204
1205 armv5te_deps="arm"
1206 armv6_deps="arm"
1207 armv6t2_deps="arm"
1208 armvfp_deps="arm"
1209 iwmmxt_deps="arm"
1210 neon_deps="arm"
1211 vfpv3_deps="armvfp"
1212
1213 mmi_deps="mips"
1214
1215 altivec_deps="ppc"
1216 ppc4xx_deps="ppc"
1217
1218 vis_deps="sparc"
1219
1220 x86_64_suggest="cmov fast_cmov"
1221 amd3dnow_deps="mmx"
1222 amd3dnowext_deps="amd3dnow"
1223 mmx_deps="x86"
1224 mmx2_deps="mmx"
1225 sse_deps="mmx"
1226 ssse3_deps="sse"
1227 avx_deps="ssse3"
1228
1229 aligned_stack_if_any="ppc x86"
1230 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1231 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1232 fast_unaligned_if_any="armv6 ppc x86"
1233
1234 need_memalign="altivec neon sse"
1235 inline_asm_deps="!tms470"
1236
1237 symver_if_any="symver_asm_label symver_gnu_asm"
1238
1239 # subsystems
1240 dct_select="rdft"
1241 mdct_select="fft"
1242 rdft_select="fft"
1243 mpegaudiodsp_select="dct"
1244
1245 # decoders / encoders / hardware accelerators
1246 aac_decoder_select="mdct sinewin"
1247 aac_encoder_select="mdct sinewin"
1248 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1249 ac3_decoder_select="mdct ac3dsp ac3_parser"
1250 ac3_encoder_select="mdct ac3dsp"
1251 ac3_fixed_encoder_select="mdct ac3dsp"
1252 alac_encoder_select="lpc"
1253 amrnb_decoder_select="lsp"
1254 amrwb_decoder_select="lsp"
1255 atrac1_decoder_select="mdct sinewin"
1256 atrac3_decoder_select="mdct"
1257 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1258 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1259 cavs_decoder_select="golomb"
1260 cook_decoder_select="mdct sinewin"
1261 cscd_decoder_suggest="zlib"
1262 dca_decoder_select="mdct"
1263 dnxhd_encoder_select="aandct"
1264 dxa_decoder_select="zlib"
1265 eac3_decoder_select="ac3_decoder"
1266 eac3_encoder_select="mdct ac3dsp"
1267 eamad_decoder_select="aandct"
1268 eatgq_decoder_select="aandct"
1269 eatqi_decoder_select="aandct"
1270 ffv1_decoder_select="golomb"
1271 flac_decoder_select="golomb"
1272 flac_encoder_select="golomb lpc"
1273 flashsv_decoder_select="zlib"
1274 flashsv_encoder_select="zlib"
1275 flashsv2_decoder_select="zlib"
1276 flv_decoder_select="h263_decoder"
1277 flv_encoder_select="h263_encoder"
1278 fraps_decoder_select="huffman"
1279 h261_encoder_select="aandct"
1280 h263_decoder_select="h263_parser"
1281 h263_encoder_select="aandct"
1282 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1283 h263i_decoder_select="h263_decoder"
1284 h263p_encoder_select="h263_encoder"
1285 h264_decoder_select="golomb h264dsp h264pred"
1286 h264_dxva2_hwaccel_deps="dxva2api_h"
1287 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1288 h264_vaapi_hwaccel_select="vaapi"
1289 h264_vdpau_decoder_select="vdpau h264_decoder"
1290 imc_decoder_select="fft mdct sinewin"
1291 jpegls_decoder_select="golomb"
1292 jpegls_encoder_select="golomb"
1293 ljpeg_encoder_select="aandct"
1294 loco_decoder_select="golomb"
1295 mjpeg_encoder_select="aandct"
1296 mlp_decoder_select="mlp_parser"
1297 mp1_decoder_select="mpegaudiodsp"
1298 mp2_decoder_select="mpegaudiodsp"
1299 mp3adu_decoder_select="mpegaudiodsp"
1300 mp3_decoder_select="mpegaudiodsp"
1301 mp3on4_decoder_select="mpegaudiodsp"
1302 mp1float_decoder_select="mpegaudiodsp"
1303 mp2float_decoder_select="mpegaudiodsp"
1304 mp3adufloat_decoder_select="mpegaudiodsp"
1305 mp3float_decoder_select="mpegaudiodsp"
1306 mp3on4float_decoder_select="mpegaudiodsp"
1307 mpeg1video_encoder_select="aandct"
1308 mpeg2video_encoder_select="aandct"
1309 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1310 mpeg4_encoder_select="h263_encoder"
1311 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1312 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1313 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1314 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1315 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1316 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1317 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1318 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1319 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1320 msmpeg4v1_decoder_select="h263_decoder"
1321 msmpeg4v1_encoder_select="h263_encoder"
1322 msmpeg4v2_decoder_select="h263_decoder"
1323 msmpeg4v2_encoder_select="h263_encoder"
1324 msmpeg4v3_decoder_select="h263_decoder"
1325 msmpeg4v3_encoder_select="h263_encoder"
1326 nellymoser_decoder_select="mdct sinewin"
1327 nellymoser_encoder_select="mdct sinewin"
1328 png_decoder_select="zlib"
1329 png_encoder_select="zlib"
1330 qcelp_decoder_select="lsp"
1331 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1332 ra_144_encoder_select="lpc"
1333 rv10_decoder_select="h263_decoder"
1334 rv10_encoder_select="h263_encoder"
1335 rv20_decoder_select="h263_decoder"
1336 rv20_encoder_select="h263_encoder"
1337 rv30_decoder_select="golomb h264pred"
1338 rv40_decoder_select="golomb h264pred"
1339 shorten_decoder_select="golomb"
1340 sipr_decoder_select="lsp"
1341 snow_decoder_select="dwt"
1342 snow_encoder_select="aandct dwt"
1343 svq1_encoder_select="aandct"
1344 svq3_decoder_select="golomb h264dsp h264pred"
1345 svq3_decoder_suggest="zlib"
1346 theora_decoder_select="vp3_decoder"
1347 tiff_decoder_suggest="zlib"
1348 tiff_encoder_suggest="zlib"
1349 truehd_decoder_select="mlp_decoder"
1350 tscc_decoder_select="zlib"
1351 twinvq_decoder_select="mdct lsp sinewin"
1352 vc1_decoder_select="h263_decoder"
1353 vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1354 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1355 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1356 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1357 vorbis_decoder_select="mdct"
1358 vorbis_encoder_select="mdct"
1359 vp6_decoder_select="huffman"
1360 vp6a_decoder_select="vp6_decoder"
1361 vp6f_decoder_select="vp6_decoder"
1362 vp8_decoder_select="h264pred"
1363 wmapro_decoder_select="mdct sinewin"
1364 wmav1_decoder_select="mdct sinewin"
1365 wmav1_encoder_select="mdct sinewin"
1366 wmav2_decoder_select="mdct sinewin"
1367 wmav2_encoder_select="mdct sinewin"
1368 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1369 wmv1_decoder_select="h263_decoder"
1370 wmv1_encoder_select="h263_encoder"
1371 wmv2_decoder_select="h263_decoder"
1372 wmv2_encoder_select="h263_encoder"
1373 wmv3_decoder_select="vc1_decoder"
1374 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1375 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1376 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1377 zlib_decoder_select="zlib"
1378 zlib_encoder_select="zlib"
1379 zmbv_decoder_select="zlib"
1380 zmbv_encoder_select="zlib"
1381
1382 vaapi_deps="va_va_h"
1383 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1384
1385 # parsers
1386 h264_parser_select="golomb h264dsp h264pred"
1387
1388 # external libraries
1389 libdirac_decoder_deps="libdirac !libschroedinger"
1390 libdirac_encoder_deps="libdirac"
1391 libfaac_encoder_deps="libfaac"
1392 libgsm_decoder_deps="libgsm"
1393 libgsm_encoder_deps="libgsm"
1394 libgsm_ms_decoder_deps="libgsm"
1395 libgsm_ms_encoder_deps="libgsm"
1396 libmp3lame_encoder_deps="libmp3lame"
1397 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1398 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1399 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1400 libopenjpeg_decoder_deps="libopenjpeg"
1401 libschroedinger_decoder_deps="libschroedinger"
1402 libschroedinger_encoder_deps="libschroedinger"
1403 libspeex_decoder_deps="libspeex"
1404 libtheora_encoder_deps="libtheora"
1405 libvo_aacenc_encoder_deps="libvo_aacenc"
1406 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1407 libvorbis_encoder_deps="libvorbis"
1408 libvpx_decoder_deps="libvpx"
1409 libvpx_encoder_deps="libvpx"
1410 libx264_encoder_deps="libx264"
1411 libxavs_encoder_deps="libxavs"
1412 libxvid_encoder_deps="libxvid"
1413
1414 # demuxers / muxers
1415 ac3_demuxer_select="ac3_parser"
1416 asf_stream_muxer_select="asf_muxer"
1417 avisynth_demuxer_deps="avisynth"
1418 dirac_demuxer_select="dirac_parser"
1419 eac3_demuxer_select="ac3_parser"
1420 flac_demuxer_select="flac_parser"
1421 ipod_muxer_select="mov_muxer"
1422 libnut_demuxer_deps="libnut"
1423 libnut_muxer_deps="libnut"
1424 matroska_audio_muxer_select="matroska_muxer"
1425 matroska_demuxer_suggest="zlib bzlib"
1426 mov_demuxer_suggest="zlib"
1427 mp3_demuxer_select="mpegaudio_parser"
1428 mp4_muxer_select="mov_muxer"
1429 mpegtsraw_demuxer_select="mpegts_demuxer"
1430 mxf_d10_muxer_select="mxf_muxer"
1431 ogg_demuxer_select="golomb"
1432 psp_muxer_select="mov_muxer"
1433 rtp_demuxer_select="sdp_demuxer"
1434 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1435 rtsp_demuxer_select="http_protocol rtpdec"
1436 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1437 sap_demuxer_select="sdp_demuxer"
1438 sap_muxer_select="rtp_muxer rtp_protocol"
1439 sdp_demuxer_select="rtpdec"
1440 spdif_muxer_select="aac_parser"
1441 tg2_muxer_select="mov_muxer"
1442 tgp_muxer_select="mov_muxer"
1443 w64_demuxer_deps="wav_demuxer"
1444
1445 # indevs / outdevs
1446 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1447 alsa_outdev_deps="alsa_asoundlib_h"
1448 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1449 dv1394_indev_deps="dv1394 dv_demuxer"
1450 fbdev_indev_deps="linux_fb_h"
1451 jack_indev_deps="jack_jack_h"
1452 libdc1394_indev_deps="libdc1394"
1453 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1454 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1455 sndio_indev_deps="sndio_h"
1456 sndio_outdev_deps="sndio_h"
1457 v4l_indev_deps="linux_videodev_h"
1458 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1459 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1460 vfwcap_indev_extralibs="-lavicap32"
1461 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1462 x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1463
1464 # protocols
1465 gopher_protocol_deps="network"
1466 http_protocol_deps="network"
1467 http_protocol_select="tcp_protocol"
1468 mmsh_protocol_select="http_protocol"
1469 mmst_protocol_deps="network"
1470 rtmp_protocol_select="tcp_protocol"
1471 rtp_protocol_select="udp_protocol"
1472 tcp_protocol_deps="network"
1473 udp_protocol_deps="network"
1474
1475 # filters
1476 blackframe_filter_deps="gpl"
1477 cropdetect_filter_deps="gpl"
1478 drawtext_filter_deps="libfreetype"
1479 frei0r_filter_deps="frei0r dlopen strtok_r"
1480 frei0r_src_filter_deps="frei0r dlopen strtok_r"
1481 hqdn3d_filter_deps="gpl"
1482 ocv_filter_deps="libopencv"
1483 scale_filter_deps="swscale"
1484 yadif_filter_deps="gpl"
1485
1486 # libraries
1487 avdevice_deps="avcodec avformat"
1488 avformat_deps="avcodec"
1489 postproc_deps="gpl"
1490
1491 # programs
1492 ffmpeg_deps="avcodec avformat swscale"
1493 ffmpeg_select="buffer_filter"
1494 av_deps="avcodec avformat swscale"
1495 av_select="buffer_filter"
1496 avplay_deps="avcodec avformat swscale sdl"
1497 avplay_select="rdft"
1498 avprobe_deps="avcodec avformat"
1499 avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1500 avserver_extralibs='$ldl'
1501
1502 doc_deps="texi2html"
1503
1504 # tests
1505
1506 test_deps(){
1507     suf1=$1
1508     suf2=$2
1509     shift 2
1510     for v; do
1511         dep=${v%=*}
1512         tests=${v#*=}
1513         for name in ${tests}; do
1514             eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1515         done
1516     done
1517 }
1518
1519 test_deps _encoder _decoder                                             \
1520     adpcm_g726=g726                                                     \
1521     adpcm_ima_qt                                                        \
1522     adpcm_ima_wav                                                       \
1523     adpcm_ms                                                            \
1524     adpcm_swf                                                           \
1525     adpcm_yamaha=adpcm_yam                                              \
1526     alac                                                                \
1527     asv1                                                                \
1528     asv2                                                                \
1529     bmp                                                                 \
1530     dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1531     dvvideo="dv dv50"                                                   \
1532     ffv1                                                                \
1533     flac                                                                \
1534     flashsv                                                             \
1535     flv                                                                 \
1536     gif                                                                 \
1537     h261                                                                \
1538     h263="h263 h263p"                                                   \
1539     huffyuv                                                             \
1540     jpegls                                                              \
1541     mjpeg="jpg mjpeg ljpeg"                                             \
1542     mp2                                                                 \
1543     mpeg1video="mpeg mpeg1b"                                            \
1544     mpeg2video="mpeg2 mpeg2thread"                                      \
1545     mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc"                 \
1546     msmpeg4v3=msmpeg4                                                   \
1547     msmpeg4v2                                                           \
1548     pbm=pbmpipe                                                         \
1549     pcx                                                                 \
1550     pgm="pgm pgmpipe"                                                   \
1551     png                                                                 \
1552     ppm="ppm ppmpipe"                                                   \
1553     rawvideo="rgb yuv"                                                  \
1554     roq                                                                 \
1555     rv10                                                                \
1556     rv20                                                                \
1557     sgi                                                                 \
1558     snow="snow snowll"                                                  \
1559     svq1                                                                \
1560     targa=tga                                                           \
1561     tiff                                                                \
1562     wmav1                                                               \
1563     wmav2                                                               \
1564     wmv1                                                                \
1565     wmv2                                                                \
1566
1567 test_deps _muxer _demuxer                                               \
1568     aiff                                                                \
1569     pcm_alaw=alaw                                                       \
1570     asf                                                                 \
1571     au                                                                  \
1572     avi                                                                 \
1573     dv=dv_fmt                                                           \
1574     ffm                                                                 \
1575     flv=flv_fmt                                                         \
1576     gxf                                                                 \
1577     matroska=mkv                                                        \
1578     mmf                                                                 \
1579     mov                                                                 \
1580     pcm_mulaw=mulaw                                                     \
1581     mxf="mxf mxf_d10"                                                   \
1582     nut                                                                 \
1583     ogg                                                                 \
1584     rawvideo=pixfmt                                                     \
1585     rm                                                                  \
1586     swf                                                                 \
1587     mpegts=ts                                                           \
1588     voc                                                                 \
1589     wav                                                                 \
1590     yuv4mpegpipe=yuv4mpeg                                               \
1591
1592 ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
1593 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1594
1595 # default parameters
1596
1597 logfile="config.log"
1598
1599 # installation paths
1600 prefix_default="/usr/local"
1601 bindir_default='${prefix}/bin'
1602 datadir_default='${prefix}/share/avconv'
1603 incdir_default='${prefix}/include'
1604 libdir_default='${prefix}/lib'
1605 mandir_default='${prefix}/share/man'
1606 shlibdir_default="$libdir_default"
1607
1608 # toolchain
1609 ar_default="ar"
1610 cc_default="gcc"
1611 cc_version=\"unknown\"
1612 host_cc_default="gcc"
1613 ln_s="ln -sf"
1614 nm_default="nm"
1615 objformat="elf"
1616 pkg_config_default=pkg-config
1617 ranlib="ranlib"
1618 yasmexe="yasm"
1619 nogas=":"
1620
1621 nm_opts='-g'
1622
1623 # machine
1624 arch_default=$(uname -m)
1625 cpu="generic"
1626
1627 # OS
1628 target_os_default=$(tolower $(uname -s))
1629 host_os=$target_os_default
1630
1631 # configurable options
1632 enable avcodec
1633 enable avdevice
1634 enable avfilter
1635 enable avformat
1636 enable avutil
1637 enable asm
1638 enable debug
1639 enable doc
1640 enable fastdiv
1641 enable ffmpeg
1642 enable avconv
1643 enable avplay
1644 enable avprobe
1645 enable avserver
1646 enable network
1647 enable optimizations
1648 enable postproc
1649 enable protocols
1650 enable static
1651 enable swscale
1652 enable swscale_alpha
1653
1654 # build settings
1655 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1656 AVSERVERLDFLAGS=-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 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1668 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1669
1670 AS_O='-o $@'
1671 CC_O='-o $@'
1672
1673 host_cflags='-D_ISOC99_SOURCE -O3 -g'
1674 host_libs='-lm'
1675
1676 target_path='$(CURDIR)'
1677
1678 # since the object filename is not given with the -MM flag, the compiler
1679 # is only able to print the basename, and we must add the path ourselves
1680 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1681 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1682
1683 # find source path
1684 if test -f configure; then
1685     source_path=.
1686 else
1687     source_path=$(cd $(dirname "$0"); 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     add_ldflags -xc99
2024     speed_cflags='-O5'
2025     size_cflags='-O5 -xspace'
2026     filter_cflags=suncc_flags
2027     suncc_flags(){
2028         for flag; do
2029             case $flag in
2030                 -march=*|-mcpu=*)
2031                     case "${flag#*=}" in
2032                         native)                   echo -xtarget=native       ;;
2033                         v9|niagara)               echo -xarch=sparc          ;;
2034                         ultrasparc)               echo -xarch=sparcvis       ;;
2035                         ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2036                         i586|pentium)             echo -xchip=pentium        ;;
2037                         i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2038                         pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2039                         pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2040                         pentium4*)          echo -xtarget=pentium4           ;;
2041                         prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2042                         *-sse3)             echo -xarch=sse3                 ;;
2043                         core2)              echo -xarch=ssse3 -xchip=core2   ;;
2044                         amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2045                         athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2046                         k8|opteron|athlon64|athlon-fx)
2047                                                   echo -xarch=sse2a          ;;
2048                         athlon*)                  echo -xarch=pentium_proa   ;;
2049                     esac
2050                     ;;
2051                 -std=c99)             echo -xc99              ;;
2052                 -fomit-frame-pointer) echo -xregs=frameptr    ;;
2053                 -fPIC)                echo -KPIC -xcode=pic32 ;;
2054                 -W*,*)                echo $flag              ;;
2055                 -f*-*|-W*)                                    ;;
2056                 *)                    echo $flag              ;;
2057             esac
2058         done
2059     }
2060 elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2061     cc_type=pathscale
2062     cc_version=__PATHSCALE__
2063     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2064     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2065     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2066     speed_cflags='-O2'
2067     size_cflags='-Os'
2068     filter_cflags='filter_out -Wdisabled-optimization'
2069 elif $cc -v 2>&1 | grep -q Open64; then
2070     cc_type=open64
2071     cc_version=__OPEN64__
2072     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2073     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2074     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2075     speed_cflags='-O2'
2076     size_cflags='-Os'
2077     filter_cflags='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2078 fi
2079
2080 test -n "$cc_type" && enable $cc_type ||
2081     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2082
2083 : ${as_default:=$cc}
2084 : ${dep_cc_default:=$cc}
2085 : ${ld_default:=$cc}
2086 set_default ar as dep_cc ld
2087
2088 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2089 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2090
2091 add_cflags $extra_cflags
2092 add_asflags $extra_cflags
2093
2094 if test -n "$sysroot"; then
2095     case "$cc_type" in
2096         gcc|llvm_gcc|clang)
2097             add_cppflags --sysroot="$sysroot"
2098             add_ldflags --sysroot="$sysroot"
2099         ;;
2100         tms470)
2101             add_cppflags -I"$sysinclude"
2102             add_ldflags  --sysroot="$sysroot"
2103         ;;
2104     esac
2105 fi
2106
2107 if test "$cpu" = host; then
2108     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2109
2110     case "$cc_type" in
2111         gcc|llvm_gcc)
2112             check_native(){
2113                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2114                 sed -n "/cc1.*$1=/{
2115                             s/.*$1=\\([^ ]*\\).*/\\1/
2116                             p
2117                             q
2118                         }" $TMPE
2119             }
2120             cpu=$(check_native -march || check_native -mcpu)
2121         ;;
2122     esac
2123
2124     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2125 fi
2126
2127 # Deal with common $arch aliases
2128 case "$arch" in
2129     arm*)
2130         arch="arm"
2131     ;;
2132     mips|mipsel|IP*)
2133         arch="mips"
2134     ;;
2135     mips64*)
2136         arch="mips"
2137         subarch="mips64"
2138     ;;
2139     parisc|hppa)
2140         arch="parisc"
2141     ;;
2142     parisc64|hppa64)
2143         arch="parisc"
2144         subarch="parisc64"
2145     ;;
2146     "Power Macintosh"|ppc|powerpc)
2147         arch="ppc"
2148     ;;
2149     ppc64|powerpc64)
2150         arch="ppc"
2151         subarch="ppc64"
2152     ;;
2153     s390|s390x)
2154         arch="s390"
2155     ;;
2156     sh4|sh)
2157         arch="sh4"
2158     ;;
2159     sun4u|sparc64)
2160         arch="sparc"
2161         subarch="sparc64"
2162     ;;
2163     i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2164         arch="x86"
2165     ;;
2166 esac
2167
2168 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2169 enable $arch
2170
2171 # Add processor-specific flags
2172 if test "$cpu" = generic; then
2173     : do nothing
2174 elif enabled ppc; then
2175
2176     case $(tolower $cpu) in
2177         601|ppc601|powerpc601)
2178             cpuflags="-mcpu=601"
2179             disable altivec
2180         ;;
2181         603*|ppc603*|powerpc603*)
2182             cpuflags="-mcpu=603"
2183             disable altivec
2184         ;;
2185         604*|ppc604*|powerpc604*)
2186             cpuflags="-mcpu=604"
2187             disable altivec
2188         ;;
2189         g3|75*|ppc75*|powerpc75*)
2190             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2191             disable altivec
2192         ;;
2193         g4|745*|ppc745*|powerpc745*)
2194             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2195         ;;
2196         74*|ppc74*|powerpc74*)
2197             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2198         ;;
2199         g5|970|ppc970|powerpc970|power4*)
2200             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2201         ;;
2202         cell)
2203             cpuflags="-mcpu=cell"
2204             enable ldbrx
2205         ;;
2206         e500v2)
2207             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2208             disable altivec
2209         ;;
2210         e500)
2211             cpuflags="-mcpu=8540 -mhard-float"
2212             disable altivec
2213         ;;
2214     esac
2215
2216 elif enabled x86; then
2217
2218     case $cpu in
2219         i[345]86|pentium)
2220             cpuflags="-march=$cpu"
2221             disable mmx
2222         ;;
2223         # targets that do NOT support conditional mov (cmov)
2224         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2225             cpuflags="-march=$cpu"
2226             disable cmov
2227         ;;
2228         # targets that do support conditional mov (cmov)
2229         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
2230             cpuflags="-march=$cpu"
2231             enable cmov
2232             enable fast_cmov
2233         ;;
2234         # targets that do support conditional mov but on which it's slow
2235         pentium4|pentium4m|prescott|nocona)
2236             cpuflags="-march=$cpu"
2237             enable cmov
2238             disable fast_cmov
2239         ;;
2240     esac
2241
2242 elif enabled sparc; then
2243
2244     case $cpu in
2245         niagara)
2246             cpuflags="-mcpu=$cpu"
2247             disable vis
2248         ;;
2249         sparc64)
2250             cpuflags="-mcpu=v9"
2251         ;;
2252     esac
2253
2254 elif enabled arm; then
2255
2256     case $cpu in
2257         armv*)
2258             cpuflags="-march=$cpu"
2259             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2260         ;;
2261         *)
2262             cpuflags="-mcpu=$cpu"
2263             case $cpu in
2264                 cortex-a*)                               subarch=armv7a  ;;
2265                 cortex-r*)                               subarch=armv7r  ;;
2266                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2267                 arm11*)                                  subarch=armv6   ;;
2268                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2269                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2270             esac
2271         ;;
2272     esac
2273
2274 elif enabled alpha; then
2275
2276     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2277
2278 elif enabled bfin; then
2279
2280     cpuflags="-mcpu=$cpu"
2281
2282 elif enabled mips; then
2283
2284     cpuflags="-march=$cpu"
2285
2286 elif enabled avr32; then
2287
2288     case $cpu in
2289         ap7[02]0[0-2])
2290             subarch="avr32_ap"
2291             cpuflags="-mpart=$cpu"
2292         ;;
2293         ap)
2294             subarch="avr32_ap"
2295             cpuflags="-march=$cpu"
2296         ;;
2297         uc3[ab]*)
2298             subarch="avr32_uc"
2299             cpuflags="-mcpu=$cpu"
2300         ;;
2301         uc)
2302             subarch="avr32_uc"
2303             cpuflags="-march=$cpu"
2304         ;;
2305     esac
2306
2307 fi
2308
2309 add_cflags $cpuflags
2310 add_asflags $cpuflags
2311
2312 # compiler sanity check
2313 check_exec <<EOF
2314 int main(void){ return 0; }
2315 EOF
2316 if test "$?" != 0; then
2317     echo "$cc is unable to create an executable file."
2318     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2319         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2320         echo "Only do this if you know what cross compiling means."
2321     fi
2322     die "C compiler test failed."
2323 fi
2324
2325 add_cppflags -D_ISOC99_SOURCE
2326 check_cflags -std=c99
2327 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2328 #include <stdlib.h>
2329 EOF
2330 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2331 #include <stdlib.h>
2332 EOF
2333
2334 check_host_cflags -std=c99
2335 check_host_cflags -Wall
2336
2337 case "$arch" in
2338     alpha|ia64|mips|parisc|sparc)
2339         spic=$shared
2340     ;;
2341     x86)
2342         subarch="x86_32"
2343         check_cc <<EOF && subarch="x86_64"
2344         int test[(int)sizeof(char*) - 7];
2345 EOF
2346         if test "$subarch" = "x86_64"; then
2347             spic=$shared
2348         fi
2349     ;;
2350 esac
2351
2352 enable $subarch
2353 enabled spic && enable pic
2354
2355 # OS specific
2356 case $target_os in
2357     haiku)
2358         prefix_default="/boot/common"
2359         network_extralibs="-lnetwork"
2360         host_libs=
2361         ;;
2362     sunos)
2363         AVSERVERLDFLAGS=""
2364         SHFLAGS='-shared -Wl,-h,$$(@F)'
2365         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2366         network_extralibs="-lsocket -lnsl"
2367         add_cppflags -D__EXTENSIONS__
2368         nm_opts='-P -g'
2369         ;;
2370     netbsd)
2371         disable symver
2372         oss_indev_extralibs="-lossaudio"
2373         oss_outdev_extralibs="-lossaudio"
2374         ;;
2375     openbsd)
2376         enable malloc_aligned
2377         # On OpenBSD 4.5. the compiler does not use PIC unless
2378         # explicitly using -fPIC. Libav builds fine without PIC,
2379         # however the generated executable will not do anything
2380         # (simply quits with exit-code 1, no crash, no output).
2381         # Thus explicitly enable PIC here.
2382         enable pic
2383         disable symver
2384         SHFLAGS='-shared'
2385         oss_indev_extralibs="-lossaudio"
2386         oss_outdev_extralibs="-lossaudio"
2387         ;;
2388     dragonfly)
2389         enable malloc_aligned
2390         disable symver
2391         ;;
2392     freebsd)
2393         enable malloc_aligned
2394         ;;
2395     bsd/os)
2396         add_extralibs -lpoll -lgnugetopt
2397         ;;
2398     darwin)
2399         enable malloc_aligned
2400         gas="gas-preprocessor.pl $cc"
2401         enabled ppc && add_asflags -force_cpusubtype_ALL
2402         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2403         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2404         add_ldflags -Wl,-dynamic,-search_paths_first
2405         SLIBSUF=".dylib"
2406         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2407         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2408         AVSERVERLDFLAGS=-Wl,-bind_at_load
2409         objformat="macho"
2410         enabled x86_64 && objformat="macho64"
2411         enabled_any pic shared ||
2412             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2413         ;;
2414     mingw32*)
2415         if test $target_os = "mingw32ce"; then
2416             disable network
2417         else
2418             target_os=mingw32
2419         fi
2420         LIBTARGET=i386
2421         if enabled x86_64; then
2422             enable malloc_aligned
2423             LIBTARGET="i386:x86-64"
2424         elif enabled arm; then
2425             LIBTARGET=arm-wince
2426         fi
2427         shlibdir_default="$bindir_default"
2428         SLIBPREF=""
2429         SLIBSUF=".dll"
2430         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2431         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2432         SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
2433         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2434         SLIB_INSTALL_LINKS=
2435         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2436         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2437         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'
2438         objformat="win32"
2439         dlltool="${cross_prefix}dlltool"
2440         enable dos_paths
2441         check_cflags -fno-common
2442         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2443                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2444                 die "ERROR: MinGW runtime version must be >= 3.15."
2445         add_cppflags -U__STRICT_ANSI__
2446         ;;
2447     cygwin*)
2448         target_os=cygwin
2449         shlibdir_default="$bindir_default"
2450         SLIBPREF="cyg"
2451         SLIBSUF=".dll"
2452         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2453         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2454         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2455         objformat="win32"
2456         enable dos_paths
2457         check_cflags -fno-common
2458         add_cppflags -U__STRICT_ANSI__
2459         ;;
2460     *-dos|freedos|opendos)
2461         network_extralibs="-lsocket"
2462         objformat="coff"
2463         enable dos_paths
2464         add_cppflags -U__STRICT_ANSI__
2465         ;;
2466     linux)
2467         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2468         enable dv1394
2469         ;;
2470     irix*)
2471         target_os=irix
2472         ranlib="echo ignoring ranlib"
2473         ;;
2474     os/2*)
2475         ln_s="cp -f"
2476         objformat="aout"
2477         add_cppflags -D_GNU_SOURCE
2478         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2479         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2480         AVSERVERLDFLAGS=""
2481         LIBSUF="_s.a"
2482         SLIBPREF=""
2483         SLIBSUF=".dll"
2484         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2485         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2486         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2487           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2488           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2489           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2490           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2491           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2492         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2493           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2494         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2495         enable dos_paths
2496         ;;
2497     gnu/kfreebsd)
2498         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
2499         ;;
2500     gnu)
2501         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2502         ;;
2503     qnx)
2504         add_cppflags -D_QNX_SOURCE
2505         network_extralibs="-lsocket"
2506         ;;
2507     symbian)
2508         SLIBSUF=".dll"
2509         enable dos_paths
2510         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2511         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2512         add_ldflags -Wl,--target1-abs,--no-undefined \
2513                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2514                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2515         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2516                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2517                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
2518         ;;
2519     none)
2520         ;;
2521     *)
2522         die "Unknown OS '$target_os'."
2523         ;;
2524 esac
2525
2526 echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$LIBAV_CONFIGURATION" >config.fate
2527
2528 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2529
2530 set_default $PATHS_LIST
2531
2532 # we need to build at least one lib type
2533 if ! enabled_any static shared; then
2534     cat <<EOF
2535 At least one library type must be built.
2536 Specify --enable-static to build the static libraries or --enable-shared to
2537 build the shared libraries as well. To only build the shared libraries specify
2538 --disable-static in addition to --enable-shared.
2539 EOF
2540     exit 1;
2541 fi
2542
2543 die_license_disabled() {
2544     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2545 }
2546
2547 die_license_disabled gpl libx264
2548 die_license_disabled gpl libxavs
2549 die_license_disabled gpl libxvid
2550 die_license_disabled gpl x11grab
2551
2552 die_license_disabled nonfree libfaac
2553
2554 die_license_disabled version3 libopencore_amrnb
2555 die_license_disabled version3 libopencore_amrwb
2556 die_license_disabled version3 libvo_aacenc
2557 die_license_disabled version3 libvo_amrwbenc
2558
2559 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2560
2561 disabled optimizations || check_cflags -fomit-frame-pointer
2562
2563 enable_pic() {
2564     enable pic
2565     add_cppflags -DPIC
2566     add_cflags   -fPIC
2567     add_asflags  -fPIC
2568 }
2569
2570 enabled pic && enable_pic
2571
2572 check_cc <<EOF || die "Symbol mangling check failed."
2573 int ff_extern;
2574 EOF
2575 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2576 extern_prefix=${sym%%ff_extern*}
2577
2578 check_cc <<EOF && enable inline_asm
2579 void foo(void) { __asm__ volatile ("" ::); }
2580 EOF
2581
2582 _restrict=
2583 for restrict_keyword in restrict __restrict__ __restrict; do
2584     check_cc <<EOF && _restrict=$restrict_keyword && break
2585 void foo(char * $restrict_keyword p);
2586 EOF
2587 done
2588
2589 check_cc <<EOF && enable attribute_packed
2590 struct { int x; } __attribute__((packed)) x;
2591 EOF
2592
2593 check_cc <<EOF && enable attribute_may_alias
2594 union { int x; } __attribute__((may_alias)) x;
2595 EOF
2596
2597 check_cc <<EOF || die "endian test failed"
2598 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2599 EOF
2600 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2601
2602 if enabled alpha; then
2603
2604     check_cflags -mieee
2605
2606 elif enabled arm; then
2607
2608     enabled thumb && check_cflags -mthumb || check_cflags -marm
2609     nogas=die
2610
2611     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2612         enable vfp_args
2613     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2614         case "${cross_prefix:-$cc}" in
2615             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
2616             *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2617 __asm__ (".eabi_attribute 28, 1");
2618 int main(void) { return 0; }
2619 EOF
2620         esac
2621         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2622     fi
2623
2624     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2625     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2626     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2627     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2628     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2629     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2630     enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
2631
2632     enabled_all armv6t2 shared !pic && enable_pic
2633
2634 elif enabled mips; then
2635
2636     check_asm loongson '"dmult.g $1, $2, $3"'
2637     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2638
2639 elif enabled ppc; then
2640
2641     enable local_aligned_8 local_aligned_16
2642
2643     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2644     check_asm ibm_asm   '"add 0, 0, 0"'
2645     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2646     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2647
2648     # AltiVec flags: The FSF version of GCC differs from the Apple version
2649     if enabled altivec; then
2650         nogas=warn
2651         check_cflags -maltivec -mabi=altivec &&
2652         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2653         check_cflags -faltivec
2654
2655         # check if our compiler supports Motorola AltiVec C API
2656         check_cc <<EOF || disable altivec
2657 $inc_altivec_h
2658 int main(void) {
2659     vector signed int v1, v2, v3;
2660     v1 = vec_add(v2,v3);
2661     return 0;
2662 }
2663 EOF
2664
2665         # check if our compiler supports braces for vector declarations
2666         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2667 $inc_altivec_h
2668 int main (void) { (vector int) {1}; return 0; }
2669 EOF
2670     fi
2671
2672 elif enabled sparc; then
2673
2674     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2675         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2676
2677 elif enabled x86; then
2678
2679     enable local_aligned_8 local_aligned_16
2680
2681     # check whether EBP is available on x86
2682     # As 'i' is stored on the stack, this program will crash
2683     # if the base pointer is used to access it because the
2684     # base pointer is cleared in the inline assembly code.
2685     check_exec_crash <<EOF && enable ebp_available
2686     volatile int i=0;
2687     __asm__ volatile (
2688         "xorl %%ebp, %%ebp"
2689     ::: "%ebp");
2690     return i;
2691 EOF
2692
2693     # check whether EBX is available on x86
2694     check_asm ebx_available '""::"b"(0)' &&
2695         check_asm ebx_available '"":::"%ebx"'
2696
2697     # check whether xmm clobbers are supported
2698     check_asm xmm_clobbers '"":::"%xmm0"'
2699
2700     # check whether binutils is new enough to compile SSSE3/MMX2
2701     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2702     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2703
2704     check_asm bswap '"bswap %%eax" ::: "%eax"'
2705
2706     if ! disabled_any asm mmx yasm; then
2707         if check_cmd $yasmexe --version; then
2708             enabled x86_64 && yasm_extra="-m amd64"
2709             yasm_debug="-g dwarf2"
2710         elif check_cmd nasm -v; then
2711             yasmexe=nasm
2712             yasm_debug="-g -F dwarf"
2713             enabled x86_64 && test "$objformat" = elf && objformat=elf64
2714         fi
2715
2716         YASMFLAGS="-f $objformat $yasm_extra"
2717         enabled pic               && append YASMFLAGS "-DPIC"
2718         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2719         case "$objformat" in
2720             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2721         esac
2722
2723         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2724             die "yasm not found, use --disable-yasm for a crippled build"
2725         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
2726     fi
2727
2728     case "$cpu" in
2729         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2730             disable fast_clz
2731         ;;
2732     esac
2733
2734 fi
2735
2736 if enabled asm; then
2737     as=${gas:=$as}
2738     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2739         $nogas "GNU assembler not found, install gas-preprocessor"
2740 fi
2741
2742 check_ldflags -Wl,--as-needed
2743
2744 if check_func dlopen; then
2745     ldl=
2746 elif check_func dlopen -ldl; then
2747     ldl=-ldl
2748 fi
2749
2750 if enabled network; then
2751     check_type "sys/types.h sys/socket.h" socklen_t
2752     check_type netdb.h "struct addrinfo"
2753     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2754     check_type netinet/in.h "struct sockaddr_in6"
2755     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2756     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2757     # Prefer arpa/inet.h over winsock2
2758     if check_header arpa/inet.h ; then
2759         check_func closesocket
2760     elif check_header winsock2.h ; then
2761         check_func_headers winsock2.h closesocket -lws2 && \
2762             network_extralibs="-lws2" || \
2763         { check_func_headers winsock2.h closesocket -lws2_32 && \
2764             network_extralibs="-lws2_32"; }
2765         check_type ws2tcpip.h socklen_t
2766         check_type ws2tcpip.h "struct addrinfo"
2767         check_type ws2tcpip.h "struct ipv6_mreq"
2768         check_type ws2tcpip.h "struct sockaddr_in6"
2769         check_type ws2tcpip.h "struct sockaddr_storage"
2770         check_struct winsock2.h "struct sockaddr" sa_len
2771     else
2772         disable network
2773     fi
2774 fi
2775
2776 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2777 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2778
2779 check_func  fcntl
2780 check_func  fork
2781 check_func  getaddrinfo $network_extralibs
2782 check_func  gethrtime
2783 check_func  getrusage
2784 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2785 check_func  inet_aton $network_extralibs
2786 check_func  isatty
2787 check_func  localtime_r
2788 check_func  ${malloc_prefix}memalign            && enable memalign
2789 check_func  mkstemp
2790 check_func  mmap
2791 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2792 check_func  setrlimit
2793 check_func  strerror_r
2794 check_func  strptime
2795 check_func  strtok_r
2796 check_func_headers io.h setmode
2797 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2798 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2799 check_func_headers windows.h GetProcessTimes
2800 check_func_headers windows.h MapViewOfFile
2801 check_func_headers windows.h VirtualAlloc
2802
2803 check_header dlfcn.h
2804 check_header dxva2api.h
2805 check_header malloc.h
2806 check_header poll.h
2807 check_header sys/mman.h
2808 check_header sys/resource.h
2809 check_header sys/select.h
2810 check_header vdpau/vdpau.h
2811 check_header vdpau/vdpau_x11.h
2812 check_header X11/extensions/XvMClib.h
2813
2814 check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2815
2816 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2817 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2818
2819 # check for some common methods of building with pthread support
2820 # do this before the optional library checks as some of them require pthreads
2821 if ! disabled pthreads && ! enabled w32threads; then
2822     enable pthreads
2823     if check_func pthread_create; then
2824         :
2825     elif check_func pthread_create -pthread; then
2826         add_cflags -pthread
2827         add_extralibs -pthread
2828     elif check_func pthread_create -pthreads; then
2829         add_cflags -pthreads
2830         add_extralibs -pthreads
2831     elif check_func pthread_create -lpthreadGC2; then
2832         add_extralibs -lpthreadGC2
2833     elif ! check_lib pthread.h pthread_create -lpthread; then
2834         disable pthreads
2835     fi
2836 fi
2837
2838 for thread in $THREADS_LIST; do
2839     if enabled $thread; then
2840         test -n "$thread_type" &&
2841             die "ERROR: Only one thread type must be selected." ||
2842             thread_type="$thread"
2843     fi
2844 done
2845
2846 check_lib math.h sin -lm && LIBM="-lm"
2847 enabled vaapi && require vaapi va/va.h vaInitialize -lva
2848
2849 check_mathfunc exp2
2850 check_mathfunc exp2f
2851 check_mathfunc llrint
2852 check_mathfunc llrintf
2853 check_mathfunc log2
2854 check_mathfunc log2f
2855 check_mathfunc lrint
2856 check_mathfunc lrintf
2857 check_mathfunc round
2858 check_mathfunc roundf
2859 check_mathfunc trunc
2860 check_mathfunc truncf
2861
2862 # these are off by default, so fail if requested and not available
2863 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2864 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2865 enabled libdirac   && require_pkg_config dirac                          \
2866     "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h"  \
2867     "dirac_decoder_init dirac_encoder_init"
2868 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2869 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
2870 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2871 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
2872 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2873 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2874 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2875 enabled libopencv  && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
2876 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2877 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
2878 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
2879 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2880 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2881 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
2882 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
2883 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2884 enabled libvpx     && {
2885     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2886                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
2887     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2888                                 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2889 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2890                       { check_cpp_condition x264.h "X264_BUILD >= 115" ||
2891                         die "ERROR: libx264 version must be >= 0.115."; }
2892 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2893 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2894 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2895
2896 # libdc1394 check
2897 if enabled libdc1394; then
2898     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2899         enable libdc1394_2; } ||
2900     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2901         enable libdc1394_1; } ||
2902     die "ERROR: No version of libdc1394 found "
2903 fi
2904
2905 if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
2906     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2907     enable sdl &&
2908     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2909 fi
2910
2911 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2912
2913 check_header linux/fb.h
2914 check_header linux/videodev.h
2915 check_header linux/videodev2.h
2916 check_header sys/videoio.h
2917
2918 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2919 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2920 # w32api 3.12 had it defined wrong
2921 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2922
2923 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2924 { check_header dev/bktr/ioctl_meteor.h &&
2925   check_header dev/bktr/ioctl_bt848.h; } ||
2926 { check_header machine/ioctl_meteor.h &&
2927   check_header machine/ioctl_bt848.h; } ||
2928 { check_header dev/video/meteor/ioctl_meteor.h &&
2929   check_header dev/video/bktr/ioctl_bt848.h; } ||
2930 check_header dev/ic/bt8xx.h
2931
2932 check_header sndio.h
2933 check_header sys/soundcard.h
2934 check_header soundcard.h
2935
2936 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2937
2938 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2939
2940 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
2941
2942 enabled x11grab                         &&
2943 check_header X11/Xlib.h                 &&
2944 check_header X11/extensions/XShm.h      &&
2945 check_header X11/extensions/Xfixes.h    &&
2946 check_func XOpenDisplay -lX11           &&
2947 check_func XShmCreateImage -lX11 -lXext &&
2948 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2949
2950 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2951 check_cpp_condition \
2952     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2953     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2954       disable vdpau; }
2955 fi
2956
2957 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2958
2959 # add some useful compiler flags if supported
2960 check_cflags -Wdeclaration-after-statement
2961 check_cflags -Wall
2962 check_cflags -Wno-parentheses
2963 check_cflags -Wno-switch
2964 check_cflags -Wno-format-zero-length
2965 check_cflags -Wdisabled-optimization
2966 check_cflags -Wpointer-arith
2967 check_cflags -Wredundant-decls
2968 check_cflags -Wno-pointer-sign
2969 check_cflags -Wcast-qual
2970 check_cflags -Wwrite-strings
2971 check_cflags -Wtype-limits
2972 check_cflags -Wundef
2973 check_cflags -Wmissing-prototypes
2974 enabled extra_warnings && check_cflags -Winline
2975
2976 # add some linker flags
2977 check_ldflags -Wl,--warn-common
2978 check_ldflags -Wl,-rpath-link=libpostproc:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
2979 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
2980
2981 echo "X{};" > $TMPV
2982 if test_ldflags -Wl,--version-script,$TMPV; then
2983     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2984     check_cc <<EOF && enable symver_asm_label
2985 void ff_foo(void) __asm__ ("av_foo@VERSION");
2986 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2987 EOF
2988     check_cc <<EOF && enable symver_gnu_asm
2989 __asm__(".symver ff_foo,av_foo@VERSION");
2990 void ff_foo(void) {}
2991 EOF
2992 fi
2993
2994 if [ -n "$optflags" ]; then
2995     add_cflags $optflags
2996 elif enabled small; then
2997     add_cflags $size_cflags
2998 elif enabled optimizations; then
2999     add_cflags $speed_cflags
3000 else
3001     add_cflags $noopt_cflags
3002 fi
3003 check_cflags -fno-math-errno
3004 check_cflags -fno-signed-zeros
3005
3006 if enabled icc; then
3007     # Just warnings, no remarks
3008     check_cflags -w1
3009     # -wd: Disable following warnings
3010     # 144, 167, 556: -Wno-pointer-sign
3011     # 1292: attribute "foo" ignored
3012     # 10006: ignoring unknown option -fno-signed-zeros
3013     # 10148: ignoring unknown option -Wno-parentheses
3014     # 10156: ignoring option '-W'; no argument required
3015     check_cflags -wd144,167,556,1292,10006,10148,10156
3016     # 11030: Warning unknown option --as-needed
3017     # 10156: ignoring option '-export'; no argument required
3018     check_ldflags -wd10156,11030
3019     # Allow to compile with optimizations
3020     check_ldflags -march=$cpu
3021     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3022     enable ebp_available
3023     if enabled x86_32; then
3024         test ${icc_version%%.*} -ge 11 && \
3025             check_cflags -falign-stack=maintain-16-byte || \
3026             disable aligned_stack
3027     fi
3028 elif enabled ccc; then
3029     # disable some annoying warnings
3030     add_cflags -msg_disable cvtu32to64
3031     add_cflags -msg_disable embedcomment
3032     add_cflags -msg_disable needconstext
3033     add_cflags -msg_disable nomainieee
3034     add_cflags -msg_disable ptrmismatch1
3035     add_cflags -msg_disable unreachcode
3036 elif enabled gcc; then
3037     check_cflags -fno-tree-vectorize
3038     check_cflags -Werror=implicit-function-declaration
3039     check_cflags -Werror=missing-prototypes
3040 elif enabled llvm_gcc; then
3041     check_cflags -mllvm -stack-alignment=16
3042 elif enabled clang; then
3043     check_cflags -mllvm -stack-alignment=16
3044     check_cflags -Qunused-arguments
3045 elif enabled armcc; then
3046     # 2523: use of inline assembler is deprecated
3047     add_cflags -W${armcc_opt},--diag_suppress=2523
3048     add_cflags -W${armcc_opt},--diag_suppress=1207
3049     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3050     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3051     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3052     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3053 elif enabled tms470; then
3054     add_cflags -pds=824 -pds=837
3055 elif enabled pathscale; then
3056     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3057 fi
3058
3059 enabled_any $THREADS_LIST      && enable threads
3060
3061 check_deps $CONFIG_LIST       \
3062            $CONFIG_EXTRA      \
3063            $HAVE_LIST         \
3064            $DECODER_LIST      \
3065            $ENCODER_LIST      \
3066            $HWACCEL_LIST      \
3067            $PARSER_LIST       \
3068            $BSF_LIST          \
3069            $DEMUXER_LIST      \
3070            $MUXER_LIST        \
3071            $FILTER_LIST       \
3072            $INDEV_LIST        \
3073            $OUTDEV_LIST       \
3074            $PROTOCOL_LIST     \
3075            $ACODEC_TESTS      \
3076            $VCODEC_TESTS      \
3077            $LAVF_TESTS        \
3078            $LAVFI_TESTS       \
3079            $SEEK_TESTS        \
3080
3081 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3082
3083 ! enabled_any memalign posix_memalign malloc_aligned &&
3084     enabled_any $need_memalign && enable memalign_hack
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 "${yasmexe}                      ${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 "AVX enabled               ${avx-no}"
3107     echo "CMOV enabled              ${cmov-no}"
3108     echo "CMOV is fast              ${fast_cmov-no}"
3109     echo "EBX available             ${ebx_available-no}"
3110     echo "EBP available             ${ebp_available-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 "optimize for size         ${small-no}"
3133 echo "optimizations             ${optimizations-no}"
3134 echo "static                    ${static-no}"
3135 echo "shared                    ${shared-no}"
3136 echo "postprocessing support    ${postproc-no}"
3137 echo "new filter support        ${avfilter-no}"
3138 echo "network support           ${network-no}"
3139 echo "threading support         ${thread_type-no}"
3140 echo "SDL support               ${sdl-no}"
3141 echo "Sun medialib support      ${mlib-no}"
3142 echo "libdxva2 enabled          ${dxva2-no}"
3143 echo "libva enabled             ${vaapi-no}"
3144 echo "libvdpau enabled          ${vdpau-no}"
3145 echo "AVISynth enabled          ${avisynth-no}"
3146 echo "frei0r enabled            ${frei0r-no}"
3147 echo "libdc1394 support         ${libdc1394-no}"
3148 echo "libdirac enabled          ${libdirac-no}"
3149 echo "libfaac enabled           ${libfaac-no}"
3150 echo "libgsm enabled            ${libgsm-no}"
3151 echo "libmp3lame enabled        ${libmp3lame-no}"
3152 echo "libnut enabled            ${libnut-no}"
3153 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3154 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3155 echo "libopencv support         ${libopencv-no}"
3156 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3157 echo "librtmp enabled           ${librtmp-no}"
3158 echo "libschroedinger enabled   ${libschroedinger-no}"
3159 echo "libspeex enabled          ${libspeex-no}"
3160 echo "libtheora enabled         ${libtheora-no}"
3161 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3162 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3163 echo "libvorbis enabled         ${libvorbis-no}"
3164 echo "libvpx enabled            ${libvpx-no}"
3165 echo "libx264 enabled           ${libx264-no}"
3166 echo "libxavs enabled           ${libxavs-no}"
3167 echo "libxvid enabled           ${libxvid-no}"
3168 echo "zlib enabled              ${zlib-no}"
3169 echo "bzlib enabled             ${bzlib-no}"
3170 echo
3171
3172 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3173     echo "Enabled ${type}s:"
3174     eval list=\$$(toupper $type)_LIST
3175     print_enabled '_*' $list | sort | pr -r -3 -t
3176     echo
3177 done
3178
3179 license="LGPL version 2.1 or later"
3180 if enabled nonfree; then
3181     license="nonfree and unredistributable"
3182 elif enabled gplv3; then
3183     license="GPL version 3 or later"
3184 elif enabled lgplv3; then
3185     license="LGPL version 3 or later"
3186 elif enabled gpl; then
3187     license="GPL version 2 or later"
3188 fi
3189
3190 echo "License: $license"
3191
3192 echo "Creating config.mak and config.h..."
3193
3194 test -e Makefile || $ln_s "$source_path/Makefile" .
3195
3196 config_files="$TMPH config.mak"
3197
3198 cat > config.mak <<EOF
3199 # Automatically generated by configure - do not modify!
3200 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
3201 prefix=$prefix
3202 LIBDIR=\$(DESTDIR)$libdir
3203 SHLIBDIR=\$(DESTDIR)$shlibdir
3204 INCDIR=\$(DESTDIR)$incdir
3205 BINDIR=\$(DESTDIR)$bindir
3206 DATADIR=\$(DESTDIR)$datadir
3207 MANDIR=\$(DESTDIR)$mandir
3208 SRC_PATH=$source_path
3209 CC_IDENT=$cc_ident
3210 ARCH=$arch
3211 CC=$cc
3212 AS=$as
3213 LD=$ld
3214 DEPCC=$dep_cc
3215 YASM=$yasmexe
3216 YASMDEP=$yasmexe
3217 AR=$ar
3218 RANLIB=$ranlib
3219 LN_S=$ln_s
3220 CPPFLAGS=$CPPFLAGS
3221 CFLAGS=$CFLAGS
3222 ASFLAGS=$ASFLAGS
3223 AS_O=$CC_O
3224 CC_O=$CC_O
3225 DLLTOOL=$dlltool
3226 LDFLAGS=$LDFLAGS
3227 AVSERVERLDFLAGS=$AVSERVERLDFLAGS
3228 SHFLAGS=$SHFLAGS
3229 YASMFLAGS=$YASMFLAGS
3230 BUILDSUF=$build_suffix
3231 FULLNAME=$FULLNAME
3232 LIBPREF=$LIBPREF
3233 LIBSUF=$LIBSUF
3234 LIBNAME=$LIBNAME
3235 SLIBPREF=$SLIBPREF
3236 SLIBSUF=$SLIBSUF
3237 EXESUF=$EXESUF
3238 EXTRA_VERSION=$extra_version
3239 DEPFLAGS=$DEPFLAGS
3240 CCDEP=$CCDEP
3241 ASDEP=$ASDEP
3242 CC_DEPFLAGS=$CC_DEPFLAGS
3243 AS_DEPFLAGS=$AS_DEPFLAGS
3244 HOSTCC=$host_cc
3245 HOSTCFLAGS=$host_cflags
3246 HOSTEXESUF=$HOSTEXESUF
3247 HOSTLDFLAGS=$host_ldflags
3248 HOSTLIBS=$host_libs
3249 TARGET_EXEC=$target_exec
3250 TARGET_PATH=$target_path
3251 SDL_LIBS=$sdl_libs
3252 SDL_CFLAGS=$sdl_cflags
3253 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3254 EXTRALIBS=$extralibs
3255 INSTALL=install
3256 LIBTARGET=${LIBTARGET}
3257 SLIBNAME=${SLIBNAME}
3258 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3259 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3260 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3261 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3262 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3263 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3264 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3265 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3266 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3267 EOF
3268
3269 get_version(){
3270     name=$1
3271     file=$source_path/$2
3272     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3273     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3274     lcname=$(tolower $name)
3275     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3276     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3277 }
3278
3279 get_version LIBSWSCALE  libswscale/swscale.h
3280 get_version LIBPOSTPROC libpostproc/postprocess.h
3281 get_version LIBAVCODEC  libavcodec/version.h
3282 get_version LIBAVDEVICE libavdevice/avdevice.h
3283 get_version LIBAVFORMAT libavformat/version.h
3284 get_version LIBAVUTIL   libavutil/avutil.h
3285 get_version LIBAVFILTER libavfilter/avfilter.h
3286
3287 cat > $TMPH <<EOF
3288 /* Automatically generated by configure - do not modify! */
3289 #ifndef LIBAV_CONFIG_H
3290 #define LIBAV_CONFIG_H
3291 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
3292 #define LIBAV_LICENSE "$(c_escape $license)"
3293 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3294 #define CC_TYPE "$cc_type"
3295 #define CC_VERSION $cc_version
3296 #define restrict $_restrict
3297 #define EXTERN_PREFIX "${extern_prefix}"
3298 #define EXTERN_ASM ${extern_prefix}
3299 #define SLIBSUF "$SLIBSUF"
3300 EOF
3301
3302 test -n "$malloc_prefix" &&
3303     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3304
3305 if enabled small || disabled optimizations; then
3306     echo "#undef  av_always_inline"  >> $TMPH
3307     if enabled small; then
3308         echo "#define av_always_inline inline"  >> $TMPH
3309     else
3310         echo "#define av_always_inline av_unused"  >> $TMPH
3311     fi
3312 fi
3313
3314 if enabled yasm; then
3315     append config_files $TMPASM
3316     printf '' >$TMPASM
3317 fi
3318
3319 print_config ARCH_   "$config_files" $ARCH_LIST
3320 print_config HAVE_   "$config_files" $HAVE_LIST
3321 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3322                                      $CONFIG_EXTRA      \
3323                                      $DECODER_LIST      \
3324                                      $ENCODER_LIST      \
3325                                      $HWACCEL_LIST      \
3326                                      $PARSER_LIST       \
3327                                      $BSF_LIST          \
3328                                      $DEMUXER_LIST      \
3329                                      $MUXER_LIST        \
3330                                      $FILTER_LIST       \
3331                                      $PROTOCOL_LIST     \
3332                                      $INDEV_LIST        \
3333                                      $OUTDEV_LIST       \
3334
3335 cat >>config.mak <<EOF
3336 ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3337 VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3338 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3339 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3340 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3341 EOF
3342
3343 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
3344
3345 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3346 cp_if_changed $TMPH config.h
3347 touch .config
3348
3349 enabled yasm && cp_if_changed $TMPASM config.asm
3350
3351 cat > $TMPH <<EOF
3352 /* Generated by ffconf */
3353 #ifndef AVUTIL_AVCONFIG_H
3354 #define AVUTIL_AVCONFIG_H
3355 EOF
3356
3357 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3358
3359 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3360
3361 cp_if_changed $TMPH libavutil/avconfig.h
3362
3363 test -n "$WARNINGS" && printf "\n$WARNINGS"
3364
3365 # build pkg-config files
3366
3367 pkgconfig_generate(){
3368 name=$1
3369 shortname=${name#lib}${build_suffix}
3370 comment=$2
3371 version=$3
3372 libs=$4
3373 requires=$5
3374 enabled ${name#lib} || return 0
3375 mkdir -p $name
3376 cat <<EOF > $name/$name.pc
3377 prefix=$prefix
3378 exec_prefix=\${prefix}
3379 libdir=$libdir
3380 includedir=$incdir
3381
3382 Name: $name
3383 Description: $comment
3384 Version: $version
3385 Requires: $(enabled shared || echo $requires)
3386 Requires.private: $(enabled shared && echo $requires)
3387 Conflicts:
3388 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3389 Libs.private: $(enabled shared && echo $libs)
3390 Cflags: -I\${includedir}
3391 EOF
3392 cat <<EOF > $name/$name-uninstalled.pc
3393 prefix=
3394 exec_prefix=
3395 libdir=\${pcfiledir}
3396 includedir=${source_path}
3397
3398 Name: $name
3399 Description: $comment
3400 Version: $version
3401 Requires: $requires
3402 Conflicts:
3403 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3404 Cflags: -I\${includedir}
3405 EOF
3406 }
3407
3408 pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3409 pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3410 pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3411 pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3412 pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3413 pkgconfig_generate libpostproc "Libav postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3414 pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"