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