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