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