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