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