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