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