txd: Use the TextureDSP module for decoding
[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     snappy
1628     startcode
1629     texturedsp
1630     texturedspenc
1631     tpeldsp
1632     videodsp
1633     vp3dsp
1634     wma_freqs
1635 "
1636
1637 CMDLINE_SELECT="
1638     $ARCH_EXT_LIST
1639     $CONFIG_LIST
1640     $HAVE_LIST_CMDLINE
1641     $THREADS_LIST
1642     asm
1643     cross_compile
1644     debug
1645     extra_warnings
1646     logging
1647     lto
1648     optimizations
1649     rpath
1650 "
1651
1652 PATHS_LIST="
1653     bindir
1654     datadir
1655     docdir
1656     incdir
1657     libdir
1658     mandir
1659     prefix
1660     shlibdir
1661 "
1662
1663 CMDLINE_SET="
1664     $PATHS_LIST
1665     ar
1666     arch
1667     as
1668     build_suffix
1669     cc
1670     cpu
1671     cross_prefix
1672     dep_cc
1673     env
1674     extra_version
1675     host_cc
1676     host_cflags
1677     host_ld
1678     host_ldflags
1679     host_libs
1680     host_os
1681     ld
1682     logfile
1683     malloc_prefix
1684     nm
1685     optflags
1686     pkg_config
1687     pkg_config_flags
1688     random_seed
1689     samples
1690     sysinclude
1691     sysroot
1692     target_exec
1693     target_os
1694     target_path
1695     target_samples
1696     toolchain
1697 "
1698
1699 CMDLINE_APPEND="
1700     extra_cflags
1701     host_cppflags
1702 "
1703
1704 # code dependency declarations
1705
1706 # architecture extensions
1707
1708 armv5te_deps="arm"
1709 armv6_deps="arm"
1710 armv6t2_deps="arm"
1711 armv8_deps="aarch64"
1712 neon_deps_any="aarch64 arm"
1713 intrinsics_neon_deps="neon"
1714 vfp_deps_any="aarch64 arm"
1715 vfpv3_deps="vfp"
1716
1717 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1718
1719 altivec_deps="ppc"
1720 ppc4xx_deps="ppc"
1721 vsx_deps="altivec"
1722 power8_deps="vsx"
1723
1724 cpunop_deps="i686"
1725 x86_64_select="i686"
1726 x86_64_suggest="fast_cmov"
1727
1728 amd3dnow_deps="mmx"
1729 amd3dnowext_deps="amd3dnow"
1730 i686_deps="x86"
1731 mmx_deps="x86"
1732 mmxext_deps="mmx"
1733 sse_deps="mmxext"
1734 sse2_deps="sse"
1735 sse3_deps="sse2"
1736 ssse3_deps="sse3"
1737 sse4_deps="ssse3"
1738 sse42_deps="sse4"
1739 avx_deps="sse42"
1740 xop_deps="avx"
1741 fma3_deps="avx"
1742 fma4_deps="avx"
1743 avx2_deps="avx"
1744
1745 mmx_external_deps="yasm"
1746 mmx_inline_deps="inline_asm"
1747 mmx_suggest="mmx_external mmx_inline"
1748
1749 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1750     eval dep=\$${ext}_deps
1751     eval ${ext}_external_deps='"${dep}_external"'
1752     eval ${ext}_inline_deps='"${dep}_inline"'
1753     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1754 done
1755
1756 aligned_stack_if_any="aarch64 ppc x86"
1757 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1758 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1759 fast_unaligned_if_any="aarch64 ppc x86"
1760 simd_align_16_if_any="altivec neon sse"
1761
1762 # system capabilities
1763 symver_if_any="symver_asm_label symver_gnu_asm"
1764 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
1765
1766 # threading support
1767 atomics_gcc_if="sync_val_compare_and_swap"
1768 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1769 atomics_win32_if="MemoryBarrier"
1770 atomics_native_if_any="$ATOMICS_LIST"
1771 w32threads_deps="atomics_native"
1772 threads_if_any="$THREADS_LIST"
1773
1774 # subsystems
1775 dct_select="rdft"
1776 error_resilience_select="me_cmp"
1777 faandct_deps="faan fdctdsp"
1778 faanidct_deps="faan idctdsp"
1779 intrax8_select="error_resilience"
1780 mdct_select="fft"
1781 rdft_select="fft"
1782 me_cmp_select="fdctdsp idctdsp pixblockdsp"
1783 mpeg_er_select="error_resilience"
1784 mpegaudio_select="mpegaudiodsp"
1785 mpegaudiodsp_select="dct"
1786 mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp videodsp"
1787 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
1788 nvenc_deps_any="dlopen LoadLibrary"
1789 nvenc_extralibs='$ldl'
1790 qsvdec_select="qsv"
1791 qsvenc_select="qsv"
1792
1793 # decoders / encoders
1794 aac_decoder_select="imdct15 mdct sinewin"
1795 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
1796 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1797 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
1798 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1799 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
1800 aic_decoder_select="golomb idctdsp"
1801 alac_encoder_select="lpc"
1802 als_decoder_select="bswapdsp"
1803 amrnb_decoder_select="lsp"
1804 amrwb_decoder_select="lsp"
1805 amv_decoder_select="sp5x_decoder"
1806 ape_decoder_select="bswapdsp"
1807 asv1_decoder_select="blockdsp bswapdsp idctdsp"
1808 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
1809 asv2_decoder_select="blockdsp bswapdsp idctdsp"
1810 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
1811 atrac1_decoder_select="mdct sinewin"
1812 atrac3_decoder_select="mdct"
1813 atrac3p_decoder_select="mdct sinewin"
1814 bink_decoder_select="blockdsp hpeldsp"
1815 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
1816 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
1817 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
1818 cllc_decoder_select="bswapdsp"
1819 comfortnoise_encoder_select="lpc"
1820 cook_decoder_select="audiodsp mdct sinewin"
1821 cscd_decoder_select="lzo"
1822 cscd_decoder_suggest="zlib"
1823 dca_decoder_select="fmtconvert mdct"
1824 dnxhd_decoder_select="blockdsp idctdsp"
1825 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
1826 dvvideo_decoder_select="dvprofile idctdsp"
1827 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
1828 dxa_decoder_deps="zlib"
1829 eac3_decoder_select="ac3_decoder"
1830 eac3_encoder_select="ac3_encoder"
1831 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
1832 eatgq_decoder_select="aandcttables idctdsp"
1833 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
1834 exr_decoder_deps="zlib"
1835 ffv1_decoder_select="golomb rangecoder"
1836 ffv1_encoder_select="rangecoder"
1837 ffvhuff_decoder_select="huffyuv_decoder"
1838 ffvhuff_encoder_select="huffyuv_encoder"
1839 fic_decoder_select="golomb"
1840 flac_decoder_select="golomb"
1841 flac_encoder_select="bswapdsp golomb lpc"
1842 flashsv_decoder_deps="zlib"
1843 flashsv_encoder_deps="zlib"
1844 flashsv2_decoder_deps="zlib"
1845 flv_decoder_select="h263_decoder"
1846 flv_encoder_select="h263_encoder"
1847 fourxm_decoder_select="blockdsp bswapdsp"
1848 fraps_decoder_select="bswapdsp huffman"
1849 g2m_decoder_deps="zlib"
1850 g2m_decoder_select="blockdsp idctdsp jpegtables"
1851 h261_decoder_select="mpeg_er mpegvideo"
1852 h261_encoder_select="aandcttables mpegvideoenc"
1853 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
1854 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1855 h263i_decoder_select="h263_decoder"
1856 h263p_encoder_select="h263_encoder"
1857 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
1858 h264_decoder_suggest="error_resilience"
1859 h264_nvenc_encoder_deps="nvenc"
1860 h264_qsv_decoder_deps="libmfx"
1861 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
1862 h264_qsv_encoder_deps="libmfx"
1863 h264_qsv_encoder_select="qsvenc"
1864 hevc_decoder_select="bswapdsp cabac golomb videodsp"
1865 hevc_nvenc_encoder_deps="nvenc"
1866 huffyuv_decoder_select="bswapdsp huffyuvdsp"
1867 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
1868 iac_decoder_select="imc_decoder"
1869 imc_decoder_select="bswapdsp fft mdct sinewin"
1870 indeo3_decoder_select="hpeldsp"
1871 interplay_video_decoder_select="hpeldsp"
1872 jpegls_decoder_select="golomb mjpeg_decoder"
1873 jpegls_encoder_select="golomb"
1874 jv_decoder_select="blockdsp"
1875 lagarith_decoder_select="huffyuvdsp"
1876 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
1877 loco_decoder_select="golomb"
1878 mdec_decoder_select="blockdsp idctdsp mpegvideo"
1879 metasound_decoder_select="lsp mdct sinewin"
1880 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
1881 mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
1882 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
1883 mjpegb_decoder_select="mjpeg_decoder"
1884 mlp_decoder_select="mlp_parser"
1885 motionpixels_decoder_select="bswapdsp"
1886 mp1_decoder_select="mpegaudio"
1887 mp1float_decoder_select="mpegaudio"
1888 mp2_decoder_select="mpegaudio"
1889 mp2float_decoder_select="mpegaudio"
1890 mp3_decoder_select="mpegaudio"
1891 mp3adu_decoder_select="mpegaudio"
1892 mp3adufloat_decoder_select="mpegaudio"
1893 mp3float_decoder_select="mpegaudio"
1894 mp3on4_decoder_select="mpegaudio"
1895 mp3on4float_decoder_select="mpegaudio"
1896 mpc7_decoder_select="bswapdsp mpegaudiodsp"
1897 mpc8_decoder_select="mpegaudiodsp"
1898 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1899 mpeg_xvmc_decoder_select="mpeg2video_decoder"
1900 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
1901 mpeg1video_encoder_select="aandcttables mpegvideoenc"
1902 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
1903 mpeg2video_encoder_select="aandcttables mpegvideoenc"
1904 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1905 mpeg4_encoder_select="h263_encoder"
1906 msmpeg4v1_decoder_select="h263_decoder"
1907 msmpeg4v2_decoder_select="h263_decoder"
1908 msmpeg4v2_encoder_select="h263_encoder"
1909 msmpeg4v3_decoder_select="h263_decoder"
1910 msmpeg4v3_encoder_select="h263_encoder"
1911 mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
1912 mxpeg_decoder_select="mjpeg_decoder"
1913 nellymoser_decoder_select="mdct sinewin"
1914 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1915 nuv_decoder_select="idctdsp lzo"
1916 on2avc_decoder_select="mdct"
1917 opus_decoder_deps="avresample"
1918 opus_decoder_select="imdct15"
1919 png_decoder_deps="zlib"
1920 png_encoder_deps="zlib"
1921 png_encoder_select="huffyuvencdsp"
1922 prores_decoder_select="idctdsp"
1923 prores_encoder_select="fdctdsp"
1924 qcelp_decoder_select="lsp"
1925 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1926 ra_144_encoder_select="audio_frame_queue lpc"
1927 ralf_decoder_select="golomb"
1928 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
1929 rv10_encoder_select="h263_encoder"
1930 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
1931 rv20_encoder_select="h263_encoder"
1932 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
1933 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
1934 shorten_decoder_select="golomb"
1935 sipr_decoder_select="lsp"
1936 sp5x_decoder_select="mjpeg_decoder"
1937 svq1_decoder_select="hpeldsp"
1938 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
1939 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
1940 svq3_decoder_suggest="zlib"
1941 tak_decoder_select="audiodsp"
1942 tdsc_decoder_deps="zlib"
1943 tdsc_decoder_select="mjpeg_decoder"
1944 theora_decoder_select="vp3_decoder"
1945 thp_decoder_select="mjpeg_decoder"
1946 tiff_decoder_suggest="zlib"
1947 tiff_encoder_suggest="zlib"
1948 truehd_decoder_select="mlp_decoder"
1949 truemotion2_decoder_select="bswapdsp"
1950 truespeech_decoder_select="bswapdsp"
1951 tscc_decoder_deps="zlib"
1952 txd_decoder_select="texturedsp"
1953 twinvq_decoder_select="mdct lsp sinewin"
1954 utvideo_decoder_select="bswapdsp"
1955 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
1956 vble_decoder_select="huffyuvdsp"
1957 vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
1958 vc1image_decoder_select="vc1_decoder"
1959 vorbis_decoder_select="mdct"
1960 vorbis_encoder_select="mdct"
1961 vp3_decoder_select="hpeldsp vp3dsp videodsp"
1962 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
1963 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
1964 vp6a_decoder_select="vp6_decoder"
1965 vp6f_decoder_select="vp6_decoder"
1966 vp7_decoder_select="h264pred videodsp"
1967 vp8_decoder_select="h264pred videodsp"
1968 vp9_decoder_select="videodsp"
1969 webp_decoder_select="vp8_decoder"
1970 wmapro_decoder_select="mdct sinewin wma_freqs"
1971 wmav1_decoder_select="mdct sinewin wma_freqs"
1972 wmav1_encoder_select="mdct sinewin wma_freqs"
1973 wmav2_decoder_select="mdct sinewin wma_freqs"
1974 wmav2_encoder_select="mdct sinewin wma_freqs"
1975 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1976 wmv1_decoder_select="h263_decoder"
1977 wmv1_encoder_select="h263_encoder"
1978 wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
1979 wmv2_encoder_select="h263_encoder"
1980 wmv3_decoder_select="vc1_decoder"
1981 wmv3image_decoder_select="wmv3_decoder"
1982 zerocodec_decoder_deps="zlib"
1983 zlib_decoder_deps="zlib"
1984 zlib_encoder_deps="zlib"
1985 zmbv_decoder_deps="zlib"
1986 zmbv_encoder_deps="zlib"
1987
1988 # hardware accelerators
1989 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
1990 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
1991 vaapi_deps="va_va_h"
1992 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1993 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1994 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1995
1996 h263_vaapi_hwaccel_deps="vaapi"
1997 h263_vaapi_hwaccel_select="h263_decoder"
1998 h263_vdpau_hwaccel_deps="vdpau"
1999 h263_vdpau_hwaccel_select="h263_decoder"
2000 h264_d3d11va_hwaccel_deps="d3d11va"
2001 h264_d3d11va_hwaccel_select="h264_decoder"
2002 h264_dxva2_hwaccel_deps="dxva2"
2003 h264_dxva2_hwaccel_select="h264_decoder"
2004 h264_mmal_decoder_deps="mmal"
2005 h264_mmal_hwaccel_deps="mmal"
2006 h264_mmal_decoder_select="h264_decoder"
2007 h264_mmal_encoder_deps="mmal"
2008 h264_qsv_hwaccel_deps="libmfx"
2009 h264_vaapi_hwaccel_deps="vaapi"
2010 h264_vaapi_hwaccel_select="h264_decoder"
2011 h264_vda_hwaccel_deps="vda"
2012 h264_vda_hwaccel_select="h264_decoder"
2013 h264_vda_old_hwaccel_deps="vda"
2014 h264_vda_old_hwaccel_select="h264_decoder"
2015 h264_vdpau_hwaccel_deps="vdpau"
2016 h264_vdpau_hwaccel_select="h264_decoder"
2017 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2018 hevc_d3d11va_hwaccel_select="hevc_decoder"
2019 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2020 hevc_dxva2_hwaccel_select="hevc_decoder"
2021 mpeg1_vdpau_hwaccel_deps="vdpau"
2022 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2023 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2024 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2025 mpeg2_dxva2_hwaccel_deps="dxva2"
2026 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2027 mpeg2_vaapi_hwaccel_deps="vaapi"
2028 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2029 mpeg2_vdpau_hwaccel_deps="vdpau"
2030 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2031 mpeg4_vaapi_hwaccel_deps="vaapi"
2032 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2033 mpeg4_vdpau_hwaccel_deps="vdpau"
2034 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2035 vc1_d3d11va_hwaccel_deps="d3d11va"
2036 vc1_d3d11va_hwaccel_select="vc1_decoder"
2037 vc1_dxva2_hwaccel_deps="dxva2"
2038 vc1_dxva2_hwaccel_select="vc1_decoder"
2039 vc1_vaapi_hwaccel_deps="vaapi"
2040 vc1_vaapi_hwaccel_select="vc1_decoder"
2041 vc1_vdpau_hwaccel_deps="vdpau"
2042 vc1_vdpau_hwaccel_select="vc1_decoder"
2043 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2044 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2045 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2046 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2047
2048 # parsers
2049 h264_parser_select="h264_decoder"
2050 mpegvideo_parser_select="mpegvideo"
2051 mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
2052 vc1_parser_select="mpegvideo startcode vc1_decoder"
2053
2054 # bitstream_filters
2055 mjpeg2jpeg_bsf_select="jpegtables"
2056
2057 # external libraries
2058 libdcadec_decoder_deps="libdcadec"
2059 libfaac_encoder_deps="libfaac"
2060 libfaac_encoder_select="audio_frame_queue"
2061 libfdk_aac_decoder_deps="libfdk_aac"
2062 libfdk_aac_encoder_deps="libfdk_aac"
2063 libfdk_aac_encoder_select="audio_frame_queue"
2064 libgsm_decoder_deps="libgsm"
2065 libgsm_encoder_deps="libgsm"
2066 libgsm_ms_decoder_deps="libgsm"
2067 libgsm_ms_encoder_deps="libgsm"
2068 libilbc_decoder_deps="libilbc"
2069 libilbc_encoder_deps="libilbc"
2070 libmp3lame_encoder_deps="libmp3lame"
2071 libmp3lame_encoder_select="audio_frame_queue"
2072 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2073 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2074 libopencore_amrnb_encoder_select="audio_frame_queue"
2075 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2076 libopenh264_encoder_deps="libopenh264"
2077 libopenjpeg_decoder_deps="libopenjpeg"
2078 libopenjpeg_encoder_deps="libopenjpeg"
2079 libopus_decoder_deps="libopus"
2080 libopus_encoder_deps="libopus"
2081 libopus_encoder_select="audio_frame_queue"
2082 libschroedinger_decoder_deps="libschroedinger"
2083 libschroedinger_encoder_deps="libschroedinger"
2084 libspeex_decoder_deps="libspeex"
2085 libspeex_encoder_deps="libspeex"
2086 libspeex_encoder_select="audio_frame_queue"
2087 libtheora_encoder_deps="libtheora"
2088 libtwolame_encoder_deps="libtwolame"
2089 libvo_aacenc_encoder_deps="libvo_aacenc"
2090 libvo_aacenc_encoder_select="audio_frame_queue"
2091 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2092 libvorbis_encoder_deps="libvorbis"
2093 libvorbis_encoder_select="audio_frame_queue"
2094 libvpx_vp8_decoder_deps="libvpx"
2095 libvpx_vp8_encoder_deps="libvpx"
2096 libvpx_vp9_decoder_deps="libvpx"
2097 libvpx_vp9_encoder_deps="libvpx"
2098 libwavpack_encoder_deps="libwavpack"
2099 libwebp_encoder_deps="libwebp"
2100 libx264_encoder_deps="libx264"
2101 libx265_encoder_deps="libx265"
2102 libxavs_encoder_deps="libxavs"
2103 libxvid_encoder_deps="libxvid"
2104
2105 # demuxers / muxers
2106 ac3_demuxer_select="ac3_parser"
2107 asf_demuxer_select="riffdec"
2108 asf_muxer_select="riffenc"
2109 asf_stream_muxer_select="asf_muxer"
2110 avi_demuxer_select="riffdec"
2111 avi_muxer_select="riffenc"
2112 avisynth_demuxer_deps="avisynth"
2113 avisynth_demuxer_select="riffdec"
2114 caf_demuxer_select="riffdec"
2115 dash_muxer_select="mp4_muxer"
2116 dirac_demuxer_select="dirac_parser"
2117 dv_demuxer_select="dvprofile"
2118 dv_muxer_select="dvprofile"
2119 dxa_demuxer_select="riffdec"
2120 eac3_demuxer_select="ac3_parser"
2121 f4v_muxer_select="mov_muxer"
2122 flac_demuxer_select="flac_parser"
2123 hds_muxer_select="flv_muxer"
2124 hls_muxer_select="mpegts_muxer"
2125 ipod_muxer_select="mov_muxer"
2126 ismv_muxer_select="mov_muxer"
2127 matroska_audio_muxer_select="matroska_muxer"
2128 matroska_demuxer_select="riffdec"
2129 matroska_demuxer_suggest="bzlib lzo zlib"
2130 matroska_muxer_select="riffenc"
2131 mmf_muxer_select="riffenc"
2132 mov_demuxer_select="riffdec"
2133 mov_demuxer_suggest="zlib"
2134 mov_muxer_select="riffenc rtpenc_chain"
2135 mp3_demuxer_select="mpegaudio_parser"
2136 mp4_muxer_select="mov_muxer"
2137 mpegts_muxer_select="adts_muxer latm_muxer"
2138 mpegtsraw_demuxer_select="mpegts_demuxer"
2139 mxf_d10_muxer_select="mxf_muxer"
2140 nut_muxer_select="riffenc"
2141 nuv_demuxer_select="riffdec"
2142 oga_muxer_select="ogg_muxer"
2143 ogg_demuxer_select="golomb"
2144 opus_muxer_select="ogg_muxer"
2145 psp_muxer_select="mov_muxer"
2146 rtp_demuxer_select="sdp_demuxer"
2147 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
2148 rtsp_demuxer_select="http_protocol rtpdec"
2149 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2150 sap_demuxer_select="sdp_demuxer"
2151 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2152 sdp_demuxer_select="rtpdec"
2153 smoothstreaming_muxer_select="ismv_muxer"
2154 spdif_muxer_select="aac_parser"
2155 spx_muxer_select="ogg_muxer"
2156 tak_demuxer_select="tak_parser"
2157 tg2_muxer_select="mov_muxer"
2158 tgp_muxer_select="mov_muxer"
2159 w64_demuxer_select="wav_demuxer"
2160 wav_demuxer_select="riffdec"
2161 wav_muxer_select="riffenc"
2162 webm_muxer_select="riffenc"
2163 wtv_demuxer_select="riffdec"
2164 xmv_demuxer_select="riffdec"
2165 xwma_demuxer_select="riffdec"
2166
2167 # indevs / outdevs
2168 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2169 alsa_outdev_deps="alsa_asoundlib_h"
2170 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2171 dv1394_indev_deps="dv1394"
2172 dv1394_indev_select="dv_demuxer"
2173 fbdev_indev_deps="linux_fb_h"
2174 jack_indev_deps="jack_jack_h pthreads"
2175 libcdio_indev_deps="libcdio"
2176 libdc1394_indev_deps="libdc1394"
2177 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2178 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2179 pulse_indev_deps="libpulse"
2180 sndio_indev_deps="sndio_h"
2181 sndio_outdev_deps="sndio_h"
2182 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2183 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2184 vfwcap_indev_extralibs="-lavicap32"
2185 x11grab_indev_deps="x11grab"
2186 x11grab_xcb_indev_deps="libxcb"
2187
2188 # protocols
2189 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2190 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
2191 ffrtmpcrypt_protocol_select="tcp_protocol"
2192 ffrtmphttp_protocol_deps="!librtmp_protocol"
2193 ffrtmphttp_protocol_select="http_protocol"
2194 gopher_protocol_select="network"
2195 http_protocol_select="tcp_protocol"
2196 httpproxy_protocol_select="tcp_protocol"
2197 https_protocol_select="tls_protocol"
2198 icecast_protocol_select="http_protocol"
2199 librtmp_protocol_deps="librtmp"
2200 librtmpe_protocol_deps="librtmp"
2201 librtmps_protocol_deps="librtmp"
2202 librtmpt_protocol_deps="librtmp"
2203 librtmpte_protocol_deps="librtmp"
2204 mmsh_protocol_select="http_protocol"
2205 mmst_protocol_select="network"
2206 rtmp_protocol_deps="!librtmp_protocol"
2207 rtmp_protocol_select="tcp_protocol"
2208 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2209 rtmps_protocol_deps="!librtmp_protocol"
2210 rtmps_protocol_select="tls_protocol"
2211 rtmpt_protocol_select="ffrtmphttp_protocol"
2212 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2213 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2214 rtp_protocol_select="udp_protocol"
2215 sctp_protocol_deps="struct_sctp_event_subscribe"
2216 sctp_protocol_select="network"
2217 srtp_protocol_select="rtp_protocol"
2218 tcp_protocol_select="network"
2219 tls_gnutls_protocol_deps="gnutls"
2220 tls_gnutls_protocol_select="tcp_protocol"
2221 tls_openssl_protocol_deps="openssl !tls_gnutls_protocol"
2222 tls_openssl_protocol_select="tcp_protocol"
2223 tls_protocol_deps_any="tls_gnutls_protocol tls_openssl_protocol"
2224 udp_protocol_select="network"
2225 unix_protocol_deps="sys_un_h"
2226 unix_protocol_select="network"
2227
2228 # filters
2229 blackframe_filter_deps="gpl"
2230 boxblur_filter_deps="gpl"
2231 bs2b_filter_deps="libbs2b"
2232 cropdetect_filter_deps="gpl"
2233 delogo_filter_deps="gpl"
2234 drawtext_filter_deps="libfreetype"
2235 frei0r_filter_deps="frei0r dlopen"
2236 frei0r_filter_extralibs='$ldl'
2237 frei0r_src_filter_deps="frei0r dlopen"
2238 frei0r_src_filter_extralibs='$ldl'
2239 hqdn3d_filter_deps="gpl"
2240 interlace_filter_deps="gpl"
2241 ocv_filter_deps="libopencv"
2242 resample_filter_deps="avresample"
2243 scale_filter_deps="swscale"
2244
2245 # examples
2246 avcodec_example_deps="avcodec avutil"
2247 filter_audio_example_deps="avfilter avutil"
2248 metadata_example_deps="avformat avutil"
2249 output_example_deps="avcodec avformat avutil swscale"
2250 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2251 transcode_aac_example_deps="avcodec avformat avresample"
2252
2253 # libraries, in linking order
2254 avcodec_deps="avutil"
2255 avdevice_deps="avformat avcodec avutil"
2256 avfilter_deps="avutil"
2257 avformat_deps="avcodec avutil"
2258 avresample_deps="avutil"
2259 swscale_deps="avutil"
2260
2261 # programs
2262 avconv_deps="avcodec avfilter avformat avresample swscale"
2263 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2264                fps_filter null_filter resample_filter scale_filter
2265                setpts_filter trim_filter"
2266 avplay_deps="avcodec avformat avresample swscale sdl"
2267 avplay_libs='$sdl_libs'
2268 avplay_select="rdft transpose_filter hflip_filter vflip_filter"
2269 avprobe_deps="avcodec avformat"
2270
2271 # documentation
2272 pod2man_deps="doc"
2273 texi2html_deps="doc"
2274
2275 # default parameters
2276
2277 logfile="config.log"
2278
2279 # installation paths
2280 prefix_default="/usr/local"
2281 bindir_default='${prefix}/bin'
2282 datadir_default='${prefix}/share/avconv'
2283 docdir_default='${prefix}/share/doc/libav'
2284 incdir_default='${prefix}/include'
2285 libdir_default='${prefix}/lib'
2286 mandir_default='${prefix}/share/man'
2287 shlibdir_default="$libdir_default"
2288
2289 # toolchain
2290 ar_default="ar"
2291 cc_default="gcc"
2292 host_cc_default="gcc"
2293 cp_f="cp -f"
2294 ln_s="ln -s -f"
2295 nm_default="nm -g"
2296 objformat="elf"
2297 pkg_config_default=pkg-config
2298 ranlib="ranlib"
2299 strip="strip"
2300 yasmexe="yasm"
2301
2302 # machine
2303 arch_default=$(uname -m)
2304 cpu="generic"
2305 intrinsics="none"
2306
2307 # OS
2308 target_os_default=$(tolower $(uname -s))
2309 host_os=$target_os_default
2310
2311 # configurable options
2312 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2313
2314 enable asm
2315 enable debug
2316 enable doc
2317 enable faan faandct faanidct
2318 enable optimizations
2319 enable safe_bitstream_reader
2320 enable static
2321 enable swscale_alpha
2322 enable valgrind_backtrace
2323
2324 # By default, enable only those hwaccels that have no external dependencies.
2325 enable d3d11va dxva2 vda vdpau
2326
2327 # build settings
2328 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2329 LIBPREF="lib"
2330 LIBSUF=".a"
2331 FULLNAME='$(NAME)$(BUILDSUF)'
2332 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2333 SLIBPREF="lib"
2334 SLIBSUF=".so"
2335 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2336 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2337 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2338 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2339 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2340 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2341
2342 asflags_filter=echo
2343 cflags_filter=echo
2344 ldflags_filter=echo
2345
2346 AS_C='-c'
2347 AS_O='-o $@'
2348 CC_C='-c'
2349 CC_E='-E -o $@'
2350 CC_O='-o $@'
2351 LD_O='-o $@'
2352 LD_LIB='-l%'
2353 LD_PATH='-L'
2354 HOSTCC_C='-c'
2355 HOSTCC_E='-E -o $@'
2356 HOSTCC_O='-o $@'
2357 HOSTLD_O='-o $@'
2358
2359 host_libs='-lm'
2360 host_cflags_filter=echo
2361 host_ldflags_filter=echo
2362
2363 target_path='$(CURDIR)'
2364
2365 # since the object filename is not given with the -MM flag, the compiler
2366 # is only able to print the basename, and we must add the path ourselves
2367 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2368 DEPFLAGS='-MM'
2369
2370 # find source path
2371 if test -f configure; then
2372     source_path=.
2373 else
2374     source_path=$(cd $(dirname "$0"); pwd)
2375     echo "$source_path" | grep -q '[[:blank:]]' &&
2376         die "Out of tree builds are impossible with whitespace in source path."
2377     test -e "$source_path/config.h" &&
2378         die "Out of tree builds are impossible with config.h in source dir."
2379 fi
2380
2381 for v in "$@"; do
2382     r=${v#*=}
2383     l=${v%"$r"}
2384     r=$(sh_quote "$r")
2385     LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2386 done
2387
2388 find_things(){
2389     thing=$1
2390     pattern=$2
2391     file=$source_path/$3
2392     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2393 }
2394
2395 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2396 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2397 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2398 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2399 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2400 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2401 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2402 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2403 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2404 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2405 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2406
2407 ALL_COMPONENTS="
2408     $BSF_LIST
2409     $DECODER_LIST
2410     $DEMUXER_LIST
2411     $ENCODER_LIST
2412     $FILTER_LIST
2413     $HWACCEL_LIST
2414     $INDEV_LIST
2415     $MUXER_LIST
2416     $OUTDEV_LIST
2417     $PARSER_LIST
2418     $PROTOCOL_LIST
2419 "
2420
2421 for n in $COMPONENT_LIST; do
2422     v=$(toupper ${n%s})_LIST
2423     eval enable \$$v
2424     eval ${n}_if_any="\$$v"
2425 done
2426
2427 enable $ARCH_EXT_LIST
2428
2429 die_unknown(){
2430     echo "Unknown option \"$1\"."
2431     echo "See $0 --help for available options."
2432     exit 1
2433 }
2434
2435 print_3_columns() {
2436     cat | tr ' ' '\n' | sort | pr -r -3 -t
2437 }
2438
2439 show_list() {
2440     suffix=_$1
2441     shift
2442     echo $* | sed s/$suffix//g | print_3_columns
2443     exit 0
2444 }
2445
2446 rand_list(){
2447     IFS=', '
2448     set -- $*
2449     unset IFS
2450     for thing; do
2451         comp=${thing%:*}
2452         prob=${thing#$comp}
2453         prob=${prob#:}
2454         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2455         echo "prob ${prob:-0.5}"
2456         printf '%s\n' $comp
2457     done
2458 }
2459
2460 do_random(){
2461     action=$1
2462     shift
2463     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2464     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2465 }
2466
2467 for opt do
2468     optval="${opt#*=}"
2469     case "$opt" in
2470         --extra-ldflags=*)
2471             add_ldflags $optval
2472         ;;
2473         --extra-ldexeflags=*)
2474             add_ldexeflags $optval
2475         ;;
2476         --extra-libs=*)
2477             add_extralibs $optval
2478         ;;
2479         --disable-devices)
2480             disable $INDEV_LIST $OUTDEV_LIST
2481         ;;
2482         --enable-debug=*)
2483             debuglevel="$optval"
2484         ;;
2485         --disable-programs)
2486             disable $PROGRAM_LIST
2487         ;;
2488         --disable-everything)
2489             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2490         ;;
2491         --disable-all)
2492             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2493             disable $LIBRARY_LIST $PROGRAM_LIST doc
2494         ;;
2495         --enable-random|--disable-random)
2496             action=${opt%%-random}
2497             do_random ${action#--} $COMPONENT_LIST
2498         ;;
2499         --enable-random=*|--disable-random=*)
2500             action=${opt%%-random=*}
2501             do_random ${action#--} $optval
2502         ;;
2503         --enable-*=*|--disable-*=*)
2504             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2505             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2506             eval list=\$$(toupper $thing)_LIST
2507             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2508             $action $(filter "$name" $list)
2509         ;;
2510         --enable-avserver|--disable-avserver*)
2511             warn "avserver has been removed, the ${opt} option is only"\
2512                  "provided for compatibility and will be removed in the future"
2513         ;;
2514         --enable-?*|--disable-?*)
2515             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2516             if is_in $option $COMPONENT_LIST; then
2517                 test $action = disable && action=unset
2518                 eval $action \$$(toupper ${option%s})_LIST
2519             elif is_in $option $CMDLINE_SELECT; then
2520                 $action $option
2521             else
2522                 die_unknown $opt
2523             fi
2524         ;;
2525         --list-*)
2526             NAME="${opt#--list-}"
2527             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2528             NAME=${NAME%s}
2529             eval show_list $NAME \$$(toupper $NAME)_LIST
2530         ;;
2531         --help|-h) show_help
2532         ;;
2533         *)
2534             optname="${opt%%=*}"
2535             optname="${optname#--}"
2536             optname=$(echo "$optname" | sed 's/-/_/g')
2537             if is_in $optname $CMDLINE_SET; then
2538                 eval $optname='$optval'
2539             elif is_in $optname $CMDLINE_APPEND; then
2540                 append $optname "$optval"
2541             else
2542                 die_unknown $opt
2543             fi
2544         ;;
2545     esac
2546 done
2547
2548 for e in $env; do
2549     eval "export $e"
2550 done
2551
2552 disabled logging && logfile=/dev/null
2553
2554 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2555 set >> $logfile
2556
2557 case "$toolchain" in
2558     clang-asan)
2559         cc_default="clang"
2560         add_cflags  -fsanitize=address
2561         add_ldflags -fsanitize=address
2562     ;;
2563     clang-tsan)
2564         cc_default="clang"
2565         add_cflags  -fsanitize=thread -pie
2566         add_ldflags -fsanitize=thread -pie
2567     ;;
2568     clang-usan)
2569         cc_default="clang"
2570         add_cflags  -fsanitize=undefined -O1
2571         add_ldflags -fsanitize=undefined
2572     ;;
2573     gcc-asan)
2574         cc_default="gcc"
2575         add_cflags  -fsanitize=address
2576         add_ldflags -fsanitize=address
2577     ;;
2578     gcc-tsan)
2579         cc_default="gcc"
2580         add_cflags  -fsanitize=thread -pie -fPIC
2581         add_ldflags -fsanitize=thread -pie -fPIC
2582     ;;
2583     gcc-usan)
2584         cc_default="gcc"
2585         add_cflags  -fsanitize=undefined
2586         add_ldflags -fsanitize=undefined
2587     ;;
2588     valgrind-massif)
2589         target_exec_default="valgrind"
2590         target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2591     ;;
2592     valgrind-memcheck)
2593         target_exec_default="valgrind"
2594         target_exec_args="--track-origins=yes --leak-check=full"
2595     ;;
2596     msvc)
2597         # Check whether the current MSVC version needs the C99 converter.
2598         # From MSVC 2013 (compiler major version 18) onwards, it does actually
2599         # support enough of C99 to build libav. Default to the new
2600         # behaviour if the regexp was unable to match anything, since this
2601         # successfully parses the version number of existing supported
2602         # versions that require the converter (MSVC 2010 and 2012).
2603         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2604         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2605             cc_default="cl"
2606         else
2607             cc_default="c99wrap cl"
2608         fi
2609         ld_default="link"
2610         nm_default="dumpbin -symbols"
2611         ar_default="lib"
2612         target_os_default="win32"
2613         # Use a relative path for TMPDIR. This makes sure all the
2614         # ffconf temp files are written with a relative path, avoiding
2615         # issues with msys/win32 path conversion for MSVC parameters
2616         # such as -Fo<file> or -out:<file>.
2617         TMPDIR=.
2618     ;;
2619     icl)
2620         cc_default="icl"
2621         ld_default="xilink"
2622         nm_default="dumpbin -symbols"
2623         ar_default="xilib"
2624         target_os_default="win32"
2625         TMPDIR=.
2626     ;;
2627     gcov)
2628         add_cflags  -fprofile-arcs -ftest-coverage
2629         add_ldflags -fprofile-arcs -ftest-coverage
2630     ;;
2631     hardened)
2632         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2633         add_cflags   -fno-strict-overflow -fstack-protector-all
2634         add_ldflags  -Wl,-z,relro -Wl,-z,now
2635     ;;
2636     ?*)
2637         die "Unknown toolchain $toolchain"
2638     ;;
2639 esac
2640
2641 test -n "$cross_prefix" && enable cross_compile
2642
2643 if enabled cross_compile; then
2644     test -n "$arch" && test -n "$target_os" ||
2645         die "Must specify target arch and OS when cross-compiling"
2646 fi
2647
2648 ar_default="${cross_prefix}${ar_default}"
2649 cc_default="${cross_prefix}${cc_default}"
2650 nm_default="${cross_prefix}${nm_default}"
2651 pkg_config_default="${cross_prefix}${pkg_config_default}"
2652 ranlib="${cross_prefix}${ranlib}"
2653 strip="${cross_prefix}${strip}"
2654
2655 sysinclude_default="${sysroot}/usr/include"
2656
2657 set_default arch cc pkg_config sysinclude target_exec target_os
2658 enabled cross_compile || host_cc_default=$cc
2659 set_default host_cc
2660
2661 if ! $pkg_config --version >/dev/null 2>&1; then
2662     warn "$pkg_config not found, library detection may fail."
2663     pkg_config=false
2664 fi
2665
2666 exesuf() {
2667     case $1 in
2668         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2669     esac
2670 }
2671
2672 EXESUF=$(exesuf $target_os)
2673 HOSTEXESUF=$(exesuf $host_os)
2674
2675 # set temporary file name
2676 : ${TMPDIR:=$TEMPDIR}
2677 : ${TMPDIR:=$TMP}
2678 : ${TMPDIR:=/tmp}
2679
2680 if ! check_cmd mktemp -u XXXXXX; then
2681     # simple replacement for missing mktemp
2682     # NOT SAFE FOR GENERAL USE
2683     mktemp(){
2684         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2685     }
2686 fi
2687
2688 tmpfile(){
2689     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2690         (set -C; exec > $tmp) 2>/dev/null ||
2691         die "Unable to create temporary file in $TMPDIR."
2692     append TMPFILES $tmp
2693     eval $1=$tmp
2694 }
2695
2696 trap 'rm -f -- $TMPFILES' EXIT
2697
2698 tmpfile TMPASM .asm
2699 tmpfile TMPC   .c
2700 tmpfile TMPE   $EXESUF
2701 tmpfile TMPH   .h
2702 tmpfile TMPO   .o
2703 tmpfile TMPS   .S
2704 tmpfile TMPSH  .sh
2705 tmpfile TMPV   .ver
2706
2707 unset -f mktemp
2708
2709 chmod +x $TMPE
2710
2711 # make sure we can execute files in $TMPDIR
2712 cat > $TMPSH 2>> $logfile <<EOF
2713 #! /bin/sh
2714 EOF
2715 chmod +x $TMPSH >> $logfile 2>&1
2716 if ! $TMPSH >> $logfile 2>&1; then
2717     cat <<EOF
2718 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2719 variable to another directory and make sure that it is not mounted noexec.
2720 EOF
2721     die "Sanity test failed."
2722 fi
2723
2724 armasm_flags(){
2725     for flag; do
2726         case $flag in
2727             # Filter out MSVC cl.exe options from cflags that shouldn't
2728             # be passed to gas-preprocessor
2729             -M[TD]*)                                            ;;
2730             *)                  echo $flag                      ;;
2731         esac
2732    done
2733 }
2734
2735 ccc_flags(){
2736     for flag; do
2737         case $flag in
2738             -std=c99)           echo -c99                       ;;
2739             -mcpu=*)            echo -arch ${flag#*=}           ;;
2740             -mieee)             echo -ieee                      ;;
2741             -O*|-fast)          echo $flag                      ;;
2742             -fno-math-errno)    echo -assume nomath_errno       ;;
2743             -g)                 echo -g3                        ;;
2744             -Wall)              echo -msg_enable level2         ;;
2745             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2746             -Wl,*)              echo $flag                      ;;
2747             -f*|-W*)                                            ;;
2748             *)                  echo $flag                      ;;
2749         esac
2750    done
2751 }
2752
2753 cparser_flags(){
2754     for flag; do
2755         case $flag in
2756             -Wno-switch)             echo -Wno-switch-enum ;;
2757             -Wno-format-zero-length) ;;
2758             -Wdisabled-optimization) ;;
2759             -Wno-pointer-sign)       echo -Wno-other ;;
2760             *)                       echo $flag ;;
2761         esac
2762     done
2763 }
2764
2765 msvc_common_flags(){
2766     for flag; do
2767         case $flag in
2768             # In addition to specifying certain flags under the compiler
2769             # specific filters, they must be specified here as well or else the
2770             # generic catch all at the bottom will print the original flag.
2771             -Wall)                ;;
2772             -std=c99)             ;;
2773             # Common flags
2774             -fomit-frame-pointer) ;;
2775             -g)                   echo -Z7 ;;
2776             -fno-math-errno)      ;;
2777             -fno-common)          ;;
2778             -fno-signed-zeros)    ;;
2779             -fPIC)                ;;
2780             -mthumb)              ;;
2781             -march=*)             ;;
2782             -lz)                  echo zlib.lib ;;
2783             -lavifil32)           echo vfw32.lib ;;
2784             -lavicap32)           echo vfw32.lib user32.lib ;;
2785             -l*)                  echo ${flag#-l}.lib ;;
2786             -L*)                  echo -libpath:${flag#-L} ;;
2787             *)                    echo $flag ;;
2788         esac
2789     done
2790 }
2791
2792 msvc_flags(){
2793     msvc_common_flags "$@"
2794     for flag; do
2795         case $flag in
2796             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
2797                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2798                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2799                                        -wd4273 -wd4554 -wd4701 ;;
2800         esac
2801     done
2802 }
2803
2804 icl_flags(){
2805     msvc_common_flags "$@"
2806     for flag; do
2807         case $flag in
2808             # Despite what Intel's documentation says -Wall, which is supported
2809             # on Windows, does enable remarks so disable them here.
2810             -Wall)                echo $flag -Qdiag-disable:remark ;;
2811             -std=c99)             echo -Qstd=c99 ;;
2812         esac
2813     done
2814 }
2815
2816 pgi_flags(){
2817     for flag; do
2818         case $flag in
2819             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2820             -fomit-frame-pointer) echo -Mnoframe ;;
2821             -g)                   echo -gopt ;;
2822             *)                    echo $flag ;;
2823         esac
2824     done
2825 }
2826
2827 suncc_flags(){
2828     for flag; do
2829         case $flag in
2830             -march=*|-mcpu=*)
2831                 case "${flag#*=}" in
2832                     native)                   echo -xtarget=native       ;;
2833                     v9|niagara)               echo -xarch=sparc          ;;
2834                     ultrasparc)               echo -xarch=sparcvis       ;;
2835                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2836                     i586|pentium)             echo -xchip=pentium        ;;
2837                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2838                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2839                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2840                     pentium4*)          echo -xtarget=pentium4           ;;
2841                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2842                     *-sse3)             echo -xarch=sse3                 ;;
2843                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2844                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2845                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2846                     amdfam10|barcelona|bdver*) echo -xarch=sse4_1        ;;
2847                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
2848                     k8|opteron|athlon64|athlon-fx)
2849                                                echo -xarch=sse2a         ;;
2850                     athlon*)                   echo -xarch=pentium_proa  ;;
2851                 esac
2852                 ;;
2853             -std=c99)             echo -xc99              ;;
2854             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2855             -fPIC)                echo -KPIC -xcode=pic32 ;;
2856             -W*,*)                echo $flag              ;;
2857             -f*-*|-W*|-mimpure-text)                      ;;
2858             -shared)              echo -G                 ;;
2859             *)                    echo $flag              ;;
2860         esac
2861     done
2862 }
2863
2864 tms470_flags(){
2865     for flag; do
2866         case $flag in
2867             -march=*|-mcpu=*)
2868                 case "${flag#*=}" in
2869                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2870                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2871                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2872                     armv6*|arm11*)          echo -mv=6   ;;
2873                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2874                                             echo -mv=5e  ;;
2875                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2876                 esac
2877                 ;;
2878             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2879             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2880             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2881             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2882             -msoft-float)   echo --float_support=vfplib       ;;
2883             -O[0-3]|-mf=*)  echo $flag                        ;;
2884             -g)             echo -g -mn                       ;;
2885             -pds=*)         echo $flag                        ;;
2886             -D*|-I*)        echo $flag                        ;;
2887             --gcc|--abi=*)  echo $flag                        ;;
2888             -me)            echo $flag                        ;;
2889         esac
2890     done
2891 }
2892
2893 probe_cc(){
2894     pfx=$1
2895     _cc=$2
2896
2897     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2898     unset _ld_o _ldflags _ld_lib _ld_path
2899     unset _depflags _DEPCMD _DEPFLAGS
2900     _flags_filter=echo
2901
2902     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2903         _type=llvm_gcc
2904         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2905         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2906         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2907         _cflags_speed='-O3'
2908         _cflags_size='-Os'
2909     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2910         _type=gcc
2911         gcc_version=$($_cc --version | head -n1)
2912         gcc_basever=$($_cc -dumpversion)
2913         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2914         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2915         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2916         if ! $_cc -dumpversion | grep -q '^2\.'; then
2917             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2918         fi
2919         _cflags_speed='-O3'
2920         _cflags_size='-Os'
2921     elif $_cc --version 2>/dev/null | grep -q ^icc; then
2922         _type=icc
2923         _ident=$($_cc --version | head -n1)
2924         _depflags='-MMD'
2925         _cflags_speed='-O3'
2926         _cflags_size='-Os'
2927         _cflags_noopt='-O1'
2928     elif $_cc -v 2>&1 | grep -q xlc; then
2929         _type=xlc
2930         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2931         _cflags_speed='-O5'
2932         _cflags_size='-O5 -qcompact'
2933     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2934         _type=ccc
2935         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2936         _DEPFLAGS='-M'
2937         _cflags_speed='-fast'
2938         _cflags_size='-O1'
2939         _flags_filter=ccc_flags
2940     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
2941         test -d "$sysroot" || die "No valid sysroot specified."
2942         _type=armcc
2943         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
2944         armcc_conf="$PWD/armcc.conf"
2945         $_cc --arm_linux_configure                 \
2946              --arm_linux_config_file="$armcc_conf" \
2947              --configure_sysroot="$sysroot"        \
2948              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2949              die "Error creating armcc configuration file."
2950         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2951         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2952         as_default="${cross_prefix}gcc"
2953         _depflags='-MMD'
2954         _cflags_speed='-O3'
2955         _cflags_size='-Os'
2956     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2957         _type=tms470
2958         _ident=$($_cc -version | head -n1 | tr -s ' ')
2959         _flags='--gcc --abi=eabi -me'
2960         _cc_e='-ppl -fe=$@'
2961         _cc_o='-fe=$@'
2962         _depflags='-ppa -ppd=$(@:.o=.d)'
2963         _cflags_speed='-O3 -mf=5'
2964         _cflags_size='-O3 -mf=2'
2965         _flags_filter=tms470_flags
2966     elif $_cc -v 2>&1 | grep -q clang; then
2967         _type=clang
2968         _ident=$($_cc --version | head -n1)
2969         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2970         _cflags_speed='-O3'
2971         _cflags_size='-Os'
2972     elif $_cc -V 2>&1 | grep -q Sun; then
2973         _type=suncc
2974         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2975         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2976         _DEPFLAGS='-xM1 -xc99'
2977         _ldflags='-std=c99'
2978         _cflags_speed='-O5'
2979         _cflags_size='-O5 -xspace'
2980         _flags_filter=suncc_flags
2981     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2982         _type=pathscale
2983         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2984         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2985         _cflags_speed='-O2'
2986         _cflags_size='-Os'
2987         _flags_filter='filter_out -Wdisabled-optimization'
2988     elif $_cc -v 2>&1 | grep -q Open64; then
2989         _type=open64
2990         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2991         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2992         _cflags_speed='-O2'
2993         _cflags_size='-Os'
2994         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2995     elif $_cc -V 2>&1 | grep -q Portland; then
2996         _type=pgi
2997         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2998         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2999         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3000         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3001         _cflags_noopt="-O1"
3002         _flags_filter=pgi_flags
3003     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3004         _type=armasm
3005         _ident=$($_cc | head -n1)
3006         # 4509: "This form of conditional instruction is deprecated"
3007         _flags="-nologo -ignore 4509"
3008         _flags_filter=armasm_flags
3009     elif $_cc 2>&1 | grep -q Microsoft; then
3010         _type=msvc
3011         _ident=$($_cc 2>&1 | head -n1)
3012         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3013         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3014         _cflags_speed="-O2"
3015         _cflags_size="-O1"
3016         if $_cc 2>&1 | grep -q Linker; then
3017             _ld_o='-out:$@'
3018         else
3019             _ld_o='-Fe$@'
3020         fi
3021         _cc_o='-Fo$@'
3022         _cc_e='-P -Fi$@'
3023         _flags_filter=msvc_flags
3024         _ld_lib='lib%.a'
3025         _ld_path='-libpath:'
3026         _flags='-nologo'
3027         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3028     elif $_cc 2>&1 | grep -q Intel; then
3029         _type=icl
3030         _ident=$($_cc 2>&1 | head -n1)
3031         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3032         # Not only is O3 broken on 13.x+ but it is slower on all previous
3033         # versions (tested) as well.
3034         _cflags_speed="-O2"
3035         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3036         if $_cc 2>&1 | grep -q Linker; then
3037             _ld_o='-out:$@'
3038         else
3039             _ld_o='-Fe$@'
3040         fi
3041         _cc_o='-Fo$@'
3042         _cc_e='-P'
3043         _flags_filter=icl_flags
3044         _ld_lib='lib%.a'
3045         _ld_path='-libpath:'
3046         # -Qdiag-error to make icl error when seeing certain unknown arguments
3047         _flags='-nologo -Qdiag-error:4044,10157'
3048         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3049         # with MSVC which enables it by default.
3050         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
3051     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3052         _type=cparser
3053         _ident=$($_cc --version | head -n1)
3054         _depflags='-MMD'
3055         _cflags_speed='-O4'
3056         _cflags_size='-O2'
3057         _flags_filter=cparser_flags
3058     fi
3059
3060     eval ${pfx}_type=\$_type
3061     eval ${pfx}_ident=\$_ident
3062 }
3063
3064 set_ccvars(){
3065     eval ${1}_C=\${_cc_c-\${${1}_C}}
3066     eval ${1}_E=\${_cc_e-\${${1}_E}}
3067     eval ${1}_O=\${_cc_o-\${${1}_O}}
3068
3069     if [ -n "$_depflags" ]; then
3070         eval ${1}_DEPFLAGS=\$_depflags
3071     else
3072         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3073         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3074         eval DEP${1}FLAGS=\$_flags
3075     fi
3076 }
3077
3078 probe_cc cc "$cc"
3079 cflags_filter=$_flags_filter
3080 cflags_speed=$_cflags_speed
3081 cflags_size=$_cflags_size
3082 cflags_noopt=$_cflags_noopt
3083 add_cflags $_flags $_cflags
3084 cc_ldflags=$_ldflags
3085 set_ccvars CC
3086
3087 probe_cc hostcc "$host_cc"
3088 host_cflags_filter=$_flags_filter
3089 add_host_cflags  $_flags $_cflags
3090 set_ccvars HOSTCC
3091
3092 test -n "$cc_type" && enable $cc_type ||
3093     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3094
3095 : ${as_default:=$cc}
3096 : ${dep_cc_default:=$cc}
3097 : ${ld_default:=$cc}
3098 : ${host_ld_default:=$host_cc}
3099 set_default ar as dep_cc ld host_ld
3100
3101 probe_cc as "$as"
3102 asflags_filter=$_flags_filter
3103 add_asflags $_flags $_cflags
3104 set_ccvars AS
3105
3106 probe_cc ld "$ld"
3107 ldflags_filter=$_flags_filter
3108 add_ldflags $_flags $_ldflags
3109 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3110 LD_O=${_ld_o-$LD_O}
3111 LD_LIB=${_ld_lib-$LD_LIB}
3112 LD_PATH=${_ld_path-$LD_PATH}
3113
3114 probe_cc hostld "$host_ld"
3115 host_ldflags_filter=$_flags_filter
3116 add_host_ldflags $_flags $_ldflags
3117 HOSTLD_O=${_ld_o-$HOSTLD_O}
3118
3119 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3120     probe_cc depcc "$dep_cc"
3121     CCDEP=${_DEPCMD:-$DEPCMD}
3122     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3123     DEPCCFLAGS=$_flags
3124 fi
3125
3126 if $ar 2>&1 | grep -q Microsoft; then
3127     arflags="-nologo"
3128     ar_o='-out:$@'
3129 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3130     arflags="rq"
3131     ar_o='$@'
3132 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3133     arflags='-Xany -r -c'
3134     ar_o='$@'
3135 else
3136     arflags="rc"
3137     ar_o='$@'
3138 fi
3139
3140 add_cflags $extra_cflags
3141 add_asflags $extra_cflags
3142
3143 if test -n "$sysroot"; then
3144     case "$cc_type" in
3145         gcc|llvm_gcc|clang)
3146             add_cppflags --sysroot="$sysroot"
3147             add_ldflags --sysroot="$sysroot"
3148         ;;
3149         tms470)
3150             add_cppflags -I"$sysinclude"
3151             add_ldflags  --sysroot="$sysroot"
3152         ;;
3153     esac
3154 fi
3155
3156 if test "$cpu" = host; then
3157     enabled cross_compile &&
3158         die "--cpu=host makes no sense when cross-compiling."
3159
3160     case "$cc_type" in
3161         gcc|llvm_gcc)
3162             check_native(){
3163                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3164                 sed -n "/cc1.*$1=/{
3165                             s/.*$1=\\([^ ]*\\).*/\\1/
3166                             p
3167                             q
3168                         }" $TMPE
3169             }
3170             cpu=$(check_native -march || check_native -mcpu)
3171         ;;
3172     esac
3173
3174     test "${cpu:-host}" = host &&
3175         die "--cpu=host not supported with compiler $cc"
3176 fi
3177
3178 # Deal with common $arch aliases
3179 case "$arch" in
3180     aarch64|arm64)
3181         arch="aarch64"
3182     ;;
3183     arm*)
3184         arch="arm"
3185     ;;
3186     mips*|IP*)
3187         arch="mips"
3188     ;;
3189     parisc*|hppa*)
3190         arch="parisc"
3191     ;;
3192     "Power Macintosh"|ppc*|powerpc*)
3193         arch="ppc"
3194     ;;
3195     s390|s390x)
3196         arch="s390"
3197     ;;
3198     sh4|sh)
3199         arch="sh4"
3200     ;;
3201     sun4u|sparc*)
3202         arch="sparc"
3203     ;;
3204     tilegx|tile-gx)
3205         arch="tilegx"
3206     ;;
3207     i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3208         arch="x86"
3209     ;;
3210 esac
3211
3212 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3213 enable $arch
3214
3215 # Add processor-specific flags
3216 if enabled aarch64; then
3217
3218     case $cpu in
3219         armv*)
3220             cpuflags="-march=$cpu"
3221         ;;
3222         *)
3223             cpuflags="-mcpu=$cpu"
3224         ;;
3225     esac
3226
3227 elif enabled alpha; then
3228
3229     cpuflags="-mcpu=$cpu"
3230
3231 elif enabled arm; then
3232
3233     check_arm_arch() {
3234         check_cpp_condition stddef.h \
3235             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3236             $cpuflags
3237     }
3238
3239     probe_arm_arch() {
3240         if   check_arm_arch 4;        then echo armv4;
3241         elif check_arm_arch 4T;       then echo armv4t;
3242         elif check_arm_arch 5;        then echo armv5;
3243         elif check_arm_arch 5E;       then echo armv5e;
3244         elif check_arm_arch 5T;       then echo armv5t;
3245         elif check_arm_arch 5TE;      then echo armv5te;
3246         elif check_arm_arch 5TEJ;     then echo armv5te;
3247         elif check_arm_arch 6;        then echo armv6;
3248         elif check_arm_arch 6J;       then echo armv6j;
3249         elif check_arm_arch 6K;       then echo armv6k;
3250         elif check_arm_arch 6Z;       then echo armv6z;
3251         elif check_arm_arch 6ZK;      then echo armv6zk;
3252         elif check_arm_arch 6T2;      then echo armv6t2;
3253         elif check_arm_arch 7;        then echo armv7;
3254         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3255         elif check_arm_arch 7S;       then echo armv7-a;
3256         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3257         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3258         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3259         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3260         fi
3261     }
3262
3263     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3264
3265     case $cpu in
3266         armv*)
3267             cpuflags="-march=$cpu"
3268             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3269         ;;
3270         *)
3271             cpuflags="-mcpu=$cpu"
3272             case $cpu in
3273                 cortex-a*)                               subarch=armv7a  ;;
3274                 cortex-r*)                               subarch=armv7r  ;;
3275                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3276                 arm11*)                                  subarch=armv6   ;;
3277                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3278                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3279                 *)                             subarch=$(probe_arm_arch) ;;
3280             esac
3281         ;;
3282     esac
3283
3284     case "$subarch" in
3285         armv5t*)    enable fast_clz                ;;
3286         armv[6-8]*) enable fast_clz fast_unaligned ;;
3287     esac
3288
3289 elif enabled avr32; then
3290
3291     case $cpu in
3292         ap7[02]0[0-2])
3293             subarch="avr32_ap"
3294             cpuflags="-mpart=$cpu"
3295         ;;
3296         ap)
3297             subarch="avr32_ap"
3298             cpuflags="-march=$cpu"
3299         ;;
3300         uc3[ab]*)
3301             subarch="avr32_uc"
3302             cpuflags="-mcpu=$cpu"
3303         ;;
3304         uc)
3305             subarch="avr32_uc"
3306             cpuflags="-march=$cpu"
3307         ;;
3308     esac
3309
3310 elif enabled bfin; then
3311
3312     cpuflags="-mcpu=$cpu"
3313
3314 elif enabled mips; then
3315
3316     cpuflags="-march=$cpu"
3317
3318 elif enabled ppc; then
3319
3320     disable ldbrx
3321
3322     case $(tolower $cpu) in
3323         601|ppc601|powerpc601)
3324             cpuflags="-mcpu=601"
3325             disable altivec
3326         ;;
3327         603*|ppc603*|powerpc603*)
3328             cpuflags="-mcpu=603"
3329             disable altivec
3330         ;;
3331         604*|ppc604*|powerpc604*)
3332             cpuflags="-mcpu=604"
3333             disable altivec
3334         ;;
3335         g3|75*|ppc75*|powerpc75*)
3336             cpuflags="-mcpu=750"
3337             disable altivec
3338         ;;
3339         g4|745*|ppc745*|powerpc745*)
3340             cpuflags="-mcpu=7450"
3341             disable vsx
3342         ;;
3343         74*|ppc74*|powerpc74*)
3344             cpuflags="-mcpu=7400"
3345             disable vsx
3346         ;;
3347         g5|970|ppc970|powerpc970)
3348             cpuflags="-mcpu=970"
3349             disable vsx
3350         ;;
3351         power[3-6]*)
3352             cpuflags="-mcpu=$cpu"
3353             disable vsx
3354         ;;
3355         power[7-8]*)
3356             cpuflags="-mcpu=$cpu"
3357             enable ldbrx
3358         ;;
3359         cell)
3360             cpuflags="-mcpu=cell"
3361             enable ldbrx
3362             disable vsx
3363         ;;
3364         e500mc)
3365             cpuflags="-mcpu=e500mc"
3366             disable altivec
3367         ;;
3368         e500v2)
3369             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3370             disable altivec
3371             disable dcbzl
3372         ;;
3373         e500)
3374             cpuflags="-mcpu=8540 -mhard-float"
3375             disable altivec
3376             disable dcbzl
3377         ;;
3378     esac
3379
3380 elif enabled sparc; then
3381
3382     case $cpu in
3383         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3384             cpuflags="-mcpu=$cpu"
3385         ;;
3386         ultrasparc*|niagara[234])
3387             cpuflags="-mcpu=$cpu"
3388         ;;
3389     esac
3390
3391 elif enabled x86; then
3392
3393     case $cpu in
3394         i[345]86|pentium)
3395             cpuflags="-march=$cpu"
3396             disable i686
3397             disable mmx
3398         ;;
3399         # targets that do NOT support nopl and conditional mov (cmov)
3400         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3401             cpuflags="-march=$cpu"
3402             disable i686
3403         ;;
3404         # targets that do support nopl and conditional mov (cmov)
3405         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*)
3406             cpuflags="-march=$cpu"
3407             enable i686
3408             enable fast_cmov
3409         ;;
3410         # targets that do support conditional mov but on which it's slow
3411         pentium4|pentium4m|prescott|nocona)
3412             cpuflags="-march=$cpu"
3413             enable i686
3414             disable fast_cmov
3415         ;;
3416     esac
3417
3418 fi
3419
3420 if [ "$cpu" != generic ]; then
3421     add_cflags  $cpuflags
3422     add_asflags $cpuflags
3423 fi
3424
3425 # compiler sanity check
3426 check_exec <<EOF
3427 int main(void){ return 0; }
3428 EOF
3429 if test "$?" != 0; then
3430     echo "$cc is unable to create an executable file."
3431     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3432         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3433         echo "Only do this if you know what cross compiling means."
3434     fi
3435     die "C compiler test failed."
3436 fi
3437
3438 add_cppflags -D_ISOC99_SOURCE
3439 check_cflags -std=c99
3440 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3441 #include <stdlib.h>
3442 EOF
3443 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3444 #include <stdlib.h>
3445 EOF
3446
3447 add_host_cppflags -D_ISOC99_SOURCE
3448 check_host_cflags -std=c99
3449 check_host_cflags -Wall
3450 check_host_cflags -O3
3451
3452 check_64bit(){
3453     arch32=$1
3454     arch64=$2
3455     expr=$3
3456     check_code cc "" "int test[2*($expr) - 1]" &&
3457         subarch=$arch64 || subarch=$arch32
3458 }
3459
3460 case "$arch" in
3461     aarch64|alpha|ia64)
3462         spic=$shared
3463     ;;
3464     mips)
3465         check_64bit mips mips64 '_MIPS_SIM > 1'
3466         spic=$shared
3467     ;;
3468     parisc)
3469         check_64bit parisc parisc64 'sizeof(void *) > 4'
3470         spic=$shared
3471     ;;
3472     ppc)
3473         check_64bit ppc ppc64 'sizeof(void *) > 4'
3474         spic=$shared
3475     ;;
3476     s390)
3477         check_64bit s390 s390x 'sizeof(void *) > 4'
3478         spic=$shared
3479     ;;
3480     sparc)
3481         check_64bit sparc sparc64 'sizeof(void *) > 4'
3482         spic=$shared
3483     ;;
3484     x86)
3485         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3486         if test "$subarch" = "x86_64"; then
3487             spic=$shared
3488         fi
3489     ;;
3490 esac
3491
3492 enable $subarch
3493 enabled spic && enable_weak pic
3494
3495 # OS specific
3496 case $target_os in
3497     aix)
3498         SHFLAGS=-shared
3499         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3500         enabled shared && add_ldflags -Wl,-brtl
3501         ;;
3502     android)
3503         disable symver
3504         enable section_data_rel_ro
3505         SLIB_INSTALL_NAME='$(SLIBNAME)'
3506         SLIB_INSTALL_LINKS=
3507         # soname not set on purpose
3508         SHFLAGS=-shared
3509         ;;
3510     haiku)
3511         prefix_default="/boot/common"
3512         network_extralibs="-lnetwork"
3513         host_libs=
3514         ;;
3515     sunos)
3516         SHFLAGS='-shared -Wl,-h,$$(@F)'
3517         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3518         network_extralibs="-lsocket -lnsl"
3519         # When using suncc to build, the Solaris linker will mark
3520         # an executable with each instruction set encountered by
3521         # the Solaris assembler.  As our libraries contain their own
3522         # guards for processor-specific code, instead suppress
3523         # generation of the HWCAPS ELF section on Solaris x86 only.
3524         enabled_all suncc x86 &&
3525             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3526             add_ldflags -Wl,-M,mapfile
3527         nm_default='nm -P -g'
3528         ;;
3529     netbsd)
3530         disable symver
3531         oss_indev_extralibs="-lossaudio"
3532         oss_outdev_extralibs="-lossaudio"
3533         ;;
3534     openbsd|bitrig)
3535         disable symver
3536         SHFLAGS='-shared'
3537         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3538         SLIB_INSTALL_LINKS=
3539         oss_indev_extralibs="-lossaudio"
3540         oss_outdev_extralibs="-lossaudio"
3541         ;;
3542     dragonfly)
3543         disable symver
3544         ;;
3545     freebsd)
3546         ;;
3547     bsd/os)
3548         add_extralibs -lpoll -lgnugetopt
3549         ;;
3550     darwin)
3551         enabled ppc && add_asflags -force_cpusubtype_ALL
3552         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3553         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3554         add_ldflags -Wl,-dynamic,-search_paths_first
3555         SLIBSUF=".dylib"
3556         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3557         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3558         objformat="macho"
3559         enabled x86_64 && objformat="macho64"
3560         enabled_any pic shared ||
3561             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3562         ;;
3563     mingw32*)
3564         if test $target_os = "mingw32ce"; then
3565             disable network
3566         else
3567             target_os=mingw32
3568         fi
3569         LIBTARGET=i386
3570         if enabled x86_64; then
3571             LIBTARGET="i386:x86-64"
3572         elif enabled arm; then
3573             LIBTARGET=arm-wince
3574         fi
3575         check_ldflags -Wl,--nxcompat
3576         check_ldflags -Wl,--dynamicbase
3577         shlibdir_default="$bindir_default"
3578         SLIBPREF=""
3579         SLIBSUF=".dll"
3580         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3581         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3582         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)'
3583         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3584         SLIB_INSTALL_LINKS=
3585         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3586         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3587         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'
3588         objformat="win32"
3589         dlltool="${cross_prefix}dlltool"
3590         ranlib=:
3591         enable dos_paths
3592         ;;
3593     win32|win64)
3594         disable symver
3595         if enabled shared; then
3596             # Link to the import library instead of the normal static library
3597             # for shared libs.
3598             LD_LIB='%.lib'
3599             # Cannot build both shared and static libs with MSVC or icl.
3600             disable static
3601         fi
3602         shlibdir_default="$bindir_default"
3603         SLIBPREF=""
3604         SLIBSUF=".dll"
3605         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3606         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3607         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3608         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3609         SLIB_INSTALL_LINKS=
3610         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3611         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3612         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3613         objformat="win32"
3614         ranlib=:
3615         enable dos_paths
3616         ;;
3617     cygwin*)
3618         target_os=cygwin
3619         shlibdir_default="$bindir_default"
3620         SLIBPREF="cyg"
3621         SLIBSUF=".dll"
3622         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3623         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3624         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3625         SLIB_INSTALL_LINKS=
3626         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3627         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3628         objformat="win32"
3629         enable dos_paths
3630         ;;
3631     *-dos|freedos|opendos)
3632         network_extralibs="-lsocket"
3633         objformat="coff"
3634         enable dos_paths
3635         add_cppflags -U__STRICT_ANSI__
3636         ;;
3637     linux)
3638         enable dv1394
3639         enable section_data_rel_ro
3640         ;;
3641     irix*)
3642         target_os=irix
3643         ranlib="echo ignoring ranlib"
3644         ;;
3645     os/2*)
3646         ln_s="cp -f"
3647         objformat="aout"
3648         add_cppflags -D_GNU_SOURCE
3649         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3650         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3651         LIBSUF="_s.a"
3652         SLIBPREF=""
3653         SLIBSUF=".dll"
3654         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3655         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3656         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3657             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3658             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3659             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3660             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3661             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3662         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3663             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3664         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3665         enable dos_paths
3666         ;;
3667     gnu/kfreebsd)
3668         add_cppflags -D_BSD_SOURCE
3669         ;;
3670     gnu)
3671         ;;
3672     qnx)
3673         add_cppflags -D_QNX_SOURCE
3674         network_extralibs="-lsocket"
3675         ;;
3676     symbian)
3677         SLIBSUF=".dll"
3678         enable dos_paths
3679         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3680         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3681         add_ldflags -Wl,--target1-abs,--no-undefined \
3682                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3683                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3684         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3685                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3686                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3687         ;;
3688     osf1)
3689         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3690         ;;
3691     minix)
3692         ;;
3693     plan9)
3694         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3695                      -D_REENTRANT_SOURCE        \
3696                      -D_RESEARCH_SOURCE         \
3697                      -DFD_SETSIZE=96            \
3698                      -DHAVE_SOCK_OPTS
3699         add_compat strtod.o strtod=avpriv_strtod
3700         network_extralibs='-lbsd'
3701         exeobjs=compat/plan9/main.o
3702         cp_f='cp'
3703         ;;
3704     none)
3705         ;;
3706     *)
3707         die "Unknown OS '$target_os'."
3708         ;;
3709 esac
3710
3711 # determine libc flavour
3712
3713 probe_libc(){
3714     pfx=$1
3715     pfx_no_=${pfx%_}
3716     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3717     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3718         eval ${pfx}libc_type=uclibc
3719         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3720     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3721         eval ${pfx}libc_type=glibc
3722         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3723     # MinGW headers can be installed on Cygwin, so check for newlib first.
3724     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3725         eval ${pfx}libc_type=newlib
3726         add_${pfx}cppflags -U__STRICT_ANSI__
3727     # MinGW64 is backwards compatible with MinGW32, so check for it first.
3728     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3729         eval ${pfx}libc_type=mingw64
3730         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3731         eval test \$${pfx_no_}cc_type = "gcc" &&
3732             add_${pfx}cppflags -D__printf__=__gnu_printf__
3733     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
3734          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3735         eval ${pfx}libc_type=mingw32
3736         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3737             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3738             die "ERROR: MinGW32 runtime version must be >= 3.15."
3739         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3740         eval test \$${pfx_no_}cc_type = "gcc" &&
3741             add_${pfx}cppflags -D__printf__=__gnu_printf__
3742     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3743         eval ${pfx}libc_type=msvcrt
3744         if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
3745             if [ "$pfx" = host_ ]; then
3746                 add_host_cppflags -Dsnprintf=_snprintf
3747             else
3748                 add_compat strtod.o strtod=avpriv_strtod
3749                 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3750                                              _snprintf=avpriv_snprintf  \
3751                                              vsnprintf=avpriv_vsnprintf
3752             fi
3753         fi
3754         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3755         # 0x601 by default unless something else is set by the user.
3756         # This can easily lead to us detecting functions only present
3757         # in such new versions and producing binaries requiring windows 7.0.
3758         # Therefore explicitly set the default to XP unless the user has
3759         # set something else on the command line.
3760         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3761             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3762     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3763         eval ${pfx}libc_type=klibc
3764     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3765         eval ${pfx}libc_type=bionic
3766     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3767         eval ${pfx}libc_type=solaris
3768         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3769     else
3770         eval ${pfx}libc_type=default
3771         add_${pfx}cppflags -D_DEFAULT_SOURCE
3772     fi
3773 }
3774
3775 probe_libc
3776 test -n "$libc_type" && enable libc_$libc_type
3777 probe_libc host_
3778 test -n "$host_libc_type" && enable host_libc_$host_libc_type
3779
3780 case $libc_type in
3781     bionic)
3782         add_compat strtod.o strtod=avpriv_strtod
3783         ;;
3784 esac
3785
3786 # hacks for compiler/libc/os combinations
3787
3788 if enabled_all tms470 libc_glibc; then
3789     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3790     add_cppflags -D__USER_LABEL_PREFIX__=
3791     add_cppflags -D__builtin_memset=memset
3792     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3793     add_cflags   -pds=48    # incompatible redefinition of macro
3794 fi
3795
3796 if enabled_all ccc libc_glibc; then
3797     add_ldflags -Wl,-z,now  # calls to libots crash without this
3798 fi
3799
3800 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
3801     add_cppflags '-I\$(SRC_PATH)/compat/float'
3802
3803 esc(){
3804     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3805 }
3806
3807 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3808
3809 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3810
3811 set_default $PATHS_LIST
3812 set_default nm
3813
3814 # we need to build at least one lib type
3815 if ! enabled_any static shared; then
3816     cat <<EOF
3817 At least one library type must be built.
3818 Specify --enable-static to build the static libraries or --enable-shared to
3819 build the shared libraries as well. To only build the shared libraries specify
3820 --disable-static in addition to --enable-shared.
3821 EOF
3822     exit 1;
3823 fi
3824
3825 die_license_disabled() {
3826     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3827 }
3828
3829 die_license_disabled gpl libcdio
3830 die_license_disabled gpl libx264
3831 die_license_disabled gpl libx265
3832 die_license_disabled gpl libxavs
3833 die_license_disabled gpl libxvid
3834 die_license_disabled gpl x11grab
3835
3836 die_license_disabled nonfree libfaac
3837 die_license_disabled nonfree libfdk_aac
3838 die_license_disabled nonfree nvenc
3839 die_license_disabled nonfree openssl
3840
3841 die_license_disabled version3 libopencore_amrnb
3842 die_license_disabled version3 libopencore_amrwb
3843 die_license_disabled version3 libvo_aacenc
3844 die_license_disabled version3 libvo_amrwbenc
3845
3846 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3847
3848 disabled optimizations || check_cflags -fomit-frame-pointer
3849
3850 enable_weak_pic() {
3851     disabled pic && return
3852     enable pic
3853     add_cppflags -DPIC
3854     case "$target_os" in
3855     mingw*|cygwin*)
3856         ;;
3857     *)
3858         add_cflags -fPIC
3859         ;;
3860     esac
3861     add_asflags  -fPIC
3862 }
3863
3864 enabled pic && enable_weak_pic
3865
3866 check_cc <<EOF || die "Symbol mangling check failed."
3867 int ff_extern;
3868 EOF
3869 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3870 extern_prefix=${sym%%ff_extern*}
3871
3872 check_cc <<EOF && enable_weak inline_asm
3873 void foo(void) { __asm__ volatile ("" ::); }
3874 EOF
3875
3876 _restrict=
3877 for restrict_keyword in restrict __restrict__ __restrict; do
3878     check_cc <<EOF && _restrict=$restrict_keyword && break
3879 void foo(char * $restrict_keyword p);
3880 EOF
3881 done
3882
3883 check_cc <<EOF && enable pragma_deprecated
3884 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3885 EOF
3886
3887 check_cc <<EOF && enable attribute_packed
3888 struct { int x; } __attribute__((packed)) x;
3889 EOF
3890
3891 check_cc <<EOF && enable attribute_may_alias
3892 union { int x; } __attribute__((may_alias)) x;
3893 EOF
3894
3895 check_cc <<EOF || die "endian test failed"
3896 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3897 EOF
3898 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3899
3900 check_gas() {
3901     log "check_gas using '$as' as AS"
3902     # :vararg is used on aarch64, arm and ppc altivec
3903     check_as <<EOF || return 1
3904 .macro m n, y:vararg=0
3905 \n: .int \y
3906 .endm
3907 m x
3908 EOF
3909     # .altmacro is only used in arm asm
3910     ! enabled arm || check_as <<EOF || return 1
3911 .altmacro
3912 EOF
3913     enable gnu_as
3914     return 0
3915 }
3916
3917 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
3918     nogas=:
3919     enabled_any arm aarch64 && nogas=die
3920     enabled_all ppc altivec && nogas=warn
3921     as_noop=-v
3922
3923     case $as_type in
3924         arm*) gaspp_as_type=armasm; as_noop=-h ;;
3925         gcc)  gaspp_as_type=gas ;;
3926         *)    gaspp_as_type=$as_type ;;
3927     esac
3928
3929     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
3930
3931     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
3932         gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
3933
3934     if ! check_gas ; then
3935         as=${gas:=$as}
3936         check_gas || \
3937             $nogas "GNU assembler not found, install/update gas-preprocessor"
3938     fi
3939
3940     check_as <<EOF && enable as_func
3941 .func test
3942 .endfunc
3943 EOF
3944 fi
3945
3946 check_inline_asm inline_asm_labels '"1:\n"'
3947
3948 if enabled aarch64; then
3949     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
3950     # internal assembler in clang 3.3 does not support this instruction
3951     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
3952     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
3953
3954     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
3955
3956 elif enabled alpha; then
3957
3958     check_cflags -mieee
3959
3960 elif enabled arm; then
3961
3962     check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3963     enabled thumb && check_cflags -mthumb || check_cflags -marm
3964
3965     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3966         enable vfp_args
3967     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3968         case "${cross_prefix:-$cc}" in
3969             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3970             *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3971 __asm__ (".eabi_attribute 28, 1");
3972 int main(void) { return 0; }
3973 EOF
3974         esac
3975         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3976     fi
3977
3978     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3979     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
3980     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3981     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
3982     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3983     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
3984
3985     [ $target_os = linux ] || [ $target_os = android ] ||
3986         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3987             $ARCH_EXT_LIST_ARM
3988
3989     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3990
3991     check_as <<EOF && enable as_dn_directive
3992 ra .dn d0.i16
3993 .unreq ra
3994 EOF
3995
3996     # llvm's integrated assembler supports .object_arch from llvm 3.5
3997     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
3998 .object_arch armv4
3999 EOF
4000
4001     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4002
4003 elif enabled mips; then
4004
4005     check_inline_asm loongson '"dmult.g $1, $2, $3"'
4006
4007 elif enabled parisc; then
4008
4009     if enabled gcc; then
4010         case $($cc -dumpversion) in
4011             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4012         esac
4013     fi
4014
4015 elif enabled ppc; then
4016
4017     enable local_aligned_8 local_aligned_16
4018
4019     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4020     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4021     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4022     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4023
4024     # AltiVec flags: The FSF version of GCC differs from the Apple version
4025     if enabled altivec; then
4026         check_cflags -maltivec -mabi=altivec &&
4027         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4028         check_cflags -faltivec
4029
4030         # check if our compiler supports Motorola AltiVec C API
4031         check_cc <<EOF || disable altivec
4032 $inc_altivec_h
4033 int main(void) {
4034     vector signed int v1 = (vector signed int) { 0 };
4035     vector signed int v2 = (vector signed int) { 1 };
4036     v1 = vec_add(v1, v2);
4037     return 0;
4038 }
4039 EOF
4040
4041         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4042     fi
4043
4044     if enabled vsx; then
4045         check_cflags -mvsx &&
4046         check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4047     fi
4048
4049     if enabled power8; then
4050         check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4051     fi
4052
4053 elif enabled x86; then
4054
4055     check_builtin rdtsc    intrin.h   "__rdtsc()"
4056     check_builtin mm_empty mmintrin.h "_mm_empty()"
4057
4058     enable local_aligned_8 local_aligned_16
4059
4060     # check whether EBP is available on x86
4061     # As 'i' is stored on the stack, this program will crash
4062     # if the base pointer is used to access it because the
4063     # base pointer is cleared in the inline assembly code.
4064     check_exec_crash <<EOF && enable ebp_available
4065 volatile int i=0;
4066 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4067 return i;
4068 EOF
4069
4070     # check whether EBX is available on x86
4071     check_inline_asm ebx_available '""::"b"(0)' &&
4072         check_inline_asm ebx_available '"":::"%ebx"'
4073
4074     # check whether xmm clobbers are supported
4075     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4076
4077     # check whether binutils is new enough to compile SSSE3/MMXEXT
4078     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4079     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4080
4081     if ! disabled_any asm mmx yasm; then
4082         if check_cmd $yasmexe --version; then
4083             enabled x86_64 && yasm_extra="-m amd64"
4084             yasm_debug="-g dwarf2"
4085         elif check_cmd nasm -v; then
4086             yasmexe=nasm
4087             yasm_debug="-g -F dwarf"
4088             enabled x86_64 && test "$objformat" = elf && objformat=elf64
4089         fi
4090
4091         YASMFLAGS="-f $objformat $yasm_extra"
4092         enabled pic               && append YASMFLAGS "-DPIC"
4093         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4094         case "$objformat" in
4095             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4096         esac
4097
4098         check_yasm "movbe ecx, [5]" && enable yasm ||
4099             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4100         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4101         check_yasm "vfmadd132ps ymm0, ymm1, ymm2"    || disable fma3_external
4102         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4103         check_yasm "CPU amdnop" || disable cpunop
4104     fi
4105
4106     case "$cpu" in
4107         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4108             disable fast_clz
4109         ;;
4110     esac
4111
4112 fi
4113
4114 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4115
4116 check_ldflags -Wl,--as-needed
4117
4118 if check_func dlopen; then
4119     ldl=
4120 elif check_func dlopen -ldl; then
4121     ldl=-ldl
4122 fi
4123
4124 if ! disabled network; then
4125     check_func getaddrinfo $network_extralibs
4126     check_func getservbyport $network_extralibs
4127     check_func inet_aton $network_extralibs
4128
4129     check_type netdb.h "struct addrinfo"
4130     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4131     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4132     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4133     check_type poll.h "struct pollfd"
4134     check_type netinet/sctp.h "struct sctp_event_subscribe"
4135     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4136     check_type netinet/in.h "struct sockaddr_in6"
4137     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4138     check_type "sys/types.h sys/socket.h" socklen_t
4139
4140     # Prefer arpa/inet.h over winsock2
4141     if check_header arpa/inet.h ; then
4142         check_func closesocket
4143     elif check_header winsock2.h ; then
4144         check_func_headers winsock2.h closesocket -lws2 &&
4145             network_extralibs="-lws2" ||
4146         { check_func_headers winsock2.h closesocket -lws2_32 &&
4147             network_extralibs="-lws2_32"; } || disable winsock2_h network
4148         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4149
4150         check_type ws2tcpip.h socklen_t
4151         check_type ws2tcpip.h "struct addrinfo"
4152         check_type ws2tcpip.h "struct group_source_req"
4153         check_type ws2tcpip.h "struct ip_mreq_source"
4154         check_type ws2tcpip.h "struct ipv6_mreq"
4155         check_type winsock2.h "struct pollfd"
4156         check_struct winsock2.h "struct sockaddr" sa_len
4157         check_type ws2tcpip.h "struct sockaddr_in6"
4158         check_type ws2tcpip.h "struct sockaddr_storage"
4159     else
4160         disable network
4161     fi
4162 fi
4163
4164 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4165 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4166 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4167 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4168
4169 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4170 check_func  ${malloc_prefix}memalign            && enable memalign
4171 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4172
4173 check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
4174     check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4175
4176 check_func  fcntl
4177 check_func  fork
4178 check_func  gethrtime
4179 check_func  getopt
4180 check_func  getrusage
4181 check_func  gettimeofday
4182 check_func  gmtime_r
4183 check_func  isatty
4184 check_func  localtime_r
4185 check_func  mach_absolute_time
4186 check_func  mkstemp
4187 check_func  mmap
4188 check_func  mprotect
4189 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4190 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt; }
4191 check_func  sched_getaffinity
4192 check_func  setrlimit
4193 check_func  strerror_r
4194 check_func  sysconf
4195 check_func  sysctl
4196 check_func  usleep
4197
4198 check_func_headers io.h setmode
4199 check_func_headers stdlib.h getenv
4200
4201 check_func_headers windows.h CoTaskMemFree -lole32
4202 check_func_headers windows.h GetProcessAffinityMask
4203 check_func_headers windows.h GetProcessTimes
4204 check_func_headers windows.h GetSystemTimeAsFileTime
4205 check_func_headers windows.h LoadLibrary
4206 check_func_headers windows.h MapViewOfFile
4207 check_func_headers windows.h SetConsoleTextAttribute
4208 check_func_headers windows.h Sleep
4209 check_func_headers windows.h VirtualAlloc
4210 check_struct windows.h "CONDITION_VARIABLE" Ptr
4211
4212 check_header direct.h
4213 check_header dlfcn.h
4214 check_header d3d11.h
4215 check_header dxva.h
4216 check_header dxva2api.h
4217 check_header io.h
4218 check_header mach/mach_time.h
4219 check_header malloc.h
4220 check_header poll.h
4221 check_header sys/mman.h
4222 check_header sys/param.h
4223 check_header sys/resource.h
4224 check_header sys/select.h
4225 check_header sys/time.h
4226 check_header sys/un.h
4227 check_header unistd.h
4228 check_header valgrind/valgrind.h
4229 check_header vdpau/vdpau.h
4230 check_header vdpau/vdpau_x11.h
4231 check_header VideoDecodeAcceleration/VDADecoder.h
4232 check_header windows.h
4233 check_header X11/extensions/XvMClib.h
4234
4235 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4236 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4237 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4238
4239 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4240
4241 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC"
4242 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
4243 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0600
4244
4245 if ! disabled w32threads && ! enabled pthreads; then
4246     check_func_headers "windows.h process.h" _beginthreadex &&
4247         enable w32threads || disable w32threads
4248 fi
4249
4250 # check for some common methods of building with pthread support
4251 # do this before the optional library checks as some of them require pthreads
4252 if ! disabled pthreads && ! enabled w32threads; then
4253     enable pthreads
4254     if check_func pthread_join -pthread; then
4255         add_cflags -pthread
4256         add_extralibs -pthread
4257     elif check_func pthread_join -pthreads; then
4258         add_cflags -pthreads
4259         add_extralibs -pthreads
4260     elif check_func pthread_join -lpthreadGC2; then
4261         add_extralibs -lpthreadGC2
4262     elif check_lib pthread.h pthread_join -lpthread; then
4263         :
4264     elif ! check_func pthread_join; then
4265         disable pthreads
4266     fi
4267 fi
4268
4269 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4270 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4271
4272 check_lib math.h sin -lm && LIBM="-lm"
4273 enabled vaapi && require vaapi va/va.h vaInitialize -lva
4274
4275 atan2f_args=2
4276 ldexpf_args=2
4277 powf_args=2
4278
4279 for func in $MATH_FUNCS; do
4280     eval check_mathfunc $func \${${func}_args:-1}
4281 done
4282
4283 # these are off by default, so fail if requested and not available
4284 enabled avisynth          && { check_lib2 "avisynth/avisynth_c.h windows.h" LoadLibrary ||
4285                                check_lib2 "avxsynth/avxsynth_c.h dlfcn.h" dlopen -ldl   ||
4286                                die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
4287 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4288 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4289 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
4290 enabled libdcadec         && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
4291 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4292 enabled libfdk_aac        && require_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen
4293 enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4294 enabled libfreetype       && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
4295 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4296                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4297                                done || die "ERROR: libgsm not found"; }
4298 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4299 enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
4300 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4301 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4302 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4303 enabled libopencv         && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
4304 enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
4305 enabled libopenjpeg       && { { check_header openjpeg.h && check_lib2 openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC; } ||
4306                                { require_pkg_config libopenjpeg1 openjpeg.h opj_version -DOPJ_STATIC; } }
4307 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4308 enabled libpulse          && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4309 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4310 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4311 enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
4312 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4313 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame
4314 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4315 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4316 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4317 enabled libvpx            && require_pkg_config "vpx >= 1.3.0" vpx/vpx_codec.h vpx_codec_version && {
4318     enabled libvpx_vp8_decoder && {
4319         check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
4320             disable libvpx_vp8_decoder;
4321     }
4322     enabled libvpx_vp8_encoder && {
4323         check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
4324             disable libvpx_vp8_encoder;
4325     }
4326     enabled libvpx_vp9_decoder && {
4327         check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
4328             disable libvpx_vp9_decoder;
4329     }
4330     enabled libvpx_vp9_encoder && {
4331         check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
4332             disable libvpx_vp9_encoder;
4333     }
4334     if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
4335         die "libvpx enabled but no supported decoders found"
4336     fi
4337 }
4338 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
4339 enabled libwebp           && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
4340 enabled libx264           && require_pkg_config x264 "stdint.h x264.h" x264_encoder_encode &&
4341                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4342                                die "ERROR: libx264 version must be >= 0.118."; }
4343 enabled libx265           && require_pkg_config x265 x265.h x265_encoder_encode &&
4344                              { check_cpp_condition x265.h "X265_BUILD >= 57" ||
4345                                die "ERROR: libx265 version must be >= 57."; }
4346 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
4347 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
4348 enabled mmal              && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
4349                                 { ! enabled cross_compile && {
4350                                     add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
4351                                     add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
4352                                     check_lib interface/mmal/mmal.h mmal_port_connect ; }
4353                                 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
4354                                die "ERROR: mmal not found"; }
4355 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4356                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4357                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4358                                die "ERROR: openssl not found"; }
4359
4360 if enabled gnutls; then
4361     { check_lib2 gmp.h mpz_export -lgmp && enable gmp; } ||
4362     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4363 fi
4364
4365 # libdc1394 check
4366 if enabled libdc1394; then
4367     { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
4368         enable libdc1394_2; } ||
4369     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4370         enable libdc1394_1; } ||
4371     die "ERROR: No version of libdc1394 found "
4372 fi
4373
4374 if enabled nvenc; then
4375     check_header cuda.h || die "ERROR: cuda.h not found.";
4376     check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found.";
4377     check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
4378         die "ERROR: NVENC API version 4 or older is not supported";
4379 fi
4380
4381 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4382     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4383     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4384     enable sdl
4385 fi
4386
4387 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
4388 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
4389
4390 check_header linux/fb.h
4391 check_header linux/videodev2.h
4392 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
4393
4394 check_header sys/videoio.h
4395
4396 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4397 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4398 # w32api 3.12 had it defined wrong
4399 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4400
4401 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4402 { check_header dev/bktr/ioctl_meteor.h &&
4403   check_header dev/bktr/ioctl_bt848.h; } ||
4404 { check_header machine/ioctl_meteor.h &&
4405   check_header machine/ioctl_bt848.h; } ||
4406 { check_header dev/video/meteor/ioctl_meteor.h &&
4407   check_header dev/video/bktr/ioctl_bt848.h; } ||
4408 check_header dev/ic/bt8xx.h
4409
4410 check_header sndio.h
4411 check_header sys/soundcard.h
4412 check_header soundcard.h
4413
4414 enabled_any alsa_indev alsa_outdev &&
4415     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4416
4417 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
4418     check_func jack_port_get_latency_range -ljack
4419
4420 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4421
4422 if enabled libcdio; then
4423     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4424     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4425     die "ERROR: No usable libcdio/cdparanoia found"
4426 fi
4427
4428 check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
4429
4430 if enabled libxcb || enabled x11grab && ! disabled libxcb; then
4431     check_pkg_config xcb-shape xcb/shape.h xcb_shape_rectangles || {
4432         enabled libxcb && die "ERROR: libxcb not found";
4433     } && disable x11grab && enable libxcb
4434
4435     disabled libxcb_shm ||
4436         check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
4437             enabled libxcb_shm && die "ERROR: libxcb_shm not found";
4438         } && check_header sys/shm.h && enable libxcb_shm
4439
4440     disabled libxcb_xfixes ||
4441         check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
4442             enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
4443         } && enable libxcb_xfixes
4444
4445     add_cflags "$xcb_event_cflags $xcb_shm_cflags $xcb_xfixes_cflags"
4446     add_extralibs "$xcb_event_libs $xcb_shm_libs $xcb_xfixes_libs"
4447 fi
4448
4449 if enabled x11grab; then
4450     enabled xlib || die "ERROR: Xlib not found"
4451     require Xext X11/extensions/XShm.h XShmCreateImage -lXext
4452     require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
4453 fi
4454
4455 enabled vaapi && enabled xlib &&
4456     check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
4457     enable vaapi_x11
4458
4459 enabled vdpau &&
4460     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4461     disable vdpau
4462
4463 enabled vdpau && enabled xlib &&
4464     check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
4465     prepend avconv_libs $($ldflags_filter "-lvdpau") &&
4466     enable vdpau_x11
4467
4468 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4469
4470 # add some useful compiler flags if supported
4471 check_cflags -Wdeclaration-after-statement
4472 check_cflags -Wall
4473 check_cflags -Wdisabled-optimization
4474 check_cflags -Wpointer-arith
4475 check_cflags -Wredundant-decls
4476 check_cflags -Wcast-qual
4477 check_cflags -Wwrite-strings
4478 check_cflags -Wtype-limits
4479 check_cflags -Wundef
4480 check_cflags -Wmissing-prototypes
4481 check_cflags -Wstrict-prototypes
4482 enabled extra_warnings && check_cflags -Winline
4483
4484 check_disable_warning(){
4485     warning_flag=-W${1#-Wno-}
4486     test_cflags $warning_flag && add_cflags $1
4487 }
4488
4489 check_disable_warning -Wno-parentheses
4490 check_disable_warning -Wno-switch
4491 check_disable_warning -Wno-format-zero-length
4492 check_disable_warning -Wno-pointer-sign
4493
4494 # add some linker flags
4495 check_ldflags -Wl,--warn-common
4496 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4497 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
4498 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4499
4500 # add some strip flags
4501 # -wN '..@*' is more selective than -x, but not available everywhere.
4502 check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'
4503
4504 enabled neon_clobber_test &&
4505     check_ldflags -Wl,--wrap,avcodec_open2              \
4506                   -Wl,--wrap,avcodec_decode_audio4      \
4507                   -Wl,--wrap,avcodec_decode_video2      \
4508                   -Wl,--wrap,avcodec_decode_subtitle2   \
4509                   -Wl,--wrap,avcodec_encode_audio2      \
4510                   -Wl,--wrap,avcodec_encode_video2      \
4511                   -Wl,--wrap,avcodec_encode_subtitle    \
4512                   -Wl,--wrap,avresample_convert ||
4513     disable neon_clobber_test
4514
4515 enabled xmm_clobber_test &&
4516     check_ldflags -Wl,--wrap,avcodec_open2              \
4517                   -Wl,--wrap,avcodec_decode_audio4      \
4518                   -Wl,--wrap,avcodec_decode_video2      \
4519                   -Wl,--wrap,avcodec_decode_subtitle2   \
4520                   -Wl,--wrap,avcodec_encode_audio2      \
4521                   -Wl,--wrap,avcodec_encode_video2      \
4522                   -Wl,--wrap,avcodec_encode_subtitle    \
4523                   -Wl,--wrap,avresample_convert         \
4524                   -Wl,--wrap,sws_scale ||
4525     disable xmm_clobber_test
4526
4527 echo "X{};" > $TMPV
4528 if test_ldflags -Wl,--version-script,$TMPV; then
4529     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4530     check_cc <<EOF && enable symver_asm_label
4531 void ff_foo(void) __asm__ ("av_foo@VERSION");
4532 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4533 EOF
4534     check_cc <<EOF && enable symver_gnu_asm
4535 __asm__(".symver ff_foo,av_foo@VERSION");
4536 void ff_foo(void) {}
4537 EOF
4538 fi
4539
4540 if [ -z "$optflags" ]; then
4541     if enabled small; then
4542         optflags=$cflags_size
4543     elif enabled optimizations; then
4544         optflags=$cflags_speed
4545     else
4546         optflags=$cflags_noopt
4547     fi
4548 fi
4549
4550 check_optflags(){
4551     check_cflags "$@"
4552     enabled lto && check_ldflags "$@"
4553 }
4554
4555
4556 if enabled lto; then
4557     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4558     check_cflags  -flto
4559     check_ldflags -flto $cpuflags
4560 fi
4561
4562 check_optflags $optflags
4563 check_optflags -fno-math-errno
4564 check_optflags -fno-signed-zeros
4565
4566 if enabled icc; then
4567     # Just warnings, no remarks
4568     check_cflags -w1
4569     # -wd: Disable following warnings
4570     # 144, 167, 556: -Wno-pointer-sign
4571     # 1292: attribute "foo" ignored
4572     # 1419: external declaration in primary source file
4573     # 10006: ignoring unknown option -fno-signed-zeros
4574     # 10148: ignoring unknown option -Wno-parentheses
4575     # 10156: ignoring option '-W'; no argument required
4576     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
4577     # 11030: Warning unknown option --as-needed
4578     # 10156: ignoring option '-export'; no argument required
4579     check_ldflags -wd10156,11030
4580     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4581     enable ebp_available
4582     if enabled x86_32; then
4583         icc_version=$($cc -dumpversion)
4584         test ${icc_version%%.*} -ge 11 &&
4585             check_cflags -falign-stack=maintain-16-byte ||
4586             disable aligned_stack
4587     fi
4588 elif enabled ccc; then
4589     # disable some annoying warnings
4590     add_cflags -msg_disable bitnotint
4591     add_cflags -msg_disable mixfuncvoid
4592     add_cflags -msg_disable nonstandcast
4593     add_cflags -msg_disable unsupieee
4594 elif enabled gcc; then
4595     check_optflags -fno-tree-vectorize
4596     check_cflags -Werror=implicit-function-declaration
4597     check_cflags -Werror=missing-prototypes
4598     check_cflags -Werror=return-type
4599     check_cflags -Werror=declaration-after-statement
4600     check_cflags -Werror=vla
4601     check_cflags -Werror=format-security
4602     check_cflags -fdiagnostics-color=auto
4603     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4604 elif enabled llvm_gcc; then
4605     check_cflags -mllvm -stack-alignment=16
4606 elif enabled clang; then
4607     check_cflags -mllvm -stack-alignment=16
4608     check_cflags -Qunused-arguments
4609     check_cflags -Werror=implicit-function-declaration
4610     check_cflags -Werror=missing-prototypes
4611     check_cflags -Werror=return-type
4612 elif enabled cparser; then
4613     add_cflags -Wno-missing-variable-declarations
4614     add_cflags -Wno-empty-statement
4615 elif enabled armcc; then
4616     add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
4617     add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
4618     # 2523: use of inline assembly is deprecated
4619     add_cflags -W${armcc_opt},--diag_suppress=2523
4620     add_cflags -W${armcc_opt},--diag_suppress=1207
4621     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4622     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4623     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
4624     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4625 elif enabled tms470; then
4626     add_cflags -pds=824 -pds=837
4627     disable inline_asm
4628 elif enabled pathscale; then
4629     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4630 elif enabled_any msvc icl; then
4631     enabled x86_32 && disable aligned_stack
4632     enabled_all x86_32 debug && add_cflags -Oy-
4633     enabled debug && add_ldflags -debug
4634     enable pragma_deprecated
4635     if enabled icl; then
4636         # -Qansi-alias is basically -fstrict-aliasing, but does not work
4637         # (correctly) on icl 13.x.
4638         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
4639             add_cflags -Qansi-alias
4640         # icl will pass the inline asm tests but inline asm is currently
4641         # not supported (build will fail)
4642         disable inline_asm
4643     fi
4644     # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
4645     check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
4646 fi
4647
4648 case $as_type in
4649     clang)
4650         add_asflags -Qunused-arguments
4651     ;;
4652 esac
4653
4654 case $ld_type in
4655     clang)
4656         check_ldflags -Qunused-arguments
4657     ;;
4658 esac
4659
4660 case $target_os in
4661     osf1)
4662         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4663     ;;
4664     plan9)
4665         add_cppflags -Dmain=plan9_main
4666     ;;
4667 esac
4668
4669 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4670
4671 check_deps $CONFIG_LIST       \
4672            $CONFIG_EXTRA      \
4673            $HAVE_LIST         \
4674            $ALL_COMPONENTS    \
4675
4676 enabled_all dxva2 CoTaskMemFree &&
4677     prepend avconv_libs $($ldflags_filter "-lole32") &&
4678     enable dxva2_lib
4679
4680 ! enabled_any memalign posix_memalign aligned_malloc &&
4681     enabled simd_align_16 && enable memalign_hack
4682
4683 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
4684
4685 for thread in $THREADS_LIST; do
4686     if enabled $thread; then
4687         test -n "$thread_type" &&
4688             die "ERROR: Only one thread type must be selected." ||
4689             thread_type="$thread"
4690     fi
4691 done
4692
4693 enabled zlib && add_cppflags -DZLIB_CONST
4694
4695 # conditional library dependencies, in linking order
4696 enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
4697 enabled resample_filter && prepend avfilter_deps "avresample"
4698 enabled scale_filter    && prepend avfilter_deps "swscale"
4699
4700 enabled opus_decoder    && prepend avcodec_deps "avresample"
4701
4702 expand_deps(){
4703     lib_deps=${1}_deps
4704     eval "deps=\$$lib_deps"
4705     append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
4706     unique $lib_deps
4707 }
4708
4709 map 'expand_deps $v' $LIBRARY_LIST
4710
4711 echo "install prefix            $prefix"
4712 echo "source path               $source_path"
4713 echo "C compiler                $cc"
4714 echo "C library                 $libc_type"
4715 if test "$host_cc" != "$cc"; then
4716     echo "host C compiler           $host_cc"
4717     echo "host C library            $host_libc_type"
4718 fi
4719 echo "ARCH                      $arch ($cpu)"
4720 if test "$build_suffix" != ""; then
4721     echo "build suffix              $build_suffix"
4722 fi
4723 if test "$extra_version" != ""; then
4724     echo "version string suffix     $extra_version"
4725 fi
4726 echo "big-endian                ${bigendian-no}"
4727 echo "runtime cpu detection     ${runtime_cpudetect-no}"
4728 if enabled x86; then
4729     echo "${yasmexe}                      ${yasm-no}"
4730     echo "MMX enabled               ${mmx-no}"
4731     echo "MMXEXT enabled            ${mmxext-no}"
4732     echo "3DNow! enabled            ${amd3dnow-no}"
4733     echo "3DNow! extended enabled   ${amd3dnowext-no}"
4734     echo "SSE enabled               ${sse-no}"
4735     echo "SSSE3 enabled             ${ssse3-no}"
4736     echo "AVX enabled               ${avx-no}"
4737     echo "XOP enabled               ${xop-no}"
4738     echo "FMA3 enabled              ${fma3-no}"
4739     echo "FMA4 enabled              ${fma4-no}"
4740     echo "i686 features enabled     ${i686-no}"
4741     echo "CMOV is fast              ${fast_cmov-no}"
4742     echo "EBX available             ${ebx_available-no}"
4743     echo "EBP available             ${ebp_available-no}"
4744 fi
4745 if enabled aarch64; then
4746     echo "NEON enabled              ${neon-no}"
4747     echo "VFP enabled               ${vfp-no}"
4748 fi
4749 if enabled arm; then
4750     echo "ARMv5TE enabled           ${armv5te-no}"
4751     echo "ARMv6 enabled             ${armv6-no}"
4752     echo "ARMv6T2 enabled           ${armv6t2-no}"
4753     echo "VFP enabled               ${vfp-no}"
4754     echo "NEON enabled              ${neon-no}"
4755 fi
4756 if enabled ppc; then
4757     echo "AltiVec enabled           ${altivec-no}"
4758     echo "VSX enabled               ${vsx-no}"
4759     echo "POWER8 enabled            ${power8-no}"
4760     echo "PPC 4xx optimizations     ${ppc4xx-no}"
4761     echo "dcbzl available           ${dcbzl-no}"
4762 fi
4763 echo "debug symbols             ${debug-no}"
4764 echo "optimize for size         ${small-no}"
4765 echo "optimizations             ${optimizations-no}"
4766 echo "static                    ${static-no}"
4767 echo "shared                    ${shared-no}"
4768 echo "new filter support        ${avfilter-no}"
4769 echo "network support           ${network-no}"
4770 echo "threading support         ${thread_type-no}"
4771 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4772 echo "SDL support               ${sdl-no}"
4773 test -n "$random_seed" &&
4774     echo "random seed               ${random_seed}"
4775 echo
4776
4777 echo "External libraries:"
4778 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
4779 echo
4780
4781 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4782     echo "Enabled ${type}s:"
4783     eval list=\$$(toupper $type)_LIST
4784     print_enabled '_*' $list | print_3_columns
4785     echo
4786 done
4787
4788 license="LGPL version 2.1 or later"
4789 if enabled nonfree; then
4790     license="nonfree and unredistributable"
4791 elif enabled gplv3; then
4792     license="GPL version 3 or later"
4793 elif enabled lgplv3; then
4794     license="LGPL version 3 or later"