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