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