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