]> git.sesse.net Git - ffmpeg/blob - configure
Merge commit '9f1b3050d9e31e9283d818f3640f3460ac8cfb5b'
[ffmpeg] / 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 [LIBDIR]
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 [autodetect]
137   --disable-w32threads     disable Win32 threads [autodetect]
138   --disable-os2threads     disable OS/2 threads [autodetect]
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-d3d11va        disable D3D11VA code [autodetect]
153   --disable-dxva2          disable DXVA2 code [autodetect]
154   --disable-vaapi          disable VAAPI code [autodetect]
155   --disable-vda            disable VDA code [autodetect]
156   --disable-vdpau          disable VDPAU code [autodetect]
157
158 Individual component options:
159   --disable-everything     disable all components listed below
160   --disable-encoder=NAME   disable encoder NAME
161   --enable-encoder=NAME    enable encoder NAME
162   --disable-encoders       disable all encoders
163   --disable-decoder=NAME   disable decoder NAME
164   --enable-decoder=NAME    enable decoder NAME
165   --disable-decoders       disable all decoders
166   --disable-hwaccel=NAME   disable hwaccel NAME
167   --enable-hwaccel=NAME    enable hwaccel NAME
168   --disable-hwaccels       disable all hwaccels
169   --disable-muxer=NAME     disable muxer NAME
170   --enable-muxer=NAME      enable muxer NAME
171   --disable-muxers         disable all muxers
172   --disable-demuxer=NAME   disable demuxer NAME
173   --enable-demuxer=NAME    enable demuxer NAME
174   --disable-demuxers       disable all demuxers
175   --enable-parser=NAME     enable parser NAME
176   --disable-parser=NAME    disable parser NAME
177   --disable-parsers        disable all parsers
178   --enable-bsf=NAME        enable bitstream filter NAME
179   --disable-bsf=NAME       disable bitstream filter NAME
180   --disable-bsfs           disable all bitstream filters
181   --enable-protocol=NAME   enable protocol NAME
182   --disable-protocol=NAME  disable protocol NAME
183   --disable-protocols      disable all protocols
184   --enable-indev=NAME      enable input device NAME
185   --disable-indev=NAME     disable input device NAME
186   --disable-indevs         disable input devices
187   --enable-outdev=NAME     enable output device NAME
188   --disable-outdev=NAME    disable output device NAME
189   --disable-outdevs        disable output devices
190   --disable-devices        disable all devices
191   --enable-filter=NAME     enable filter NAME
192   --disable-filter=NAME    disable filter NAME
193   --disable-filters        disable all filters
194
195 External library support:
196   --enable-avisynth        enable reading of AviSynth script files [no]
197   --disable-bzlib          disable bzlib [autodetect]
198   --enable-fontconfig      enable fontconfig, useful for drawtext filter [no]
199   --enable-frei0r          enable frei0r video filtering [no]
200   --enable-gnutls          enable gnutls, needed for https support
201                            if openssl is not used [no]
202   --disable-iconv          disable iconv [autodetect]
203   --enable-ladspa          enable LADSPA audio filtering [no]
204   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
205   --enable-libass          enable libass subtitles rendering,
206                            needed for subtitles and ass filter [no]
207   --enable-libbluray       enable BluRay reading using libbluray [no]
208   --enable-libbs2b         enable bs2b DSP library [no]
209   --enable-libcaca         enable textual display using libcaca [no]
210   --enable-libcelt         enable CELT decoding via libcelt [no]
211   --enable-libcdio         enable audio CD grabbing with libcdio [no]
212   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
213                            and libraw1394 [no]
214   --enable-libdcadec       enable DCA decoding via libdcadec [no]
215   --enable-libfaac         enable AAC encoding via libfaac [no]
216   --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
217   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
218   --enable-libfreetype     enable libfreetype, needed for drawtext filter [no]
219   --enable-libfribidi      enable libfribidi, improves drawtext filter [no]
220   --enable-libgme          enable Game Music Emu via libgme [no]
221   --enable-libgsm          enable GSM de/encoding via libgsm [no]
222   --enable-libiec61883     enable iec61883 via libiec61883 [no]
223   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
224   --enable-libmfx          enable HW acceleration through libmfx
225   --enable-libmodplug      enable ModPlug via libmodplug [no]
226   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
227   --enable-libnut          enable NUT (de)muxing via libnut,
228                            native (de)muxer exists [no]
229   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
230   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
231   --enable-libopencv       enable video filtering via libopencv [no]
232   --enable-libopenh264     enable H.264 encoding via OpenH264 [no]
233   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
234   --enable-libopus         enable Opus de/encoding via libopus [no]
235   --enable-libpulse        enable Pulseaudio input via libpulse [no]
236   --enable-libquvi         enable quvi input via libquvi [no]
237   --enable-librtmp         enable RTMP[E] support via librtmp [no]
238   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
239   --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
240   --enable-libsmbclient    enable Samba protocol via libsmbclient [no]
241   --enable-libsoxr         enable Include libsoxr resampling [no]
242   --enable-libspeex        enable Speex de/encoding via libspeex [no]
243   --enable-libssh          enable SFTP protocol via libssh [no]
244   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
245   --enable-libtheora       enable Theora encoding via libtheora [no]
246   --enable-libtwolame      enable MP2 encoding via libtwolame [no]
247   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
248   --enable-libv4l2         enable libv4l2/v4l-utils [no]
249   --enable-libvidstab      enable video stabilization using vid.stab [no]
250   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
251   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
252   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
253                            native implementation exists [no]
254   --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
255   --enable-libwavpack      enable wavpack encoding via libwavpack [no]
256   --enable-libwebp         enable WebP encoding via libwebp [no]
257   --enable-libx264         enable H.264 encoding via x264 [no]
258   --enable-libx265         enable HEVC encoding via x265 [no]
259   --enable-libxavs         enable AVS encoding via xavs [no]
260   --enable-libxcb          enable X11 grabbing using XCB [autodetect]
261   --enable-libxcb-shm      enable X11 grabbing shm communication [autodetect]
262   --enable-libxcb-xfixes   enable X11 grabbing mouse rendering [autodetect]
263   --enable-libxcb-shape    enable X11 grabbing shape rendering [autodetect]
264   --enable-libxvid         enable Xvid encoding via xvidcore,
265                            native MPEG-4/Xvid encoder exists [no]
266   --enable-libzmq          enable message passing via libzmq [no]
267   --enable-libzvbi         enable teletext support via libzvbi [no]
268   --disable-lzma           disable lzma [autodetect]
269   --enable-decklink        enable Blackmagick DeckLink I/O support [no]
270   --enable-mmal            enable decoding via MMAL [no]
271   --enable-nvenc           enable NVIDIA NVENC support [no]
272   --enable-openal          enable OpenAL 1.1 capture support [no]
273   --enable-opencl          enable OpenCL code
274   --enable-opengl          enable OpenGL rendering [no]
275   --enable-openssl         enable openssl, needed for https support
276                            if gnutls is not used [no]
277   --disable-sdl            disable sdl [autodetect]
278   --enable-x11grab         enable X11 grabbing (legacy) [no]
279   --disable-xlib           disable xlib [autodetect]
280   --disable-zlib           disable zlib [autodetect]
281
282 Toolchain options:
283   --arch=ARCH              select architecture [$arch]
284   --cpu=CPU                select the minimum required CPU (affects
285                            instruction selection, may crash on older CPUs)
286   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
287   --progs-suffix=SUFFIX    program name suffix []
288   --enable-cross-compile   assume a cross-compiler is used
289   --sysroot=PATH           root of cross-build tree
290   --sysinclude=PATH        location of cross-build system headers
291   --target-os=OS           compiler targets OS [$target_os]
292   --target-exec=CMD        command to run executables on target
293   --target-path=DIR        path to view of build directory on target
294   --target-samples=DIR     path to samples directory on target
295   --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
296   --toolchain=NAME         set tool defaults according to NAME
297   --nm=NM                  use nm tool NM [$nm_default]
298   --ar=AR                  use archive tool AR [$ar_default]
299   --as=AS                  use assembler AS [$as_default]
300   --windres=WINDRES        use windows resource compiler WINDRES [$windres_default]
301   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
302   --cc=CC                  use C compiler CC [$cc_default]
303   --cxx=CXX                use C compiler CXX [$cxx_default]
304   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
305   --ld=LD                  use linker LD [$ld_default]
306   --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
307   --pkg-config-flags=FLAGS pass additional flags to pkgconf []
308   --ranlib=RANLIB          use ranlib RANLIB [$ranlib_default]
309   --doxygen=DOXYGEN        use DOXYGEN to generate API doc [$doxygen_default]
310   --host-cc=HOSTCC         use host C compiler HOSTCC
311   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
312   --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
313   --host-ld=HOSTLD         use host linker HOSTLD
314   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
315   --host-libs=HLIBS        use libs HLIBS when linking for host
316   --host-os=OS             compiler host OS [$target_os]
317   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
318   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
319   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
320   --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
321   --extra-libs=ELIBS       add ELIBS [$ELIBS]
322   --extra-version=STRING   version string suffix []
323   --optflags=OPTFLAGS      override optimization-related compiler flags
324   --build-suffix=SUFFIX    library name suffix []
325   --enable-pic             build position-independent code
326   --enable-thumb           compile for Thumb instruction set
327   --enable-lto             use link-time optimization
328
329 Advanced options (experts only):
330   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
331   --disable-symver         disable symbol versioning
332   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
333   --disable-safe-bitstream-reader
334                            disable buffer boundary checking in bitreaders
335                            (faster, but may crash)
336   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
337   --sws-max-filter-size=N  the max filter size swscale uses [$sws_max_filter_size_default]
338
339 Optimization options (experts only):
340   --disable-asm            disable all assembly optimizations
341   --disable-altivec        disable AltiVec optimizations
342   --disable-amd3dnow       disable 3DNow! optimizations
343   --disable-amd3dnowext    disable 3DNow! extended optimizations
344   --disable-mmx            disable MMX optimizations
345   --disable-mmxext         disable MMXEXT optimizations
346   --disable-sse            disable SSE optimizations
347   --disable-sse2           disable SSE2 optimizations
348   --disable-sse3           disable SSE3 optimizations
349   --disable-ssse3          disable SSSE3 optimizations
350   --disable-sse4           disable SSE4 optimizations
351   --disable-sse42          disable SSE4.2 optimizations
352   --disable-avx            disable AVX optimizations
353   --disable-xop            disable XOP optimizations
354   --disable-fma3           disable FMA3 optimizations
355   --disable-fma4           disable FMA4 optimizations
356   --disable-avx2           disable AVX2 optimizations
357   --disable-armv5te        disable armv5te optimizations
358   --disable-armv6          disable armv6 optimizations
359   --disable-armv6t2        disable armv6t2 optimizations
360   --disable-vfp            disable VFP optimizations
361   --disable-neon           disable NEON optimizations
362   --disable-inline-asm     disable use of inline assembly
363   --disable-yasm           disable use of nasm/yasm assembly
364   --disable-mips32r5       disable MIPS32R5 optimizations
365   --disable-mips64r6       disable MIPS64R6 optimizations
366   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
367   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
368   --disable-msa            disable MSA optimizations
369   --disable-mipsfpu        disable floating point MIPS optimizations
370   --disable-loongson3      disable Loongson-3 SIMD optimizations
371   --disable-fast-unaligned consider unaligned accesses slow
372
373 Developer options (useful when working on FFmpeg itself):
374   --disable-debug          disable debugging symbols
375   --enable-debug=LEVEL     set the debug level [$debuglevel]
376   --disable-optimizations  disable compiler optimizations
377   --enable-extra-warnings  enable more compiler warnings
378   --disable-stripping      disable stripping of executables and shared libraries
379   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
380                            2 causes a slowdown at runtime.
381   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
382   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
383                            leaks and errors, using the specified valgrind binary.
384                            Cannot be combined with --target-exec
385   --enable-ftrapv          Trap arithmetic overflows
386   --samples=PATH           location of test samples for FATE, if not set use
387                            \$FATE_SAMPLES at make invocation time.
388   --enable-neon-clobber-test check NEON registers for clobbering (should be
389                            used only for debugging purposes)
390   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
391                            should be used only for debugging purposes)
392   --enable-random          randomly enable/disable components
393   --disable-random
394   --enable-random=LIST     randomly enable/disable specific components or
395   --disable-random=LIST    component groups. LIST is a comma-separated list
396                            of NAME[:PROB] entries where NAME is a component
397                            (group) and PROB the probability associated with
398                            NAME (default 0.5).
399   --random-seed=VALUE      seed value for --enable/disable-random
400   --disable-valgrind-backtrace do not print a backtrace under Valgrind
401                            (only applies to --disable-optimizations builds)
402
403 NOTE: Object files are built at the place where configure is launched.
404 EOF
405   exit 0
406 }
407
408 quotes='""'
409
410 log(){
411     echo "$@" >> $logfile
412 }
413
414 log_file(){
415     log BEGIN $1
416     pr -n -t $1 >> $logfile
417     log END $1
418 }
419
420 echolog(){
421     log "$@"
422     echo "$@"
423 }
424
425 warn(){
426     log "WARNING: $*"
427     WARNINGS="${WARNINGS}WARNING: $*\n"
428 }
429
430 die(){
431     echolog "$@"
432     cat <<EOF
433
434 If you think configure made a mistake, make sure you are using the latest
435 version from Git.  If the latest version fails, report the problem to the
436 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
437 EOF
438     if disabled logging; then
439         cat <<EOF
440 Rerun configure with logging enabled (do not use --disable-logging), and
441 include the log this produces with your report.
442 EOF
443     else
444         cat <<EOF
445 Include the log file "$logfile" produced by configure as this will help
446 solve the problem.
447 EOF
448     fi
449     exit 1
450 }
451
452 # Avoid locale weirdness, besides we really just want to translate ASCII.
453 toupper(){
454     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
455 }
456
457 tolower(){
458     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
459 }
460
461 c_escape(){
462     echo "$*" | sed 's/["\\]/\\\0/g'
463 }
464
465 sh_quote(){
466     v=$(echo "$1" | sed "s/'/'\\\\''/g")
467     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
468     echo "$v"
469 }
470
471 cleanws(){
472     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//;s/\\r//g'
473 }
474
475 filter(){
476     pat=$1
477     shift
478     for v; do
479         eval "case $v in $pat) echo $v ;; esac"
480     done
481 }
482
483 filter_out(){
484     pat=$1
485     shift
486     for v; do
487         eval "case $v in $pat) ;; *) echo $v ;; esac"
488     done
489 }
490
491 map(){
492     m=$1
493     shift
494     for v; do eval $m; done
495 }
496
497 add_suffix(){
498     suffix=$1
499     shift
500     for v; do echo ${v}${suffix}; done
501 }
502
503 set_all(){
504     value=$1
505     shift
506     for var in $*; do
507         eval $var=$value
508     done
509 }
510
511 set_weak(){
512     value=$1
513     shift
514     for var; do
515         eval : \${$var:=$value}
516     done
517 }
518
519 sanitize_var_name(){
520     echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
521 }
522
523 set_safe(){
524     var=$1
525     shift
526     eval $(sanitize_var_name "$var")='$*'
527 }
528
529 get_safe(){
530     eval echo \$$(sanitize_var_name "$1")
531 }
532
533 pushvar(){
534     for pvar in $*; do
535         eval level=\${${pvar}_level:=0}
536         eval ${pvar}_${level}="\$$pvar"
537         eval ${pvar}_level=$(($level+1))
538     done
539 }
540
541 popvar(){
542     for pvar in $*; do
543         eval level=\${${pvar}_level:-0}
544         test $level = 0 && continue
545         eval level=$(($level-1))
546         eval $pvar="\${${pvar}_${level}}"
547         eval ${pvar}_level=$level
548         eval unset ${pvar}_${level}
549     done
550 }
551
552 enable(){
553     set_all yes $*
554 }
555
556 disable(){
557     set_all no $*
558 }
559
560 enable_weak(){
561     set_weak yes $*
562 }
563
564 disable_weak(){
565     set_weak no $*
566 }
567
568 enable_safe(){
569     for var; do
570         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
571     done
572 }
573
574 disable_safe(){
575     for var; do
576         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
577     done
578 }
579
580 do_enable_deep(){
581     for var; do
582         enabled $var && continue
583         eval sel="\$${var}_select"
584         eval sgs="\$${var}_suggest"
585         pushvar var sgs
586         enable_deep $sel
587         popvar sgs
588         enable_deep_weak $sgs
589         popvar var
590     done
591 }
592
593 enable_deep(){
594     do_enable_deep $*
595     enable $*
596 }
597
598 enable_deep_weak(){
599     for var; do
600         disabled $var && continue
601         pushvar var
602         do_enable_deep $var
603         popvar var
604         enable_weak $var
605     done
606 }
607
608 enabled(){
609     test "${1#!}" = "$1" && op== || op=!=
610     eval test "x\$${1#!}" $op "xyes"
611 }
612
613 disabled(){
614     test "${1#!}" = "$1" && op== || op=!=
615     eval test "x\$${1#!}" $op "xno"
616 }
617
618 enabled_all(){
619     for opt; do
620         enabled $opt || return 1
621     done
622 }
623
624 disabled_all(){
625     for opt; do
626         disabled $opt || return 1
627     done
628 }
629
630 enabled_any(){
631     for opt; do
632         enabled $opt && return 0
633     done
634 }
635
636 disabled_any(){
637     for opt; do
638         disabled $opt && return 0
639     done
640     return 1
641 }
642
643 set_default(){
644     for opt; do
645         eval : \${$opt:=\$${opt}_default}
646     done
647 }
648
649 is_in(){
650     value=$1
651     shift
652     for var in $*; do
653         [ $var = $value ] && return 0
654     done
655     return 1
656 }
657
658 do_check_deps(){
659     for cfg; do
660         cfg="${cfg#!}"
661         enabled ${cfg}_checking && die "Circular dependency for $cfg."
662         disabled ${cfg}_checking && continue
663         enable ${cfg}_checking
664         append allopts $cfg
665
666         eval dep_all="\$${cfg}_deps"
667         eval dep_any="\$${cfg}_deps_any"
668         eval dep_sel="\$${cfg}_select"
669         eval dep_sgs="\$${cfg}_suggest"
670         eval dep_ifa="\$${cfg}_if"
671         eval dep_ifn="\$${cfg}_if_any"
672
673         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
674         do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
675         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
676
677         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
678         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
679         enabled_all  $dep_all || disable $cfg
680         enabled_any  $dep_any || disable $cfg
681         disabled_any $dep_sel && disable $cfg
682
683         if enabled $cfg; then
684             enable_deep $dep_sel
685             enable_deep_weak $dep_sgs
686         fi
687
688         disable ${cfg}_checking
689     done
690 }
691
692 check_deps(){
693     unset allopts
694
695     do_check_deps "$@"
696
697     for cfg in $allopts; do
698         enabled $cfg || continue
699         eval dep_extralibs="\$${cfg}_extralibs"
700         test -n "$dep_extralibs" && add_extralibs $dep_extralibs
701     done
702 }
703
704 print_config(){
705     pfx=$1
706     files=$2
707     shift 2
708     map 'eval echo "$v \${$v:-no}"' "$@" |
709     awk "BEGIN { split(\"$files\", files) }
710         {
711             c = \"$pfx\" toupper(\$1);
712             v = \$2;
713             sub(/yes/, 1, v);
714             sub(/no/,  0, v);
715             for (f in files) {
716                 file = files[f];
717                 if (file ~ /\\.h\$/) {
718                     printf(\"#define %s %d\\n\", c, v) >>file;
719                 } else if (file ~ /\\.asm\$/) {
720                     printf(\"%%define %s %d\\n\", c, v) >>file;
721                 } else if (file ~ /\\.mak\$/) {
722                     n = -v ? \"\" : \"!\";
723                     printf(\"%s%s=yes\\n\", n, c) >>file;
724                 } else if (file ~ /\\.texi\$/) {
725                     pre = -v ? \"\" : \"@c \";
726                     yesno = \$2;
727                     c2 = tolower(c);
728                     gsub(/_/, \"-\", c2);
729                     printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
730                 }
731             }
732         }"
733 }
734
735 print_enabled(){
736     suf=$1
737     shift
738     for v; do
739         enabled $v && printf "%s\n" ${v%$suf};
740     done
741 }
742
743 append(){
744     var=$1
745     shift
746     eval "$var=\"\$$var $*\""
747 }
748
749 prepend(){
750     var=$1
751     shift
752     eval "$var=\"$* \$$var\""
753 }
754
755 unique(){
756     var=$1
757     uniq_list=""
758     for tok in $(eval echo \$$var); do
759         uniq_list="$(filter_out $tok $uniq_list) $tok"
760     done
761     eval "$var=\"${uniq_list}\""
762 }
763
764 add_cppflags(){
765     append CPPFLAGS "$@"
766 }
767
768 add_cflags(){
769     append CFLAGS $($cflags_filter "$@")
770 }
771
772 add_cxxflags(){
773     append CXXFLAGS $($cflags_filter "$@")
774 }
775
776 add_asflags(){
777     append ASFLAGS $($asflags_filter "$@")
778 }
779
780 add_ldflags(){
781     append LDFLAGS $($ldflags_filter "$@")
782 }
783
784 add_ldexeflags(){
785     append LDEXEFLAGS $($ldflags_filter "$@")
786 }
787
788 add_stripflags(){
789     append ASMSTRIPFLAGS "$@"
790 }
791
792 add_extralibs(){
793     prepend extralibs $($ldflags_filter "$@")
794 }
795
796 add_host_cppflags(){
797     append host_cppflags "$@"
798 }
799
800 add_host_cflags(){
801     append host_cflags $($host_cflags_filter "$@")
802 }
803
804 add_host_ldflags(){
805     append host_ldflags $($host_ldflags_filter "$@")
806 }
807
808 add_compat(){
809     append compat_objs $1
810     shift
811     map 'add_cppflags -D$v' "$@"
812 }
813
814 check_cmd(){
815     log "$@"
816     "$@" >> $logfile 2>&1
817 }
818
819 check_stat(){
820     log check_stat "$@"
821     stat "$1" >> $logfile 2>&1
822 }
823
824 cc_o(){
825     eval printf '%s\\n' $CC_O
826 }
827
828 cc_e(){
829     eval printf '%s\\n' $CC_E
830 }
831
832 check_cc(){
833     log check_cc "$@"
834     cat > $TMPC
835     log_file $TMPC
836     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
837 }
838
839 check_cxx(){
840     log check_cxx "$@"
841     cat > $TMPCPP
842     log_file $TMPCPP
843     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
844 }
845
846 check_oc(){
847     log check_oc "$@"
848     cat > $TMPM
849     log_file $TMPM
850     check_cmd $cc -Werror=missing-prototypes $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPM
851 }
852
853 check_cpp(){
854     log check_cpp "$@"
855     cat > $TMPC
856     log_file $TMPC
857     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
858 }
859
860 as_o(){
861     eval printf '%s\\n' $AS_O
862 }
863
864 check_as(){
865     log check_as "$@"
866     cat > $TMPS
867     log_file $TMPS
868     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
869 }
870
871 check_inline_asm(){
872     log check_inline_asm "$@"
873     name="$1"
874     code="$2"
875     shift 2
876     disable $name
877     check_cc "$@" <<EOF && enable $name
878 void foo(void){ __asm__ volatile($code); }
879 EOF
880 }
881
882 check_insn(){
883     log check_insn "$@"
884     check_inline_asm ${1}_inline "\"$2\""
885     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
886 }
887
888 check_yasm(){
889     log check_yasm "$@"
890     echo "$1" > $TMPS
891     log_file $TMPS
892     shift 1
893     check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
894 }
895
896 ld_o(){
897     eval printf '%s\\n' $LD_O
898 }
899
900 check_ld(){
901     log check_ld "$@"
902     type=$1
903     shift 1
904     flags=$(filter_out '-l*|*.so' $@)
905     libs=$(filter '-l*|*.so' $@)
906     check_$type $($cflags_filter $flags) || return
907     flags=$($ldflags_filter $flags)
908     libs=$($ldflags_filter $libs)
909     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
910 }
911
912 print_include(){
913     hdr=$1
914     test "${hdr%.h}" = "${hdr}" &&
915         echo "#include $hdr"    ||
916         echo "#include <$hdr>"
917 }
918
919 check_code(){
920     log check_code "$@"
921     check=$1
922     headers=$2
923     code=$3
924     shift 3
925     {
926         for hdr in $headers; do
927             print_include $hdr
928         done
929         echo "int main(void) { $code; return 0; }"
930     } | check_$check "$@"
931 }
932
933 check_cppflags(){
934     log check_cppflags "$@"
935     check_cc "$@" <<EOF && append CPPFLAGS "$@"
936 int x;
937 EOF
938 }
939
940 test_cflags(){
941     log test_cflags "$@"
942     set -- $($cflags_filter "$@")
943     check_cc "$@" <<EOF
944 int x;
945 EOF
946 }
947
948 check_cflags(){
949     log check_cflags "$@"
950     test_cflags "$@" && add_cflags "$@"
951 }
952
953 check_cxxflags(){
954     log check_cxxflags "$@"
955     set -- $($cflags_filter "$@")
956     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
957 int x;
958 EOF
959 }
960
961 test_ldflags(){
962     log test_ldflags "$@"
963     check_ld "cc" "$@" <<EOF
964 int main(void){ return 0; }
965 EOF
966 }
967
968 check_ldflags(){
969     log check_ldflags "$@"
970     test_ldflags "$@" && add_ldflags "$@"
971 }
972
973 test_stripflags(){
974     log test_stripflags "$@"
975     # call check_cc to get a fresh TMPO
976     check_cc <<EOF
977 int main(void) { return 0; }
978 EOF
979     check_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
980 }
981
982 check_stripflags(){
983     log check_stripflags "$@"
984     test_stripflags "$@" && add_stripflags "$@"
985 }
986
987 check_header(){
988     log check_header "$@"
989     header=$1
990     shift
991     disable_safe $header
992     check_cpp "$@" <<EOF && enable_safe $header
993 #include <$header>
994 int x;
995 EOF
996 }
997
998 check_header_oc(){
999     log check_header_oc "$@"
1000     rm -f -- "$TMPO"
1001     header=$1
1002     shift
1003     disable_safe $header
1004     {
1005        echo "#include <$header>"
1006        echo "int main(void) { return 0; }"
1007     } | check_oc && check_stat "$TMPO" && enable_safe $headers
1008 }
1009
1010 check_func(){
1011     log check_func "$@"
1012     func=$1
1013     shift
1014     disable $func
1015     check_ld "cc" "$@" <<EOF && enable $func
1016 extern int $func();
1017 int main(void){ $func(); }
1018 EOF
1019 }
1020
1021 check_mathfunc(){
1022     log check_mathfunc "$@"
1023     func=$1
1024     narg=$2
1025     shift 2
1026     test $narg = 2 && args="f, g" || args="f"
1027     disable $func
1028     check_ld "cc" "$@" <<EOF && enable $func
1029 #include <math.h>
1030 float foo(float f, float g) { return $func($args); }
1031 int main(void){ return (int) foo; }
1032 EOF
1033 }
1034
1035 check_func_headers(){
1036     log check_func_headers "$@"
1037     headers=$1
1038     funcs=$2
1039     shift 2
1040     {
1041         for hdr in $headers; do
1042             print_include $hdr
1043         done
1044         for func in $funcs; do
1045             echo "long check_$func(void) { return (long) $func; }"
1046         done
1047         echo "int main(void) { return 0; }"
1048     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
1049 }
1050
1051 check_class_headers_cpp(){
1052     log check_class_headers_cpp "$@"
1053     headers=$1
1054     classes=$2
1055     shift 2
1056     {
1057         for hdr in $headers; do
1058             echo "#include <$hdr>"
1059         done
1060         echo "int main(void) { "
1061         i=1
1062         for class in $classes; do
1063             echo "$class obj$i;"
1064             i=$(expr $i + 1)
1065         done
1066         echo "return 0; }"
1067     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
1068 }
1069
1070 check_cpp_condition(){
1071     log check_cpp_condition "$@"
1072     header=$1
1073     condition=$2
1074     shift 2
1075     check_cpp "$@" <<EOF
1076 #include <$header>
1077 #if !($condition)
1078 #error "unsatisfied condition: $condition"
1079 #endif
1080 EOF
1081 }
1082
1083 check_lib(){
1084     log check_lib "$@"
1085     header="$1"
1086     func="$2"
1087     shift 2
1088     check_header $header && check_func $func "$@" && add_extralibs "$@"
1089 }
1090
1091 check_lib2(){
1092     log check_lib2 "$@"
1093     headers="$1"
1094     funcs="$2"
1095     shift 2
1096     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
1097 }
1098
1099 check_lib_cpp(){
1100     log check_lib_cpp "$@"
1101     headers="$1"
1102     classes="$2"
1103     shift 2
1104     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
1105 }
1106
1107 check_pkg_config(){
1108     log check_pkg_config "$@"
1109     pkgandversion="$1"
1110     pkg="${1%% *}"
1111     headers="$2"
1112     funcs="$3"
1113     shift 3
1114     check_cmd $pkg_config --exists --print-errors $pkgandversion || return
1115     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1116     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1117     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1118         set_safe ${pkg}_cflags $pkg_cflags   &&
1119         set_safe ${pkg}_libs   $pkg_libs
1120 }
1121
1122 check_exec(){
1123     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1124 }
1125
1126 check_exec_crash(){
1127     code=$(cat)
1128
1129     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
1130     # are safe but may not be available everywhere.  Thus we use
1131     # raise(SIGTERM) instead.  The check is run in a subshell so we
1132     # can redirect the "Terminated" message from the shell.  SIGBUS
1133     # is not defined by standard C so it is used conditionally.
1134
1135     (check_exec "$@") >> $logfile 2>&1 <<EOF
1136 #include <signal.h>
1137 static void sighandler(int sig){
1138     raise(SIGTERM);
1139 }
1140 int foo(void){
1141     $code
1142 }
1143 int (*func_ptr)(void) = foo;
1144 int main(void){
1145     signal(SIGILL, sighandler);
1146     signal(SIGFPE, sighandler);
1147     signal(SIGSEGV, sighandler);
1148 #ifdef SIGBUS
1149     signal(SIGBUS, sighandler);
1150 #endif
1151     return func_ptr();
1152 }
1153 EOF
1154 }
1155
1156 check_type(){
1157     log check_type "$@"
1158     headers=$1
1159     type=$2
1160     shift 2
1161     disable_safe "$type"
1162     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1163 }
1164
1165 check_struct(){
1166     log check_struct "$@"
1167     headers=$1
1168     struct=$2
1169     member=$3
1170     shift 3
1171     disable_safe "${struct}_${member}"
1172     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1173         enable_safe "${struct}_${member}"
1174 }
1175
1176 check_builtin(){
1177     log check_builtin "$@"
1178     name=$1
1179     headers=$2
1180     builtin=$3
1181     shift 3
1182     disable "$name"
1183     check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1184 }
1185
1186 check_compile_assert(){
1187     log check_compile_assert "$@"
1188     name=$1
1189     headers=$2
1190     condition=$3
1191     shift 3
1192     disable "$name"
1193     check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1194 }
1195
1196 require(){
1197     name="$1"
1198     header="$2"
1199     func="$3"
1200     shift 3
1201     check_lib $header $func "$@" || die "ERROR: $name not found"
1202 }
1203
1204 require2(){
1205     name="$1"
1206     headers="$2"
1207     func="$3"
1208     shift 3
1209     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1210 }
1211
1212 require_cpp(){
1213     name="$1"
1214     headers="$2"
1215     classes="$3"
1216     shift 3
1217     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1218 }
1219
1220 use_pkg_config(){
1221     pkg="$1"
1222     check_pkg_config "$@" || return 1
1223     add_cflags    $(get_safe ${pkg}_cflags)
1224     add_extralibs $(get_safe ${pkg}_libs)
1225 }
1226
1227 require_pkg_config(){
1228     use_pkg_config "$@" || die "ERROR: $pkg not found using pkg-config$pkg_config_fail_message"
1229 }
1230
1231 require_libfreetype(){
1232     log require_libfreetype "$@"
1233     pkg="freetype2"
1234     check_cmd $pkg_config --exists --print-errors $pkg \
1235       || die "ERROR: $pkg not found"
1236     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1237     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1238     {
1239         echo "#include <ft2build.h>"
1240         echo "#include FT_FREETYPE_H"
1241         echo "long check_func(void) { return (long) FT_Init_FreeType; }"
1242         echo "int main(void) { return 0; }"
1243     } | check_ld "cc" $pkg_cflags $pkg_libs \
1244       && set_safe ${pkg}_cflags $pkg_cflags \
1245       && set_safe ${pkg}_libs   $pkg_libs \
1246       || die "ERROR: $pkg not found"
1247     add_cflags    $(get_safe ${pkg}_cflags)
1248     add_extralibs $(get_safe ${pkg}_libs)
1249 }
1250
1251 hostcc_e(){
1252     eval printf '%s\\n' $HOSTCC_E
1253 }
1254
1255 hostcc_o(){
1256     eval printf '%s\\n' $HOSTCC_O
1257 }
1258
1259 check_host_cc(){
1260     log check_host_cc "$@"
1261     cat > $TMPC
1262     log_file $TMPC
1263     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1264 }
1265
1266 check_host_cpp(){
1267     log check_host_cpp "$@"
1268     cat > $TMPC
1269     log_file $TMPC
1270     check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1271 }
1272
1273 check_host_cppflags(){
1274     log check_host_cppflags "$@"
1275     check_host_cc "$@" <<EOF && append host_cppflags "$@"
1276 int x;
1277 EOF
1278 }
1279
1280 check_host_cflags(){
1281     log check_host_cflags "$@"
1282     set -- $($host_cflags_filter "$@")
1283     check_host_cc "$@" <<EOF && append host_cflags "$@"
1284 int x;
1285 EOF
1286 }
1287
1288 check_host_cpp_condition(){
1289     log check_host_cpp_condition "$@"
1290     header=$1
1291     condition=$2
1292     shift 2
1293     check_host_cpp "$@" <<EOF
1294 #include <$header>
1295 #if !($condition)
1296 #error "unsatisfied condition: $condition"
1297 #endif
1298 EOF
1299 }
1300
1301 apply(){
1302     file=$1
1303     shift
1304     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1305 }
1306
1307 cp_if_changed(){
1308     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1309     mkdir -p "$(dirname $2)"
1310     $cp_f "$1" "$2"
1311 }
1312
1313 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1314 # system-dependent things.
1315
1316 COMPONENT_LIST="
1317     bsfs
1318     decoders
1319     demuxers
1320     encoders
1321     filters
1322     hwaccels
1323     indevs
1324     muxers
1325     outdevs
1326     parsers
1327     protocols
1328 "
1329
1330 EXAMPLE_LIST="
1331     avio_reading_example
1332     avio_list_dir_example
1333     decoding_encoding_example
1334     demuxing_decoding_example
1335     extract_mvs_example
1336     filter_audio_example
1337     filtering_audio_example
1338     filtering_video_example
1339     metadata_example
1340     muxing_example
1341     qsvdec_example
1342     remuxing_example
1343     resampling_audio_example
1344     scaling_video_example
1345     transcode_aac_example
1346     transcoding_example
1347 "
1348
1349 EXTERNAL_LIBRARY_LIST="
1350     avisynth
1351     bzlib
1352     crystalhd
1353     decklink
1354     frei0r
1355     gnutls
1356     iconv
1357     ladspa
1358     libaacplus
1359     libass
1360     libbluray
1361     libbs2b
1362     libcaca
1363     libcdio
1364     libcelt
1365     libdc1394
1366     libdcadec
1367     libfaac
1368     libfdk_aac
1369     libflite
1370     libfontconfig
1371     libfreetype
1372     libfribidi
1373     libgme
1374     libgsm
1375     libiec61883
1376     libilbc
1377     libmfx
1378     libmodplug
1379     libmp3lame
1380     libnut
1381     libopencore_amrnb
1382     libopencore_amrwb
1383     libopencv
1384     libopenh264
1385     libopenjpeg
1386     libopus
1387     libpulse
1388     libquvi
1389     librtmp
1390     libschroedinger
1391     libshine
1392     libsmbclient
1393     libsoxr
1394     libspeex
1395     libssh
1396     libstagefright_h264
1397     libtheora
1398     libtwolame
1399     libutvideo
1400     libv4l2
1401     libvidstab
1402     libvo_aacenc
1403     libvo_amrwbenc
1404     libvorbis
1405     libvpx
1406     libwavpack
1407     libwebp
1408     libx264
1409     libx265
1410     libxavs
1411     libxcb
1412     libxcb_shm
1413     libxcb_shape
1414     libxcb_xfixes
1415     libxvid
1416     libzmq
1417     libzvbi
1418     lzma
1419     mmal
1420     nvenc
1421     openal
1422     opencl
1423     opengl
1424     openssl
1425     sdl
1426     x11grab
1427     xlib
1428     zlib
1429 "
1430
1431 DOCUMENT_LIST="
1432     doc
1433     htmlpages
1434     manpages
1435     podpages
1436     txtpages
1437 "
1438
1439 FEATURE_LIST="
1440     ftrapv
1441     gray
1442     hardcoded_tables
1443     runtime_cpudetect
1444     safe_bitstream_reader
1445     shared
1446     small
1447     static
1448     swscale_alpha
1449 "
1450
1451 HWACCEL_LIST="
1452     d3d11va
1453     dxva2
1454     vaapi
1455     vda
1456     vdpau
1457     xvmc
1458 "
1459
1460 LIBRARY_LIST="
1461     avcodec
1462     avdevice
1463     avfilter
1464     avformat
1465     avresample
1466     avutil
1467     postproc
1468     swresample
1469     swscale
1470 "
1471
1472 LICENSE_LIST="
1473     gpl
1474     nonfree
1475     version3
1476 "
1477
1478 PROGRAM_LIST="
1479     ffplay
1480     ffprobe
1481     ffserver
1482     ffmpeg
1483 "
1484
1485 SUBSYSTEM_LIST="
1486     dct
1487     dwt
1488     error_resilience
1489     faan
1490     fast_unaligned
1491     fft
1492     lsp
1493     lzo
1494     mdct
1495     pixelutils
1496     network
1497     rdft
1498 "
1499
1500 CONFIG_LIST="
1501     $COMPONENT_LIST
1502     $DOCUMENT_LIST
1503     $EXAMPLE_LIST
1504     $EXTERNAL_LIBRARY_LIST
1505     $FEATURE_LIST
1506     $HWACCEL_LIST
1507     $LICENSE_LIST
1508     $LIBRARY_LIST
1509     $PROGRAM_LIST
1510     $SUBSYSTEM_LIST
1511     fontconfig
1512     incompatible_libav_abi
1513     memalign_hack
1514     memory_poisoning
1515     neon_clobber_test
1516     pic
1517     pod2man
1518     raise_major
1519     thumb
1520     valgrind_backtrace
1521     xmm_clobber_test
1522 "
1523
1524 THREADS_LIST="
1525     pthreads
1526     os2threads
1527     w32threads
1528 "
1529
1530 ATOMICS_LIST="
1531     atomics_gcc
1532     atomics_suncc
1533     atomics_win32
1534 "
1535
1536 ARCH_LIST="
1537     aarch64
1538     alpha
1539     arm
1540     avr32
1541     avr32_ap
1542     avr32_uc
1543     bfin
1544     ia64
1545     m68k
1546     mips
1547     mips64
1548     parisc
1549     ppc
1550     ppc64
1551     s390
1552     sh4
1553     sparc
1554     sparc64
1555     tilegx
1556     tilepro
1557     tomi
1558     x86
1559     x86_32
1560     x86_64
1561 "
1562
1563 ARCH_EXT_LIST_ARM="
1564     armv5te
1565     armv6
1566     armv6t2
1567     armv8
1568     neon
1569     vfp
1570     vfpv3
1571     setend
1572 "
1573
1574 ARCH_EXT_LIST_MIPS="
1575     mipsfpu
1576     mips32r2
1577     mips32r5
1578     mips64r6
1579     mipsdspr1
1580     mipsdspr2
1581     msa
1582 "
1583
1584 ARCH_EXT_LIST_LOONGSON="
1585     loongson3
1586 "
1587
1588 ARCH_EXT_LIST_X86_SIMD="
1589     amd3dnow
1590     amd3dnowext
1591     avx
1592     avx2
1593     fma3
1594     fma4
1595     mmx
1596     mmxext
1597     sse
1598     sse2
1599     sse3
1600     sse4
1601     sse42
1602     ssse3
1603     xop
1604 "
1605
1606 ARCH_EXT_LIST_PPC="
1607     altivec
1608     dcbzl
1609     ldbrx
1610     ppc4xx
1611     vsx
1612 "
1613
1614 ARCH_EXT_LIST_X86="
1615     $ARCH_EXT_LIST_X86_SIMD
1616     cpunop
1617     i686
1618 "
1619
1620 ARCH_EXT_LIST="
1621     $ARCH_EXT_LIST_ARM
1622     $ARCH_EXT_LIST_PPC
1623     $ARCH_EXT_LIST_X86
1624     $ARCH_EXT_LIST_MIPS
1625     $ARCH_EXT_LIST_LOONGSON
1626 "
1627
1628 ARCH_FEATURES="
1629     aligned_stack
1630     fast_64bit
1631     fast_clz
1632     fast_cmov
1633     local_aligned_8
1634     local_aligned_16
1635     local_aligned_32
1636     simd_align_16
1637 "
1638
1639 BUILTIN_LIST="
1640     atomic_cas_ptr
1641     atomic_compare_exchange
1642     machine_rw_barrier
1643     MemoryBarrier
1644     mm_empty
1645     rdtsc
1646     sarestart
1647     sync_val_compare_and_swap
1648 "
1649 HAVE_LIST_CMDLINE="
1650     inline_asm
1651     symver
1652     yasm
1653 "
1654
1655 HAVE_LIST_PUB="
1656     bigendian
1657     fast_unaligned
1658     incompatible_libav_abi
1659 "
1660
1661 HEADERS_LIST="
1662     alsa_asoundlib_h
1663     altivec_h
1664     arpa_inet_h
1665     asm_types_h
1666     cdio_paranoia_h
1667     cdio_paranoia_paranoia_h
1668     dev_bktr_ioctl_bt848_h
1669     dev_bktr_ioctl_meteor_h
1670     dev_ic_bt8xx_h
1671     dev_video_bktr_ioctl_bt848_h
1672     dev_video_meteor_ioctl_meteor_h
1673     direct_h
1674     dlfcn_h
1675     d3d11_h
1676     dxva_h
1677     ES2_gl_h
1678     gsm_h
1679     io_h
1680     mach_mach_time_h
1681     machine_ioctl_bt848_h
1682     machine_ioctl_meteor_h
1683     malloc_h
1684     openjpeg_1_5_openjpeg_h
1685     OpenGL_gl3_h
1686     poll_h
1687     sndio_h
1688     soundcard_h
1689     sys_mman_h
1690     sys_param_h
1691     sys_resource_h
1692     sys_select_h
1693     sys_soundcard_h
1694     sys_time_h
1695     sys_un_h
1696     sys_videoio_h
1697     termios_h
1698     udplite_h
1699     unistd_h
1700     valgrind_valgrind_h
1701     windows_h
1702     winsock2_h
1703 "
1704
1705 INTRINSICS_LIST="
1706     intrinsics_neon
1707 "
1708
1709 MATH_FUNCS="
1710     atanf
1711     atan2f
1712     cbrt
1713     cbrtf
1714     cosf
1715     exp2
1716     exp2f
1717     expf
1718     isinf
1719     isnan
1720     ldexpf
1721     llrint
1722     llrintf
1723     log2
1724     log2f
1725     log10f
1726     lrint
1727     lrintf
1728     powf
1729     rint
1730     round
1731     roundf
1732     sinf
1733     trunc
1734     truncf
1735 "
1736
1737 SYSTEM_FUNCS="
1738     access
1739     aligned_malloc
1740     clock_gettime
1741     closesocket
1742     CommandLineToArgvW
1743     CoTaskMemFree
1744     CryptGenRandom
1745     dlopen
1746     fcntl
1747     flt_lim
1748     fork
1749     getaddrinfo
1750     gethrtime
1751     getopt
1752     GetProcessAffinityMask
1753     GetProcessMemoryInfo
1754     GetProcessTimes
1755     getrusage
1756     getservbyport
1757     GetSystemTimeAsFileTime
1758     gettimeofday
1759     glob
1760     glXGetProcAddress
1761     gmtime_r
1762     inet_aton
1763     isatty
1764     jack_port_get_latency_range
1765     kbhit
1766     localtime_r
1767     lzo1x_999_compress
1768     mach_absolute_time
1769     MapViewOfFile
1770     memalign
1771     mkstemp
1772     mmap
1773     mprotect
1774     nanosleep
1775     PeekNamedPipe
1776     posix_memalign
1777     pthread_cancel
1778     sched_getaffinity
1779     SetConsoleTextAttribute
1780     setmode
1781     setrlimit
1782     Sleep
1783     strerror_r
1784     sysconf
1785     sysctl
1786     usleep
1787     VirtualAlloc
1788     wglGetProcAddress
1789 "
1790
1791 TOOLCHAIN_FEATURES="
1792     as_dn_directive
1793     as_func
1794     as_object_arch
1795     asm_mod_q
1796     attribute_may_alias
1797     attribute_packed
1798     ebp_available
1799     ebx_available
1800     gnu_as
1801     gnu_windres
1802     ibm_asm
1803     inline_asm_labels
1804     inline_asm_nonlocal_labels
1805     inline_asm_direct_symbol_refs
1806     pragma_deprecated
1807     rsync_contimeout
1808     symver_asm_label
1809     symver_gnu_asm
1810     vfp_args
1811     xform_asm
1812     xmm_clobbers
1813 "
1814
1815 TYPES_LIST="
1816     CONDITION_VARIABLE_Ptr
1817     DXVA_PicParams_HEVC
1818     ID3D11VideoDecoder
1819     socklen_t
1820     struct_addrinfo
1821     struct_group_source_req
1822     struct_ip_mreq_source
1823     struct_ipv6_mreq
1824     struct_pollfd
1825     struct_rusage_ru_maxrss
1826     struct_sctp_event_subscribe
1827     struct_sockaddr_in6
1828     struct_sockaddr_sa_len
1829     struct_sockaddr_storage
1830     struct_stat_st_mtim_tv_nsec
1831     struct_v4l2_frmivalenum_discrete
1832 "
1833
1834 HAVE_LIST="
1835     $ARCH_EXT_LIST
1836     $(add_suffix _external $ARCH_EXT_LIST)
1837     $(add_suffix _inline   $ARCH_EXT_LIST)
1838     $ARCH_FEATURES
1839     $ATOMICS_LIST
1840     $BUILTIN_LIST
1841     $HAVE_LIST_CMDLINE
1842     $HAVE_LIST_PUB
1843     $HEADERS_LIST
1844     $INTRINSICS_LIST
1845     $MATH_FUNCS
1846     $SYSTEM_FUNCS
1847     $THREADS_LIST
1848     $TOOLCHAIN_FEATURES
1849     $TYPES_LIST
1850     atomics_native
1851     dos_paths
1852     d3d11_cobj
1853     d3d11va_lib
1854     dxva2api_cobj
1855     dxva2_lib
1856     libc_msvcrt
1857     libdc1394_1
1858     libdc1394_2
1859     makeinfo
1860     makeinfo_html
1861     perl
1862     pod2man
1863     sdl
1864     section_data_rel_ro
1865     texi2html
1866     threads
1867     vaapi_x11
1868     vdpau_x11
1869     xlib
1870 "
1871
1872 # options emitted with CONFIG_ prefix but not available on the command line
1873 CONFIG_EXTRA="
1874     aandcttables
1875     ac3dsp
1876     audio_frame_queue
1877     audiodsp
1878     blockdsp
1879     bswapdsp
1880     cabac
1881     dvprofile
1882     exif
1883     faandct
1884     faanidct
1885     fdctdsp
1886     fmtconvert
1887     frame_thread_encoder
1888     gcrypt
1889     golomb
1890     gplv3
1891     h263dsp
1892     h264chroma
1893     h264dsp
1894     h264pred
1895     h264qpel
1896     hpeldsp
1897     huffman
1898     huffyuvdsp
1899     huffyuvencdsp
1900     idctdsp
1901     iirfilter
1902     imdct15
1903     intrax8
1904     jpegtables
1905     lgplv3
1906     llauddsp
1907     llviddsp
1908     lpc
1909     me_cmp
1910     mpeg_er
1911     mpegaudio
1912     mpegaudiodsp
1913     mpegvideo
1914     mpegvideoenc
1915     nettle
1916     pixblockdsp
1917     qpeldsp
1918     qsv
1919     qsvdec
1920     qsvenc
1921     rangecoder
1922     riffdec
1923     riffenc
1924     rtpdec
1925     rtpenc_chain
1926     sinewin
1927     startcode
1928     tpeldsp
1929     videodsp
1930     vp3dsp
1931     wma_freqs
1932 "
1933
1934 CMDLINE_SELECT="
1935     $ARCH_EXT_LIST
1936     $CONFIG_LIST
1937     $HAVE_LIST_CMDLINE
1938     $THREADS_LIST
1939     asm
1940     cross_compile
1941     debug
1942     extra_warnings
1943     logging
1944     lto
1945     optimizations
1946     rpath
1947     stripping
1948 "
1949
1950 PATHS_LIST="
1951     bindir
1952     datadir
1953     docdir
1954     incdir
1955     libdir
1956     mandir
1957     prefix
1958     shlibdir
1959 "
1960
1961 CMDLINE_SET="
1962     $PATHS_LIST
1963     ar
1964     arch
1965     as
1966     assert_level
1967     build_suffix
1968     cc
1969     cpu
1970     cross_prefix
1971     cxx
1972     dep_cc
1973     doxygen
1974     extra_version
1975     gas
1976     host_cc
1977     host_cflags
1978     host_ld
1979     host_ldflags
1980     host_libs
1981     host_os
1982     install
1983     ld
1984     logfile
1985     malloc_prefix
1986     nm
1987     optflags
1988     pkg_config
1989     pkg_config_flags
1990     progs_suffix
1991     random_seed
1992     ranlib
1993     samples
1994     strip
1995     sws_max_filter_size
1996     sysinclude
1997     sysroot
1998     target_exec
1999     target_os
2000     target_path
2001     target_samples
2002     tempprefix
2003     toolchain
2004     valgrind
2005     yasmexe
2006 "
2007
2008 CMDLINE_APPEND="
2009     extra_cflags
2010     extra_cxxflags
2011     host_cppflags
2012 "
2013
2014 # code dependency declarations
2015
2016 # architecture extensions
2017
2018 armv5te_deps="arm"
2019 armv6_deps="arm"
2020 armv6t2_deps="arm"
2021 armv8_deps="aarch64"
2022 neon_deps_any="aarch64 arm"
2023 intrinsics_neon_deps="neon"
2024 vfp_deps_any="aarch64 arm"
2025 vfpv3_deps="vfp"
2026 setend_deps="arm"
2027
2028 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2029
2030 mipsfpu_deps="mips"
2031 mipsdspr1_deps="mips"
2032 mipsdspr2_deps="mips"
2033 mips32r2_deps="mips"
2034 mips32r5_deps="mips"
2035 mips64r6_deps="mips"
2036 msa_deps="mips"
2037 loongson3_deps="mips"
2038
2039 altivec_deps="ppc"
2040 dcbzl_deps="ppc"
2041 ldbrx_deps="ppc"
2042 ppc4xx_deps="ppc"
2043 vsx_deps="ppc"
2044
2045 cpunop_deps="i686"
2046 x86_64_select="i686"
2047 x86_64_suggest="fast_cmov"
2048
2049 amd3dnow_deps="mmx"
2050 amd3dnowext_deps="amd3dnow"
2051 i686_deps="x86"
2052 mmx_deps="x86"
2053 mmxext_deps="mmx"
2054 sse_deps="mmxext"
2055 sse2_deps="sse"
2056 sse3_deps="sse2"
2057 ssse3_deps="sse3"
2058 sse4_deps="ssse3"
2059 sse42_deps="sse4"
2060 avx_deps="sse42"
2061 xop_deps="avx"
2062 fma3_deps="avx"
2063 fma4_deps="avx"
2064 avx2_deps="avx"
2065
2066 mmx_external_deps="yasm"
2067 mmx_inline_deps="inline_asm"
2068 mmx_suggest="mmx_external mmx_inline"
2069
2070 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2071     eval dep=\$${ext}_deps
2072     eval ${ext}_external_deps='"${dep}_external"'
2073     eval ${ext}_inline_deps='"${dep}_inline"'
2074     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2075 done
2076
2077 aligned_stack_if_any="aarch64 ppc x86"
2078 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2079 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2080 fast_unaligned_if_any="aarch64 ppc x86"
2081 simd_align_16_if_any="altivec neon sse"
2082
2083 # system capabilities
2084 symver_if_any="symver_asm_label symver_gnu_asm"
2085 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
2086
2087 # threading support
2088 atomics_gcc_if_any="sync_val_compare_and_swap atomic_compare_exchange"
2089 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2090 atomics_win32_if="MemoryBarrier"
2091 atomics_native_if_any="$ATOMICS_LIST"
2092 w32threads_deps="atomics_native"
2093 threads_if_any="$THREADS_LIST"
2094
2095 # subsystems
2096 dct_select="rdft"
2097 error_resilience_select="me_cmp"
2098 faandct_deps="faan fdctdsp"
2099 faanidct_deps="faan idctdsp"
2100 frame_thread_encoder_deps="encoders threads"
2101 intrax8_select="error_resilience"
2102 mdct_select="fft"
2103 rdft_select="fft"
2104 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2105 mpeg_er_select="error_resilience"
2106 mpegaudio_select="mpegaudiodsp"
2107 mpegaudiodsp_select="dct"
2108 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp videodsp"
2109 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2110 qsvdec_select="qsv"
2111 qsvenc_select="qsv"
2112
2113 # decoders / encoders
2114 aac_decoder_select="imdct15 mdct sinewin"
2115 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
2116 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2117 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2118 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2119 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2120 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2121 aic_decoder_select="golomb idctdsp"
2122 alac_encoder_select="lpc"
2123 als_decoder_select="bswapdsp"
2124 amrnb_decoder_select="lsp"
2125 amrwb_decoder_select="lsp"
2126 amv_decoder_select="sp5x_decoder exif"
2127 amv_encoder_select="aandcttables jpegtables mpegvideoenc"
2128 ape_decoder_select="bswapdsp llauddsp"
2129 apng_decoder_select="zlib"
2130 apng_encoder_select="huffyuvencdsp zlib"
2131 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2132 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2133 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2134 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2135 atrac1_decoder_select="mdct sinewin"
2136 atrac3_decoder_select="mdct"
2137 atrac3p_decoder_select="mdct sinewin"
2138 avrn_decoder_select="exif jpegtables"
2139 bink_decoder_select="blockdsp hpeldsp"
2140 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2141 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2142 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2143 cllc_decoder_select="bswapdsp"
2144 comfortnoise_encoder_select="lpc"
2145 cook_decoder_select="audiodsp mdct sinewin"
2146 cscd_decoder_select="lzo"
2147 cscd_decoder_suggest="zlib"
2148 dca_decoder_select="fmtconvert mdct"
2149 dirac_decoder_select="dwt golomb videodsp mpegvideoenc"
2150 dnxhd_decoder_select="blockdsp idctdsp"
2151 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2152 dvvideo_decoder_select="dvprofile idctdsp"
2153 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2154 dxa_decoder_select="zlib"
2155 eac3_decoder_select="ac3_decoder"
2156 eac3_encoder_select="ac3_encoder"
2157 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2158 eatgq_decoder_select="aandcttables"
2159 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
2160 exr_decoder_select="zlib"
2161 ffv1_decoder_select="golomb rangecoder"
2162 ffv1_encoder_select="rangecoder"
2163 ffvhuff_decoder_select="huffyuv_decoder"
2164 ffvhuff_encoder_select="huffyuv_encoder"
2165 fic_decoder_select="golomb"
2166 flac_decoder_select="golomb"
2167 flac_encoder_select="bswapdsp golomb lpc"
2168 flashsv_decoder_select="zlib"
2169 flashsv_encoder_select="zlib"
2170 flashsv2_encoder_select="zlib"
2171 flashsv2_decoder_select="zlib"
2172 flv_decoder_select="h263_decoder"
2173 flv_encoder_select="h263_encoder"
2174 fourxm_decoder_select="blockdsp bswapdsp"
2175 fraps_decoder_select="bswapdsp huffman"
2176 g2m_decoder_select="blockdsp idctdsp jpegtables zlib"
2177 g729_decoder_select="audiodsp"
2178 h261_decoder_select="mpeg_er mpegvideo"
2179 h261_encoder_select="aandcttables mpegvideoenc"
2180 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2181 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2182 h263i_decoder_select="h263_decoder"
2183 h263p_decoder_select="h263_decoder"
2184 h263p_encoder_select="h263_encoder"
2185 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
2186 h264_decoder_suggest="error_resilience"
2187 h264_qsv_decoder_deps="libmfx"
2188 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2189 h264_qsv_encoder_deps="libmfx"
2190 h264_qsv_encoder_select="qsvenc"
2191 hevc_decoder_select="bswapdsp cabac golomb videodsp"
2192 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2193 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp"
2194 iac_decoder_select="imc_decoder"
2195 imc_decoder_select="bswapdsp fft mdct sinewin"
2196 indeo3_decoder_select="hpeldsp"
2197 interplay_video_decoder_select="hpeldsp"
2198 jpegls_decoder_select="golomb mjpeg_decoder"
2199 jpegls_encoder_select="golomb"
2200 jv_decoder_select="blockdsp"
2201 lagarith_decoder_select="huffyuvdsp"
2202 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2203 loco_decoder_select="golomb"
2204 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2205 metasound_decoder_select="lsp mdct sinewin"
2206 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2207 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2208 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2209 mjpegb_decoder_select="mjpeg_decoder"
2210 mlp_decoder_select="mlp_parser"
2211 motionpixels_decoder_select="bswapdsp"
2212 mp1_decoder_select="mpegaudio"
2213 mp1float_decoder_select="mpegaudio"
2214 mp2_decoder_select="mpegaudio"
2215 mp2float_decoder_select="mpegaudio"
2216 mp3_decoder_select="mpegaudio"
2217 mp3adu_decoder_select="mpegaudio"
2218 mp3adufloat_decoder_select="mpegaudio"
2219 mp3float_decoder_select="mpegaudio"
2220 mp3on4_decoder_select="mpegaudio"
2221 mp3on4float_decoder_select="mpegaudio"
2222 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2223 mpc8_decoder_select="mpegaudiodsp"
2224 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2225 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2226 mpegvideo_decoder_select="error_resilience mpeg_er mpegvideo"
2227 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2228 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2229 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2230 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2231 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2232 mpeg4_encoder_select="h263_encoder"
2233 msmpeg4v1_decoder_select="h263_decoder"
2234 msmpeg4v2_decoder_select="h263_decoder"
2235 msmpeg4v2_encoder_select="h263_encoder"
2236 msmpeg4v3_decoder_select="h263_decoder"
2237 msmpeg4v3_encoder_select="h263_encoder"
2238 mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
2239 mxpeg_decoder_select="mjpeg_decoder"
2240 nellymoser_decoder_select="mdct sinewin"
2241 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2242 nuv_decoder_select="idctdsp lzo"
2243 on2avc_decoder_select="mdct"
2244 opus_decoder_deps="swresample"
2245 opus_decoder_select="imdct15"
2246 png_decoder_select="zlib"
2247 png_encoder_select="huffyuvencdsp zlib"
2248 prores_decoder_select="blockdsp idctdsp"
2249 prores_encoder_select="fdctdsp"
2250 qcelp_decoder_select="lsp"
2251 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2252 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2253 ra_144_decoder_select="audiodsp"
2254 ralf_decoder_select="golomb"
2255 rawvideo_decoder_select="bswapdsp"
2256 rtjpeg_decoder_select="me_cmp"
2257 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2258 rv10_encoder_select="h263_encoder"
2259 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2260 rv20_encoder_select="h263_encoder"
2261 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2262 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2263 shorten_decoder_select="golomb"
2264 sipr_decoder_select="lsp"
2265 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2266 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2267 sonic_decoder_select="golomb rangecoder"
2268 sonic_encoder_select="golomb rangecoder"
2269 sonic_ls_encoder_select="golomb rangecoder"
2270 sp5x_decoder_select="mjpeg_decoder"
2271 svq1_decoder_select="hpeldsp"
2272 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2273 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
2274 svq3_decoder_suggest="zlib"
2275 tak_decoder_select="audiodsp"
2276 tdsc_decoder_select="zlib mjpeg_decoder"
2277 theora_decoder_select="vp3_decoder"
2278 thp_decoder_select="mjpeg_decoder"
2279 tiff_decoder_suggest="zlib lzma"
2280 tiff_encoder_suggest="zlib"
2281 truehd_decoder_select="mlp_parser"
2282 truemotion2_decoder_select="bswapdsp"
2283 truespeech_decoder_select="bswapdsp"
2284 tscc_decoder_select="zlib"
2285 twinvq_decoder_select="mdct lsp sinewin"
2286 utvideo_decoder_select="bswapdsp"
2287 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2288 vble_decoder_select="huffyuvdsp"
2289 vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
2290 vc1image_decoder_select="vc1_decoder"
2291 vorbis_decoder_select="mdct"
2292 vorbis_encoder_select="mdct"
2293 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2294 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
2295 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
2296 vp6a_decoder_select="vp6_decoder"
2297 vp6f_decoder_select="vp6_decoder"
2298 vp7_decoder_select="h264pred videodsp"
2299 vp8_decoder_select="h264pred videodsp"
2300 vp9_decoder_select="videodsp vp9_parser"
2301 webp_decoder_select="vp8_decoder"
2302 wmalossless_decoder_select="llauddsp"
2303 wmapro_decoder_select="mdct sinewin wma_freqs"
2304 wmav1_decoder_select="mdct sinewin wma_freqs"
2305 wmav1_encoder_select="mdct sinewin wma_freqs"
2306 wmav2_decoder_select="mdct sinewin wma_freqs"
2307 wmav2_encoder_select="mdct sinewin wma_freqs"
2308 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2309 wmv1_decoder_select="h263_decoder"
2310 wmv1_encoder_select="h263_encoder"
2311 wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
2312 wmv2_encoder_select="h263_encoder"
2313 wmv3_decoder_select="vc1_decoder"
2314 wmv3image_decoder_select="wmv3_decoder"
2315 zerocodec_decoder_select="zlib"
2316 zlib_decoder_select="zlib"
2317 zlib_encoder_select="zlib"
2318 zmbv_decoder_select="zlib"
2319 zmbv_encoder_select="zlib"
2320
2321 # hardware accelerators
2322 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2323 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
2324 dxva2_deps="dxva2api_h"
2325 vaapi_deps="va_va_h"
2326 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2327 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2328 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2329 xvmc_deps="X11_extensions_XvMClib_h"
2330
2331 h263_vaapi_hwaccel_deps="vaapi"
2332 h263_vaapi_hwaccel_select="h263_decoder"
2333 h263_vdpau_hwaccel_deps="vdpau"
2334 h263_vdpau_hwaccel_select="h263_decoder"
2335 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2336 h264_d3d11va_hwaccel_deps="d3d11va"
2337 h264_d3d11va_hwaccel_select="h264_decoder"
2338 h264_dxva2_hwaccel_deps="dxva2"
2339 h264_dxva2_hwaccel_select="h264_decoder"
2340 h264_mmal_decoder_deps="mmal"
2341 h264_mmal_hwaccel_deps="mmal"
2342 h264_mmal_decoder_select="h264_decoder"
2343 h264_mmal_encoder_deps="mmal"
2344 h264_qsv_hwaccel_deps="libmfx"
2345 h264_vaapi_hwaccel_deps="vaapi"
2346 h264_vaapi_hwaccel_select="h264_decoder"
2347 h264_vda_decoder_deps="vda"
2348 h264_vda_decoder_select="h264_decoder"
2349 h264_vda_hwaccel_deps="vda"
2350 h264_vda_hwaccel_select="h264_decoder"
2351 h264_vda_old_hwaccel_deps="vda"
2352 h264_vda_old_hwaccel_select="h264_decoder"
2353 h264_vdpau_decoder_deps="vdpau"
2354 h264_vdpau_decoder_select="h264_decoder"
2355 h264_vdpau_hwaccel_deps="vdpau"
2356 h264_vdpau_hwaccel_select="h264_decoder"
2357 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2358 hevc_d3d11va_hwaccel_select="hevc_decoder"
2359 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2360 hevc_dxva2_hwaccel_select="hevc_decoder"
2361 mpeg_vdpau_decoder_deps="vdpau"
2362 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2363 mpeg_xvmc_hwaccel_deps="xvmc"
2364 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2365 mpeg1_vdpau_decoder_deps="vdpau"
2366 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2367 mpeg1_vdpau_hwaccel_deps="vdpau"
2368 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2369 mpeg1_xvmc_hwaccel_deps="xvmc"
2370 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2371 mpeg2_crystalhd_decoder_select="crystalhd"
2372 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2373 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2374 mpeg2_dxva2_hwaccel_deps="dxva2"
2375 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2376 mpeg2_vaapi_hwaccel_deps="vaapi"
2377 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2378 mpeg2_vdpau_hwaccel_deps="vdpau"
2379 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2380 mpeg2_xvmc_hwaccel_deps="xvmc"
2381 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2382 mpeg4_crystalhd_decoder_select="crystalhd"
2383 mpeg4_vaapi_hwaccel_deps="vaapi"
2384 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2385 mpeg4_vdpau_decoder_deps="vdpau"
2386 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2387 mpeg4_vdpau_hwaccel_deps="vdpau"
2388 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2389 msmpeg4_crystalhd_decoder_select="crystalhd"
2390 vc1_crystalhd_decoder_select="crystalhd"
2391 vc1_d3d11va_hwaccel_deps="d3d11va"
2392 vc1_d3d11va_hwaccel_select="vc1_decoder"
2393 vc1_dxva2_hwaccel_deps="dxva2"
2394 vc1_dxva2_hwaccel_select="vc1_decoder"
2395 vc1_vaapi_hwaccel_deps="vaapi"
2396 vc1_vaapi_hwaccel_select="vc1_decoder"
2397 vc1_vdpau_decoder_deps="vdpau"
2398 vc1_vdpau_decoder_select="vc1_decoder"
2399 vc1_vdpau_hwaccel_deps="vdpau"
2400 vc1_vdpau_hwaccel_select="vc1_decoder"
2401 wmv3_crystalhd_decoder_select="crystalhd"
2402 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2403 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2404 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2405 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2406 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2407
2408 # parsers
2409 h264_parser_select="h264_decoder"
2410 hevc_parser_select="hevc_decoder"
2411 mpegvideo_parser_select="mpegvideo"
2412 mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
2413 vc1_parser_select="mpegvideo startcode vc1_decoder"
2414
2415 # bitstream_filters
2416 mjpeg2jpeg_bsf_select="jpegtables"
2417
2418 # external libraries
2419 libaacplus_encoder_deps="libaacplus"
2420 libcelt_decoder_deps="libcelt"
2421 libdcadec_decoder_deps="libdcadec"
2422 libfaac_encoder_deps="libfaac"
2423 libfaac_encoder_select="audio_frame_queue"
2424 libfdk_aac_decoder_deps="libfdk_aac"
2425 libfdk_aac_encoder_deps="libfdk_aac"
2426 libfdk_aac_encoder_select="audio_frame_queue"
2427 libgme_demuxer_deps="libgme"
2428 libgsm_decoder_deps="libgsm"
2429 libgsm_encoder_deps="libgsm"
2430 libgsm_ms_decoder_deps="libgsm"
2431 libgsm_ms_encoder_deps="libgsm"
2432 libilbc_decoder_deps="libilbc"
2433 libilbc_encoder_deps="libilbc"
2434 libmodplug_demuxer_deps="libmodplug"
2435 libmp3lame_encoder_deps="libmp3lame"
2436 libmp3lame_encoder_select="audio_frame_queue"
2437 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2438 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2439 libopencore_amrnb_encoder_select="audio_frame_queue"
2440 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2441 libopenh264_encoder_deps="libopenh264"
2442 libopenjpeg_decoder_deps="libopenjpeg"
2443 libopenjpeg_encoder_deps="libopenjpeg"
2444 libopus_decoder_deps="libopus"
2445 libopus_encoder_deps="libopus"
2446 libopus_encoder_select="audio_frame_queue"
2447 libquvi_demuxer_deps="libquvi"
2448 libschroedinger_decoder_deps="libschroedinger"
2449 libschroedinger_encoder_deps="libschroedinger"
2450 libshine_encoder_deps="libshine"
2451 libshine_encoder_select="audio_frame_queue"
2452 libspeex_decoder_deps="libspeex"
2453 libspeex_encoder_deps="libspeex"
2454 libspeex_encoder_select="audio_frame_queue"
2455 libstagefright_h264_decoder_deps="libstagefright_h264"
2456 libtheora_encoder_deps="libtheora"
2457 libtwolame_encoder_deps="libtwolame"
2458 libvo_aacenc_encoder_deps="libvo_aacenc"
2459 libvo_aacenc_encoder_select="audio_frame_queue"
2460 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2461 libvorbis_decoder_deps="libvorbis"
2462 libvorbis_encoder_deps="libvorbis"
2463 libvorbis_encoder_select="audio_frame_queue"
2464 libvpx_vp8_decoder_deps="libvpx"
2465 libvpx_vp8_encoder_deps="libvpx"
2466 libvpx_vp9_decoder_deps="libvpx"
2467 libvpx_vp9_encoder_deps="libvpx"
2468 libwavpack_encoder_deps="libwavpack"
2469 libwebp_encoder_deps="libwebp"
2470 libwebp_anim_encoder_deps="libwebp"
2471 libx264_encoder_deps="libx264"
2472 libx264rgb_encoder_deps="libx264"
2473 libx264rgb_encoder_select="libx264_encoder"
2474 libx265_encoder_deps="libx265"
2475 libxavs_encoder_deps="libxavs"
2476 libxvid_encoder_deps="libxvid"
2477 libutvideo_decoder_deps="libutvideo"
2478 libutvideo_encoder_deps="libutvideo"
2479 libzvbi_teletext_decoder_deps="libzvbi"
2480 nvenc_encoder_deps="nvenc"
2481 nvenc_h265_encoder_deps="nvenc"
2482
2483 # demuxers / muxers
2484 ac3_demuxer_select="ac3_parser"
2485 asf_demuxer_select="riffdec"
2486 asf_muxer_select="riffenc"
2487 asf_stream_muxer_select="asf_muxer"
2488 avi_demuxer_select="riffdec exif"
2489 avi_muxer_select="riffenc"
2490 avisynth_demuxer_deps="avisynth"
2491 avisynth_demuxer_select="riffdec"
2492 caf_demuxer_select="riffdec"
2493 dash_muxer_select="mp4_muxer"
2494 dirac_demuxer_select="dirac_parser"
2495 dts_demuxer_select="dca_parser"
2496 dtshd_demuxer_select="dca_parser"
2497 dv_demuxer_select="dvprofile"
2498 dv_muxer_select="dvprofile"
2499 dxa_demuxer_select="riffdec"
2500 eac3_demuxer_select="ac3_parser"
2501 f4v_muxer_select="mov_muxer"
2502 flac_demuxer_select="flac_parser"
2503 hds_muxer_select="flv_muxer"
2504 hls_muxer_select="mpegts_muxer"
2505 image2_alias_pix_demuxer_select="image2_demuxer"
2506 image2_brender_pix_demuxer_select="image2_demuxer"
2507 ipod_muxer_select="mov_muxer"
2508 ismv_muxer_select="mov_muxer"
2509 libnut_demuxer_deps="libnut"
2510 libnut_muxer_deps="libnut"
2511 matroska_audio_muxer_select="matroska_muxer"
2512 matroska_demuxer_select="riffdec"
2513 matroska_demuxer_suggest="bzlib lzo zlib"
2514 matroska_muxer_select="riffenc"
2515 mmf_muxer_select="riffenc"
2516 mov_demuxer_select="riffdec"
2517 mov_demuxer_suggest="zlib"
2518 mov_muxer_select="riffenc rtpenc_chain"
2519 mp3_demuxer_select="mpegaudio_parser"
2520 mp4_muxer_select="mov_muxer"
2521 mpegts_muxer_select="adts_muxer latm_muxer"
2522 mpegtsraw_demuxer_select="mpegts_demuxer"
2523 mxf_d10_muxer_select="mxf_muxer"
2524 mxf_opatom_muxer_select="mxf_muxer"
2525 nut_muxer_select="riffenc"
2526 nuv_demuxer_select="riffdec"
2527 oga_muxer_select="ogg_muxer"
2528 ogg_demuxer_select="golomb"
2529 opus_muxer_select="ogg_muxer"
2530 psp_muxer_select="mov_muxer"
2531 rtp_demuxer_select="sdp_demuxer"
2532 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
2533 rtsp_demuxer_select="http_protocol rtpdec"
2534 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2535 sap_demuxer_select="sdp_demuxer"
2536 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2537 sdp_demuxer_select="rtpdec"
2538 smoothstreaming_muxer_select="ismv_muxer"
2539 spdif_muxer_select="aac_parser"
2540 spx_muxer_select="ogg_muxer"
2541 tak_demuxer_select="tak_parser"
2542 tg2_muxer_select="mov_muxer"
2543 tgp_muxer_select="mov_muxer"
2544 vobsub_demuxer_select="mpegps_demuxer"
2545 w64_demuxer_select="wav_demuxer"
2546 w64_muxer_select="wav_muxer"
2547 wav_demuxer_select="riffdec"
2548 wav_muxer_select="riffenc"
2549 webm_muxer_select="riffenc"
2550 wtv_demuxer_select="riffdec"
2551 wtv_muxer_select="riffenc"
2552 xmv_demuxer_select="riffdec"
2553 xwma_demuxer_select="riffdec"
2554
2555 # indevs / outdevs
2556 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2557 alsa_outdev_deps="alsa_asoundlib_h"
2558 avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
2559 avfoundation_indev_select="avfoundation"
2560 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2561 caca_outdev_deps="libcaca"
2562 decklink_outdev_deps="decklink pthreads"
2563 decklink_outdev_extralibs="-lstdc++"
2564 decklink_indev_deps="decklink pthreads"
2565 decklink_indev_extralibs="-lstdc++"
2566 dshow_indev_deps="IBaseFilter"
2567 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
2568 dv1394_indev_deps="dv1394"
2569 dv1394_indev_select="dv_demuxer"
2570 fbdev_indev_deps="linux_fb_h"
2571 fbdev_outdev_deps="linux_fb_h"
2572 gdigrab_indev_deps="CreateDIBSection"
2573 gdigrab_indev_extralibs="-lgdi32"
2574 gdigrab_indev_select="bmp_decoder"
2575 iec61883_indev_deps="libiec61883"
2576 jack_indev_deps="jack_jack_h sem_timedwait"
2577 lavfi_indev_deps="avfilter"
2578 libcdio_indev_deps="libcdio"
2579 libdc1394_indev_deps="libdc1394"
2580 libv4l2_indev_deps="libv4l2"
2581 openal_indev_deps="openal"
2582 opengl_outdev_deps="opengl"
2583 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2584 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2585 pulse_indev_deps="libpulse"
2586 pulse_outdev_deps="libpulse"
2587 qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
2588 qtkit_indev_select="qtkit"
2589 sdl_outdev_deps="sdl"
2590 sndio_indev_deps="sndio_h"
2591 sndio_outdev_deps="sndio_h"
2592 v4l_indev_deps="linux_videodev_h"
2593 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2594 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2595 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2596 vfwcap_indev_extralibs="-lavicap32"
2597 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2598 xv_outdev_extralibs="-lXv -lX11 -lXext"
2599 x11grab_indev_deps="x11grab"
2600 x11grab_xcb_indev_deps="libxcb"
2601
2602 # protocols
2603 bluray_protocol_deps="libbluray"
2604 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2605 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2606 ffrtmpcrypt_protocol_select="tcp_protocol"
2607 ffrtmphttp_protocol_deps="!librtmp_protocol"
2608 ffrtmphttp_protocol_select="http_protocol"
2609 ftp_protocol_select="tcp_protocol"
2610 gopher_protocol_select="network"
2611 http_protocol_select="tcp_protocol"
2612 httpproxy_protocol_select="tcp_protocol"
2613 https_protocol_select="tls_protocol"
2614 icecast_protocol_select="http_protocol"
2615 librtmp_protocol_deps="librtmp"
2616 librtmpe_protocol_deps="librtmp"
2617 librtmps_protocol_deps="librtmp"
2618 librtmpt_protocol_deps="librtmp"
2619 librtmpte_protocol_deps="librtmp"
2620 libsmbclient_protocol_deps="libsmbclient gplv3"
2621 libssh_protocol_deps="libssh"
2622 mmsh_protocol_select="http_protocol"
2623 mmst_protocol_select="network"
2624 rtmp_protocol_deps="!librtmp_protocol"
2625 rtmp_protocol_select="tcp_protocol"
2626 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2627 rtmps_protocol_deps="!librtmp_protocol"
2628 rtmps_protocol_select="tls_protocol"
2629 rtmpt_protocol_select="ffrtmphttp_protocol"
2630 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2631 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2632 rtp_protocol_select="udp_protocol"
2633 sctp_protocol_deps="struct_sctp_event_subscribe"
2634 sctp_protocol_select="network"
2635 srtp_protocol_select="rtp_protocol"
2636 tcp_protocol_select="network"
2637 tls_gnutls_protocol_deps="gnutls"
2638 tls_openssl_protocol_deps="openssl !tls_gnutls_protocol"
2639 tls_protocol_deps_any="tls_gnutls_protocol tls_openssl_protocol"
2640 tls_protocol_select="tcp_protocol"
2641 udp_protocol_select="network"
2642 udplite_protocol_select="network"
2643 unix_protocol_deps="sys_un_h"
2644 unix_protocol_select="network"
2645
2646 # filters
2647 amovie_filter_deps="avcodec avformat"
2648 aresample_filter_deps="swresample"
2649 ass_filter_deps="libass"
2650 asyncts_filter_deps="avresample"
2651 atempo_filter_deps="avcodec"
2652 atempo_filter_select="rdft"
2653 azmq_filter_deps="libzmq"
2654 blackframe_filter_deps="gpl"
2655 boxblur_filter_deps="gpl"
2656 bs2b_filter_deps="libbs2b"
2657 colormatrix_filter_deps="gpl"
2658 cover_rect_filter_deps="avcodec avformat gpl"
2659 cropdetect_filter_deps="gpl"
2660 delogo_filter_deps="gpl"
2661 deshake_filter_select="pixelutils"
2662 drawtext_filter_deps="libfreetype"
2663 ebur128_filter_deps="gpl"
2664 eq_filter_deps="gpl"
2665 fftfilt_filter_deps="avcodec"
2666 fftfilt_filter_select="rdft"
2667 flite_filter_deps="libflite"
2668 find_rect_filter_deps="avcodec avformat gpl"
2669 frei0r_filter_deps="frei0r dlopen"
2670 frei0r_src_filter_deps="frei0r dlopen"
2671 fspp_filter_deps="gpl"
2672 geq_filter_deps="gpl"
2673 histeq_filter_deps="gpl"
2674 hqdn3d_filter_deps="gpl"
2675 interlace_filter_deps="gpl"
2676 kerndeint_filter_deps="gpl"
2677 ladspa_filter_deps="ladspa dlopen"
2678 mcdeint_filter_deps="avcodec gpl"
2679 movie_filter_deps="avcodec avformat"
2680 mpdecimate_filter_deps="gpl"
2681 mpdecimate_filter_select="pixelutils"
2682 mptestsrc_filter_deps="gpl"
2683 negate_filter_deps="lut_filter"
2684 perspective_filter_deps="gpl"
2685 pp7_filter_deps="gpl"
2686 ocv_filter_deps="libopencv"
2687 owdenoise_filter_deps="gpl"
2688 pan_filter_deps="swresample"
2689 phase_filter_deps="gpl"
2690 pp_filter_deps="gpl postproc"
2691 pullup_filter_deps="gpl"
2692 removelogo_filter_deps="avcodec avformat swscale"
2693 repeatfields_filter_deps="gpl"
2694 resample_filter_deps="avresample"
2695 sab_filter_deps="gpl swscale"
2696 scale_filter_deps="swscale"
2697 select_filter_select="pixelutils"
2698 smartblur_filter_deps="gpl swscale"
2699 showspectrum_filter_deps="avcodec"
2700 showspectrum_filter_select="rdft"
2701 spp_filter_deps="gpl avcodec"
2702 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
2703 stereo3d_filter_deps="gpl"
2704 subtitles_filter_deps="avformat avcodec libass"
2705 super2xsai_filter_deps="gpl"
2706 tinterlace_filter_deps="gpl"
2707 vidstabdetect_filter_deps="libvidstab"
2708 vidstabtransform_filter_deps="libvidstab"
2709 pixfmts_super2xsai_test_deps="super2xsai_filter"
2710 tinterlace_merge_test_deps="tinterlace_filter"
2711 tinterlace_pad_test_deps="tinterlace_filter"
2712 uspp_filter_deps="gpl avcodec"
2713 zmq_filter_deps="libzmq"
2714 zoompan_filter_deps="swscale"
2715
2716 # examples
2717 avio_reading="avformat avcodec avutil"
2718 avio_list_dir="avformat avutil"
2719 avcodec_example_deps="avcodec avutil"
2720 decoding_encoding_example_deps="avcodec avformat avutil"
2721 demuxing_decoding_example_deps="avcodec avformat avutil"
2722 extract_mvs_example_deps="avcodec avformat avutil"
2723 filter_audio_example_deps="avfilter avutil"
2724 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2725 filtering_video_example_deps="avfilter avcodec avformat avutil"
2726 metadata_example_deps="avformat avutil"
2727 muxing_example_deps="avcodec avformat avutil swscale"
2728 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2729 remuxing_example_deps="avcodec avformat avutil"
2730 resampling_audio_example_deps="avutil swresample"
2731 scaling_video_example_deps="avutil swscale"
2732 transcode_aac_example_deps="avcodec avformat swresample"
2733 transcoding_example_deps="avfilter avcodec avformat avutil"
2734
2735 # libraries, in linking order
2736 avcodec_deps="avutil"
2737 avdevice_deps="avformat avcodec avutil"
2738 avfilter_deps="avutil"
2739 avformat_deps="avcodec avutil"
2740 avresample_deps="avutil"
2741 postproc_deps="avutil gpl"
2742 swresample_deps="avutil"
2743 swscale_deps="avutil"
2744
2745 # programs
2746 ffmpeg_deps="avcodec avfilter avformat swresample"
2747 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2748                null_filter
2749                setpts_filter trim_filter"
2750 ffplay_deps="avcodec avformat swscale swresample sdl"
2751 ffplay_libs='$sdl_libs'
2752 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
2753 ffprobe_deps="avcodec avformat"
2754 ffserver_deps="avformat fork sarestart"
2755 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2756
2757 # documentation
2758 podpages_deps="perl"
2759 manpages_deps="perl pod2man"
2760 htmlpages_deps="perl"
2761 htmlpages_deps_any="makeinfo_html texi2html"
2762 txtpages_deps="perl makeinfo"
2763 doc_deps_any="manpages htmlpages podpages txtpages"
2764
2765 # default parameters
2766
2767 logfile="config.log"
2768
2769 # installation paths
2770 prefix_default="/usr/local"
2771 bindir_default='${prefix}/bin'
2772 datadir_default='${prefix}/share/ffmpeg'
2773 docdir_default='${prefix}/share/doc/ffmpeg'
2774 incdir_default='${prefix}/include'
2775 libdir_default='${prefix}/lib'
2776 mandir_default='${prefix}/share/man'
2777
2778 # toolchain
2779 ar_default="ar"
2780 cc_default="gcc"
2781 cxx_default="g++"
2782 host_cc_default="gcc"
2783 cp_f="cp -f"
2784 doxygen_default="doxygen"
2785 install="install"
2786 ln_s="ln -s -f"
2787 nm_default="nm -g"
2788 objformat="elf"
2789 pkg_config_default=pkg-config
2790 if ranlib 2>&1 | grep -q "\-D "; then
2791     ranlib_default="ranlib -D"
2792 else
2793     ranlib_default="ranlib"
2794 fi
2795 strip_default="strip"
2796 yasmexe_default="yasm"
2797 windres_default="windres"
2798
2799 # OS
2800 target_os_default=$(tolower $(uname -s))
2801 host_os=$target_os_default
2802
2803 # machine
2804 if test "$target_os_default" = aix; then
2805     arch_default=$(uname -p)
2806     strip_default="strip -X32_64"
2807 else
2808     arch_default=$(uname -m)
2809 fi
2810 cpu="generic"
2811 intrinsics="none"
2812
2813 # configurable options
2814 enable $PROGRAM_LIST
2815 enable $DOCUMENT_LIST
2816 enable $EXAMPLE_LIST
2817 enable $(filter_out avresample $LIBRARY_LIST)
2818 enable stripping
2819
2820 enable asm
2821 enable debug
2822 enable doc
2823 enable faan faandct faanidct
2824 enable optimizations
2825 enable runtime_cpudetect
2826 enable safe_bitstream_reader
2827 enable static
2828 enable swscale_alpha
2829 enable valgrind_backtrace
2830
2831 sws_max_filter_size_default=256
2832 set_default sws_max_filter_size
2833
2834 # Enable hwaccels by default.
2835 enable d3d11va dxva2 vaapi vda vdpau xvmc
2836 enable xlib
2837
2838 # build settings
2839 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2840 LIBPREF="lib"
2841 LIBSUF=".a"
2842 FULLNAME='$(NAME)$(BUILDSUF)'
2843 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2844 SLIBPREF="lib"
2845 SLIBSUF=".so"
2846 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2847 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2848 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2849 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2850 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2851 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2852
2853 asflags_filter=echo
2854 cflags_filter=echo
2855 ldflags_filter=echo
2856
2857 AS_C='-c'
2858 AS_O='-o $@'
2859 CC_C='-c'
2860 CC_E='-E -o $@'
2861 CC_O='-o $@'
2862 CXX_C='-c'
2863 CXX_O='-o $@'
2864 LD_O='-o $@'
2865 LD_LIB='-l%'
2866 LD_PATH='-L'
2867 HOSTCC_C='-c'
2868 HOSTCC_E='-E -o $@'
2869 HOSTCC_O='-o $@'
2870 HOSTLD_O='-o $@'
2871
2872 host_libs='-lm'
2873 host_cflags_filter=echo
2874 host_ldflags_filter=echo
2875
2876 target_path='$(CURDIR)'
2877
2878 # since the object filename is not given with the -MM flag, the compiler
2879 # is only able to print the basename, and we must add the path ourselves
2880 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2881 DEPFLAGS='-MM'
2882
2883 # find source path
2884 if test -f configure; then
2885     source_path=.
2886 else
2887     source_path=$(cd $(dirname "$0"); pwd)
2888     echo "$source_path" | grep -q '[[:blank:]]' &&
2889         die "Out of tree builds are impossible with whitespace in source path."
2890     test -e "$source_path/config.h" &&
2891         die "Out of tree builds are impossible with config.h in source dir."
2892 fi
2893
2894 for v in "$@"; do
2895     r=${v#*=}
2896     l=${v%"$r"}
2897     r=$(sh_quote "$r")
2898     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2899 done
2900
2901 find_things(){
2902     thing=$1
2903     pattern=$2
2904     file=$source_path/$3
2905     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2906 }
2907
2908 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2909 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2910 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2911 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2912 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2913 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2914 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2915 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2916 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2917 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2918 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2919
2920 ALL_COMPONENTS="
2921     $BSF_LIST
2922     $DECODER_LIST
2923     $DEMUXER_LIST
2924     $ENCODER_LIST
2925     $FILTER_LIST
2926     $HWACCEL_LIST
2927     $INDEV_LIST
2928     $MUXER_LIST
2929     $OUTDEV_LIST
2930     $PARSER_LIST
2931     $PROTOCOL_LIST
2932 "
2933
2934 for n in $COMPONENT_LIST; do
2935     v=$(toupper ${n%s})_LIST
2936     eval enable \$$v
2937     eval ${n}_if_any="\$$v"
2938 done
2939
2940 enable $ARCH_EXT_LIST
2941
2942 die_unknown(){
2943     echo "Unknown option \"$1\"."
2944     echo "See $0 --help for available options."
2945     exit 1
2946 }
2947
2948 print_3_columns() {
2949     cat | tr ' ' '\n' | sort | pr -r -3 -t
2950 }
2951
2952 show_list() {
2953     suffix=_$1
2954     shift
2955     echo $* | sed s/$suffix//g | print_3_columns
2956     exit 0
2957 }
2958
2959 rand_list(){
2960     IFS=', '
2961     set -- $*
2962     unset IFS
2963     for thing; do
2964         comp=${thing%:*}
2965         prob=${thing#$comp}
2966         prob=${prob#:}
2967         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2968         echo "prob ${prob:-0.5}"
2969         printf '%s\n' $comp
2970     done
2971 }
2972
2973 do_random(){
2974     action=$1
2975     shift
2976     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2977     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2978 }
2979
2980 for opt do
2981     optval="${opt#*=}"
2982     case "$opt" in
2983         --extra-ldflags=*)
2984             add_ldflags $optval
2985         ;;
2986         --extra-ldexeflags=*)
2987             add_ldexeflags $optval
2988         ;;
2989         --extra-libs=*)
2990             add_extralibs $optval
2991         ;;
2992         --disable-devices)
2993             disable $INDEV_LIST $OUTDEV_LIST
2994         ;;
2995         --enable-debug=*)
2996             debuglevel="$optval"
2997         ;;
2998         --disable-programs)
2999             disable $PROGRAM_LIST
3000         ;;
3001         --disable-everything)
3002             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3003         ;;
3004         --disable-all)
3005             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3006             disable $LIBRARY_LIST $PROGRAM_LIST doc
3007         ;;
3008         --enable-random|--disable-random)
3009             action=${opt%%-random}
3010             do_random ${action#--} $COMPONENT_LIST
3011         ;;
3012         --enable-random=*|--disable-random=*)
3013             action=${opt%%-random=*}
3014             do_random ${action#--} $optval
3015         ;;
3016         --enable-*=*|--disable-*=*)
3017             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3018             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3019             eval list=\$$(toupper $thing)_LIST
3020             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3021             list=$(filter "$name" $list)
3022             [ "$list" = "" ] && warn "Option $opt did not match anything"
3023             $action $list
3024         ;;
3025         --enable-?*|--disable-?*)
3026             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3027             if is_in $option $COMPONENT_LIST; then
3028                 test $action = disable && action=unset
3029                 eval $action \$$(toupper ${option%s})_LIST
3030             elif is_in $option $CMDLINE_SELECT; then
3031                 $action $option
3032             else
3033                 die_unknown $opt
3034             fi
3035         ;;
3036         --list-*)
3037             NAME="${opt#--list-}"
3038             is_in $NAME $COMPONENT_LIST || die_unknown $opt
3039             NAME=${NAME%s}
3040             eval show_list $NAME \$$(toupper $NAME)_LIST
3041         ;;
3042         --help|-h) show_help
3043         ;;
3044         --fatal-warnings) enable fatal_warnings
3045         ;;
3046         *)
3047             optname="${opt%%=*}"
3048             optname="${optname#--}"
3049             optname=$(echo "$optname" | sed 's/-/_/g')
3050             if is_in $optname $CMDLINE_SET; then
3051                 eval $optname='$optval'
3052             elif is_in $optname $CMDLINE_APPEND; then
3053                 append $optname "$optval"
3054             else
3055                 die_unknown $opt
3056             fi
3057         ;;
3058     esac
3059 done
3060
3061 disabled logging && logfile=/dev/null
3062
3063 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3064 set >> $logfile
3065
3066 test -n "$valgrind" && toolchain="valgrind-memcheck"
3067
3068 case "$toolchain" in
3069     clang-asan)
3070         cc_default="clang"
3071         add_cflags  -fsanitize=address
3072         add_ldflags -fsanitize=address
3073     ;;
3074     clang-tsan)
3075         cc_default="clang"
3076         add_cflags  -fsanitize=thread -pie
3077         add_ldflags -fsanitize=thread -pie
3078     ;;
3079     clang-usan)
3080         cc_default="clang"
3081         add_cflags  -fsanitize=undefined
3082         add_ldflags -fsanitize=undefined
3083     ;;
3084     gcc-asan)
3085         cc_default="gcc"
3086         add_cflags  -fsanitize=address
3087         add_ldflags -fsanitize=address
3088     ;;
3089     gcc-tsan)
3090         cc_default="gcc"
3091         add_cflags  -fsanitize=thread -pie -fPIC
3092         add_ldflags -fsanitize=thread -pie -fPIC
3093     ;;
3094     gcc-usan)
3095         cc_default="gcc"
3096         add_cflags  -fsanitize=undefined
3097         add_ldflags -fsanitize=undefined
3098     ;;
3099     valgrind-massif)
3100         target_exec_default=${valgrind:-"valgrind"}
3101         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"
3102     ;;
3103     valgrind-memcheck)
3104         target_exec_default=${valgrind:-"valgrind"}
3105         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"
3106     ;;
3107     msvc)
3108         # Check whether the current MSVC version needs the C99 converter.
3109         # From MSVC 2013 (compiler major version 18) onwards, it does actually
3110         # support enough of C99 to build ffmpeg. Default to the new
3111         # behaviour if the regexp was unable to match anything, since this
3112         # successfully parses the version number of existing supported
3113         # versions that require the converter (MSVC 2010 and 2012).
3114         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3115         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3116             cc_default="cl"
3117         else
3118             cc_default="c99wrap cl"
3119         fi
3120         ld_default="link"
3121         nm_default="dumpbin -symbols"
3122         ar_default="lib"
3123         target_os_default="win32"
3124         # Use a relative path for TMPDIR. This makes sure all the
3125         # ffconf temp files are written with a relative path, avoiding
3126         # issues with msys/win32 path conversion for MSVC parameters
3127         # such as -Fo<file> or -out:<file>.
3128         TMPDIR=.
3129     ;;
3130     icl)
3131         cc_default="icl"
3132         ld_default="xilink"
3133         nm_default="dumpbin -symbols"
3134         ar_default="xilib"
3135         target_os_default="win32"
3136         TMPDIR=.
3137     ;;
3138     gcov)
3139         add_cflags  -fprofile-arcs -ftest-coverage
3140         add_ldflags -fprofile-arcs -ftest-coverage
3141     ;;
3142     hardened)
3143         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3144         add_cflags   -fno-strict-overflow -fstack-protector-all
3145         add_ldflags  -Wl,-z,relro -Wl,-z,now
3146     ;;
3147     ?*)
3148         die "Unknown toolchain $toolchain"
3149     ;;
3150 esac
3151
3152 test -n "$cross_prefix" && enable cross_compile
3153
3154 if enabled cross_compile; then
3155     test -n "$arch" && test -n "$target_os" ||
3156         die "Must specify target arch and OS when cross-compiling"
3157 fi
3158
3159 ar_default="${cross_prefix}${ar_default}"
3160 cc_default="${cross_prefix}${cc_default}"
3161 cxx_default="${cross_prefix}${cxx_default}"
3162 nm_default="${cross_prefix}${nm_default}"
3163 pkg_config_default="${cross_prefix}${pkg_config_default}"
3164 ranlib_default="${cross_prefix}${ranlib_default}"
3165 strip_default="${cross_prefix}${strip_default}"
3166 windres_default="${cross_prefix}${windres_default}"
3167
3168 sysinclude_default="${sysroot}/usr/include"
3169
3170 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3171     target_exec target_os yasmexe
3172 enabled cross_compile || host_cc_default=$cc
3173 set_default host_cc
3174
3175 pkg_config_fail_message=""
3176 if ! $pkg_config --version >/dev/null 2>&1; then
3177     warn "$pkg_config not found, library detection may fail."
3178     pkg_config=false
3179 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3180     pkg_config_fail_message="
3181 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3182 fi
3183
3184 if test $doxygen != $doxygen_default && \
3185   ! $doxygen --version >/dev/null 2>&1; then
3186     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3187 fi
3188
3189 exesuf() {
3190     case $1 in
3191         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3192     esac
3193 }
3194
3195 EXESUF=$(exesuf $target_os)
3196 HOSTEXESUF=$(exesuf $host_os)
3197
3198 # set temporary file name
3199 : ${TMPDIR:=$TEMPDIR}
3200 : ${TMPDIR:=$TMP}
3201 : ${TMPDIR:=/tmp}
3202
3203 if [ -n "$tempprefix" ] ; then
3204     mktemp(){
3205         echo $tempprefix.${HOSTNAME}.${UID}
3206     }
3207 elif ! check_cmd mktemp -u XXXXXX; then
3208     # simple replacement for missing mktemp
3209     # NOT SAFE FOR GENERAL USE
3210     mktemp(){
3211         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3212     }
3213 fi
3214
3215 tmpfile(){
3216     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3217         (set -C; exec > $tmp) 2>/dev/null ||
3218         die "Unable to create temporary file in $TMPDIR."
3219     append TMPFILES $tmp
3220     eval $1=$tmp
3221 }
3222
3223 trap 'rm -f -- $TMPFILES' EXIT
3224
3225 tmpfile TMPASM .asm
3226 tmpfile TMPC   .c
3227 tmpfile TMPCPP .cpp
3228 tmpfile TMPE   $EXESUF
3229 tmpfile TMPH   .h
3230 tmpfile TMPM   .m
3231 tmpfile TMPO   .o
3232 tmpfile TMPS   .S
3233 tmpfile TMPSH  .sh
3234 tmpfile TMPV   .ver
3235
3236 unset -f mktemp
3237
3238 chmod +x $TMPE
3239
3240 # make sure we can execute files in $TMPDIR
3241 cat > $TMPSH 2>> $logfile <<EOF
3242 #! /bin/sh
3243 EOF
3244 chmod +x $TMPSH >> $logfile 2>&1
3245 if ! $TMPSH >> $logfile 2>&1; then
3246     cat <<EOF
3247 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3248 variable to another directory and make sure that it is not mounted noexec.
3249 EOF
3250     die "Sanity test failed."
3251 fi
3252
3253 armasm_flags(){
3254     for flag; do
3255         case $flag in
3256             # Filter out MSVC cl.exe options from cflags that shouldn't
3257             # be passed to gas-preprocessor
3258             -M[TD]*)                                            ;;
3259             *)                  echo $flag                      ;;
3260         esac
3261    done
3262 }
3263
3264 ccc_flags(){
3265     for flag; do
3266         case $flag in
3267             -std=c99)           echo -c99                       ;;
3268             -mcpu=*)            echo -arch ${flag#*=}           ;;
3269             -mieee)             echo -ieee                      ;;
3270             -O*|-fast)          echo $flag                      ;;
3271             -fno-math-errno)    echo -assume nomath_errno       ;;
3272             -g)                 echo -g3                        ;;
3273             -Wall)              echo -msg_enable level2         ;;
3274             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3275             -Wl,*)              echo $flag                      ;;
3276             -f*|-W*)                                            ;;
3277             *)                  echo $flag                      ;;
3278         esac
3279    done
3280 }
3281
3282 cparser_flags(){
3283     for flag; do
3284         case $flag in
3285             -Wno-switch)             echo -Wno-switch-enum ;;
3286             -Wno-format-zero-length) ;;
3287             -Wdisabled-optimization) ;;
3288             -Wno-pointer-sign)       echo -Wno-other ;;
3289             *)                       echo $flag ;;
3290         esac
3291     done
3292 }
3293
3294 msvc_common_flags(){
3295     for flag; do
3296         case $flag in
3297             # In addition to specifying certain flags under the compiler
3298             # specific filters, they must be specified here as well or else the
3299             # generic catch all at the bottom will print the original flag.
3300             -Wall)                ;;
3301             -std=c99)             ;;
3302             # Common flags
3303             -fomit-frame-pointer) ;;
3304             -g)                   echo -Z7 ;;
3305             -fno-math-errno)      ;;
3306             -fno-common)          ;;
3307             -fno-signed-zeros)    ;;
3308             -fPIC)                ;;
3309             -mthumb)              ;;
3310             -march=*)             ;;
3311             -lz)                  echo zlib.lib ;;
3312             -lavifil32)           echo vfw32.lib ;;
3313             -lavicap32)           echo vfw32.lib user32.lib ;;
3314             -l*)                  echo ${flag#-l}.lib ;;
3315             -L*)                  echo -libpath:${flag#-L} ;;
3316             *)                    echo $flag ;;
3317         esac
3318     done
3319 }
3320
3321 msvc_flags(){
3322     msvc_common_flags "$@"
3323     for flag; do
3324         case $flag in
3325             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3326                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3327                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3328                                        -wd4307 \
3329                                        -wd4273 -wd4554 -wd4701 ;;
3330         esac
3331     done
3332 }
3333
3334 icl_flags(){
3335     msvc_common_flags "$@"
3336     for flag; do
3337         case $flag in
3338             # Despite what Intel's documentation says -Wall, which is supported
3339             # on Windows, does enable remarks so disable them here.
3340             -Wall)                echo $flag -Qdiag-disable:remark ;;
3341             -std=c99)             echo -Qstd=c99 ;;
3342             -flto)                echo -ipo ;;
3343         esac
3344     done
3345 }
3346
3347 icc_flags(){
3348     for flag; do
3349         case $flag in
3350             -flto)                echo -ipo ;;
3351             *)                    echo $flag ;;
3352         esac
3353     done
3354 }
3355
3356 pgi_flags(){
3357     for flag; do
3358         case $flag in
3359             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3360             -fomit-frame-pointer) echo -Mnoframe ;;
3361             -g)                   echo -gopt ;;
3362             *)                    echo $flag ;;
3363         esac
3364     done
3365 }
3366
3367 suncc_flags(){
3368     for flag; do
3369         case $flag in
3370             -march=*|-mcpu=*)
3371                 case "${flag#*=}" in
3372                     native)                   echo -xtarget=native       ;;
3373                     v9|niagara)               echo -xarch=sparc          ;;
3374                     ultrasparc)               echo -xarch=sparcvis       ;;
3375                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3376                     i586|pentium)             echo -xchip=pentium        ;;
3377                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3378                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3379                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3380                     pentium4*)          echo -xtarget=pentium4           ;;
3381                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3382                     *-sse3)             echo -xarch=sse3                 ;;
3383                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3384                     bonnell)                   echo -xarch=ssse3         ;;
3385                     corei7|nehalem)            echo -xtarget=nehalem     ;;
3386                     westmere)                  echo -xtarget=westmere    ;;
3387                     silvermont)                echo -xarch=sse4_2        ;;
3388                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
3389                     core-avx*|ivybridge|haswell|broadwell)
3390                                                echo -xarch=avx           ;;
3391                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3392                     btver1)                    echo -xarch=amdsse4a      ;;
3393                     btver2|bdver*)             echo -xarch=avx           ;;
3394                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3395                     k8|opteron|athlon64|athlon-fx)
3396                                                echo -xarch=sse2a         ;;
3397                     athlon*)                   echo -xarch=pentium_proa  ;;
3398                 esac
3399                 ;;
3400             -std=c99)             echo -xc99              ;;
3401             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3402             -fPIC)                echo -KPIC -xcode=pic32 ;;
3403             -W*,*)                echo $flag              ;;
3404             -f*-*|-W*|-mimpure-text)                      ;;
3405             -shared)              echo -G                 ;;
3406             *)                    echo $flag              ;;
3407         esac
3408     done
3409 }
3410
3411 tms470_flags(){
3412     for flag; do
3413         case $flag in
3414             -march=*|-mcpu=*)
3415                 case "${flag#*=}" in
3416                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3417                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3418                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3419                     armv6*|arm11*)          echo -mv=6   ;;
3420                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3421                                             echo -mv=5e  ;;
3422                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3423                 esac
3424                 ;;
3425             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3426             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3427             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3428             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3429             -msoft-float)   echo --float_support=vfplib       ;;
3430             -O[0-3]|-mf=*)  echo $flag                        ;;
3431             -g)             echo -g -mn                       ;;
3432             -pds=*)         echo $flag                        ;;
3433             -D*|-I*)        echo $flag                        ;;
3434             --gcc|--abi=*)  echo $flag                        ;;
3435             -me)            echo $flag                        ;;
3436         esac
3437     done
3438 }
3439
3440 probe_cc(){
3441     pfx=$1
3442     _cc=$2
3443
3444     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3445     unset _ld_o _ldflags _ld_lib _ld_path
3446     unset _depflags _DEPCMD _DEPFLAGS
3447     _flags_filter=echo
3448
3449     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3450         true # no-op to avoid reading stdin in following checks
3451     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3452         _type=llvm_gcc
3453         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3454         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3455         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3456         _cflags_speed='-O3'
3457         _cflags_size='-Os'
3458     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3459         _type=gcc
3460         gcc_version=$($_cc --version | head -n1)
3461         gcc_basever=$($_cc -dumpversion)
3462         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3463         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3464         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3465         if ! $_cc -dumpversion | grep -q '^2\.'; then
3466             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3467         fi
3468         _cflags_speed='-O3'
3469         _cflags_size='-Os'
3470     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3471         _type=icc
3472         _ident=$($_cc --version | head -n1)
3473         _depflags='-MMD'
3474         _cflags_speed='-O3'
3475         _cflags_size='-Os'
3476         _cflags_noopt='-O1'
3477         _flags_filter=icc_flags
3478     elif $_cc -v 2>&1 | grep -q xlc; then
3479         _type=xlc
3480         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3481         _cflags_speed='-O5'
3482         _cflags_size='-O5 -qcompact'
3483     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3484         _type=ccc
3485         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3486         _DEPFLAGS='-M'
3487         _cflags_speed='-fast'
3488         _cflags_size='-O1'
3489         _flags_filter=ccc_flags
3490     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3491         test -d "$sysroot" || die "No valid sysroot specified."
3492         _type=armcc
3493         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3494         armcc_conf="$PWD/armcc.conf"
3495         $_cc --arm_linux_configure                 \
3496              --arm_linux_config_file="$armcc_conf" \
3497              --configure_sysroot="$sysroot"        \
3498              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3499              die "Error creating armcc configuration file."
3500         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3501         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3502         as_default="${cross_prefix}gcc"
3503         _depflags='-MMD'
3504         _cflags_speed='-O3'
3505         _cflags_size='-Os'
3506     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3507         _type=tms470
3508         _ident=$($_cc -version | head -n1 | tr -s ' ')
3509         _flags='--gcc --abi=eabi -me'
3510         _cc_e='-ppl -fe=$@'
3511         _cc_o='-fe=$@'
3512         _depflags='-ppa -ppd=$(@:.o=.d)'
3513         _cflags_speed='-O3 -mf=5'
3514         _cflags_size='-O3 -mf=2'
3515         _flags_filter=tms470_flags
3516     elif $_cc -v 2>&1 | grep -q clang; then
3517         _type=clang
3518         _ident=$($_cc --version | head -n1)
3519         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3520         _cflags_speed='-O3'
3521         _cflags_size='-Os'
3522     elif $_cc -V 2>&1 | grep -q Sun; then
3523         _type=suncc
3524         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3525         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3526         _DEPFLAGS='-xM1 -xc99'
3527         _ldflags='-std=c99'
3528         _cflags_speed='-O5'
3529         _cflags_size='-O5 -xspace'
3530         _flags_filter=suncc_flags
3531     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3532         _type=pathscale
3533         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3534         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3535         _cflags_speed='-O2'
3536         _cflags_size='-Os'
3537         _flags_filter='filter_out -Wdisabled-optimization'
3538     elif $_cc -v 2>&1 | grep -q Open64; then
3539         _type=open64
3540         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3541         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3542         _cflags_speed='-O2'
3543         _cflags_size='-Os'
3544         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3545     elif $_cc -V 2>&1 | grep -q Portland; then
3546         _type=pgi
3547         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3548         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3549         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3550         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3551         _cflags_noopt="-O"
3552         _flags_filter=pgi_flags
3553     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3554         _type=armasm
3555         _ident=$($_cc | head -n1)
3556         # 4509: "This form of conditional instruction is deprecated"
3557         _flags="-nologo -ignore 4509"
3558         _flags_filter=armasm_flags
3559     elif $_cc 2>&1 | grep -q Intel; then
3560         _type=icl
3561         _ident=$($_cc 2>&1 | head -n1)
3562         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3563         # Not only is O3 broken on 13.x+ but it is slower on all previous
3564         # versions (tested) as well.
3565         _cflags_speed="-O2"
3566         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3567         if $_cc 2>&1 | grep -q Linker; then
3568             _ld_o='-out:$@'
3569         else
3570             _ld_o='-Fe$@'
3571         fi
3572         _cc_o='-Fo$@'
3573         _cc_e='-P'
3574         _flags_filter=icl_flags
3575         _ld_lib='lib%.a'
3576         _ld_path='-libpath:'
3577         # -Qdiag-error to make icl error when seeing certain unknown arguments
3578         _flags='-nologo -Qdiag-error:4044,10157'
3579         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
3580         # with MSVC which enables it by default.
3581         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
3582         if [ $pfx = hostcc ]; then
3583             append _cflags -Dsnprintf=_snprintf
3584         fi
3585         disable stripping
3586     elif $_cc 2>&1 | grep -q Microsoft; then
3587         _type=msvc
3588         _ident=$($_cc 2>&1 | head -n1)
3589         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3590         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3591         _cflags_speed="-O2"
3592         _cflags_size="-O1"
3593         if $_cc 2>&1 | grep -q Linker; then
3594             _ld_o='-out:$@'
3595         else
3596             _ld_o='-Fe$@'
3597         fi
3598         _cc_o='-Fo$@'
3599         _cc_e='-P -Fi$@'
3600         _flags_filter=msvc_flags
3601         _ld_lib='lib%.a'
3602         _ld_path='-libpath:'
3603         _flags='-nologo'
3604         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3605         if [ $pfx = hostcc ]; then
3606             if [ -z "$cl_major_ver" ] || [ $cl_major_ver -le 18 ]; then
3607                 append _cflags -Dsnprintf=_snprintf
3608             fi
3609         fi
3610         disable stripping
3611     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3612         _type=cparser
3613         _ident=$($_cc --version | head -n1)
3614         _depflags='-MMD'
3615         _cflags_speed='-O4'
3616         _cflags_size='-O2'
3617         _flags_filter=cparser_flags
3618     fi
3619
3620     eval ${pfx}_type=\$_type
3621     eval ${pfx}_ident=\$_ident
3622 }
3623
3624 set_ccvars(){
3625     eval ${1}_C=\${_cc_c-\${${1}_C}}
3626     eval ${1}_E=\${_cc_e-\${${1}_E}}
3627     eval ${1}_O=\${_cc_o-\${${1}_O}}
3628
3629     if [ -n "$_depflags" ]; then
3630         eval ${1}_DEPFLAGS=\$_depflags
3631     else
3632         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3633         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3634         eval DEP${1}FLAGS=\$_flags
3635     fi
3636 }
3637
3638 probe_cc cc "$cc"
3639 cflags_filter=$_flags_filter
3640 cflags_speed=$_cflags_speed
3641 cflags_size=$_cflags_size
3642 cflags_noopt=$_cflags_noopt
3643 add_cflags $_flags $_cflags
3644 cc_ldflags=$_ldflags
3645 set_ccvars CC
3646
3647 probe_cc hostcc "$host_cc"
3648 host_cflags_filter=$_flags_filter
3649 add_host_cflags  $_flags $_cflags
3650 set_ccvars HOSTCC
3651
3652 test -n "$cc_type" && enable $cc_type ||
3653     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3654
3655 : ${as_default:=$cc}
3656 : ${dep_cc_default:=$cc}
3657 : ${ld_default:=$cc}
3658 : ${host_ld_default:=$host_cc}
3659 set_default ar as dep_cc ld host_ld windres
3660
3661 probe_cc as "$as"
3662 asflags_filter=$_flags_filter
3663 add_asflags $_flags $_cflags
3664 set_ccvars AS
3665
3666 probe_cc ld "$ld"
3667 ldflags_filter=$_flags_filter
3668 add_ldflags $_flags $_ldflags
3669 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3670 LD_O=${_ld_o-$LD_O}
3671 LD_LIB=${_ld_lib-$LD_LIB}
3672 LD_PATH=${_ld_path-$LD_PATH}
3673
3674 probe_cc hostld "$host_ld"
3675 host_ldflags_filter=$_flags_filter
3676 add_host_ldflags $_flags $_ldflags
3677 HOSTLD_O=${_ld_o-$HOSTLD_O}
3678
3679 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3680     probe_cc depcc "$dep_cc"
3681     CCDEP=${_DEPCMD:-$DEPCMD}
3682     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3683     DEPCCFLAGS=$_flags
3684 fi
3685
3686 if $ar 2>&1 | grep -q Microsoft; then
3687     arflags="-nologo"
3688     ar_o='-out:$@'
3689 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3690     arflags="rq"
3691     ar_o='$@'
3692 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3693     arflags='-Xany -r -c'
3694     ar_o='$@'
3695 elif $ar 2>&1 | grep -q "\[D\] "; then
3696     arflags="rcD"
3697     ar_o='$@'
3698 else
3699     arflags="rc"
3700     ar_o='$@'
3701 fi
3702
3703 add_cflags $extra_cflags
3704 add_cxxflags $extra_cxxflags
3705 add_asflags $extra_cflags
3706
3707 if test -n "$sysroot"; then
3708     case "$cc_type" in
3709         gcc|llvm_gcc|clang)
3710             add_cppflags --sysroot="$sysroot"
3711             add_ldflags --sysroot="$sysroot"
3712 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3713             add_cppflags -isysroot "$sysroot"
3714             add_ldflags -isysroot "$sysroot"
3715         ;;
3716         tms470)
3717             add_cppflags -I"$sysinclude"
3718             add_ldflags  --sysroot="$sysroot"
3719         ;;
3720     esac
3721 fi
3722
3723 if test "$cpu" = host; then
3724     enabled cross_compile &&
3725         die "--cpu=host makes no sense when cross-compiling."
3726
3727     case "$cc_type" in
3728         gcc|llvm_gcc)
3729             check_native(){
3730                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3731                 sed -n "/cc1.*$1=/{
3732                             s/.*$1=\\([^ ]*\\).*/\\1/
3733                             p
3734                             q
3735                         }" $TMPE
3736             }
3737             cpu=$(check_native -march || check_native -mcpu)
3738         ;;
3739     esac
3740
3741     test "${cpu:-host}" = host &&
3742         die "--cpu=host not supported with compiler $cc"
3743 fi
3744
3745 # Deal with common $arch aliases
3746 case "$arch" in
3747     aarch64|arm64)
3748         arch="aarch64"
3749     ;;
3750     arm*|iPad*|iPhone*)
3751         arch="arm"
3752     ;;
3753     mips*|IP*)
3754         arch="mips"
3755     ;;
3756     parisc*|hppa*)
3757         arch="parisc"
3758     ;;
3759     "Power Macintosh"|ppc*|powerpc*)
3760         arch="ppc"
3761     ;;
3762     s390|s390x)
3763         arch="s390"
3764     ;;
3765     sh4|sh)
3766         arch="sh4"
3767     ;;
3768     sun4u|sparc*)
3769         arch="sparc"
3770     ;;
3771     tilegx|tile-gx)
3772         arch="tilegx"
3773     ;;
3774     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3775         arch="x86"
3776     ;;
3777 esac
3778
3779 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3780 enable $arch
3781
3782 # Add processor-specific flags
3783 if enabled aarch64; then
3784
3785     case $cpu in
3786         armv*)
3787             cpuflags="-march=$cpu"
3788         ;;
3789         *)
3790             cpuflags="-mcpu=$cpu"
3791         ;;
3792     esac
3793
3794 elif enabled alpha; then
3795
3796     cpuflags="-mcpu=$cpu"
3797
3798 elif enabled arm; then
3799
3800     check_arm_arch() {
3801         check_cpp_condition stddef.h \
3802             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3803             $cpuflags
3804     }
3805
3806     probe_arm_arch() {
3807         if   check_arm_arch 4;        then echo armv4;
3808         elif check_arm_arch 4T;       then echo armv4t;
3809         elif check_arm_arch 5;        then echo armv5;
3810         elif check_arm_arch 5E;       then echo armv5e;
3811         elif check_arm_arch 5T;       then echo armv5t;
3812         elif check_arm_arch 5TE;      then echo armv5te;
3813         elif check_arm_arch 5TEJ;     then echo armv5te;
3814         elif check_arm_arch 6;        then echo armv6;
3815         elif check_arm_arch 6J;       then echo armv6j;
3816         elif check_arm_arch 6K;       then echo armv6k;
3817         elif check_arm_arch 6Z;       then echo armv6z;
3818         elif check_arm_arch 6ZK;      then echo armv6zk;
3819         elif check_arm_arch 6T2;      then echo armv6t2;
3820         elif check_arm_arch 7;        then echo armv7;
3821         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3822         elif check_arm_arch 7S;       then echo armv7-a;
3823         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3824         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3825         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3826         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3827         fi
3828     }
3829
3830     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3831
3832     case $cpu in
3833         armv*)
3834             cpuflags="-march=$cpu"
3835             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3836         ;;
3837         *)
3838             cpuflags="-mcpu=$cpu"
3839             case $cpu in
3840                 cortex-a*)                               subarch=armv7a  ;;
3841                 cortex-r*)                               subarch=armv7r  ;;
3842                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3843                 arm11*)                                  subarch=armv6   ;;
3844                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3845                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3846                 *)                             subarch=$(probe_arm_arch) ;;
3847             esac
3848         ;;
3849     esac
3850
3851     case "$subarch" in
3852         armv5t*)    enable fast_clz                ;;
3853         armv[6-8]*)
3854             enable fast_clz
3855             disabled fast_unaligned || enable fast_unaligned
3856             ;;
3857     esac
3858
3859 elif enabled avr32; then
3860
3861     case $cpu in
3862         ap7[02]0[0-2])
3863             subarch="avr32_ap"
3864             cpuflags="-mpart=$cpu"
3865         ;;
3866         ap)
3867             subarch="avr32_ap"
3868             cpuflags="-march=$cpu"
3869         ;;
3870         uc3[ab]*)
3871             subarch="avr32_uc"
3872             cpuflags="-mcpu=$cpu"
3873         ;;
3874         uc)
3875             subarch="avr32_uc"
3876             cpuflags="-march=$cpu"
3877         ;;
3878     esac
3879
3880 elif enabled bfin; then
3881
3882     cpuflags="-mcpu=$cpu"
3883
3884 elif enabled mips; then
3885
3886     cpuflags="-march=$cpu"
3887
3888     case $cpu in
3889         24kc)
3890             disable mips32r5
3891             disable mips64r6
3892             disable mipsfpu
3893             disable mipsdspr1
3894             disable mipsdspr2
3895             disable msa
3896         ;;
3897         24kf*)
3898             disable mips32r5
3899             disable mips64r6
3900             disable mipsdspr1
3901             disable mipsdspr2
3902             disable msa
3903         ;;
3904         24kec|34kc|1004kc)
3905             disable mips32r5
3906             disable mips64r6
3907             disable mipsfpu
3908             disable mipsdspr2
3909             disable msa
3910         ;;
3911         24kef*|34kf*|1004kf*)
3912             disable mips32r5
3913             disable mips64r6
3914             disable mipsdspr2
3915             disable msa
3916         ;;
3917         74kc)
3918             disable mips32r5
3919             disable mips64r6
3920             disable mipsfpu
3921             disable msa
3922         ;;
3923         74kf)
3924             disable mips32r5
3925             disable mips64r6
3926             disable msa
3927         ;;
3928         p5600)
3929             disable mips64r6
3930             disable mipsdspr1
3931             disable mipsdspr2
3932
3933             check_cflags "-mtune=p5600"
3934         ;;
3935         i6400)
3936             disable mips32r5
3937             disable mipsdspr1
3938             disable mipsdspr2
3939             disable mipsfpu
3940
3941             check_cflags "-mtune=i6400 -mabi=64"
3942             check_ldflags "-mabi=64"
3943         ;;
3944         loongson3*)
3945             disable mipsfpu
3946             disable mips32r2
3947             disable mips32r5
3948             disable mips64r6
3949             disable mipsdspr1
3950             disable mipsdspr2
3951             disable msa
3952             enable local_aligned_8 local_aligned_16
3953             enable simd_align_16
3954             enable fast_64bit
3955             enable fast_clz
3956             enable fast_cmov
3957             enable fast_unaligned
3958             disable aligned_stack
3959             cpuflags="-march=loongson3a -mhard-float"
3960         ;;
3961         generic)
3962             disable mips32r5
3963             disable mips64r6
3964             disable msa
3965         ;;
3966     esac
3967
3968 elif enabled ppc; then
3969
3970     disable ldbrx
3971     disable vsx
3972
3973     case $(tolower $cpu) in
3974         601|ppc601|powerpc601)
3975             cpuflags="-mcpu=601"
3976             disable altivec
3977         ;;
3978         603*|ppc603*|powerpc603*)
3979             cpuflags="-mcpu=603"
3980             disable altivec
3981         ;;
3982         604*|ppc604*|powerpc604*)
3983             cpuflags="-mcpu=604"
3984             disable altivec
3985         ;;
3986         g3|75*|ppc75*|powerpc75*)
3987             cpuflags="-mcpu=750"
3988             disable altivec
3989         ;;
3990         g4|745*|ppc745*|powerpc745*)
3991             cpuflags="-mcpu=7450"
3992         ;;
3993         74*|ppc74*|powerpc74*)
3994             cpuflags="-mcpu=7400"
3995         ;;
3996         g5|970|ppc970|powerpc970)
3997             cpuflags="-mcpu=970"
3998         ;;
3999         power[3-8]*)
4000             cpuflags="-mcpu=$cpu"
4001         ;;
4002         cell)
4003             cpuflags="-mcpu=cell"
4004             enable ldbrx
4005         ;;
4006         e500mc)
4007             cpuflags="-mcpu=e500mc"
4008             disable altivec
4009         ;;
4010         e500v2)
4011             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4012             disable altivec
4013             disable dcbzl
4014         ;;
4015         e500)
4016             cpuflags="-mcpu=8540 -mhard-float"
4017             disable altivec
4018             disable dcbzl
4019         ;;
4020     esac
4021
4022 elif enabled sparc; then
4023
4024     case $cpu in
4025         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4026             cpuflags="-mcpu=$cpu"
4027         ;;
4028         ultrasparc*|niagara[234])
4029             cpuflags="-mcpu=$cpu"
4030         ;;
4031     esac
4032
4033 elif enabled x86; then
4034
4035     case $cpu in
4036         i[345]86|pentium)
4037             cpuflags="-march=$cpu"
4038             disable i686
4039             disable mmx
4040         ;;
4041         # targets that do NOT support nopl and conditional mov (cmov)
4042         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4043             cpuflags="-march=$cpu"
4044             disable i686
4045         ;;
4046         # targets that do support nopl and conditional mov (cmov)
4047         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4048         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
4049             cpuflags="-march=$cpu"
4050             enable i686
4051             enable fast_cmov
4052         ;;
4053         # targets that do support conditional mov but on which it's slow
4054         pentium4|pentium4m|prescott|nocona)
4055             cpuflags="-march=$cpu"
4056             enable i686
4057             disable fast_cmov
4058         ;;
4059     esac
4060
4061 fi
4062
4063 if [ "$cpu" != generic ]; then
4064     add_cflags  $cpuflags
4065     add_asflags $cpuflags
4066 fi
4067
4068 # compiler sanity check
4069 check_exec <<EOF
4070 int main(void){ return 0; }
4071 EOF
4072 if test "$?" != 0; then
4073     echo "$cc is unable to create an executable file."
4074     if test -z "$cross_prefix" && ! enabled cross_compile ; then
4075         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4076         echo "Only do this if you know what cross compiling means."
4077     fi
4078     die "C compiler test failed."
4079 fi
4080
4081 add_cppflags -D_ISOC99_SOURCE
4082 add_cxxflags -D__STDC_CONSTANT_MACROS
4083 check_cflags -std=c99
4084 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4085 #include <stdlib.h>
4086 EOF
4087 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4088 #include <stdlib.h>
4089 EOF
4090
4091 add_host_cppflags -D_ISOC99_SOURCE
4092 check_host_cflags -std=c99
4093 check_host_cflags -Wall
4094 check_host_cflags -O3
4095
4096 check_64bit(){
4097     arch32=$1
4098     arch64=$2
4099     expr=$3
4100     check_code cc "" "int test[2*($expr) - 1]" &&
4101         subarch=$arch64 || subarch=$arch32
4102 }
4103
4104 case "$arch" in
4105     aarch64|alpha|ia64)
4106         spic=$shared
4107     ;;
4108     mips)
4109         check_64bit mips mips64 '_MIPS_SIM > 1'
4110         spic=$shared
4111     ;;
4112     parisc)
4113         check_64bit parisc parisc64 'sizeof(void *) > 4'
4114         spic=$shared
4115     ;;
4116     ppc)
4117         check_64bit ppc ppc64 'sizeof(void *) > 4'
4118         spic=$shared
4119     ;;
4120     s390)
4121         check_64bit s390 s390x 'sizeof(void *) > 4'
4122         spic=$shared
4123     ;;
4124     sparc)
4125         check_64bit sparc sparc64 'sizeof(void *) > 4'
4126         spic=$shared
4127     ;;
4128     x86)
4129         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4130         # Treat x32 as x64 for now. Note it also needs spic=$shared
4131         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4132             subarch=x86_64
4133         if test "$subarch" = "x86_64"; then
4134             spic=$shared
4135         fi
4136     ;;
4137     ppc)
4138         check_cc <<EOF && subarch="ppc64"
4139         int test[(int)sizeof(char*) - 7];
4140 EOF
4141     ;;
4142 esac
4143
4144 enable $subarch
4145 enabled spic && enable_weak pic
4146
4147 # OS specific
4148 case $target_os in
4149     aix)
4150         SHFLAGS=-shared
4151         add_cppflags '-I\$(SRC_PATH)/compat/aix'
4152         enabled shared && add_ldflags -Wl,-brtl
4153         ;;
4154     android)
4155         disable symver
4156         enable section_data_rel_ro
4157         SLIB_INSTALL_NAME='$(SLIBNAME)'
4158         SLIB_INSTALL_LINKS=
4159         # soname not set on purpose
4160         SHFLAGS=-shared
4161         ;;
4162     haiku)
4163         prefix_default="/boot/common"
4164         network_extralibs="-lnetwork"
4165         host_libs=
4166         ;;
4167     sunos)
4168         SHFLAGS='-shared -Wl,-h,$$(@F)'
4169         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4170         network_extralibs="-lsocket -lnsl"
4171         add_cppflags -D__EXTENSIONS__
4172         # When using suncc to build, the Solaris linker will mark
4173         # an executable with each instruction set encountered by
4174         # the Solaris assembler.  As our libraries contain their own
4175         # guards for processor-specific code, instead suppress
4176         # generation of the HWCAPS ELF section on Solaris x86 only.
4177         enabled_all suncc x86 &&
4178             echo "hwcap_1 = OVERRIDE;" > mapfile &&
4179             add_ldflags -Wl,-M,mapfile
4180         nm_default='nm -P -g'
4181         ;;
4182     netbsd)
4183         disable symver
4184         oss_indev_extralibs="-lossaudio"
4185         oss_outdev_extralibs="-lossaudio"
4186         enabled gcc || check_ldflags -Wl,-zmuldefs
4187         ;;
4188     openbsd|bitrig)
4189         disable symver
4190         SHFLAGS='-shared'
4191         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4192         SLIB_INSTALL_LINKS=
4193         oss_indev_extralibs="-lossaudio"
4194         oss_outdev_extralibs="-lossaudio"
4195         ;;
4196     dragonfly)
4197         disable symver
4198         ;;
4199     freebsd)
4200         ;;
4201     bsd/os)
4202         add_extralibs -lpoll -lgnugetopt
4203         strip="strip -d"
4204         ;;
4205     darwin)
4206         enabled ppc && add_asflags -force_cpusubtype_ALL
4207         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4208         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4209         strip="${strip} -x"
4210         add_ldflags -Wl,-dynamic,-search_paths_first
4211         SLIBSUF=".dylib"
4212         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4213         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4214         objformat="macho"
4215         enabled x86_64 && objformat="macho64"
4216         enabled_any pic shared x86_64 ||
4217             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4218         ;;
4219     mingw32*)
4220         if test $target_os = "mingw32ce"; then
4221             disable network
4222         else
4223             target_os=mingw32
4224         fi
4225         LIBTARGET=i386
4226         if enabled x86_64; then
4227             LIBTARGET="i386:x86-64"
4228         elif enabled arm; then
4229             LIBTARGET=arm-wince
4230         fi
4231         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4232         check_ldflags -Wl,--nxcompat
4233         check_ldflags -Wl,--dynamicbase
4234         enabled x86_32 && check_ldflags -Wl,--large-address-aware
4235         shlibdir_default="$bindir_default"
4236         SLIBPREF=""
4237         SLIBSUF=".dll"
4238         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4239         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4240         dlltool="${cross_prefix}dlltool"
4241         if check_cmd lib.exe -list; then
4242             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4243             if enabled x86_64; then
4244                 LIBTARGET=x64
4245             fi
4246         elif check_cmd $dlltool --version; then
4247             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)'
4248         fi
4249         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4250         SLIB_INSTALL_LINKS=
4251         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4252         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4253         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'
4254         objformat="win32"
4255         ranlib=:
4256         enable dos_paths
4257         ;;
4258     win32|win64)
4259         disable symver
4260         if enabled shared; then
4261             # Link to the import library instead of the normal static library
4262             # for shared libs.
4263             LD_LIB='%.lib'
4264             # Cannot build both shared and static libs with MSVC or icl.
4265             disable static
4266         fi
4267         enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4268         shlibdir_default="$bindir_default"
4269         SLIBPREF=""
4270         SLIBSUF=".dll"
4271         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4272         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4273         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4274         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4275         SLIB_INSTALL_LINKS=
4276         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4277         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4278         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4279         objformat="win32"
4280         ranlib=:
4281         enable dos_paths
4282         ;;
4283     cygwin*)
4284         target_os=cygwin
4285         shlibdir_default="$bindir_default"
4286         SLIBPREF="cyg"
4287         SLIBSUF=".dll"
4288         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4289         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4290         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4291         SLIB_INSTALL_LINKS=
4292         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4293         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4294         objformat="win32"
4295         enable dos_paths
4296         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4297         ;;
4298     *-dos|freedos|opendos)
4299         network_extralibs="-lsocket"
4300         objformat="coff"
4301         enable dos_paths
4302         add_cppflags -U__STRICT_ANSI__
4303         ;;
4304     linux)
4305         enable dv1394
4306         enable section_data_rel_ro
4307         ;;
4308     irix*)
4309         target_os=irix
4310         ranlib="echo ignoring ranlib"
4311         ;;
4312     os/2*)
4313         strip="lxlite -CS"
4314         ln_s="cp -f"
4315         objformat="aout"
4316         add_cppflags -D_GNU_SOURCE
4317         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4318         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4319         LIBSUF="_s.a"
4320         SLIBPREF=""
4321         SLIBSUF=".dll"
4322         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4323         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4324         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4325             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4326             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4327             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4328             emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4329         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4330             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4331         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4332         enable dos_paths
4333         enable_weak os2threads
4334         ;;
4335     gnu/kfreebsd)
4336         add_cppflags -D_BSD_SOURCE
4337         ;;
4338     gnu)
4339         ;;
4340     qnx)
4341         add_cppflags -D_QNX_SOURCE
4342         network_extralibs="-lsocket"
4343         ;;
4344     symbian)
4345         SLIBSUF=".dll"
4346         enable dos_paths
4347         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4348         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4349         add_ldflags -Wl,--target1-abs,--no-undefined \
4350                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4351                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4352         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4353                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4354                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4355         ;;
4356     osf1)
4357         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4358         ;;
4359     minix)
4360         ;;
4361     plan9)
4362         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
4363                      -D_REENTRANT_SOURCE        \
4364                      -D_RESEARCH_SOURCE         \
4365                      -DFD_SETSIZE=96            \
4366                      -DHAVE_SOCK_OPTS
4367         add_compat strtod.o strtod=avpriv_strtod
4368         network_extralibs='-lbsd'
4369         exeobjs=compat/plan9/main.o
4370         disable ffserver
4371         cp_f='cp'
4372         ;;
4373     none)
4374         ;;
4375     *)
4376         die "Unknown OS '$target_os'."
4377         ;;
4378 esac
4379
4380 # determine libc flavour
4381
4382 probe_libc(){
4383     pfx=$1
4384     pfx_no_=${pfx%_}
4385     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4386     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4387         eval ${pfx}libc_type=uclibc
4388         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4389     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4390         eval ${pfx}libc_type=glibc
4391         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4392     # MinGW headers can be installed on Cygwin, so check for newlib first.
4393     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4394         eval ${pfx}libc_type=newlib
4395         add_${pfx}cppflags -U__STRICT_ANSI__
4396     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4397     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4398         eval ${pfx}libc_type=mingw64
4399         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
4400             add_compat msvcrt/snprintf.o
4401             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
4402         fi
4403         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4404         eval test \$${pfx_no_}cc_type = "gcc" &&
4405             add_${pfx}cppflags -D__printf__=__gnu_printf__
4406     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4407          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4408         eval ${pfx}libc_type=mingw32
4409         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4410             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4411             die "ERROR: MinGW32 runtime version must be >= 3.15."
4412         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4413         eval test \$${pfx_no_}cc_type = "gcc" &&
4414             add_${pfx}cppflags -D__printf__=__gnu_printf__
4415     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4416         eval ${pfx}libc_type=msvcrt
4417         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4418         # 0x601 by default unless something else is set by the user.
4419         # This can easily lead to us detecting functions only present
4420         # in such new versions and producing binaries requiring windows 7.0.
4421         # Therefore explicitly set the default to XP unless the user has
4422         # set something else on the command line.
4423         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4424             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
4425     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4426         eval ${pfx}libc_type=klibc
4427     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4428         eval ${pfx}libc_type=bionic
4429     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4430         eval ${pfx}libc_type=solaris
4431         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4432     fi
4433     check_${pfx}cc <<EOF
4434 #include <time.h>
4435 void *v = localtime_r;
4436 EOF
4437 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
4438 #include <time.h>
4439 void *v = localtime_r;
4440 EOF
4441
4442 }
4443
4444 probe_libc
4445 test -n "$libc_type" && enable libc_$libc_type
4446 probe_libc host_
4447 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4448
4449 case $libc_type in
4450     bionic)
4451         add_compat strtod.o strtod=avpriv_strtod
4452         ;;
4453     msvcrt)
4454         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -le 18 ]; then
4455             add_compat strtod.o strtod=avpriv_strtod
4456             add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4457                                          _snprintf=avpriv_snprintf  \
4458                                          vsnprintf=avpriv_vsnprintf
4459         fi
4460         ;;
4461 esac
4462
4463 # hacks for compiler/libc/os combinations
4464
4465 if enabled_all tms470 libc_glibc; then
4466     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4467     add_cppflags -D__USER_LABEL_PREFIX__=
4468     add_cppflags -D__builtin_memset=memset
4469     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4470     add_cflags   -pds=48    # incompatible redefinition of macro
4471 fi
4472
4473 if enabled_all ccc libc_glibc; then
4474     add_ldflags -Wl,-z,now  # calls to libots crash without this
4475 fi
4476
4477 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4478     add_cppflags '-I\$(SRC_PATH)/compat/float'
4479
4480 esc(){
4481     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4482 }
4483
4484 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
4485
4486 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4487
4488 set_default libdir
4489 : ${shlibdir_default:="$libdir"}
4490
4491 set_default $PATHS_LIST
4492 set_default nm
4493
4494 # we need to build at least one lib type
4495 if ! enabled_any static shared; then
4496     cat <<EOF
4497 At least one library type must be built.
4498 Specify --enable-static to build the static libraries or --enable-shared to
4499 build the shared libraries as well. To only build the shared libraries specify
4500 --disable-static in addition to --enable-shared.
4501 EOF
4502     exit 1;
4503 fi
4504
4505 die_license_disabled() {
4506     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4507 }
4508
4509 die_license_disabled_gpl() {
4510     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4511 }
4512
4513 die_license_disabled gpl frei0r
4514 die_license_disabled gpl libcdio
4515 die_license_disabled gpl libsmbclient
4516 die_license_disabled gpl libutvideo
4517 die_license_disabled gpl libvidstab
4518 die_license_disabled gpl libx264
4519 die_license_disabled gpl libx265
4520 die_license_disabled gpl libxavs
4521 die_license_disabled gpl libxvid
4522 die_license_disabled gpl libzvbi
4523 die_license_disabled gpl x11grab
4524
4525 die_license_disabled nonfree libaacplus
4526 die_license_disabled nonfree libfaac
4527 die_license_disabled nonfree nvenc
4528 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4529 enabled gpl && die_license_disabled_gpl nonfree openssl
4530
4531 die_license_disabled version3 libopencore_amrnb
4532 die_license_disabled version3 libopencore_amrwb
4533 die_license_disabled version3 libsmbclient
4534 die_license_disabled version3 libvo_aacenc
4535 die_license_disabled version3 libvo_amrwbenc
4536
4537 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4538
4539 disabled optimizations || check_cflags -fomit-frame-pointer
4540
4541 enable_weak_pic() {
4542     disabled pic && return
4543     enable pic
4544     add_cppflags -DPIC
4545     case "$target_os" in
4546     mingw*|cygwin*)
4547         ;;
4548     *)
4549         add_cflags -fPIC
4550         ;;
4551     esac
4552     add_asflags  -fPIC
4553 }
4554
4555 enabled pic && enable_weak_pic
4556
4557 check_cc <<EOF || die "Symbol mangling check failed."
4558 int ff_extern;
4559 EOF
4560 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4561 extern_prefix=${sym%%ff_extern*}
4562
4563 check_cc <<EOF && enable_weak inline_asm
4564 void foo(void) { __asm__ volatile ("" ::); }
4565 EOF
4566
4567 _restrict=
4568 for restrict_keyword in restrict __restrict__ __restrict; do
4569     check_cc <<EOF && _restrict=$restrict_keyword && break
4570 void foo(char * $restrict_keyword p);
4571 EOF
4572 done
4573
4574 check_cc <<EOF && enable pragma_deprecated
4575 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4576 EOF
4577
4578 check_cc <<EOF && enable attribute_packed
4579 struct { int x; } __attribute__((packed)) x;
4580 EOF
4581
4582 check_cc <<EOF && enable attribute_may_alias
4583 union { int x; } __attribute__((may_alias)) x;
4584 EOF
4585
4586 check_cc <<EOF || die "endian test failed"
4587 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4588 EOF
4589 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4590
4591 if  [ "$cpu" = "power7" ] || [ "$cpu" = "power8" ] || enabled ppc64; then
4592     if ! enabled bigendian && enabled altivec ;then
4593         enable vsx
4594     fi
4595 fi
4596
4597 check_gas() {
4598     log "check_gas using '$as' as AS"
4599     # :vararg is used on aarch64, arm and ppc altivec
4600     check_as <<EOF || return 1
4601 .macro m n, y:vararg=0
4602 \n: .int \y
4603 .endm
4604 m x
4605 EOF
4606     # .altmacro is only used in arm asm
4607     ! enabled arm || check_as <<EOF || return 1
4608 .altmacro
4609 EOF
4610     enable gnu_as
4611     return 0
4612 }
4613
4614 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4615     nogas=:
4616     enabled_any arm aarch64 && nogas=die
4617     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
4618     as_noop=-v
4619
4620     case $as_type in
4621         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4622         gcc)  gaspp_as_type=gas ;;
4623         *)    gaspp_as_type=$as_type ;;
4624     esac
4625
4626     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4627
4628     test "${as#*gas-preprocessor.pl}" != "$as" ||
4629     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
4630         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
4631
4632     if ! check_gas ; then
4633         as=${gas:=$as}
4634         check_gas || \
4635             $nogas "GNU assembler not found, install/update gas-preprocessor"
4636     fi
4637
4638     check_as <<EOF && enable as_func
4639 .func test
4640 .endfunc
4641 EOF
4642 fi
4643
4644 check_inline_asm inline_asm_labels '"1:\n"'
4645
4646 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
4647
4648 if enabled aarch64; then
4649     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4650     # internal assembler in clang 3.3 does not support this instruction
4651     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4652     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4653
4654     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4655
4656 elif enabled alpha; then
4657
4658     check_cflags -mieee
4659
4660 elif enabled arm; then
4661
4662     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4663 float func(float a, float b){ return a+b; }
4664 EOF
4665
4666     enabled thumb && check_cflags -mthumb || check_cflags -marm
4667
4668     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4669         enable vfp_args
4670     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4671         case "${cross_prefix:-$cc}" in
4672             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4673             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4674 __asm__ (".eabi_attribute 28, 1");
4675 int main(void) { return 0; }
4676 EOF
4677         esac
4678         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4679     fi
4680
4681     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4682     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4683     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4684     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4685     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4686     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4687     enabled setend  && check_insn setend  'setend be'
4688
4689     [ $target_os = linux ] || [ $target_os = android ] ||
4690         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4691             $ARCH_EXT_LIST_ARM
4692
4693     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4694
4695     check_as <<EOF && enable as_dn_directive
4696 ra .dn d0.i16
4697 .unreq ra
4698 EOF
4699
4700     # llvm's integrated assembler supports .object_arch from llvm 3.5
4701     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4702 .object_arch armv4
4703 EOF
4704
4705     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4706
4707 elif enabled mips; then
4708
4709     # Enable minimum ISA based on selected options
4710     if enabled mips64 && (enabled mipsdspr1 || enabled mipsdspr2); then
4711         add_cflags "-mips64r2"
4712         add_asflags "-mips64r2"
4713     elif enabled mips64 && enabled mipsfpu && disabled loongson3; then
4714         add_cflags "-mips64"
4715         add_asflags "-mips64"
4716     elif enabled mipsdspr1 || enabled mipsdspr2; then
4717         add_cflags "-mips32r2 -mfp32"
4718         add_asflags "-mips32r2 -mfp32"
4719     elif enabled mips32r5 || enabled mips64r6; then
4720         check_cflags "-mfp64"
4721         check_ldflags "-mfp64"
4722     fi
4723
4724     enabled mips32r5  && check_cflags "-mips32r5 -msched-weight -mload-store-pairs -funroll-loops" &&
4725      check_ldflags "-mips32r5" &&
4726      check_inline_asm mips32r5  '"ulw $t0, ($t1)"'
4727     enabled mips64r6  && check_cflags "-mips64r6 -msched-weight -mload-store-pairs -funroll-loops" &&
4728      check_ldflags "-mips64r6" &&
4729      check_inline_asm mips64r6  '"aui $t0, $t1, 1"'
4730     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4731      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4732     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4733      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4734     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4735      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4736     enabled msa       && check_cflags "-mmsa" && check_ldflags "-mmsa" &&
4737      check_inline_asm msa       '"addvi.b $w0, $w1, 1"'
4738     enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
4739
4740     enabled mips32r5 && add_asflags "-mips32r5 -mfp64"
4741     enabled mips64r6 && add_asflags "-mips64r6 -mfp64"
4742     enabled msa && add_asflags "-mmsa"
4743
4744 elif enabled parisc; then
4745
4746     if enabled gcc; then
4747         case $($cc -dumpversion) in
4748             4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
4749         esac
4750     fi
4751
4752 elif enabled ppc; then
4753
4754     enable local_aligned_8 local_aligned_16 local_aligned_32
4755
4756     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4757     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4758     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4759     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4760
4761     # AltiVec flags: The FSF version of GCC differs from the Apple version
4762     if enabled altivec; then
4763         check_cflags -maltivec -mabi=altivec &&
4764         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4765         check_cflags -faltivec
4766
4767         # check if our compiler supports Motorola AltiVec C API
4768         check_cc <<EOF || disable altivec
4769 $inc_altivec_h
4770 int main(void) {
4771     vector signed int v1 = (vector signed int) { 0 };
4772     vector signed int v2 = (vector signed int) { 1 };
4773     v1 = vec_add(v1, v2);
4774     return 0;
4775 }
4776 EOF
4777
4778         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4779     fi
4780
4781     if enabled vsx; then
4782         check_cflags -mvsx
4783     fi
4784 elif enabled x86; then
4785
4786     check_builtin rdtsc    intrin.h   "__rdtsc()"
4787     check_builtin mm_empty mmintrin.h "_mm_empty()"
4788
4789     enable local_aligned_8 local_aligned_16 local_aligned_32
4790
4791     # check whether EBP is available on x86
4792     # As 'i' is stored on the stack, this program will crash
4793     # if the base pointer is used to access it because the
4794     # base pointer is cleared in the inline assembly code.
4795     check_exec_crash <<EOF && enable ebp_available
4796 volatile int i=0;
4797 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4798 return i;
4799 EOF
4800
4801     # check whether EBX is available on x86
4802     check_inline_asm ebx_available '""::"b"(0)' &&
4803         check_inline_asm ebx_available '"":::"%ebx"'
4804
4805     # check whether xmm clobbers are supported
4806     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4807
4808     check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
4809         check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
4810
4811     # check whether binutils is new enough to compile SSSE3/MMXEXT
4812     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4813     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4814
4815     if ! disabled_any asm mmx yasm; then
4816         if check_cmd $yasmexe --version; then
4817             enabled x86_64 && yasm_extra="-m amd64"
4818             yasm_debug="-g dwarf2"
4819         elif check_cmd nasm -v; then
4820             yasmexe=nasm
4821             yasm_debug="-g -F dwarf"
4822             if enabled x86_64; then
4823                 case "$objformat" in
4824                     elf)   objformat=elf64 ;;
4825                     win32) objformat=win64 ;;
4826                 esac
4827             fi
4828         fi
4829
4830         YASMFLAGS="-f $objformat $yasm_extra"
4831         enabled pic               && append YASMFLAGS "-DPIC"
4832         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4833         case "$objformat" in
4834             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4835         esac
4836
4837         check_yasm "movbe ecx, [5]" && enable yasm ||
4838             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4839         check_yasm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
4840         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4841         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4842         check_yasm "CPU amdnop" || disable cpunop
4843     fi
4844
4845     case "$cpu" in
4846         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4847             disable fast_clz
4848         ;;
4849     esac
4850
4851 fi
4852
4853 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4854
4855 check_ldflags -Wl,--as-needed
4856 check_ldflags -Wl,-z,noexecstack
4857
4858 if check_func dlopen; then
4859     ldl=
4860 elif check_func dlopen -ldl; then
4861     ldl=-ldl
4862 fi
4863
4864 frei0r_filter_extralibs='$ldl'
4865 frei0r_src_filter_extralibs='$ldl'
4866 ladspa_filter_extralibs='$ldl'
4867 nvenc_encoder_extralibs='$ldl'
4868
4869 if ! disabled network; then
4870     check_func getaddrinfo $network_extralibs
4871     check_func getservbyport $network_extralibs
4872     check_func inet_aton $network_extralibs
4873
4874     check_type netdb.h "struct addrinfo"
4875     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4876     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4877     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4878     check_type poll.h "struct pollfd"
4879     check_type netinet/sctp.h "struct sctp_event_subscribe"
4880     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4881     check_type netinet/in.h "struct sockaddr_in6"
4882     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4883     check_type "sys/types.h sys/socket.h" socklen_t
4884
4885     # Prefer arpa/inet.h over winsock2
4886     if check_header arpa/inet.h ; then
4887         check_func closesocket
4888     elif check_header winsock2.h ; then
4889         check_func_headers winsock2.h closesocket -lws2 &&
4890             network_extralibs="-lws2" ||
4891         { check_func_headers winsock2.h closesocket -lws2_32 &&
4892             network_extralibs="-lws2_32"; } || disable winsock2_h network
4893         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4894
4895         check_type ws2tcpip.h socklen_t
4896         check_type ws2tcpip.h "struct addrinfo"
4897         check_type ws2tcpip.h "struct group_source_req"
4898         check_type ws2tcpip.h "struct ip_mreq_source"
4899         check_type ws2tcpip.h "struct ipv6_mreq"
4900         check_type winsock2.h "struct pollfd"
4901         check_struct winsock2.h "struct sockaddr" sa_len
4902         check_type ws2tcpip.h "struct sockaddr_in6"
4903         check_type ws2tcpip.h "struct sockaddr_storage"
4904     else
4905         disable network
4906     fi
4907 fi
4908
4909 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4910 check_builtin atomic_compare_exchange "" "int *ptr, *oldval; int newval; __atomic_compare_exchange_n(ptr, oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)"
4911 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4912 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4913 check_builtin sarestart signal.h "SA_RESTART"
4914 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4915
4916 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4917 check_func  ${malloc_prefix}memalign            && enable memalign
4918 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4919
4920 check_func  access
4921 check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4922 check_func  fcntl
4923 check_func  fork
4924 check_func  gethrtime
4925 check_func  getopt
4926 check_func  getrusage
4927 check_func  gettimeofday
4928 check_func  gmtime_r
4929 check_func  isatty
4930 check_func  localtime_r
4931 check_func  mach_absolute_time
4932 check_func  mkstemp
4933 check_func  mmap
4934 check_func  mprotect
4935 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4936 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4937 check_func  sched_getaffinity
4938 check_func  setrlimit
4939 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4940 check_func  strerror_r
4941 check_func  sysconf
4942 check_func  sysctl
4943 check_func  usleep
4944
4945 check_func_headers conio.h kbhit
4946 check_func_headers io.h setmode
4947 check_func_headers lzo/lzo1x.h lzo1x_999_compress
4948 check_func_headers stdlib.h getenv
4949
4950 check_func_headers windows.h CoTaskMemFree -lole32
4951 check_func_headers windows.h GetProcessAffinityMask
4952 check_func_headers windows.h GetProcessTimes
4953 check_func_headers windows.h GetSystemTimeAsFileTime
4954 check_func_headers windows.h MapViewOfFile
4955 check_func_headers windows.h PeekNamedPipe
4956 check_func_headers windows.h SetConsoleTextAttribute
4957 check_func_headers windows.h Sleep
4958 check_func_headers windows.h VirtualAlloc
4959 check_struct windows.h "CONDITION_VARIABLE" Ptr
4960 check_func_headers glob.h glob
4961 enabled xlib &&
4962     check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4963
4964 check_header direct.h
4965 check_header dlfcn.h
4966 check_header d3d11.h
4967 check_header dxva.h
4968 check_header dxva2api.h -D_WIN32_WINNT=0x0600
4969 check_header io.h
4970 check_header libcrystalhd/libcrystalhd_if.h
4971 check_header mach/mach_time.h
4972 check_header malloc.h
4973 check_header net/udplite.h
4974 check_header poll.h
4975 check_header sys/mman.h
4976 check_header sys/param.h
4977 check_header sys/resource.h
4978 check_header sys/select.h
4979 check_header sys/time.h
4980 check_header sys/un.h
4981 check_header termios.h
4982 check_header unistd.h
4983 check_header valgrind/valgrind.h
4984 check_header vdpau/vdpau.h
4985 check_header vdpau/vdpau_x11.h
4986 check_header VideoDecodeAcceleration/VDADecoder.h
4987 check_header windows.h
4988 check_header X11/extensions/XvMClib.h
4989 check_header asm/types.h
4990
4991 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4992 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4993 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4994
4995 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4996
4997 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC"
4998 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
4999
5000 if ! disabled w32threads && ! enabled pthreads; then
5001     check_func_headers "windows.h process.h" _beginthreadex &&
5002         enable w32threads || disable w32threads
5003 fi
5004
5005 # check for some common methods of building with pthread support
5006 # do this before the optional library checks as some of them require pthreads
5007 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
5008     enable pthreads
5009     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
5010         add_cflags -pthread
5011         add_extralibs -pthread
5012     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
5013         add_cflags -pthreads
5014         add_extralibs -pthreads
5015     elif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; then
5016         add_cflags -ldl -pthread
5017         add_extralibs -ldl -pthread
5018     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
5019         add_extralibs -lpthreadGC2
5020     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
5021         :
5022     elif ! check_func pthread_join && ! check_func pthread_create; then
5023         disable pthreads
5024     fi
5025     check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
5026 fi
5027
5028
5029 if enabled pthreads; then
5030   check_func pthread_cancel
5031 fi
5032
5033 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
5034 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
5035 disabled  lzma || check_lib2  lzma.h lzma_version_number -llzma || disable lzma
5036
5037 check_lib math.h sin -lm && LIBM="-lm"
5038 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
5039
5040 atan2f_args=2
5041 ldexpf_args=2
5042 powf_args=2
5043
5044 for func in $MATH_FUNCS; do
5045     eval check_mathfunc $func \${${func}_args:-1}
5046 done
5047
5048 # these are off by default, so fail if requested and not available
5049 enabled avfoundation_indev && { check_header_oc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
5050 enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics ||
5051                                 check_lib2 ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; }
5052 enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
5053                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
5054                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
5055 enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
5056 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
5057 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
5058 enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
5059 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
5060 enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
5061 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
5062 enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
5063 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
5064 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
5065                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
5066                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
5067 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
5068 enabled libdcadec         && require_pkg_config dcadec libdcadec/dca_context.h dcadec_context_create
5069 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
5070 enabled libfdk_aac        && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
5071 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"
5072 enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
5073 enabled fontconfig        && enable libfontconfig
5074 enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
5075 enabled libfreetype       && require_libfreetype
5076 enabled libfribidi        && require_pkg_config fribidi fribidi.h fribidi_version_info
5077 enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
5078 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
5079                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
5080                                done || die "ERROR: libgsm not found"; }
5081 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
5082 enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
5083 enabled libmodplug        && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
5084 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
5085 enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
5086 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
5087 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
5088 enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
5089 enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
5090 enabled libopenjpeg       && { check_lib openjpeg.h opj_version -lopenmj2 -DOPJ_STATIC ||
5091                                check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
5092                                check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
5093                                die "ERROR: libopenjpeg not found"; }
5094 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
5095 enabled libpulse          && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new
5096 enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
5097 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
5098 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
5099 enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
5100 enabled libsmbclient      && { use_pkg_config smbclient libsmbclient.h smbc_init ||
5101                                require smbclient libsmbclient.h smbc_init -lsmbclient; }
5102 enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
5103 enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
5104 enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
5105 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
5106     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
5107     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
5108 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
5109 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
5110                              { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
5111                                die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
5112 enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
5113 enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
5114 enabled libvidstab        && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
5115 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
5116 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
5117 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
5118 enabled libvpx            && {
5119     enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
5120                                     die "ERROR: libvpx decoder version must be >=0.9.1"; }
5121     enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
5122                                     die "ERROR: libvpx encoder version must be >=0.9.7"; }
5123     enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
5124     enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx || disable libvpx_vp9_encoder; } }
5125 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
5126 enabled libwebp           && {
5127     enabled libwebp_encoder      && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
5128     enabled libwebp_anim_encoder && { use_pkg_config "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit || disable libwebp_anim_encoder; } }
5129 enabled libx264           && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode ||
5130                                { require libx264 x264.h x264_encoder_encode -lx264 &&
5131                                  warn "using libx264 without pkg-config"; } } &&
5132                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
5133                                die "ERROR: libx264 must be installed and version must be >= 0.118."; }
5134 enabled libx265           && require_pkg_config x265 x265.h x265_encoder_encode &&
5135                              { check_cpp_condition x265.h "X265_BUILD >= 57" ||
5136                                die "ERROR: libx265 version must be >= 57."; }
5137 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
5138 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
5139 enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
5140 enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
5141 enabled mmal              && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
5142                                 { ! enabled cross_compile && {
5143                                     add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
5144                                     add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
5145                                     check_lib interface/mmal/mmal.h mmal_port_connect ; }
5146                                 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
5147                                die "ERROR: mmal not found"; }
5148 enabled nvenc             && { check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."; } &&
5149                              { check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
5150                                die "ERROR: NVENC API version 4 or older is not supported"; } &&
5151                              { [ $target_os != cygwin ] || die "ERROR: NVENC is not supported on Cygwin currently."; }
5152 enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
5153                                check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
5154                                die "ERROR: openal not found"; } &&
5155                              { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
5156                                die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
5157 enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
5158                                check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
5159                                die "ERROR: opencl not found"; } &&
5160                              { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
5161                                check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
5162                                die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
5163 enabled opengl            && { check_lib GL/glx.h glXGetProcAddress "-lGL" ||
5164                                check_lib2 windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
5165                                check_lib2 OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
5166                                check_lib2 ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
5167                                die "ERROR: opengl not found."
5168                              }
5169 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
5170                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
5171                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
5172                                die "ERROR: openssl not found"; }
5173 enabled qtkit_indev      && { check_header_oc QTKit/QTKit.h || disable qtkit_indev; }
5174
5175 if enabled gnutls; then
5176     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
5177     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
5178 fi
5179
5180 # libdc1394 check
5181 if enabled libdc1394; then
5182     { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
5183         enable libdc1394_2; } ||
5184     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
5185         enable libdc1394_1; } ||
5186     die "ERROR: No version of libdc1394 found "
5187 fi
5188 if ! disabled sdl; then
5189     SDL_CONFIG="${cross_prefix}sdl-config"
5190     if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
5191         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5192         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5193         enable sdl
5194     else
5195         if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5196             sdl_cflags=$("${SDL_CONFIG}" --cflags)
5197             sdl_libs=$("${SDL_CONFIG}" --libs)
5198             check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
5199             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5200             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5201             enable sdl
5202         elif enabled sdl ; then
5203             die "ERROR: SDL not found"
5204         else
5205             disable sdl
5206         fi
5207     fi
5208 fi
5209 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
5210
5211 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
5212 enabled makeinfo && (makeinfo --version | \
5213                      grep -q 'makeinfo (GNU texinfo) 5' > /dev/null 2>&1) \
5214     && enable makeinfo_html || disable makeinfo_html
5215 disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
5216 perl -v            > /dev/null 2>&1 && enable perl      || disable perl
5217 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
5218 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
5219
5220 check_header linux/fb.h
5221 check_header linux/videodev.h
5222 check_header linux/videodev2.h
5223 check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5224
5225 check_header sys/videoio.h
5226 check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5227
5228 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
5229 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
5230 # w32api 3.12 had it defined wrong
5231 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
5232
5233 check_type "dshow.h" IBaseFilter
5234
5235 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
5236 { check_header dev/bktr/ioctl_meteor.h &&
5237   check_header dev/bktr/ioctl_bt848.h; } ||
5238 { check_header machine/ioctl_meteor.h &&
5239   check_header machine/ioctl_bt848.h; } ||
5240 { check_header dev/video/meteor/ioctl_meteor.h &&
5241   check_header dev/video/bktr/ioctl_bt848.h; } ||
5242 check_header dev/ic/bt8xx.h
5243
5244 check_header sndio.h
5245 if check_struct sys/soundcard.h audio_buf_info bytes; then
5246     enable_safe sys/soundcard.h
5247 else
5248     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
5249     #include <sys/soundcard.h>
5250     audio_buf_info abc;
5251 EOF
5252 fi
5253 check_header soundcard.h
5254
5255 enabled_any alsa_indev alsa_outdev &&
5256     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
5257
5258 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
5259     check_func jack_port_get_latency_range -ljack
5260
5261 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
5262
5263 if enabled libcdio; then
5264     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5265     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5266     die "ERROR: No usable libcdio/cdparanoia found"
5267 fi
5268
5269 enabled xlib &&
5270     check_lib X11/Xlib.h XOpenDisplay -lX11 || disable xlib
5271
5272 if ! disabled libxcb; then
5273     check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || {
5274         enabled libxcb && die "ERROR: libxcb >= 1.4 not found";
5275     } && disable x11grab && enable libxcb
5276
5277 if enabled libxcb; then
5278     disabled libxcb_shm || {
5279         check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
5280             enabled libxcb_shm && die "ERROR: libxcb_shm not found";
5281         } && check_header sys/shm.h && enable libxcb_shm; }
5282
5283     disabled libxcb_xfixes || {
5284         check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
5285             enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
5286         } && enable libxcb_xfixes; }
5287
5288     disabled libxcb_shape || {
5289         check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || {
5290             enabled libxcb_shape && die "ERROR: libxcb_shape not found";
5291         } && enable libxcb_shape; }
5292
5293     add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags
5294     add_extralibs $xcb_libs $xcb_shm_libs $xcb_xfixes_libs $xcb_shape_libs
5295 fi
5296 fi
5297
5298 if enabled x11grab; then
5299     enabled xlib || die "ERROR: Xlib not found"
5300     require Xext X11/extensions/XShm.h XShmCreateImage -lXext
5301     require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
5302 fi
5303
5304 check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
5305
5306 enabled dxva2api_h &&
5307     check_cc <<EOF && enable dxva2api_cobj
5308 #define _WIN32_WINNT 0x0600
5309 #define COBJMACROS
5310 #include <windows.h>
5311 #include <d3d9.h>
5312 #include <dxva2api.h>
5313 int main(void) { IDirectXVideoDecoder *o = NULL; IDirectXVideoDecoder_Release(o); return 0; }
5314 EOF
5315
5316 enabled d3d11_h &&
5317     check_cc <<EOF && enable d3d11_cobj
5318 #define _WIN32_WINNT 0x0600
5319 #define COBJMACROS
5320 #include <windows.h>
5321 #include <d3d11.h>
5322 int main(void) { ID3D11VideoDecoder *o = NULL; ID3D11VideoDecoder_Release(o); return 0; }
5323 EOF
5324
5325 enabled vaapi &&
5326     check_lib va/va.h vaInitialize -lva ||
5327     disable vaapi
5328
5329 enabled vaapi && enabled xlib &&
5330     check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
5331     enable vaapi_x11
5332
5333 enabled vdpau &&
5334     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
5335     disable vdpau
5336
5337 enabled vdpau && enabled xlib &&
5338     check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
5339     prepend ffmpeg_libs $($ldflags_filter "-lvdpau") &&
5340     enable vdpau_x11
5341
5342 # Funny iconv installations are not unusual, so check it after all flags have been set
5343 disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
5344
5345 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
5346
5347 # add some useful compiler flags if supported
5348 check_cflags -Wdeclaration-after-statement
5349 check_cflags -Wall
5350 check_cflags -Wdisabled-optimization
5351 check_cflags -Wpointer-arith
5352 check_cflags -Wredundant-decls
5353 check_cflags -Wwrite-strings
5354 check_cflags -Wtype-limits
5355 check_cflags -Wundef
5356 check_cflags -Wmissing-prototypes
5357 check_cflags -Wno-pointer-to-int-cast
5358 check_cflags -Wstrict-prototypes
5359 check_cflags -Wempty-body
5360 enabled extra_warnings && check_cflags -Winline
5361
5362 check_disable_warning(){
5363     warning_flag=-W${1#-Wno-}
5364     test_cflags $warning_flag && add_cflags $1
5365 }
5366
5367 check_disable_warning -Wno-parentheses
5368 check_disable_warning -Wno-switch
5369 check_disable_warning -Wno-format-zero-length
5370 check_disable_warning -Wno-pointer-sign
5371
5372 # add some linker flags
5373 check_ldflags -Wl,--warn-common
5374 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
5375 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
5376 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
5377
5378 # add some strip flags
5379 # -wN '..@*' is more selective than -x, but not available everywhere.
5380 check_stripflags -wN \'..@*\' || check_stripflags -x
5381
5382 enabled neon_clobber_test &&
5383     check_ldflags -Wl,--wrap,avcodec_open2              \
5384                   -Wl,--wrap,avcodec_decode_audio4      \
5385                   -Wl,--wrap,avcodec_decode_video2      \
5386                   -Wl,--wrap,avcodec_decode_subtitle2   \
5387                   -Wl,--wrap,avcodec_encode_audio2      \
5388                   -Wl,--wrap,avcodec_encode_video2      \
5389                   -Wl,--wrap,avcodec_encode_subtitle    \
5390                   -Wl,--wrap,swr_convert                \
5391                   -Wl,--wrap,avresample_convert ||
5392     disable neon_clobber_test
5393
5394 enabled xmm_clobber_test &&
5395     check_ldflags -Wl,--wrap,avcodec_open2              \
5396                   -Wl,--wrap,avcodec_decode_audio4      \
5397                   -Wl,--wrap,avcodec_decode_video2      \
5398                   -Wl,--wrap,avcodec_decode_subtitle2   \
5399                   -Wl,--wrap,avcodec_encode_audio2      \
5400                   -Wl,--wrap,avcodec_encode_video       \
5401                   -Wl,--wrap,avcodec_encode_video2      \
5402                   -Wl,--wrap,avcodec_encode_subtitle    \
5403                   -Wl,--wrap,swr_convert                \
5404                   -Wl,--wrap,avresample_convert         \
5405                   -Wl,--wrap,sws_scale ||
5406     disable xmm_clobber_test
5407
5408 echo "X{};" > $TMPV
5409 if test_ldflags -Wl,--version-script,$TMPV; then
5410     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
5411     check_cc <<EOF && enable symver_asm_label
5412 void ff_foo(void) __asm__ ("av_foo@VERSION");
5413 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
5414 EOF
5415     check_cc <<EOF && enable symver_gnu_asm
5416 __asm__(".symver ff_foo,av_foo@VERSION");
5417 void ff_foo(void) {}
5418 EOF
5419 fi
5420
5421 if [ -z "$optflags" ]; then
5422     if enabled small; then
5423         optflags=$cflags_size
5424     elif enabled optimizations; then
5425         optflags=$cflags_speed
5426     else
5427         optflags=$cflags_noopt
5428     fi
5429 fi
5430
5431 check_optflags(){
5432     check_cflags "$@"
5433     enabled lto && check_ldflags "$@"
5434 }
5435
5436
5437 if enabled lto; then
5438     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
5439     check_cflags  -flto
5440     check_ldflags -flto $cpuflags
5441     disable inline_asm_direct_symbol_refs
5442 fi
5443
5444 check_optflags $optflags
5445 check_optflags -fno-math-errno
5446 check_optflags -fno-signed-zeros
5447
5448 enabled ftrapv && check_cflags -ftrapv
5449
5450 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
5451 int x;
5452 EOF
5453
5454
5455 if enabled icc; then
5456     # Just warnings, no remarks
5457     check_cflags -w1
5458     # -wd: Disable following warnings
5459     # 144, 167, 556: -Wno-pointer-sign
5460     # 188: enumerated type mixed with another type
5461     # 1292: attribute "foo" ignored
5462     # 1419: external declaration in primary source file
5463     # 10006: ignoring unknown option -fno-signed-zeros
5464     # 10148: ignoring unknown option -Wno-parentheses
5465     # 10156: ignoring option '-W'; no argument required
5466     # 13200: No EMMS instruction before call to function
5467     # 13203: No EMMS instruction before return from function
5468     check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
5469     # 11030: Warning unknown option --as-needed
5470     # 10156: ignoring option '-export'; no argument required
5471     check_ldflags -wd10156,11030
5472     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
5473     enable ebp_available
5474     # The test above does not test linking
5475     enabled lto && disable symver_asm_label
5476     if enabled x86_32; then
5477         icc_version=$($cc -dumpversion)
5478         test ${icc_version%%.*} -ge 11 &&
5479             check_cflags -falign-stack=maintain-16-byte ||
5480             disable aligned_stack
5481     fi
5482 elif enabled ccc; then
5483     # disable some annoying warnings
5484     add_cflags -msg_disable bitnotint
5485     add_cflags -msg_disable mixfuncvoid
5486     add_cflags -msg_disable nonstandcast
5487     add_cflags -msg_disable unsupieee
5488 elif enabled gcc; then
5489     check_optflags -fno-tree-vectorize
5490     check_cflags -Werror=format-security
5491     check_cflags -Werror=implicit-function-declaration
5492     check_cflags -Werror=missing-prototypes
5493     check_cflags -Werror=return-type
5494     check_cflags -Werror=vla
5495     check_cflags -Wformat
5496     check_cflags -fdiagnostics-color=auto
5497     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
5498 elif enabled llvm_gcc; then
5499     check_cflags -mllvm -stack-alignment=16
5500 elif enabled clang; then
5501     check_cflags -mllvm -stack-alignment=16
5502     check_cflags -Qunused-arguments
5503     check_cflags -Werror=implicit-function-declaration
5504     check_cflags -Werror=missing-prototypes
5505     check_cflags -Werror=return-type
5506 elif enabled cparser; then
5507     add_cflags -Wno-missing-variable-declarations
5508     add_cflags -Wno-empty-statement
5509 elif enabled armcc; then
5510     add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
5511     add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
5512     # 2523: use of inline assembly is deprecated
5513     add_cflags -W${armcc_opt},--diag_suppress=2523
5514     add_cflags -W${armcc_opt},--diag_suppress=1207
5515     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
5516     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
5517     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
5518     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
5519 elif enabled tms470; then
5520     add_cflags -pds=824 -pds=837
5521     disable inline_asm
5522 elif enabled pathscale; then
5523     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
5524 elif enabled_any msvc icl; then
5525     enabled x86_32 && disable aligned_stack
5526     enabled_all x86_32 debug && add_cflags -Oy-
5527     enabled debug && add_ldflags -debug
5528     enable pragma_deprecated
5529     if enabled icl; then
5530         # -Qansi-alias is basically -fstrict-aliasing, but does not work
5531         # (correctly) on icl 13.x.
5532         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
5533             add_cflags -Qansi-alias
5534         # Some inline asm is not compilable in debug
5535         if enabled debug; then
5536             disable ebp_available
5537             disable ebx_available
5538         fi
5539     fi
5540     # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
5541     check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
5542 fi
5543
5544 case $as_type in
5545     clang)
5546         add_asflags -Qunused-arguments
5547     ;;
5548 esac
5549
5550 case $ld_type in
5551     clang)
5552         check_ldflags -Qunused-arguments
5553     ;;
5554 esac
5555
5556 case $target_os in
5557     osf1)
5558         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
5559     ;;
5560     plan9)
5561         add_cppflags -Dmain=plan9_main
5562     ;;
5563 esac
5564
5565 enable frame_thread_encoder
5566
5567 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
5568
5569 check_deps $CONFIG_LIST       \
5570            $CONFIG_EXTRA      \
5571            $HAVE_LIST         \
5572            $ALL_COMPONENTS    \
5573
5574 enabled threads && ! enabled pthreads && ! enabled atomics_native && die "non pthread threading without atomics not supported, try adding --enable-pthreads or --cpu=i486 or higher if you are on x86"
5575
5576
5577 if test $target_os = "haiku"; then
5578     disable memalign
5579     disable posix_memalign
5580 fi
5581
5582 enabled_all d3d11va d3d11_cobj CoTaskMemFree &&
5583     prepend ffmpeg_libs $($ldflags_filter "-lole32") &&
5584     enable d3d11va_lib
5585
5586 enabled_all dxva2 dxva2api_cobj CoTaskMemFree &&
5587     prepend ffmpeg_libs $($ldflags_filter "-lole32" "-luser32") &&
5588     enable dxva2_lib
5589
5590 ! enabled_any memalign posix_memalign aligned_malloc &&
5591     enabled simd_align_16 && enable memalign_hack
5592
5593 # add_dep lib dep
5594 # -> enable ${lib}_deps_${dep}
5595 # -> add $dep to ${lib}_deps only once
5596 add_dep() {
5597     lib=$1
5598     dep=$2
5599     enabled "${lib}_deps_${dep}" && return 0
5600     enable  "${lib}_deps_${dep}"
5601     prepend "${lib}_deps" $dep
5602 }
5603
5604 # merge deps lib components
5605 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
5606 merge_deps() {
5607     lib=$1
5608     shift
5609     for comp in $*; do
5610         enabled $comp || continue
5611         eval "dep=\"\$${comp}_deps\""
5612         for d in $dep; do
5613             add_dep $lib $d
5614         done
5615     done
5616 }
5617
5618 merge_deps libavfilter $FILTER_LIST
5619
5620 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
5621
5622 for thread in $THREADS_LIST; do
5623     if enabled $thread; then
5624         test -n "$thread_type" &&
5625             die "ERROR: Only one thread type must be selected." ||
5626             thread_type="$thread"
5627     fi
5628 done
5629
5630 enabled zlib && add_cppflags -DZLIB_CONST
5631
5632 # conditional library dependencies, in linking order
5633 enabled amovie_filter       && prepend avfilter_deps "avformat avcodec"
5634 enabled aresample_filter    && prepend avfilter_deps "swresample"
5635 enabled asyncts_filter      && prepend avfilter_deps "avresample"
5636 enabled atempo_filter       && prepend avfilter_deps "avcodec"
5637 enabled cover_rect_filter   && prepend avfilter_deps "avformat avcodec"
5638 enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
5639 enabled elbg_filter         && prepend avfilter_deps "avcodec"
5640 enabled fftfilt_filter      && prepend avfilter_deps "avcodec"
5641 enabled find_rect_filter    && prepend avfilter_deps "avformat avcodec"
5642 enabled mcdeint_filter      && prepend avfilter_deps "avcodec"
5643 enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
5644 enabled pan_filter          && prepend avfilter_deps "swresample"
5645 enabled pp_filter           && prepend avfilter_deps "postproc"
5646 enabled removelogo_filter   && prepend avfilter_deps "avformat avcodec swscale"
5647 enabled resample_filter && prepend avfilter_deps "avresample"
5648 enabled sab_filter          && prepend avfilter_deps "swscale"
5649 enabled scale_filter    && prepend avfilter_deps "swscale"
5650 enabled showspectrum_filter && prepend avfilter_deps "avcodec"
5651 enabled smartblur_filter    && prepend avfilter_deps "swscale"
5652 enabled subtitles_filter    && prepend avfilter_deps "avformat avcodec"
5653 enabled uspp_filter         && prepend avfilter_deps "avcodec"
5654
5655 enabled lavfi_indev         && prepend avdevice_deps "avfilter"
5656
5657 enabled opus_decoder    && prepend avcodec_deps "swresample"
5658
5659 expand_deps(){
5660     lib_deps=${1}_deps
5661     eval "deps=\$$lib_deps"
5662     append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
5663     unique $lib_deps
5664 }
5665
5666 #we have to remove gpl from the deps here as some code assumes all lib deps are libs
5667 postproc_deps="$(filter_out 'gpl' $postproc_deps)"
5668
5669 map 'expand_deps $v' $LIBRARY_LIST
5670
5671 echo "install prefix            $prefix"
5672 echo "source path               $source_path"
5673 echo "C compiler                $cc"
5674 echo "C library                 $libc_type"
5675 if test "$host_cc" != "$cc"; then
5676     echo "host C compiler           $host_cc"
5677     echo "host C library            $host_libc_type"
5678 fi
5679 echo "ARCH                      $arch ($cpu)"
5680 if test "$build_suffix" != ""; then
5681     echo "build suffix              $build_suffix"
5682 fi
5683 if test "$progs_suffix" != ""; then
5684     echo "progs suffix              $progs_suffix"
5685 fi
5686 if test "$extra_version" != ""; then
5687     echo "version string suffix     $extra_version"
5688 fi
5689 echo "big-endian                ${bigendian-no}"
5690 echo "runtime cpu detection     ${runtime_cpudetect-no}"
5691 if enabled x86; then
5692     echo "${yasmexe}                      ${yasm-no}"
5693     echo "MMX enabled               ${mmx-no}"
5694     echo "MMXEXT enabled            ${mmxext-no}"
5695     echo "3DNow! enabled            ${amd3dnow-no}"
5696     echo "3DNow! extended enabled   ${amd3dnowext-no}"
5697     echo "SSE enabled               ${sse-no}"
5698     echo "SSSE3 enabled             ${ssse3-no}"
5699     echo "AVX enabled               ${avx-no}"
5700     echo "XOP enabled               ${xop-no}"
5701     echo "FMA3 enabled              ${fma3-no}"
5702     echo "FMA4 enabled              ${fma4-no}"
5703     echo "i686 features enabled     ${i686-no}"
5704     echo "CMOV is fast              ${fast_cmov-no}"
5705     echo "EBX available             ${ebx_available-no}"
5706     echo "EBP available             ${ebp_available-no}"
5707 fi
5708 if enabled aarch64; then
5709     echo "NEON enabled              ${neon-no}"
5710     echo "VFP enabled               ${vfp-no}"
5711 fi
5712 if enabled arm; then
5713     echo "ARMv5TE enabled           ${armv5te-no}"
5714     echo "ARMv6 enabled             ${armv6-no}"
5715     echo "ARMv6T2 enabled           ${armv6t2-no}"
5716     echo "VFP enabled               ${vfp-no}"
5717     echo "NEON enabled              ${neon-no}"
5718     echo "THUMB enabled             ${thumb-no}"
5719 fi
5720 if enabled mips; then
5721     echo "MIPS FPU enabled          ${mipsfpu-no}"
5722     echo "MIPS32R5 enabled          ${mips32r5-no}"
5723     echo "MIPS64R6 enabled          ${mips64r6-no}"
5724     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
5725     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
5726     echo "MIPS MSA enabled          ${msa-no}"
5727     echo "LOONGSON3 enabled         ${loongson3-no}"
5728 fi
5729 if enabled ppc; then
5730     echo "AltiVec enabled           ${altivec-no}"
5731     echo "PPC 4xx optimizations     ${ppc4xx-no}"
5732     echo "PPC VSX optimizations     ${vsx-no}"
5733     echo "dcbzl available           ${dcbzl-no}"
5734 fi
5735 echo "debug symbols             ${debug-no}"
5736 echo "strip symbols             ${stripping-no}"
5737 echo "optimize for size         ${small-no}"
5738 echo "optimizations             ${optimizations-no}"
5739 echo "static                    ${static-no}"
5740 echo "shared                    ${shared-no}"
5741 echo "postprocessing support    ${postproc-no}"
5742 echo "new filter support        ${avfilter-no}"
5743 echo "network support           ${network-no}"
5744 echo "threading support         ${thread_type-no}"
5745 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
5746 echo "SDL support               ${sdl-no}"
5747 echo "opencl enabled            ${opencl-no}"
5748 echo "texi2html enabled         ${texi2html-no}"
5749 echo "perl enabled              ${perl-no}"
5750 echo "pod2man enabled           ${pod2man-no}"
5751 echo "makeinfo enabled          ${makeinfo-no}"
5752 echo "makeinfo supports HTML    ${makeinfo_html-no}"
5753 test -n "$random_seed" &&
5754     echo "random seed               ${random_seed}"
5755 echo
5756
5757 echo "External libraries:"
5758 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
5759 echo
5760
5761 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
5762     echo "Enabled ${type}s:"
5763     eval list=\$$(toupper $type)_LIST
5764     print_enabled '_*' $list | print_3_columns
5765     echo
5766 done
5767
5768 license="LGPL version 2.1 or later"
5769 if enabled nonfree; then
5770     license="nonfree and unredistributable"
5771 elif enabled gplv3; then
5772     license="GPL version 3 or later"
5773 elif enabled lgplv3; then
5774     license="LGPL version 3 or later"
5775 elif enabled gpl; then
5776     license="GPL version 2 or later"
5777 fi
5778
5779 echo "License: $license"
5780
5781 echo "Creating config.mak, config.h, and doc/config.texi..."
5782
5783 test -e Makefile || echo "include $source_path/Makefile" > Makefile
5784
5785 enabled stripping || strip="echo skipping strip"
5786
5787 config_files="$TMPH config.mak doc/config.texi"
5788
5789 cat > config.mak <<EOF
5790 # Automatically generated by configure - do not modify!
5791 ifndef FFMPEG_CONFIG_MAK
5792 FFMPEG_CONFIG_MAK=1
5793 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
5794 prefix=$prefix
5795 LIBDIR=\$(DESTDIR)$libdir
5796 SHLIBDIR=\$(DESTDIR)$shlibdir
5797 INCDIR=\$(DESTDIR)$incdir
5798 BINDIR=\$(DESTDIR)$bindir
5799 DATADIR=\$(DESTDIR)$datadir
5800 DOCDIR=\$(DESTDIR)$docdir
5801 MANDIR=\$(DESTDIR)$mandir
5802 SRC_PATH=$source_path
5803 ifndef MAIN_MAKEFILE
5804 SRC_PATH:=\$(SRC_PATH:.%=..%)
5805 endif
5806 CC_IDENT=$cc_ident
5807 ARCH=$arch
5808 INTRINSICS=$intrinsics
5809 CC=$cc
5810 CXX=$cxx
5811 AS=$as
5812 LD=$ld
5813 DEPCC=$dep_cc
5814 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
5815 DEPAS=$as
5816 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
5817 YASM=$yasmexe
5818 DEPYASM=$yasmexe
5819 AR=$ar
5820 ARFLAGS=$arflags
5821 AR_O=$ar_o
5822 RANLIB=$ranlib
5823 STRIP=$strip
5824 CP=cp -p
5825 LN_S=$ln_s
5826 CPPFLAGS=$CPPFLAGS
5827 CFLAGS=$CFLAGS
5828 CXXFLAGS=$CXXFLAGS
5829 ASFLAGS=$ASFLAGS
5830 AS_C=$AS_C
5831 AS_O=$AS_O
5832 CC_C=$CC_C
5833 CC_E=$CC_E
5834 CC_O=$CC_O
5835 CXX_C=$CXX_C
5836 CXX_O=$CXX_O
5837 LD_O=$LD_O
5838 LD_LIB=$LD_LIB
5839 LD_PATH=$LD_PATH
5840 DLLTOOL=$dlltool
5841 WINDRES=$windres
5842 DEPWINDRES=$dep_cc
5843 DOXYGEN=$doxygen
5844 LDFLAGS=$LDFLAGS
5845 LDEXEFLAGS=$LDEXEFLAGS
5846 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
5847 ASMSTRIPFLAGS=$ASMSTRIPFLAGS
5848 YASMFLAGS=$YASMFLAGS
5849 BUILDSUF=$build_suffix
5850 PROGSSUF=$progs_suffix
5851 FULLNAME=$FULLNAME
5852 LIBPREF=$LIBPREF
5853 LIBSUF=$LIBSUF
5854 LIBNAME=$LIBNAME
5855 SLIBPREF=$SLIBPREF
5856 SLIBSUF=$SLIBSUF
5857 EXESUF=$EXESUF
5858 EXTRA_VERSION=$extra_version
5859 CCDEP=$CCDEP
5860 CXXDEP=$CXXDEP
5861 CCDEP_FLAGS=$CCDEP_FLAGS
5862 ASDEP=$ASDEP
5863 ASDEP_FLAGS=$ASDEP_FLAGS
5864 CC_DEPFLAGS=$CC_DEPFLAGS
5865 AS_DEPFLAGS=$AS_DEPFLAGS
5866 HOSTCC=$host_cc
5867 HOSTLD=$host_ld
5868 HOSTCFLAGS=$host_cflags
5869 HOSTCPPFLAGS=$host_cppflags
5870 HOSTEXESUF=$HOSTEXESUF
5871 HOSTLDFLAGS=$host_ldflags
5872 HOSTLIBS=$host_libs
5873 DEPHOSTCC=$host_cc
5874 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
5875 HOSTCCDEP=$HOSTCCDEP
5876 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
5877 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
5878 HOSTCC_C=$HOSTCC_C
5879 HOSTCC_O=$HOSTCC_O
5880 HOSTLD_O=$HOSTLD_O
5881 TARGET_EXEC=$target_exec $target_exec_args
5882 TARGET_PATH=$target_path
5883 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
5884 CFLAGS-ffplay=$sdl_cflags
5885 ZLIB=$($ldflags_filter -lz)
5886 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
5887 EXTRALIBS=$extralibs
5888 COMPAT_OBJS=$compat_objs
5889 EXEOBJS=$exeobjs
5890 INSTALL=$install
5891 LIBTARGET=${LIBTARGET}
5892 SLIBNAME=${SLIBNAME}
5893 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
5894 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
5895 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
5896 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
5897 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
5898 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
5899 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
5900 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
5901 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
5902 NOREDZONE_FLAGS=$noredzone_flags
5903 EOF
5904
5905 get_version(){
5906     lcname=lib${1}
5907     name=$(toupper $lcname)
5908     file=$source_path/$lcname/version.h
5909     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
5910     enabled raise_major && eval ${name}_VERSION_MAJOR=$((${name}_VERSION_MAJOR+100))
5911     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
5912     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
5913     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
5914     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
5915 }
5916
5917 map 'get_version $v' $LIBRARY_LIST
5918
5919 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
5920
5921 print_program_libs(){
5922     eval "program_libs=\$${1}_libs"
5923     eval echo "LIBS-${1}=${program_libs}" >> config.mak
5924 }
5925
5926 map 'print_program_libs $v' $PROGRAM_LIST
5927
5928 cat > $TMPH <<EOF
5929 /* Automatically generated by configure - do not modify! */
5930 #ifndef FFMPEG_CONFIG_H
5931 #define FFMPEG_CONFIG_H
5932 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
5933 #define FFMPEG_LICENSE "$(c_escape $license)"
5934 #define CONFIG_THIS_YEAR 2015
5935 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
5936 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
5937 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
5938 #define av_restrict $_restrict
5939 #define EXTERN_PREFIX "${extern_prefix}"
5940 #define EXTERN_ASM ${extern_prefix}
5941 #define BUILDSUF "$build_suffix"
5942 #define SLIBSUF "$SLIBSUF"
5943 #define HAVE_MMX2 HAVE_MMXEXT
5944 #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
5945 EOF
5946
5947 test -n "$assert_level" &&
5948     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
5949
5950 test -n "$malloc_prefix" &&
5951     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
5952
5953 if enabled yasm; then
5954     append config_files $TMPASM
5955     printf '' >$TMPASM
5956 fi
5957
5958 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
5959
5960
5961 mkdir -p doc
5962 mkdir -p tests
5963 echo "@c auto-generated by configure" > doc/config.texi
5964
5965 print_config ARCH_   "$config_files" $ARCH_LIST
5966 print_config HAVE_   "$config_files" $HAVE_LIST
5967 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
5968                                      $CONFIG_EXTRA      \
5969                                      $ALL_COMPONENTS    \
5970
5971 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
5972 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
5973
5974 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
5975 cp_if_changed $TMPH config.h
5976 touch .config
5977
5978 enabled yasm && cp_if_changed $TMPASM config.asm
5979
5980 cat > $TMPH <<EOF
5981 /* Generated by ffconf */
5982 #ifndef AVUTIL_AVCONFIG_H
5983 #define AVUTIL_AVCONFIG_H
5984 EOF
5985
5986 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
5987
5988 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
5989
5990 cp_if_changed $TMPH libavutil/avconfig.h
5991
5992 if test -n "$WARNINGS"; then
5993     printf "\n$WARNINGS"
5994     enabled fatal_warnings && exit 1
5995 fi
5996
5997 # build pkg-config files
5998
5999 lib_version(){
6000     eval printf "\"lib${1}${build_suffix} >= \$LIB$(toupper ${1})_VERSION, \""
6001 }
6002
6003 pkgconfig_generate(){
6004     name=$1
6005     shortname=${name#lib}${build_suffix}
6006     comment=$2
6007     version=$3
6008     libs=$4
6009     requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
6010     requires=${requires%, }
6011     enabled ${name#lib} || return 0
6012     mkdir -p $name
6013     cat <<EOF > $name/$name${build_suffix}.pc
6014 prefix=$prefix
6015 exec_prefix=\${prefix}
6016 libdir=$libdir
6017 includedir=$incdir
6018
6019 Name: $name
6020 Description: $comment
6021 Version: $version
6022 Requires: $(enabled shared || echo $requires)
6023 Requires.private: $(enabled shared && echo $requires)
6024 Conflicts:
6025 Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs)
6026 Libs.private: $(enabled shared && echo $libs)
6027 Cflags: -I\${includedir}
6028 EOF
6029
6030 mkdir -p doc/examples/pc-uninstalled
6031 includedir=${source_path}
6032 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
6033     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
6034 prefix=
6035 exec_prefix=
6036 libdir=\${pcfiledir}/../../../$name
6037 includedir=${includedir}
6038
6039 Name: $name
6040 Description: $comment
6041 Version: $version
6042 Requires: $requires
6043 Conflicts:
6044 Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
6045 Cflags: -I\${includedir}
6046 EOF
6047 }
6048
6049 pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBRT $LIBM"
6050 pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs"
6051 pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs"
6052 pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs"
6053 pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs"
6054 pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""
6055 pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$LIBM"
6056 pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"
6057 pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM"