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