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