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