libvpx: Support the vp9 extended profiles
[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 DXVA2_ConfigPictureDecode"
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     elif $_cc 2>&1 | grep -q Intel; then
3025         _type=icl
3026         _ident=$($_cc 2>&1 | head -n1)
3027         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3028         # Not only is O3 broken on 13.x+ but it is slower on all previous
3029         # versions (tested) as well.
3030         _cflags_speed="-O2"
3031         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3032         if $_cc 2>&1 | grep -q Linker; then
3033             _ld_o='-out:$@'
3034         else
3035             _ld_o='-Fe$@'
3036         fi
3037         _cc_o='-Fo$@'
3038         _cc_e='-P'
3039         _flags_filter=icl_flags
3040         _ld_lib='lib%.a'
3041         _ld_path='-libpath:'
3042         # -Qdiag-error to make icl error when seeing certain unknown arguments
3043         _flags='-nologo -Qdiag-error:4044,10157'
3044         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3045         # with MSVC which enables it by default.
3046         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
3047     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3048         _type=cparser
3049         _ident=$($_cc --version | head -n1)
3050         _depflags='-MMD'
3051         _cflags_speed='-O4'
3052         _cflags_size='-O2'
3053         _flags_filter=cparser_flags
3054     fi
3055
3056     eval ${pfx}_type=\$_type
3057     eval ${pfx}_ident=\$_ident
3058 }
3059
3060 set_ccvars(){
3061     eval ${1}_C=\${_cc_c-\${${1}_C}}
3062     eval ${1}_E=\${_cc_e-\${${1}_E}}
3063     eval ${1}_O=\${_cc_o-\${${1}_O}}
3064
3065     if [ -n "$_depflags" ]; then
3066         eval ${1}_DEPFLAGS=\$_depflags
3067     else
3068         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3069         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3070         eval DEP${1}FLAGS=\$_flags
3071     fi
3072 }
3073
3074 probe_cc cc "$cc"
3075 cflags_filter=$_flags_filter
3076 cflags_speed=$_cflags_speed
3077 cflags_size=$_cflags_size
3078 cflags_noopt=$_cflags_noopt
3079 add_cflags $_flags $_cflags
3080 cc_ldflags=$_ldflags
3081 set_ccvars CC
3082
3083 probe_cc hostcc "$host_cc"
3084 host_cflags_filter=$_flags_filter
3085 add_host_cflags  $_flags $_cflags
3086 set_ccvars HOSTCC
3087
3088 test -n "$cc_type" && enable $cc_type ||
3089     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3090
3091 : ${as_default:=$cc}
3092 : ${dep_cc_default:=$cc}
3093 : ${ld_default:=$cc}
3094 : ${host_ld_default:=$host_cc}
3095 set_default ar as dep_cc ld host_ld
3096
3097 probe_cc as "$as"
3098 asflags_filter=$_flags_filter
3099 add_asflags $_flags $_cflags
3100 set_ccvars AS
3101
3102 probe_cc ld "$ld"
3103 ldflags_filter=$_flags_filter
3104 add_ldflags $_flags $_ldflags
3105 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3106 LD_O=${_ld_o-$LD_O}
3107 LD_LIB=${_ld_lib-$LD_LIB}
3108 LD_PATH=${_ld_path-$LD_PATH}
3109
3110 probe_cc hostld "$host_ld"
3111 host_ldflags_filter=$_flags_filter
3112 add_host_ldflags $_flags $_ldflags
3113 HOSTLD_O=${_ld_o-$HOSTLD_O}
3114
3115 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3116     probe_cc depcc "$dep_cc"
3117     CCDEP=${_DEPCMD:-$DEPCMD}
3118     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3119     DEPCCFLAGS=$_flags
3120 fi
3121
3122 if $ar 2>&1 | grep -q Microsoft; then
3123     arflags="-nologo"
3124     ar_o='-out:$@'
3125 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3126     arflags="rq"
3127     ar_o='$@'
3128 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3129     arflags='-Xany -r -c'
3130     ar_o='$@'
3131 else
3132     arflags="rc"
3133     ar_o='$@'
3134 fi
3135
3136 add_cflags $extra_cflags
3137 add_asflags $extra_cflags
3138
3139 if test -n "$sysroot"; then
3140     case "$cc_type" in
3141         gcc|llvm_gcc|clang)
3142             add_cppflags --sysroot="$sysroot"
3143             add_ldflags --sysroot="$sysroot"
3144         ;;
3145         tms470)
3146             add_cppflags -I"$sysinclude"
3147             add_ldflags  --sysroot="$sysroot"
3148         ;;
3149     esac
3150 fi
3151
3152 if test "$cpu" = host; then
3153     enabled cross_compile &&
3154         die "--cpu=host makes no sense when cross-compiling."
3155
3156     case "$cc_type" in
3157         gcc|llvm_gcc)
3158             check_native(){
3159                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3160                 sed -n "/cc1.*$1=/{
3161                             s/.*$1=\\([^ ]*\\).*/\\1/
3162                             p
3163                             q
3164                         }" $TMPE
3165             }
3166             cpu=$(check_native -march || check_native -mcpu)
3167         ;;
3168     esac
3169
3170     test "${cpu:-host}" = host &&
3171         die "--cpu=host not supported with compiler $cc"
3172 fi
3173
3174 # Deal with common $arch aliases
3175 case "$arch" in
3176     aarch64|arm64)
3177         arch="aarch64"
3178     ;;
3179     arm*)
3180         arch="arm"
3181     ;;
3182     mips*|IP*)
3183         arch="mips"
3184     ;;
3185     parisc*|hppa*)
3186         arch="parisc"
3187     ;;
3188     "Power Macintosh"|ppc*|powerpc*)
3189         arch="ppc"
3190     ;;
3191     s390|s390x)
3192         arch="s390"
3193     ;;
3194     sh4|sh)
3195         arch="sh4"
3196     ;;
3197     sun4u|sparc*)
3198         arch="sparc"
3199     ;;
3200     tilegx|tile-gx)
3201         arch="tilegx"
3202     ;;
3203     i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3204         arch="x86"
3205     ;;
3206 esac
3207
3208 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3209 enable $arch
3210
3211 # Add processor-specific flags
3212 if enabled aarch64; then
3213
3214     case $cpu in
3215         armv*)
3216             cpuflags="-march=$cpu"
3217         ;;
3218         *)
3219             cpuflags="-mcpu=$cpu"
3220         ;;
3221     esac
3222
3223 elif enabled alpha; then
3224
3225     cpuflags="-mcpu=$cpu"
3226
3227 elif enabled arm; then
3228
3229     check_arm_arch() {
3230         check_cpp_condition stddef.h \
3231             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3232             $cpuflags
3233     }
3234
3235     probe_arm_arch() {
3236         if   check_arm_arch 4;        then echo armv4;
3237         elif check_arm_arch 4T;       then echo armv4t;
3238         elif check_arm_arch 5;        then echo armv5;
3239         elif check_arm_arch 5E;       then echo armv5e;
3240         elif check_arm_arch 5T;       then echo armv5t;
3241         elif check_arm_arch 5TE;      then echo armv5te;
3242         elif check_arm_arch 5TEJ;     then echo armv5te;
3243         elif check_arm_arch 6;        then echo armv6;
3244         elif check_arm_arch 6J;       then echo armv6j;
3245         elif check_arm_arch 6K;       then echo armv6k;
3246         elif check_arm_arch 6Z;       then echo armv6z;
3247         elif check_arm_arch 6ZK;      then echo armv6zk;
3248         elif check_arm_arch 6T2;      then echo armv6t2;
3249         elif check_arm_arch 7;        then echo armv7;
3250         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3251         elif check_arm_arch 7S;       then echo armv7-a;
3252         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3253         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3254         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3255         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3256         fi
3257     }
3258
3259     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3260
3261     case $cpu in
3262         armv*)
3263             cpuflags="-march=$cpu"
3264             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3265         ;;
3266         *)
3267             cpuflags="-mcpu=$cpu"
3268             case $cpu in
3269                 cortex-a*)                               subarch=armv7a  ;;
3270                 cortex-r*)                               subarch=armv7r  ;;
3271                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3272                 arm11*)                                  subarch=armv6   ;;
3273                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3274                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3275                 *)                             subarch=$(probe_arm_arch) ;;
3276             esac
3277         ;;
3278     esac
3279
3280     case "$subarch" in
3281         armv5t*)    enable fast_clz                ;;
3282         armv[6-8]*) enable fast_clz fast_unaligned ;;
3283     esac
3284
3285 elif enabled avr32; then
3286
3287     case $cpu in
3288         ap7[02]0[0-2])
3289             subarch="avr32_ap"
3290             cpuflags="-mpart=$cpu"
3291         ;;
3292         ap)
3293             subarch="avr32_ap"
3294             cpuflags="-march=$cpu"
3295         ;;
3296         uc3[ab]*)
3297             subarch="avr32_uc"
3298             cpuflags="-mcpu=$cpu"
3299         ;;
3300         uc)
3301             subarch="avr32_uc"
3302             cpuflags="-march=$cpu"
3303         ;;
3304     esac
3305
3306 elif enabled bfin; then
3307
3308     cpuflags="-mcpu=$cpu"
3309
3310 elif enabled mips; then
3311
3312     cpuflags="-march=$cpu"
3313
3314 elif enabled ppc; then
3315
3316     disable ldbrx
3317
3318     case $(tolower $cpu) in
3319         601|ppc601|powerpc601)
3320             cpuflags="-mcpu=601"
3321             disable altivec
3322         ;;
3323         603*|ppc603*|powerpc603*)
3324             cpuflags="-mcpu=603"
3325             disable altivec
3326         ;;
3327         604*|ppc604*|powerpc604*)
3328             cpuflags="-mcpu=604"
3329             disable altivec
3330         ;;
3331         g3|75*|ppc75*|powerpc75*)
3332             cpuflags="-mcpu=750"
3333             disable altivec
3334         ;;
3335         g4|745*|ppc745*|powerpc745*)
3336             cpuflags="-mcpu=7450"
3337             disable vsx
3338         ;;
3339         74*|ppc74*|powerpc74*)
3340             cpuflags="-mcpu=7400"
3341             disable vsx
3342         ;;
3343         g5|970|ppc970|powerpc970)
3344             cpuflags="-mcpu=970"
3345             disable vsx
3346         ;;
3347         power[3-6]*)
3348             cpuflags="-mcpu=$cpu"
3349             disable vsx
3350         ;;
3351         power[7-8]*)
3352             cpuflags="-mcpu=$cpu"
3353             enable ldbrx
3354         ;;
3355         cell)
3356             cpuflags="-mcpu=cell"
3357             enable ldbrx
3358             disable vsx
3359         ;;
3360         e500mc)
3361             cpuflags="-mcpu=e500mc"
3362             disable altivec
3363         ;;
3364         e500v2)
3365             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3366             disable altivec
3367             disable dcbzl
3368         ;;
3369         e500)
3370             cpuflags="-mcpu=8540 -mhard-float"
3371             disable altivec
3372             disable dcbzl
3373         ;;
3374     esac
3375
3376 elif enabled sparc; then
3377
3378     case $cpu in
3379         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3380             cpuflags="-mcpu=$cpu"
3381         ;;
3382         ultrasparc*|niagara[234])
3383             cpuflags="-mcpu=$cpu"
3384         ;;
3385     esac
3386
3387 elif enabled x86; then
3388
3389     case $cpu in
3390         i[345]86|pentium)
3391             cpuflags="-march=$cpu"
3392             disable i686
3393             disable mmx
3394         ;;
3395         # targets that do NOT support nopl and conditional mov (cmov)
3396         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3397             cpuflags="-march=$cpu"
3398             disable i686
3399         ;;
3400         # targets that do support nopl and conditional mov (cmov)
3401         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*)
3402             cpuflags="-march=$cpu"
3403             enable i686
3404             enable fast_cmov
3405         ;;
3406         # targets that do support conditional mov but on which it's slow
3407         pentium4|pentium4m|prescott|nocona)
3408             cpuflags="-march=$cpu"
3409             enable i686
3410             disable fast_cmov
3411         ;;
3412     esac
3413
3414 fi
3415
3416 if [ "$cpu" != generic ]; then
3417     add_cflags  $cpuflags
3418     add_asflags $cpuflags
3419 fi
3420
3421 # compiler sanity check
3422 check_exec <<EOF
3423 int main(void){ return 0; }
3424 EOF
3425 if test "$?" != 0; then
3426     echo "$cc is unable to create an executable file."
3427     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3428         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3429         echo "Only do this if you know what cross compiling means."
3430     fi
3431     die "C compiler test failed."
3432 fi
3433
3434 add_cppflags -D_ISOC99_SOURCE
3435 check_cflags -std=c99
3436 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3437 #include <stdlib.h>
3438 EOF
3439 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3440 #include <stdlib.h>
3441 EOF
3442
3443 add_host_cppflags -D_ISOC99_SOURCE
3444 check_host_cflags -std=c99
3445 check_host_cflags -Wall
3446 check_host_cflags -O3
3447
3448 check_64bit(){
3449     arch32=$1
3450     arch64=$2
3451     expr=$3
3452     check_code cc "" "int test[2*($expr) - 1]" &&
3453         subarch=$arch64 || subarch=$arch32
3454 }
3455
3456 case "$arch" in
3457     aarch64|alpha|ia64)
3458         spic=$shared
3459     ;;
3460     mips)
3461         check_64bit mips mips64 '_MIPS_SIM > 1'
3462         spic=$shared
3463     ;;
3464     parisc)
3465         check_64bit parisc parisc64 'sizeof(void *) > 4'
3466         spic=$shared
3467     ;;
3468     ppc)
3469         check_64bit ppc ppc64 'sizeof(void *) > 4'
3470         spic=$shared
3471     ;;
3472     s390)
3473         check_64bit s390 s390x 'sizeof(void *) > 4'
3474         spic=$shared
3475     ;;
3476     sparc)
3477         check_64bit sparc sparc64 'sizeof(void *) > 4'
3478         spic=$shared
3479     ;;
3480     x86)
3481         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3482         if test "$subarch" = "x86_64"; then
3483             spic=$shared
3484         fi
3485     ;;
3486 esac
3487
3488 enable $subarch
3489 enabled spic && enable_weak pic
3490
3491 # OS specific
3492 case $target_os in
3493     aix)
3494         SHFLAGS=-shared
3495         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3496         enabled shared && add_ldflags -Wl,-brtl
3497         ;;
3498     android)
3499         disable symver
3500         enable section_data_rel_ro
3501         SLIB_INSTALL_NAME='$(SLIBNAME)'
3502         SLIB_INSTALL_LINKS=
3503         # soname not set on purpose
3504         SHFLAGS=-shared
3505         ;;
3506     haiku)
3507         prefix_default="/boot/common"
3508         network_extralibs="-lnetwork"
3509         host_libs=
3510         ;;
3511     sunos)
3512         SHFLAGS='-shared -Wl,-h,$$(@F)'
3513         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3514         network_extralibs="-lsocket -lnsl"
3515         # When using suncc to build, the Solaris linker will mark
3516         # an executable with each instruction set encountered by
3517         # the Solaris assembler.  As our libraries contain their own
3518         # guards for processor-specific code, instead suppress
3519         # generation of the HWCAPS ELF section on Solaris x86 only.
3520         enabled_all suncc x86 &&
3521             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3522             add_ldflags -Wl,-M,mapfile
3523         nm_default='nm -P -g'
3524         ;;
3525     netbsd)
3526         disable symver
3527         oss_indev_extralibs="-lossaudio"
3528         oss_outdev_extralibs="-lossaudio"
3529         ;;
3530     openbsd|bitrig)
3531         disable symver
3532         SHFLAGS='-shared'
3533         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3534         SLIB_INSTALL_LINKS=
3535         oss_indev_extralibs="-lossaudio"
3536         oss_outdev_extralibs="-lossaudio"
3537         ;;
3538     dragonfly)
3539         disable symver
3540         ;;
3541     freebsd)
3542         ;;
3543     bsd/os)
3544         add_extralibs -lpoll -lgnugetopt
3545         ;;
3546     darwin)
3547         enabled ppc && add_asflags -force_cpusubtype_ALL
3548         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3549         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3550         add_ldflags -Wl,-dynamic,-search_paths_first
3551         SLIBSUF=".dylib"
3552         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3553         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3554         objformat="macho"
3555         enabled x86_64 && objformat="macho64"
3556         enabled_any pic shared ||
3557             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3558         ;;
3559     mingw32*)
3560         if test $target_os = "mingw32ce"; then
3561             disable network
3562         else
3563             target_os=mingw32
3564         fi
3565         LIBTARGET=i386
3566         if enabled x86_64; then
3567             LIBTARGET="i386:x86-64"
3568         elif enabled arm; then
3569             LIBTARGET=arm-wince
3570         fi
3571         check_ldflags -Wl,--nxcompat
3572         check_ldflags -Wl,--dynamicbase
3573         shlibdir_default="$bindir_default"
3574         SLIBPREF=""
3575         SLIBSUF=".dll"
3576         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3577         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3578         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)'
3579         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3580         SLIB_INSTALL_LINKS=
3581         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3582         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3583         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'
3584         objformat="win32"
3585         dlltool="${cross_prefix}dlltool"
3586         ranlib=:
3587         enable dos_paths
3588         ;;
3589     win32|win64)
3590         disable symver
3591         if enabled shared; then
3592             # Link to the import library instead of the normal static library
3593             # for shared libs.
3594             LD_LIB='%.lib'
3595             # Cannot build both shared and static libs with MSVC or icl.
3596             disable static
3597         fi
3598         shlibdir_default="$bindir_default"
3599         SLIBPREF=""
3600         SLIBSUF=".dll"
3601         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3602         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3603         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3604         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3605         SLIB_INSTALL_LINKS=
3606         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3607         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3608         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3609         objformat="win32"
3610         ranlib=:
3611         enable dos_paths
3612         ;;
3613     cygwin*)
3614         target_os=cygwin
3615         shlibdir_default="$bindir_default"
3616         SLIBPREF="cyg"
3617         SLIBSUF=".dll"
3618         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3619         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3620         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3621         SLIB_INSTALL_LINKS=
3622         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3623         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3624         objformat="win32"
3625         enable dos_paths
3626         ;;
3627     *-dos|freedos|opendos)
3628         network_extralibs="-lsocket"
3629         objformat="coff"
3630         enable dos_paths
3631         add_cppflags -U__STRICT_ANSI__
3632         ;;
3633     linux)
3634         enable dv1394
3635         enable section_data_rel_ro
3636         ;;
3637     irix*)
3638         target_os=irix
3639         ranlib="echo ignoring ranlib"
3640         ;;
3641     os/2*)
3642         ln_s="cp -f"
3643         objformat="aout"
3644         add_cppflags -D_GNU_SOURCE
3645         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3646         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3647         LIBSUF="_s.a"
3648         SLIBPREF=""
3649         SLIBSUF=".dll"
3650         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3651         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3652         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3653             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3654             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3655             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3656             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3657             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3658         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3659             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3660         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3661         enable dos_paths
3662         ;;
3663     gnu/kfreebsd)
3664         add_cppflags -D_BSD_SOURCE
3665         ;;
3666     gnu)
3667         ;;
3668     qnx)
3669         add_cppflags -D_QNX_SOURCE
3670         network_extralibs="-lsocket"
3671         ;;
3672     symbian)
3673         SLIBSUF=".dll"
3674         enable dos_paths
3675         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3676         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3677         add_ldflags -Wl,--target1-abs,--no-undefined \
3678                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3679                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3680         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3681                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3682                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3683         ;;
3684     osf1)
3685         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3686         ;;
3687     minix)
3688         ;;
3689     plan9)
3690         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3691                      -D_REENTRANT_SOURCE        \
3692                      -D_RESEARCH_SOURCE         \
3693                      -DFD_SETSIZE=96            \
3694                      -DHAVE_SOCK_OPTS
3695         add_compat strtod.o strtod=avpriv_strtod
3696         network_extralibs='-lbsd'
3697         exeobjs=compat/plan9/main.o
3698         cp_f='cp'
3699         ;;
3700     none)
3701         ;;
3702     *)
3703         die "Unknown OS '$target_os'."
3704         ;;
3705 esac
3706
3707 # determine libc flavour
3708
3709 probe_libc(){
3710     pfx=$1
3711     pfx_no_=${pfx%_}
3712     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3713     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3714         eval ${pfx}libc_type=uclibc
3715         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3716     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3717         eval ${pfx}libc_type=glibc
3718         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3719     # MinGW headers can be installed on Cygwin, so check for newlib first.
3720     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3721         eval ${pfx}libc_type=newlib
3722         add_${pfx}cppflags -U__STRICT_ANSI__
3723     # MinGW64 is backwards compatible with MinGW32, so check for it first.
3724     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3725         eval ${pfx}libc_type=mingw64
3726         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3727         eval test \$${pfx_no_}cc_type = "gcc" &&
3728             add_${pfx}cppflags -D__printf__=__gnu_printf__
3729     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
3730          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3731         eval ${pfx}libc_type=mingw32
3732         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3733             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3734             die "ERROR: MinGW32 runtime version must be >= 3.15."
3735         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3736         eval test \$${pfx_no_}cc_type = "gcc" &&
3737             add_${pfx}cppflags -D__printf__=__gnu_printf__
3738     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3739         eval ${pfx}libc_type=msvcrt
3740         if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
3741             if [ "$pfx" = host_ ]; then
3742                 add_host_cppflags -Dsnprintf=_snprintf
3743             else
3744                 add_compat strtod.o strtod=avpriv_strtod
3745                 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3746                                              _snprintf=avpriv_snprintf  \
3747                                              vsnprintf=avpriv_vsnprintf
3748             fi
3749         fi
3750         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3751         # 0x601 by default unless something else is set by the user.
3752         # This can easily lead to us detecting functions only present
3753         # in such new versions and producing binaries requiring windows 7.0.
3754         # Therefore explicitly set the default to XP unless the user has
3755         # set something else on the command line.
3756         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3757             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3758     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3759         eval ${pfx}libc_type=klibc
3760     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3761         eval ${pfx}libc_type=bionic
3762     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3763         eval ${pfx}libc_type=solaris
3764         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3765     else
3766         eval ${pfx}libc_type=default
3767         add_${pfx}cppflags -D_DEFAULT_SOURCE
3768     fi
3769 }
3770
3771 probe_libc
3772 test -n "$libc_type" && enable libc_$libc_type
3773 probe_libc host_
3774 test -n "$host_libc_type" && enable host_libc_$host_libc_type
3775
3776 case $libc_type in
3777     bionic)
3778         add_compat strtod.o strtod=avpriv_strtod
3779         ;;
3780 esac
3781
3782 # hacks for compiler/libc/os combinations
3783
3784 if enabled_all tms470 libc_glibc; then
3785     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3786     add_cppflags -D__USER_LABEL_PREFIX__=
3787     add_cppflags -D__builtin_memset=memset
3788     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3789     add_cflags   -pds=48    # incompatible redefinition of macro
3790 fi
3791
3792 if enabled_all ccc libc_glibc; then
3793     add_ldflags -Wl,-z,now  # calls to libots crash without this
3794 fi
3795
3796 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
3797     add_cppflags '-I\$(SRC_PATH)/compat/float'
3798
3799 esc(){
3800     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3801 }
3802
3803 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3804
3805 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3806
3807 set_default $PATHS_LIST
3808 set_default nm
3809
3810 # we need to build at least one lib type
3811 if ! enabled_any static shared; then
3812     cat <<EOF
3813 At least one library type must be built.
3814 Specify --enable-static to build the static libraries or --enable-shared to
3815 build the shared libraries as well. To only build the shared libraries specify
3816 --disable-static in addition to --enable-shared.
3817 EOF
3818     exit 1;
3819 fi
3820
3821 die_license_disabled() {
3822     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3823 }
3824
3825 die_license_disabled gpl libcdio
3826 die_license_disabled gpl libx264
3827 die_license_disabled gpl libx265
3828 die_license_disabled gpl libxavs
3829 die_license_disabled gpl libxvid
3830 die_license_disabled gpl x11grab
3831
3832 die_license_disabled nonfree libfaac
3833 die_license_disabled nonfree libfdk_aac
3834 die_license_disabled nonfree nvenc
3835 die_license_disabled nonfree openssl
3836
3837 die_license_disabled version3 libopencore_amrnb
3838 die_license_disabled version3 libopencore_amrwb
3839 die_license_disabled version3 libvo_aacenc
3840 die_license_disabled version3 libvo_amrwbenc
3841
3842 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3843
3844 disabled optimizations || check_cflags -fomit-frame-pointer
3845
3846 enable_weak_pic() {
3847     disabled pic && return
3848     enable pic
3849     add_cppflags -DPIC
3850     case "$target_os" in
3851     mingw*|cygwin*)
3852         ;;
3853     *)
3854         add_cflags -fPIC
3855         ;;
3856     esac
3857     add_asflags  -fPIC
3858 }
3859
3860 enabled pic && enable_weak_pic
3861
3862 check_cc <<EOF || die "Symbol mangling check failed."
3863 int ff_extern;
3864 EOF
3865 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3866 extern_prefix=${sym%%ff_extern*}
3867
3868 check_cc <<EOF && enable_weak inline_asm
3869 void foo(void) { __asm__ volatile ("" ::); }
3870 EOF
3871
3872 _restrict=
3873 for restrict_keyword in restrict __restrict__ __restrict; do
3874     check_cc <<EOF && _restrict=$restrict_keyword && break
3875 void foo(char * $restrict_keyword p);
3876 EOF
3877 done
3878
3879 check_cc <<EOF && enable pragma_deprecated
3880 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3881 EOF
3882
3883 check_cc <<EOF && enable attribute_packed
3884 struct { int x; } __attribute__((packed)) x;
3885 EOF
3886
3887 check_cc <<EOF && enable attribute_may_alias
3888 union { int x; } __attribute__((may_alias)) x;
3889 EOF
3890
3891 check_cc <<EOF || die "endian test failed"
3892 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3893 EOF
3894 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3895
3896 check_gas() {
3897     log "check_gas using '$as' as AS"
3898     # :vararg is used on aarch64, arm and ppc altivec
3899     check_as <<EOF || return 1
3900 .macro m n, y:vararg=0
3901 \n: .int \y
3902 .endm
3903 m x
3904 EOF
3905     # .altmacro is only used in arm asm
3906     ! enabled arm || check_as <<EOF || return 1
3907 .altmacro
3908 EOF
3909     enable gnu_as
3910     return 0
3911 }
3912
3913 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
3914     nogas=:
3915     enabled_any arm aarch64 && nogas=die
3916     enabled_all ppc altivec && nogas=warn
3917     as_noop=-v
3918
3919     case $as_type in
3920         arm*) gaspp_as_type=armasm; as_noop=-h ;;
3921         gcc)  gaspp_as_type=gas ;;
3922         *)    gaspp_as_type=$as_type ;;
3923     esac
3924
3925     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
3926
3927     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
3928         gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
3929
3930     if ! check_gas ; then
3931         as=${gas:=$as}
3932         check_gas || \
3933             $nogas "GNU assembler not found, install/update gas-preprocessor"
3934     fi
3935
3936     check_as <<EOF && enable as_func
3937 .func test
3938 .endfunc
3939 EOF
3940 fi
3941
3942 check_inline_asm inline_asm_labels '"1:\n"'
3943
3944 if enabled aarch64; then
3945     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
3946     # internal assembler in clang 3.3 does not support this instruction
3947     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
3948     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
3949
3950     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
3951
3952 elif enabled alpha; then
3953
3954     check_cflags -mieee
3955
3956 elif enabled arm; then
3957
3958     check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3959     enabled thumb && check_cflags -mthumb || check_cflags -marm
3960
3961     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3962         enable vfp_args
3963     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3964         case "${cross_prefix:-$cc}" in
3965             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3966             *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3967 __asm__ (".eabi_attribute 28, 1");
3968 int main(void) { return 0; }
3969 EOF
3970         esac
3971         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3972     fi
3973
3974     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3975     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
3976     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3977     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
3978     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3979     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
3980
3981     [ $target_os = linux ] || [ $target_os = android ] ||
3982         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3983             $ARCH_EXT_LIST_ARM
3984
3985     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3986
3987     check_as <<EOF && enable as_dn_directive
3988 ra .dn d0.i16
3989 .unreq ra
3990 EOF
3991
3992     # llvm's integrated assembler supports .object_arch from llvm 3.5
3993     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
3994 .object_arch armv4
3995 EOF
3996
3997     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
3998
3999 elif enabled mips; then
4000
4001     check_inline_asm loongson '"dmult.g $1, $2, $3"'
4002
4003 elif enabled parisc; then
4004
4005     if enabled gcc; then
4006         case $($cc -dumpversion) in
4007             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4008         esac
4009     fi
4010
4011 elif enabled ppc; then
4012
4013     enable local_aligned_8 local_aligned_16
4014
4015     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4016     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4017     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4018     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4019
4020     # AltiVec flags: The FSF version of GCC differs from the Apple version
4021     if enabled altivec; then
4022         check_cflags -maltivec -mabi=altivec &&
4023         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4024         check_cflags -faltivec
4025
4026         # check if our compiler supports Motorola AltiVec C API
4027         check_cc <<EOF || disable altivec
4028 $inc_altivec_h
4029 int main(void) {
4030     vector signed int v1 = (vector signed int) { 0 };
4031     vector signed int v2 = (vector signed int) { 1 };
4032     v1 = vec_add(v1, v2);
4033     return 0;
4034 }
4035 EOF
4036
4037         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4038     fi
4039
4040     if enabled vsx; then
4041         check_cflags -mvsx &&
4042         check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4043     fi
4044
4045     if enabled power8; then
4046         check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4047     fi
4048
4049 elif enabled x86; then
4050
4051     check_builtin rdtsc    intrin.h   "__rdtsc()"
4052     check_builtin mm_empty mmintrin.h "_mm_empty()"
4053
4054     enable local_aligned_8 local_aligned_16
4055
4056     # check whether EBP is available on x86
4057     # As 'i' is stored on the stack, this program will crash
4058     # if the base pointer is used to access it because the
4059     # base pointer is cleared in the inline assembly code.
4060     check_exec_crash <<EOF && enable ebp_available
4061 volatile int i=0;
4062 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4063 return i;
4064 EOF
4065
4066     # check whether EBX is available on x86
4067     check_inline_asm ebx_available '""::"b"(0)' &&
4068         check_inline_asm ebx_available '"":::"%ebx"'
4069
4070     # check whether xmm clobbers are supported
4071     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4072
4073     # check whether binutils is new enough to compile SSSE3/MMXEXT
4074     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4075     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4076
4077     if ! disabled_any asm mmx yasm; then
4078         if check_cmd $yasmexe --version; then
4079             enabled x86_64 && yasm_extra="-m amd64"
4080             yasm_debug="-g dwarf2"
4081         elif check_cmd nasm -v; then
4082             yasmexe=nasm
4083             yasm_debug="-g -F dwarf"
4084             enabled x86_64 && test "$objformat" = elf && objformat=elf64
4085         fi
4086
4087         YASMFLAGS="-f $objformat $yasm_extra"
4088         enabled pic               && append YASMFLAGS "-DPIC"
4089         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4090         case "$objformat" in
4091             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4092         esac
4093
4094         check_yasm "movbe ecx, [5]" && enable yasm ||
4095             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4096         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4097         check_yasm "vfmadd132ps ymm0, ymm1, ymm2"    || disable fma3_external
4098         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4099         check_yasm "CPU amdnop" || disable cpunop
4100     fi
4101
4102     case "$cpu" in
4103         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4104             disable fast_clz
4105         ;;
4106     esac
4107
4108 fi
4109
4110 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4111
4112 check_ldflags -Wl,--as-needed
4113
4114 if check_func dlopen; then
4115     ldl=
4116 elif check_func dlopen -ldl; then
4117     ldl=-ldl
4118 fi
4119
4120 if ! disabled network; then
4121     check_func getaddrinfo $network_extralibs
4122     check_func getservbyport $network_extralibs
4123     check_func inet_aton $network_extralibs
4124
4125     check_type netdb.h "struct addrinfo"
4126     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4127     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4128     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4129     check_type poll.h "struct pollfd"
4130     check_type netinet/sctp.h "struct sctp_event_subscribe"
4131     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4132     check_type netinet/in.h "struct sockaddr_in6"
4133     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4134     check_type "sys/types.h sys/socket.h" socklen_t
4135
4136     # Prefer arpa/inet.h over winsock2
4137     if check_header arpa/inet.h ; then
4138         check_func closesocket
4139     elif check_header winsock2.h ; then
4140         check_func_headers winsock2.h closesocket -lws2 &&
4141             network_extralibs="-lws2" ||
4142         { check_func_headers winsock2.h closesocket -lws2_32 &&
4143             network_extralibs="-lws2_32"; } || disable winsock2_h network
4144         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4145
4146         check_type ws2tcpip.h socklen_t
4147         check_type ws2tcpip.h "struct addrinfo"
4148         check_type ws2tcpip.h "struct group_source_req"
4149         check_type ws2tcpip.h "struct ip_mreq_source"
4150         check_type ws2tcpip.h "struct ipv6_mreq"
4151         check_type winsock2.h "struct pollfd"
4152         check_struct winsock2.h "struct sockaddr" sa_len
4153         check_type ws2tcpip.h "struct sockaddr_in6"
4154         check_type ws2tcpip.h "struct sockaddr_storage"
4155     else
4156         disable network
4157     fi
4158 fi
4159
4160 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4161 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4162 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4163 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4164
4165 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4166 check_func  ${malloc_prefix}memalign            && enable memalign
4167 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4168
4169 check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
4170     check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4171
4172 check_func  fcntl
4173 check_func  fork
4174 check_func  gethrtime
4175 check_func  getopt
4176 check_func  getrusage
4177 check_func  gettimeofday
4178 check_func  gmtime_r
4179 check_func  isatty
4180 check_func  localtime_r
4181 check_func  mach_absolute_time
4182 check_func  mkstemp
4183 check_func  mmap
4184 check_func  mprotect
4185 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4186 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt; }
4187 check_func  sched_getaffinity
4188 check_func  setrlimit
4189 check_func  strerror_r
4190 check_func  sysconf
4191 check_func  sysctl
4192 check_func  usleep
4193
4194 check_func_headers io.h setmode
4195 check_func_headers stdlib.h getenv
4196
4197 check_func_headers windows.h CoTaskMemFree -lole32
4198 check_func_headers windows.h GetProcessAffinityMask
4199 check_func_headers windows.h GetProcessTimes
4200 check_func_headers windows.h GetSystemTimeAsFileTime
4201 check_func_headers windows.h LoadLibrary
4202 check_func_headers windows.h MapViewOfFile
4203 check_func_headers windows.h SetConsoleTextAttribute
4204 check_func_headers windows.h Sleep
4205 check_func_headers windows.h VirtualAlloc
4206 check_struct windows.h "CONDITION_VARIABLE" Ptr
4207
4208 check_header direct.h
4209 check_header dlfcn.h
4210 check_header d3d11.h
4211 check_header dxva.h
4212 check_header dxva2api.h
4213 check_header io.h
4214 check_header mach/mach_time.h
4215 check_header malloc.h
4216 check_header poll.h
4217 check_header sys/mman.h
4218 check_header sys/param.h
4219 check_header sys/resource.h
4220 check_header sys/select.h
4221 check_header sys/time.h
4222 check_header sys/un.h
4223 check_header unistd.h
4224 check_header valgrind/valgrind.h
4225 check_header vdpau/vdpau.h
4226 check_header vdpau/vdpau_x11.h
4227 check_header VideoDecodeAcceleration/VDADecoder.h
4228 check_header windows.h
4229 check_header X11/extensions/XvMClib.h
4230
4231 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4232 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4233 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4234
4235 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4236
4237 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC"
4238 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
4239 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0600
4240
4241 if ! disabled w32threads && ! enabled pthreads; then
4242     check_func_headers "windows.h process.h" _beginthreadex &&
4243         enable w32threads || disable w32threads
4244 fi
4245
4246 # check for some common methods of building with pthread support
4247 # do this before the optional library checks as some of them require pthreads
4248 if ! disabled pthreads && ! enabled w32threads; then
4249     enable pthreads
4250     if check_func pthread_join -pthread; then
4251         add_cflags -pthread
4252         add_extralibs -pthread
4253     elif check_func pthread_join -pthreads; then
4254         add_cflags -pthreads
4255         add_extralibs -pthreads
4256     elif check_func pthread_join -lpthreadGC2; then
4257         add_extralibs -lpthreadGC2
4258     elif check_lib pthread.h pthread_join -lpthread; then
4259         :
4260     elif ! check_func pthread_join; then
4261         disable pthreads
4262     fi
4263 fi
4264
4265 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4266 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4267
4268 check_lib math.h sin -lm && LIBM="-lm"
4269 enabled vaapi && require vaapi va/va.h vaInitialize -lva
4270
4271 atan2f_args=2
4272 ldexpf_args=2
4273 powf_args=2
4274
4275 for func in $MATH_FUNCS; do
4276     eval check_mathfunc $func \${${func}_args:-1}
4277 done
4278
4279 # these are off by default, so fail if requested and not available
4280 enabled avisynth          && { check_lib2 "avisynth/avisynth_c.h windows.h" LoadLibrary ||
4281                                check_lib2 "avxsynth/avxsynth_c.h dlfcn.h" dlopen -ldl   ||
4282                                die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
4283 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4284 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4285 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
4286 enabled libdcadec         && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
4287 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4288 enabled libfdk_aac        && require_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen
4289 enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4290 enabled libfreetype       && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
4291 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4292                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4293                                done || die "ERROR: libgsm not found"; }
4294 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4295 enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
4296 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4297 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4298 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4299 enabled libopencv         && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
4300 enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
4301 enabled libopenjpeg       && { { check_header openjpeg.h && check_lib2 openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC; } ||
4302                                { require_pkg_config libopenjpeg1 openjpeg.h opj_version -DOPJ_STATIC; } }
4303 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4304 enabled libpulse          && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4305 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4306 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4307 enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
4308 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4309 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame
4310 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4311 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4312 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4313 enabled libvpx            && require_pkg_config "vpx >= 1.3.0" vpx/vpx_codec.h vpx_codec_version && {
4314     enabled libvpx_vp8_decoder && {
4315         check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
4316             disable libvpx_vp8_decoder;
4317     }
4318     enabled libvpx_vp8_encoder && {
4319         check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
4320             disable libvpx_vp8_encoder;
4321     }
4322     enabled libvpx_vp9_decoder && {
4323         check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
4324             disable libvpx_vp9_decoder;
4325     }
4326     enabled libvpx_vp9_encoder && {
4327         check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
4328             disable libvpx_vp9_encoder;
4329     }
4330     if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
4331         die "libvpx enabled but no supported decoders found"
4332     fi
4333 }
4334 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
4335 enabled libwebp           && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
4336 enabled libx264           && require_pkg_config x264 "stdint.h x264.h" x264_encoder_encode &&
4337                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4338                                die "ERROR: libx264 version must be >= 0.118."; }
4339 enabled libx265           && require_pkg_config x265 x265.h x265_encoder_encode &&
4340                              { check_cpp_condition x265.h "X265_BUILD >= 57" ||
4341                                die "ERROR: libx265 version must be >= 57."; }
4342 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
4343 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
4344 enabled mmal              && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
4345                                 { ! enabled cross_compile && {
4346                                     add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
4347                                     add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
4348                                     check_lib interface/mmal/mmal.h mmal_port_connect ; }
4349                                 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
4350                                die "ERROR: mmal not found"; }
4351 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4352                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4353                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4354                                die "ERROR: openssl not found"; }
4355
4356 if enabled gnutls; then
4357     { check_lib2 gmp.h mpz_export -lgmp && enable gmp; } ||
4358     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4359 fi
4360
4361 # libdc1394 check
4362 if enabled libdc1394; then
4363     { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
4364         enable libdc1394_2; } ||
4365     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4366         enable libdc1394_1; } ||
4367     die "ERROR: No version of libdc1394 found "
4368 fi
4369
4370 if enabled nvenc; then
4371     check_header cuda.h || die "ERROR: cuda.h not found.";
4372     check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found.";
4373     check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
4374         die "ERROR: NVENC API version 4 or older is not supported";
4375 fi
4376
4377 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4378     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4379     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4380     enable sdl
4381 fi
4382
4383 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
4384 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
4385
4386 check_header linux/fb.h
4387 check_header linux/videodev2.h
4388 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
4389
4390 check_header sys/videoio.h
4391
4392 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4393 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4394 # w32api 3.12 had it defined wrong
4395 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4396
4397 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4398 { check_header dev/bktr/ioctl_meteor.h &&
4399   check_header dev/bktr/ioctl_bt848.h; } ||
4400 { check_header machine/ioctl_meteor.h &&
4401   check_header machine/ioctl_bt848.h; } ||
4402 { check_header dev/video/meteor/ioctl_meteor.h &&
4403   check_header dev/video/bktr/ioctl_bt848.h; } ||
4404 check_header dev/ic/bt8xx.h
4405
4406 check_header sndio.h
4407 check_header sys/soundcard.h
4408 check_header soundcard.h
4409
4410 enabled_any alsa_indev alsa_outdev &&
4411     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4412
4413 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
4414     check_func jack_port_get_latency_range -ljack
4415
4416 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4417
4418 if enabled libcdio; then
4419     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4420     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4421     die "ERROR: No usable libcdio/cdparanoia found"
4422 fi
4423
4424 check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
4425
4426 if enabled libxcb || enabled x11grab && ! disabled libxcb; then
4427     check_pkg_config xcb-shape xcb/shape.h xcb_shape_rectangles || {
4428         enabled libxcb && die "ERROR: libxcb not found";
4429     } && disable x11grab && enable libxcb
4430
4431     disabled libxcb_shm ||
4432         check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
4433             enabled libxcb_shm && die "ERROR: libxcb_shm not found";
4434         } && check_header sys/shm.h && enable libxcb_shm
4435
4436     disabled libxcb_xfixes ||
4437         check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
4438             enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
4439         } && enable libxcb_xfixes
4440
4441     add_cflags "$xcb_event_cflags $xcb_shm_cflags $xcb_xfixes_cflags"
4442     add_extralibs "$xcb_event_libs $xcb_shm_libs $xcb_xfixes_libs"
4443 fi
4444
4445 if enabled x11grab; then
4446     enabled xlib || die "ERROR: Xlib not found"
4447     require Xext X11/extensions/XShm.h XShmCreateImage -lXext
4448     require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
4449 fi
4450
4451 enabled vaapi && enabled xlib &&
4452     check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
4453     enable vaapi_x11
4454
4455 enabled vdpau &&
4456     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4457     disable vdpau
4458
4459 enabled vdpau && enabled xlib &&
4460     check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
4461     prepend avconv_libs $($ldflags_filter "-lvdpau") &&
4462     enable vdpau_x11
4463
4464 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4465
4466 # add some useful compiler flags if supported
4467 check_cflags -Wdeclaration-after-statement
4468 check_cflags -Wall
4469 check_cflags -Wdisabled-optimization
4470 check_cflags -Wpointer-arith
4471 check_cflags -Wredundant-decls
4472 check_cflags -Wcast-qual
4473 check_cflags -Wwrite-strings
4474 check_cflags -Wtype-limits
4475 check_cflags -Wundef
4476 check_cflags -Wmissing-prototypes
4477 check_cflags -Wstrict-prototypes
4478 enabled extra_warnings && check_cflags -Winline
4479
4480 check_disable_warning(){
4481     warning_flag=-W${1#-Wno-}
4482     test_cflags $warning_flag && add_cflags $1
4483 }
4484
4485 check_disable_warning -Wno-parentheses
4486 check_disable_warning -Wno-switch
4487 check_disable_warning -Wno-format-zero-length
4488 check_disable_warning -Wno-pointer-sign
4489
4490 # add some linker flags
4491 check_ldflags -Wl,--warn-common
4492 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4493 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
4494 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4495
4496 # add some strip flags
4497 # -wN '..@*' is more selective than -x, but not available everywhere.
4498 check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'
4499
4500 enabled neon_clobber_test &&
4501     check_ldflags -Wl,--wrap,avcodec_open2              \
4502                   -Wl,--wrap,avcodec_decode_audio4      \
4503                   -Wl,--wrap,avcodec_decode_video2      \
4504                   -Wl,--wrap,avcodec_decode_subtitle2   \
4505                   -Wl,--wrap,avcodec_encode_audio2      \
4506                   -Wl,--wrap,avcodec_encode_video2      \
4507                   -Wl,--wrap,avcodec_encode_subtitle    \
4508                   -Wl,--wrap,avresample_convert ||
4509     disable neon_clobber_test
4510
4511 enabled xmm_clobber_test &&
4512     check_ldflags -Wl,--wrap,avcodec_open2              \
4513                   -Wl,--wrap,avcodec_decode_audio4      \
4514                   -Wl,--wrap,avcodec_decode_video2      \
4515                   -Wl,--wrap,avcodec_decode_subtitle2   \
4516                   -Wl,--wrap,avcodec_encode_audio2      \
4517                   -Wl,--wrap,avcodec_encode_video2      \
4518                   -Wl,--wrap,avcodec_encode_subtitle    \
4519                   -Wl,--wrap,avresample_convert         \
4520                   -Wl,--wrap,sws_scale ||
4521     disable xmm_clobber_test
4522
4523 echo "X{};" > $TMPV
4524 if test_ldflags -Wl,--version-script,$TMPV; then
4525     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4526     check_cc <<EOF && enable symver_asm_label
4527 void ff_foo(void) __asm__ ("av_foo@VERSION");
4528 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4529 EOF
4530     check_cc <<EOF && enable symver_gnu_asm
4531 __asm__(".symver ff_foo,av_foo@VERSION");
4532 void ff_foo(void) {}
4533 EOF
4534 fi
4535
4536 if [ -z "$optflags" ]; then
4537     if enabled small; then
4538         optflags=$cflags_size
4539     elif enabled optimizations; then
4540         optflags=$cflags_speed
4541     else
4542         optflags=$cflags_noopt
4543     fi
4544 fi
4545
4546 check_optflags(){
4547     check_cflags "$@"
4548     enabled lto && check_ldflags "$@"
4549 }
4550
4551
4552 if enabled lto; then
4553     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4554     check_cflags  -flto
4555     check_ldflags -flto $cpuflags
4556 fi
4557
4558 check_optflags $optflags
4559 check_optflags -fno-math-errno
4560 check_optflags -fno-signed-zeros
4561
4562 if enabled icc; then
4563     # Just warnings, no remarks
4564     check_cflags -w1
4565     # -wd: Disable following warnings
4566     # 144, 167, 556: -Wno-pointer-sign
4567     # 1292: attribute "foo" ignored
4568     # 1419: external declaration in primary source file
4569     # 10006: ignoring unknown option -fno-signed-zeros
4570     # 10148: ignoring unknown option -Wno-parentheses
4571     # 10156: ignoring option '-W'; no argument required
4572     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
4573     # 11030: Warning unknown option --as-needed
4574     # 10156: ignoring option '-export'; no argument required
4575     check_ldflags -wd10156,11030
4576     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4577     enable ebp_available
4578     if enabled x86_32; then
4579         icc_version=$($cc -dumpversion)
4580         test ${icc_version%%.*} -ge 11 &&
4581             check_cflags -falign-stack=maintain-16-byte ||
4582             disable aligned_stack
4583     fi
4584 elif enabled ccc; then
4585     # disable some annoying warnings
4586     add_cflags -msg_disable bitnotint
4587     add_cflags -msg_disable mixfuncvoid
4588     add_cflags -msg_disable nonstandcast
4589     add_cflags -msg_disable unsupieee
4590 elif enabled gcc; then
4591     check_optflags -fno-tree-vectorize
4592     check_cflags -Werror=implicit-function-declaration
4593     check_cflags -Werror=missing-prototypes
4594     check_cflags -Werror=return-type
4595     check_cflags -Werror=declaration-after-statement
4596     check_cflags -Werror=vla
4597     check_cflags -Werror=format-security
4598     check_cflags -fdiagnostics-color=auto
4599     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4600 elif enabled llvm_gcc; then
4601     check_cflags -mllvm -stack-alignment=16
4602 elif enabled clang; then
4603     check_cflags -mllvm -stack-alignment=16
4604     check_cflags -Qunused-arguments
4605     check_cflags -Werror=implicit-function-declaration
4606     check_cflags -Werror=missing-prototypes
4607     check_cflags -Werror=return-type
4608 elif enabled cparser; then
4609     add_cflags -Wno-missing-variable-declarations
4610     add_cflags -Wno-empty-statement
4611 elif enabled armcc; then
4612     add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
4613     add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
4614     # 2523: use of inline assembly is deprecated
4615     add_cflags -W${armcc_opt},--diag_suppress=2523
4616     add_cflags -W${armcc_opt},--diag_suppress=1207
4617     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4618     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4619     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
4620     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4621 elif enabled tms470; then
4622     add_cflags -pds=824 -pds=837
4623     disable inline_asm
4624 elif enabled pathscale; then
4625     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4626 elif enabled_any msvc icl; then
4627     enabled x86_32 && disable aligned_stack
4628     enabled_all x86_32 debug && add_cflags -Oy-
4629     enabled debug && add_ldflags -debug
4630     enable pragma_deprecated
4631     if enabled icl; then
4632         # -Qansi-alias is basically -fstrict-aliasing, but does not work
4633         # (correctly) on icl 13.x.
4634         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
4635             add_cflags -Qansi-alias
4636         # icl will pass the inline asm tests but inline asm is currently
4637         # not supported (build will fail)
4638         disable inline_asm
4639     fi
4640     # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
4641     check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
4642 fi
4643
4644 case $as_type in
4645     clang)
4646         add_asflags -Qunused-arguments
4647     ;;
4648 esac
4649
4650 case $ld_type in
4651     clang)
4652         check_ldflags -Qunused-arguments
4653     ;;
4654 esac
4655
4656 case $target_os in
4657     osf1)
4658         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4659     ;;
4660     plan9)
4661         add_cppflags -Dmain=plan9_main
4662     ;;
4663 esac
4664
4665 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4666
4667 check_deps $CONFIG_LIST       \
4668            $CONFIG_EXTRA      \
4669            $HAVE_LIST         \
4670            $ALL_COMPONENTS    \
4671
4672 enabled_all dxva2 CoTaskMemFree &&
4673     prepend avconv_libs $($ldflags_filter "-lole32") &&
4674     enable dxva2_lib
4675
4676 ! enabled_any memalign posix_memalign aligned_malloc &&
4677     enabled simd_align_16 && enable memalign_hack
4678
4679 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
4680
4681 for thread in $THREADS_LIST; do
4682     if enabled $thread; then
4683         test -n "$thread_type" &&
4684             die "ERROR: Only one thread type must be selected." ||
4685             thread_type="$thread"
4686     fi
4687 done
4688
4689 enabled zlib && add_cppflags -DZLIB_CONST
4690
4691 # conditional library dependencies, in linking order
4692 enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
4693 enabled resample_filter && prepend avfilter_deps "avresample"
4694 enabled scale_filter    && prepend avfilter_deps "swscale"
4695
4696 enabled opus_decoder    && prepend avcodec_deps "avresample"
4697
4698 expand_deps(){
4699     lib_deps=${1}_deps
4700     eval "deps=\$$lib_deps"
4701     append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
4702     unique $lib_deps
4703 }
4704
4705 map 'expand_deps $v' $LIBRARY_LIST
4706
4707 echo "install prefix            $prefix"
4708 echo "source path               $source_path"
4709 echo "C compiler                $cc"
4710 echo "C library                 $libc_type"
4711 if test "$host_cc" != "$cc"; then
4712     echo "host C compiler           $host_cc"
4713     echo "host C library            $host_libc_type"
4714 fi
4715 echo "ARCH                      $arch ($cpu)"
4716 if test "$build_suffix" != ""; then
4717     echo "build suffix              $build_suffix"
4718 fi
4719 if test "$extra_version" != ""; then
4720     echo "version string suffix     $extra_version"
4721 fi
4722 echo "big-endian                ${bigendian-no}"
4723 echo "runtime cpu detection     ${runtime_cpudetect-no}"
4724 if enabled x86; then
4725     echo "${yasmexe}                      ${yasm-no}"
4726     echo "MMX enabled               ${mmx-no}"
4727     echo "MMXEXT enabled            ${mmxext-no}"
4728     echo "3DNow! enabled            ${amd3dnow-no}"
4729     echo "3DNow! extended enabled   ${amd3dnowext-no}"
4730     echo "SSE enabled               ${sse-no}"
4731     echo "SSSE3 enabled             ${ssse3-no}"
4732     echo "AVX enabled               ${avx-no}"
4733     echo "XOP enabled               ${xop-no}"
4734     echo "FMA3 enabled              ${fma3-no}"
4735     echo "FMA4 enabled              ${fma4-no}"
4736     echo "i686 features enabled     ${i686-no}"
4737     echo "CMOV is fast              ${fast_cmov-no}"
4738     echo "EBX available             ${ebx_available-no}"
4739     echo "EBP available             ${ebp_available-no}"
4740 fi
4741 if enabled aarch64; then
4742     echo "NEON enabled              ${neon-no}"
4743     echo "VFP enabled               ${vfp-no}"
4744 fi
4745 if enabled arm; then
4746     echo "ARMv5TE enabled           ${armv5te-no}"
4747     echo "ARMv6 enabled             ${armv6-no}"
4748     echo "ARMv6T2 enabled           ${armv6t2-no}"
4749     echo "VFP enabled               ${vfp-no}"
4750     echo "NEON enabled              ${neon-no}"
4751 fi
4752 if enabled ppc; then
4753     echo "AltiVec enabled           ${altivec-no}"
4754     echo "VSX enabled               ${vsx-no}"
4755     echo "POWER8 enabled            ${power8-no}"
4756     echo "PPC 4xx optimizations     ${ppc4xx-no}"
4757     echo "dcbzl available           ${dcbzl-no}"
4758 fi
4759 echo "debug symbols             ${debug-no}"
4760 echo "optimize for size         ${small-no}"
4761 echo "optimizations             ${optimizations-no}"
4762 echo "static                    ${static-no}"
4763 echo "shared                    ${shared-no}"
4764 echo "new filter support        ${avfilter-no}"
4765 echo "network support           ${network-no}"
4766 echo "threading support         ${thread_type-no}"
4767 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4768 echo "SDL support               ${sdl-no}"
4769 test -n "$random_seed" &&
4770     echo "random seed               ${random_seed}"
4771 echo
4772
4773 echo "External libraries:"
4774 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
4775 echo
4776
4777 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4778     echo "Enabled ${type}s:"
4779     eval list=\$$(toupper $type)_LIST
4780     print_enabled '_*' $list | print_3_columns
4781     echo
4782 done
4783
4784 license="LGPL version 2.1 or later"
4785 if enabled nonfree; then
4786     license="nonfree and unredistributable"
4787 elif enabled gplv3; then
4788     license="GPL version 3 or later"
4789 elif enabled lgplv3; then
4790     license="LGPL version 3 or later"
4791 elif enabled gpl; then
4792     license="GPL version 2 or later"
4793 fi
4794