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