]> git.sesse.net Git - ffmpeg/blob - configure
ffprobe: print stream_index with frame data
[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_protocol_deps_any="openssl gnutls"
2638 tls_protocol_select="tcp_protocol"
2639 udp_protocol_select="network"
2640 udplite_protocol_select="network"
2641 unix_protocol_deps="sys_un_h"
2642 unix_protocol_select="network"
2643
2644 # filters
2645 amovie_filter_deps="avcodec avformat"
2646 aresample_filter_deps="swresample"
2647 ass_filter_deps="libass"
2648 asyncts_filter_deps="avresample"
2649 atempo_filter_deps="avcodec"
2650 atempo_filter_select="rdft"
2651 azmq_filter_deps="libzmq"
2652 blackframe_filter_deps="gpl"
2653 boxblur_filter_deps="gpl"
2654 bs2b_filter_deps="libbs2b"
2655 colormatrix_filter_deps="gpl"
2656 cover_rect_filter_deps="avcodec avformat gpl"
2657 cropdetect_filter_deps="gpl"
2658 delogo_filter_deps="gpl"
2659 deshake_filter_select="pixelutils"
2660 drawtext_filter_deps="libfreetype"
2661 ebur128_filter_deps="gpl"
2662 eq_filter_deps="gpl"
2663 fftfilt_filter_deps="avcodec"
2664 fftfilt_filter_select="rdft"
2665 flite_filter_deps="libflite"
2666 find_rect_filter_deps="avcodec avformat gpl"
2667 frei0r_filter_deps="frei0r dlopen"
2668 frei0r_src_filter_deps="frei0r dlopen"
2669 fspp_filter_deps="gpl"
2670 geq_filter_deps="gpl"
2671 histeq_filter_deps="gpl"
2672 hqdn3d_filter_deps="gpl"
2673 interlace_filter_deps="gpl"
2674 kerndeint_filter_deps="gpl"
2675 ladspa_filter_deps="ladspa dlopen"
2676 mcdeint_filter_deps="avcodec gpl"
2677 movie_filter_deps="avcodec avformat"
2678 mpdecimate_filter_deps="gpl"
2679 mpdecimate_filter_select="pixelutils"
2680 mptestsrc_filter_deps="gpl"
2681 negate_filter_deps="lut_filter"
2682 perspective_filter_deps="gpl"
2683 pp7_filter_deps="gpl"
2684 ocv_filter_deps="libopencv"
2685 owdenoise_filter_deps="gpl"
2686 pan_filter_deps="swresample"
2687 phase_filter_deps="gpl"
2688 pp_filter_deps="gpl postproc"
2689 pullup_filter_deps="gpl"
2690 removelogo_filter_deps="avcodec avformat swscale"
2691 repeatfields_filter_deps="gpl"
2692 resample_filter_deps="avresample"
2693 sab_filter_deps="gpl swscale"
2694 scale_filter_deps="swscale"
2695 select_filter_select="pixelutils"
2696 smartblur_filter_deps="gpl swscale"
2697 showspectrum_filter_deps="avcodec"
2698 showspectrum_filter_select="rdft"
2699 spp_filter_deps="gpl avcodec"
2700 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
2701 stereo3d_filter_deps="gpl"
2702 subtitles_filter_deps="avformat avcodec libass"
2703 super2xsai_filter_deps="gpl"
2704 tinterlace_filter_deps="gpl"
2705 vidstabdetect_filter_deps="libvidstab"
2706 vidstabtransform_filter_deps="libvidstab"
2707 pixfmts_super2xsai_test_deps="super2xsai_filter"
2708 tinterlace_merge_test_deps="tinterlace_filter"
2709 tinterlace_pad_test_deps="tinterlace_filter"
2710 uspp_filter_deps="gpl avcodec"
2711 zmq_filter_deps="libzmq"
2712 zoompan_filter_deps="swscale"
2713
2714 # examples
2715 avio_reading="avformat avcodec avutil"
2716 avio_list_dir="avformat avutil"
2717 avcodec_example_deps="avcodec avutil"
2718 decoding_encoding_example_deps="avcodec avformat avutil"
2719 demuxing_decoding_example_deps="avcodec avformat avutil"
2720 extract_mvs_example_deps="avcodec avformat avutil"
2721 filter_audio_example_deps="avfilter avutil"
2722 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2723 filtering_video_example_deps="avfilter avcodec avformat avutil"
2724 metadata_example_deps="avformat avutil"
2725 muxing_example_deps="avcodec avformat avutil swscale"
2726 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2727 remuxing_example_deps="avcodec avformat avutil"
2728 resampling_audio_example_deps="avutil swresample"
2729 scaling_video_example_deps="avutil swscale"
2730 transcode_aac_example_deps="avcodec avformat swresample"
2731 transcoding_example_deps="avfilter avcodec avformat avutil"
2732
2733 # libraries, in linking order
2734 avcodec_deps="avutil"
2735 avdevice_deps="avformat avcodec avutil"
2736 avfilter_deps="avutil"
2737 avformat_deps="avcodec avutil"
2738 avresample_deps="avutil"
2739 postproc_deps="avutil gpl"
2740 swresample_deps="avutil"
2741 swscale_deps="avutil"
2742
2743 # programs
2744 ffmpeg_deps="avcodec avfilter avformat swresample"
2745 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2746                null_filter
2747                setpts_filter trim_filter"
2748 ffplay_deps="avcodec avformat swscale swresample sdl"
2749 ffplay_libs='$sdl_libs'
2750 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
2751 ffprobe_deps="avcodec avformat"
2752 ffserver_deps="avformat fork sarestart"
2753 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2754
2755 # documentation
2756 podpages_deps="perl"
2757 manpages_deps="perl pod2man"
2758 htmlpages_deps="perl"
2759 htmlpages_deps_any="makeinfo_html texi2html"
2760 txtpages_deps="perl makeinfo"
2761 doc_deps_any="manpages htmlpages podpages txtpages"
2762
2763 # default parameters
2764
2765 logfile="config.log"
2766
2767 # installation paths
2768 prefix_default="/usr/local"
2769 bindir_default='${prefix}/bin'
2770 datadir_default='${prefix}/share/ffmpeg'
2771 docdir_default='${prefix}/share/doc/ffmpeg'
2772 incdir_default='${prefix}/include'
2773 libdir_default='${prefix}/lib'
2774 mandir_default='${prefix}/share/man'
2775
2776 # toolchain
2777 ar_default="ar"
2778 cc_default="gcc"
2779 cxx_default="g++"
2780 host_cc_default="gcc"
2781 cp_f="cp -f"
2782 doxygen_default="doxygen"
2783 install="install"
2784 ln_s="ln -s -f"
2785 nm_default="nm -g"
2786 objformat="elf"
2787 pkg_config_default=pkg-config
2788 if ranlib 2>&1 | grep -q "\-D "; then
2789     ranlib_default="ranlib -D"
2790 else
2791     ranlib_default="ranlib"
2792 fi
2793 strip_default="strip"
2794 yasmexe_default="yasm"
2795 windres_default="windres"
2796
2797 # OS
2798 target_os_default=$(tolower $(uname -s))
2799 host_os=$target_os_default
2800
2801 # machine
2802 if test "$target_os_default" = aix; then
2803     arch_default=$(uname -p)
2804     strip_default="strip -X32_64"
2805 else
2806     arch_default=$(uname -m)
2807 fi
2808 cpu="generic"
2809 intrinsics="none"
2810
2811 # configurable options
2812 enable $PROGRAM_LIST
2813 enable $DOCUMENT_LIST
2814 enable $EXAMPLE_LIST
2815 enable $(filter_out avresample $LIBRARY_LIST)
2816 enable stripping
2817
2818 enable asm
2819 enable debug
2820 enable doc
2821 enable faan faandct faanidct
2822 enable optimizations
2823 enable runtime_cpudetect
2824 enable safe_bitstream_reader
2825 enable static
2826 enable swscale_alpha
2827 enable valgrind_backtrace
2828
2829 sws_max_filter_size_default=256
2830 set_default sws_max_filter_size
2831
2832 # Enable hwaccels by default.
2833 enable d3d11va dxva2 vaapi vda vdpau xvmc
2834 enable xlib
2835
2836 # build settings
2837 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2838 LIBPREF="lib"
2839 LIBSUF=".a"
2840 FULLNAME='$(NAME)$(BUILDSUF)'
2841 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2842 SLIBPREF="lib"
2843 SLIBSUF=".so"
2844 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2845 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2846 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2847 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2848 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2849 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2850
2851 asflags_filter=echo
2852 cflags_filter=echo
2853 ldflags_filter=echo
2854
2855 AS_C='-c'
2856 AS_O='-o $@'
2857 CC_C='-c'
2858 CC_E='-E -o $@'
2859 CC_O='-o $@'
2860 CXX_C='-c'
2861 CXX_O='-o $@'
2862 LD_O='-o $@'
2863 LD_LIB='-l%'
2864 LD_PATH='-L'
2865 HOSTCC_C='-c'
2866 HOSTCC_E='-E -o $@'
2867 HOSTCC_O='-o $@'
2868 HOSTLD_O='-o $@'
2869
2870 host_libs='-lm'
2871 host_cflags_filter=echo
2872 host_ldflags_filter=echo
2873
2874 target_path='$(CURDIR)'
2875
2876 # since the object filename is not given with the -MM flag, the compiler
2877 # is only able to print the basename, and we must add the path ourselves
2878 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2879 DEPFLAGS='-MM'
2880
2881 # find source path
2882 if test -f configure; then
2883     source_path=.
2884 else
2885     source_path=$(cd $(dirname "$0"); pwd)
2886     echo "$source_path" | grep -q '[[:blank:]]' &&
2887         die "Out of tree builds are impossible with whitespace in source path."
2888     test -e "$source_path/config.h" &&
2889         die "Out of tree builds are impossible with config.h in source dir."
2890 fi
2891
2892 for v in "$@"; do
2893     r=${v#*=}
2894     l=${v%"$r"}
2895     r=$(sh_quote "$r")
2896     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2897 done
2898
2899 find_things(){
2900     thing=$1
2901     pattern=$2
2902     file=$source_path/$3
2903     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2904 }
2905
2906 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2907 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2908 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2909 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2910 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2911 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2912 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2913 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2914 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2915 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2916 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2917
2918 ALL_COMPONENTS="
2919     $BSF_LIST
2920     $DECODER_LIST
2921     $DEMUXER_LIST
2922     $ENCODER_LIST
2923     $FILTER_LIST
2924     $HWACCEL_LIST
2925     $INDEV_LIST
2926     $MUXER_LIST
2927     $OUTDEV_LIST
2928     $PARSER_LIST
2929     $PROTOCOL_LIST
2930 "
2931
2932 for n in $COMPONENT_LIST; do
2933     v=$(toupper ${n%s})_LIST
2934     eval enable \$$v
2935     eval ${n}_if_any="\$$v"
2936 done
2937
2938 enable $ARCH_EXT_LIST
2939
2940 die_unknown(){
2941     echo "Unknown option \"$1\"."
2942     echo "See $0 --help for available options."
2943     exit 1
2944 }
2945
2946 print_3_columns() {
2947     cat | tr ' ' '\n' | sort | pr -r -3 -t
2948 }
2949
2950 show_list() {
2951     suffix=_$1
2952     shift
2953     echo $* | sed s/$suffix//g | print_3_columns
2954     exit 0
2955 }
2956
2957 rand_list(){
2958     IFS=', '
2959     set -- $*
2960     unset IFS
2961     for thing; do
2962         comp=${thing%:*}
2963         prob=${thing#$comp}
2964         prob=${prob#:}
2965         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2966         echo "prob ${prob:-0.5}"
2967         printf '%s\n' $comp
2968     done
2969 }
2970
2971 do_random(){
2972     action=$1
2973     shift
2974     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2975     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2976 }
2977
2978 for opt do
2979     optval="${opt#*=}"
2980     case "$opt" in
2981         --extra-ldflags=*)
2982             add_ldflags $optval
2983         ;;
2984         --extra-ldexeflags=*)
2985             add_ldexeflags $optval
2986         ;;
2987         --extra-libs=*)
2988             add_extralibs $optval
2989         ;;
2990         --disable-devices)
2991             disable $INDEV_LIST $OUTDEV_LIST
2992         ;;
2993         --enable-debug=*)
2994             debuglevel="$optval"
2995         ;;
2996         --disable-programs)
2997             disable $PROGRAM_LIST
2998         ;;
2999         --disable-everything)
3000             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3001         ;;
3002         --disable-all)
3003             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3004             disable $LIBRARY_LIST $PROGRAM_LIST doc
3005         ;;
3006         --enable-random|--disable-random)
3007             action=${opt%%-random}
3008             do_random ${action#--} $COMPONENT_LIST
3009         ;;
3010         --enable-random=*|--disable-random=*)
3011             action=${opt%%-random=*}
3012             do_random ${action#--} $optval
3013         ;;
3014         --enable-*=*|--disable-*=*)
3015             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3016             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3017             eval list=\$$(toupper $thing)_LIST
3018             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3019             list=$(filter "$name" $list)
3020             [ "$list" = "" ] && warn "Option $opt did not match anything"
3021             $action $list
3022         ;;
3023         --enable-?*|--disable-?*)
3024             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3025             if is_in $option $COMPONENT_LIST; then
3026                 test $action = disable && action=unset
3027                 eval $action \$$(toupper ${option%s})_LIST
3028             elif is_in $option $CMDLINE_SELECT; then
3029                 $action $option
3030             else
3031                 die_unknown $opt
3032             fi
3033         ;;
3034         --list-*)
3035             NAME="${opt#--list-}"
3036             is_in $NAME $COMPONENT_LIST || die_unknown $opt
3037             NAME=${NAME%s}
3038             eval show_list $NAME \$$(toupper $NAME)_LIST
3039         ;;
3040         --help|-h) show_help
3041         ;;
3042         --fatal-warnings) enable fatal_warnings
3043         ;;
3044         *)
3045             optname="${opt%%=*}"
3046             optname="${optname#--}"
3047             optname=$(echo "$optname" | sed 's/-/_/g')
3048             if is_in $optname $CMDLINE_SET; then
3049                 eval $optname='$optval'
3050             elif is_in $optname $CMDLINE_APPEND; then
3051                 append $optname "$optval"
3052             else
3053                 die_unknown $opt
3054             fi
3055         ;;
3056     esac
3057 done
3058
3059 disabled logging && logfile=/dev/null
3060
3061 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3062 set >> $logfile
3063
3064 test -n "$valgrind" && toolchain="valgrind-memcheck"
3065
3066 case "$toolchain" in
3067     clang-asan)
3068         cc_default="clang"
3069         add_cflags  -fsanitize=address
3070         add_ldflags -fsanitize=address
3071     ;;
3072     clang-tsan)
3073         cc_default="clang"
3074         add_cflags  -fsanitize=thread -pie
3075         add_ldflags -fsanitize=thread -pie
3076     ;;
3077     clang-usan)
3078         cc_default="clang"
3079         add_cflags  -fsanitize=undefined
3080         add_ldflags -fsanitize=undefined
3081     ;;
3082     gcc-asan)
3083         cc_default="gcc"
3084         add_cflags  -fsanitize=address
3085         add_ldflags -fsanitize=address
3086     ;;
3087     gcc-tsan)
3088         cc_default="gcc"
3089         add_cflags  -fsanitize=thread -pie -fPIC
3090         add_ldflags -fsanitize=thread -pie -fPIC
3091     ;;
3092     gcc-usan)
3093         cc_default="gcc"
3094         add_cflags  -fsanitize=undefined
3095         add_ldflags -fsanitize=undefined
3096     ;;
3097     valgrind-massif)
3098         target_exec_default=${valgrind:-"valgrind"}
3099         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"
3100     ;;
3101     valgrind-memcheck)
3102         target_exec_default=${valgrind:-"valgrind"}
3103         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"
3104     ;;
3105     msvc)
3106         # Check whether the current MSVC version needs the C99 converter.
3107         # From MSVC 2013 (compiler major version 18) onwards, it does actually
3108         # support enough of C99 to build ffmpeg. Default to the new
3109         # behaviour if the regexp was unable to match anything, since this
3110         # successfully parses the version number of existing supported
3111         # versions that require the converter (MSVC 2010 and 2012).
3112         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3113         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3114             cc_default="cl"
3115         else
3116             cc_default="c99wrap cl"
3117         fi
3118         ld_default="link"
3119         nm_default="dumpbin -symbols"
3120         ar_default="lib"
3121         target_os_default="win32"
3122         # Use a relative path for TMPDIR. This makes sure all the
3123         # ffconf temp files are written with a relative path, avoiding
3124         # issues with msys/win32 path conversion for MSVC parameters
3125         # such as -Fo<file> or -out:<file>.
3126         TMPDIR=.
3127     ;;
3128     icl)
3129         cc_default="icl"
3130         ld_default="xilink"
3131         nm_default="dumpbin -symbols"
3132         ar_default="xilib"
3133         target_os_default="win32"
3134         TMPDIR=.
3135     ;;
3136     gcov)
3137         add_cflags  -fprofile-arcs -ftest-coverage
3138         add_ldflags -fprofile-arcs -ftest-coverage
3139     ;;
3140     hardened)
3141         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3142         add_cflags   -fno-strict-overflow -fstack-protector-all
3143         add_ldflags  -Wl,-z,relro -Wl,-z,now
3144     ;;
3145     ?*)
3146         die "Unknown toolchain $toolchain"
3147     ;;
3148 esac
3149
3150 test -n "$cross_prefix" && enable cross_compile
3151
3152 if enabled cross_compile; then
3153     test -n "$arch" && test -n "$target_os" ||
3154         die "Must specify target arch and OS when cross-compiling"
3155 fi
3156
3157 ar_default="${cross_prefix}${ar_default}"
3158 cc_default="${cross_prefix}${cc_default}"
3159 cxx_default="${cross_prefix}${cxx_default}"
3160 nm_default="${cross_prefix}${nm_default}"
3161 pkg_config_default="${cross_prefix}${pkg_config_default}"
3162 ranlib_default="${cross_prefix}${ranlib_default}"
3163 strip_default="${cross_prefix}${strip_default}"
3164 windres_default="${cross_prefix}${windres_default}"
3165
3166 sysinclude_default="${sysroot}/usr/include"
3167
3168 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3169     target_exec target_os yasmexe
3170 enabled cross_compile || host_cc_default=$cc
3171 set_default host_cc
3172
3173 pkg_config_fail_message=""
3174 if ! $pkg_config --version >/dev/null 2>&1; then
3175     warn "$pkg_config not found, library detection may fail."
3176     pkg_config=false
3177 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3178     pkg_config_fail_message="
3179 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3180 fi
3181
3182 if test $doxygen != $doxygen_default && \
3183   ! $doxygen --version >/dev/null 2>&1; then
3184     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3185 fi
3186
3187 exesuf() {
3188     case $1 in
3189         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3190     esac
3191 }
3192
3193 EXESUF=$(exesuf $target_os)
3194 HOSTEXESUF=$(exesuf $host_os)
3195
3196 # set temporary file name
3197 : ${TMPDIR:=$TEMPDIR}
3198 : ${TMPDIR:=$TMP}
3199 : ${TMPDIR:=/tmp}
3200
3201 if [ -n "$tempprefix" ] ; then
3202     mktemp(){
3203         echo $tempprefix.${HOSTNAME}.${UID}
3204     }
3205 elif ! check_cmd mktemp -u XXXXXX; then
3206     # simple replacement for missing mktemp
3207     # NOT SAFE FOR GENERAL USE
3208     mktemp(){
3209         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3210     }
3211 fi
3212
3213 tmpfile(){
3214     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3215         (set -C; exec > $tmp) 2>/dev/null ||
3216         die "Unable to create temporary file in $TMPDIR."
3217     append TMPFILES $tmp
3218     eval $1=$tmp
3219 }
3220
3221 trap 'rm -f -- $TMPFILES' EXIT
3222
3223 tmpfile TMPASM .asm
3224 tmpfile TMPC   .c
3225 tmpfile TMPCPP .cpp
3226 tmpfile TMPE   $EXESUF
3227 tmpfile TMPH   .h
3228 tmpfile TMPM   .m
3229 tmpfile TMPO   .o
3230 tmpfile TMPS   .S
3231 tmpfile TMPSH  .sh
3232 tmpfile TMPV   .ver
3233
3234 unset -f mktemp
3235
3236 chmod +x $TMPE
3237
3238 # make sure we can execute files in $TMPDIR
3239 cat > $TMPSH 2>> $logfile <<EOF
3240 #! /bin/sh
3241 EOF
3242 chmod +x $TMPSH >> $logfile 2>&1
3243 if ! $TMPSH >> $logfile 2>&1; then
3244     cat <<EOF
3245 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3246 variable to another directory and make sure that it is not mounted noexec.
3247 EOF
3248     die "Sanity test failed."
3249 fi
3250
3251 armasm_flags(){
3252     for flag; do
3253         case $flag in
3254             # Filter out MSVC cl.exe options from cflags that shouldn't
3255             # be passed to gas-preprocessor
3256             -M[TD]*)                                            ;;
3257             *)                  echo $flag                      ;;
3258         esac
3259    done
3260 }
3261
3262 ccc_flags(){
3263     for flag; do
3264         case $flag in
3265             -std=c99)           echo -c99                       ;;
3266             -mcpu=*)            echo -arch ${flag#*=}           ;;
3267             -mieee)             echo -ieee                      ;;
3268             -O*|-fast)          echo $flag                      ;;
3269             -fno-math-errno)    echo -assume nomath_errno       ;;
3270             -g)                 echo -g3                        ;;
3271             -Wall)              echo -msg_enable level2         ;;
3272             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3273             -Wl,*)              echo $flag                      ;;
3274             -f*|-W*)                                            ;;
3275             *)                  echo $flag                      ;;
3276         esac
3277    done
3278 }
3279
3280 cparser_flags(){
3281     for flag; do
3282         case $flag in
3283             -Wno-switch)             echo -Wno-switch-enum ;;
3284             -Wno-format-zero-length) ;;
3285             -Wdisabled-optimization) ;;
3286             -Wno-pointer-sign)       echo -Wno-other ;;
3287             *)                       echo $flag ;;
3288         esac
3289     done
3290 }
3291
3292 msvc_common_flags(){
3293     for flag; do
3294         case $flag in
3295             # In addition to specifying certain flags under the compiler
3296             # specific filters, they must be specified here as well or else the
3297             # generic catch all at the bottom will print the original flag.
3298             -Wall)                ;;
3299             -std=c99)             ;;
3300             # Common flags
3301             -fomit-frame-pointer) ;;
3302             -g)                   echo -Z7 ;;
3303             -fno-math-errno)      ;;
3304             -fno-common)          ;;
3305             -fno-signed-zeros)    ;;
3306             -fPIC)                ;;
3307             -mthumb)              ;;
3308             -march=*)             ;;
3309             -lz)                  echo zlib.lib ;;
3310             -lavifil32)           echo vfw32.lib ;;
3311             -lavicap32)           echo vfw32.lib user32.lib ;;
3312             -l*)                  echo ${flag#-l}.lib ;;
3313             -L*)                  echo -libpath:${flag#-L} ;;
3314             *)                    echo $flag ;;
3315         esac
3316     done
3317 }
3318
3319 msvc_flags(){
3320     msvc_common_flags "$@"
3321     for flag; do
3322         case $flag in
3323             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3324                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3325                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3326                                        -wd4307 \
3327                                        -wd4273 -wd4554 -wd4701 ;;
3328         esac
3329     done
3330 }
3331
3332 icl_flags(){
3333     msvc_common_flags "$@"
3334     for flag; do
3335         case $flag in
3336             # Despite what Intel's documentation says -Wall, which is supported
3337             # on Windows, does enable remarks so disable them here.
3338             -Wall)                echo $flag -Qdiag-disable:remark ;;
3339             -std=c99)             echo -Qstd=c99 ;;
3340             -flto)                echo -ipo ;;
3341         esac
3342     done
3343 }
3344
3345 icc_flags(){
3346     for flag; do
3347         case $flag in
3348             -flto)                echo -ipo ;;
3349             *)                    echo $flag ;;
3350         esac
3351     done
3352 }
3353
3354 pgi_flags(){
3355     for flag; do
3356         case $flag in
3357             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3358             -fomit-frame-pointer) echo -Mnoframe ;;
3359             -g)                   echo -gopt ;;
3360             *)                    echo $flag ;;
3361         esac
3362     done
3363 }
3364
3365 suncc_flags(){
3366     for flag; do
3367         case $flag in
3368             -march=*|-mcpu=*)
3369                 case "${flag#*=}" in
3370                     native)                   echo -xtarget=native       ;;
3371                     v9|niagara)               echo -xarch=sparc          ;;
3372                     ultrasparc)               echo -xarch=sparcvis       ;;
3373                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3374                     i586|pentium)             echo -xchip=pentium        ;;
3375                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3376                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3377                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3378                     pentium4*)          echo -xtarget=pentium4           ;;
3379                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3380                     *-sse3)             echo -xarch=sse3                 ;;
3381                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3382                     bonnell)                   echo -xarch=ssse3         ;;
3383                     corei7|nehalem)            echo -xtarget=nehalem     ;;
3384                     westmere)                  echo -xtarget=westmere    ;;
3385                     silvermont)                echo -xarch=sse4_2        ;;
3386                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
3387                     core-avx*|ivybridge|haswell|broadwell)
3388                                                echo -xarch=avx           ;;
3389                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3390                     btver1)                    echo -xarch=amdsse4a      ;;
3391                     btver2|bdver*)             echo -xarch=avx           ;;
3392                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3393                     k8|opteron|athlon64|athlon-fx)
3394                                                echo -xarch=sse2a         ;;
3395                     athlon*)                   echo -xarch=pentium_proa  ;;
3396                 esac
3397                 ;;
3398             -std=c99)             echo -xc99              ;;
3399             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3400             -fPIC)                echo -KPIC -xcode=pic32 ;;
3401             -W*,*)                echo $flag              ;;
3402             -f*-*|-W*|-mimpure-text)                      ;;
3403             -shared)              echo -G                 ;;
3404             *)                    echo $flag              ;;
3405         esac
3406     done
3407 }
3408
3409 tms470_flags(){
3410     for flag; do
3411         case $flag in
3412             -march=*|-mcpu=*)
3413                 case "${flag#*=}" in
3414                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3415                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3416                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3417                     armv6*|arm11*)          echo -mv=6   ;;
3418                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3419                                             echo -mv=5e  ;;
3420                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3421                 esac
3422                 ;;
3423             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3424             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3425             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3426             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3427             -msoft-float)   echo --float_support=vfplib       ;;
3428             -O[0-3]|-mf=*)  echo $flag                        ;;
3429             -g)             echo -g -mn                       ;;
3430             -pds=*)         echo $flag                        ;;
3431             -D*|-I*)        echo $flag                        ;;
3432             --gcc|--abi=*)  echo $flag                        ;;
3433             -me)            echo $flag                        ;;
3434         esac
3435     done
3436 }
3437
3438 probe_cc(){
3439     pfx=$1
3440     _cc=$2
3441
3442     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3443     unset _ld_o _ldflags _ld_lib _ld_path
3444     unset _depflags _DEPCMD _DEPFLAGS
3445     _flags_filter=echo
3446
3447     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3448         true # no-op to avoid reading stdin in following checks
3449     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3450         _type=llvm_gcc
3451         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3452         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3453         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3454         _cflags_speed='-O3'
3455         _cflags_size='-Os'
3456     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3457         _type=gcc
3458         gcc_version=$($_cc --version | head -n1)
3459         gcc_basever=$($_cc -dumpversion)
3460         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3461         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3462         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3463         if ! $_cc -dumpversion | grep -q '^2\.'; then
3464             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3465         fi
3466         _cflags_speed='-O3'
3467         _cflags_size='-Os'
3468     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3469         _type=icc
3470         _ident=$($_cc --version | head -n1)
3471         _depflags='-MMD'
3472         _cflags_speed='-O3'
3473         _cflags_size='-Os'
3474         _cflags_noopt='-O1'
3475         _flags_filter=icc_flags
3476     elif $_cc -v 2>&1 | grep -q xlc; then
3477         _type=xlc
3478         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3479         _cflags_speed='-O5'
3480         _cflags_size='-O5 -qcompact'
3481     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3482         _type=ccc
3483         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3484         _DEPFLAGS='-M'
3485         _cflags_speed='-fast'
3486         _cflags_size='-O1'
3487         _flags_filter=ccc_flags
3488     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3489         test -d "$sysroot" || die "No valid sysroot specified."
3490         _type=armcc
3491         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3492         armcc_conf="$PWD/armcc.conf"
3493         $_cc --arm_linux_configure                 \
3494              --arm_linux_config_file="$armcc_conf" \
3495              --configure_sysroot="$sysroot"        \
3496              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3497              die "Error creating armcc configuration file."
3498         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3499         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3500         as_default="${cross_prefix}gcc"
3501         _depflags='-MMD'
3502         _cflags_speed='-O3'
3503         _cflags_size='-Os'
3504     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3505         _type=tms470
3506         _ident=$($_cc -version | head -n1 | tr -s ' ')
3507         _flags='--gcc --abi=eabi -me'
3508         _cc_e='-ppl -fe=$@'
3509         _cc_o='-fe=$@'
3510         _depflags='-ppa -ppd=$(@:.o=.d)'
3511         _cflags_speed='-O3 -mf=5'
3512         _cflags_size='-O3 -mf=2'
3513         _flags_filter=tms470_flags
3514     elif $_cc -v 2>&1 | grep -q clang; then
3515         _type=clang
3516         _ident=$($_cc --version | head -n1)
3517         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3518         _cflags_speed='-O3'
3519         _cflags_size='-Os'
3520     elif $_cc -V 2>&1 | grep -q Sun; then
3521         _type=suncc
3522         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3523         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3524         _DEPFLAGS='-xM1 -xc99'
3525         _ldflags='-std=c99'
3526         _cflags_speed='-O5'
3527         _cflags_size='-O5 -xspace'
3528         _flags_filter=suncc_flags
3529     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3530         _type=pathscale
3531         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3532         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3533         _cflags_speed='-O2'
3534         _cflags_size='-Os'
3535         _flags_filter='filter_out -Wdisabled-optimization'
3536     elif $_cc -v 2>&1 | grep -q Open64; then
3537         _type=open64
3538         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3539         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3540         _cflags_speed='-O2'
3541         _cflags_size='-Os'
3542         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3543     elif $_cc -V 2>&1 | grep -q Portland; then
3544         _type=pgi
3545         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3546         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3547         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3548         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3549         _cflags_noopt="-O"
3550         _flags_filter=pgi_flags
3551     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3552         _type=armasm
3553         _ident=$($_cc | head -n1)
3554         # 4509: "This form of conditional instruction is deprecated"
3555         _flags="-nologo -ignore 4509"
3556         _flags_filter=armasm_flags
3557     elif $_cc 2>&1 | grep -q Intel; then
3558         _type=icl
3559         _ident=$($_cc 2>&1 | head -n1)
3560         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3561         # Not only is O3 broken on 13.x+ but it is slower on all previous
3562         # versions (tested) as well.
3563         _cflags_speed="-O2"
3564         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3565         if $_cc 2>&1 | grep -q Linker; then
3566             _ld_o='-out:$@'
3567         else
3568             _ld_o='-Fe$@'
3569         fi
3570         _cc_o='-Fo$@'
3571         _cc_e='-P'
3572         _flags_filter=icl_flags
3573         _ld_lib='lib%.a'
3574         _ld_path='-libpath:'
3575         # -Qdiag-error to make icl error when seeing certain unknown arguments
3576         _flags='-nologo -Qdiag-error:4044,10157'
3577         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
3578         # with MSVC which enables it by default.
3579         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
3580         if [ $pfx = hostcc ]; then
3581             append _cflags -Dsnprintf=_snprintf
3582         fi
3583         disable stripping
3584     elif $_cc 2>&1 | grep -q Microsoft; then
3585         _type=msvc
3586         _ident=$($_cc 2>&1 | head -n1)
3587         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3588         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3589         _cflags_speed="-O2"
3590         _cflags_size="-O1"
3591         if $_cc 2>&1 | grep -q Linker; then
3592             _ld_o='-out:$@'
3593         else
3594             _ld_o='-Fe$@'
3595         fi
3596         _cc_o='-Fo$@'
3597         _cc_e='-P -Fi$@'
3598         _flags_filter=msvc_flags
3599         _ld_lib='lib%.a'
3600         _ld_path='-libpath:'
3601         _flags='-nologo'
3602         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3603         if [ $pfx = hostcc ]; then
3604             if [ -z "$cl_major_ver" ] || [ $cl_major_ver -le 18 ]; then
3605                 append _cflags -Dsnprintf=_snprintf
3606             fi
3607         fi
3608         disable stripping
3609     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3610         _type=cparser
3611         _ident=$($_cc --version | head -n1)
3612         _depflags='-MMD'
3613         _cflags_speed='-O4'
3614         _cflags_size='-O2'
3615         _flags_filter=cparser_flags
3616     fi
3617
3618     eval ${pfx}_type=\$_type
3619     eval ${pfx}_ident=\$_ident
3620 }
3621
3622 set_ccvars(){
3623     eval ${1}_C=\${_cc_c-\${${1}_C}}
3624     eval ${1}_E=\${_cc_e-\${${1}_E}}
3625     eval ${1}_O=\${_cc_o-\${${1}_O}}
3626
3627     if [ -n "$_depflags" ]; then
3628         eval ${1}_DEPFLAGS=\$_depflags
3629     else
3630         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3631         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3632         eval DEP${1}FLAGS=\$_flags
3633     fi
3634 }
3635
3636 probe_cc cc "$cc"
3637 cflags_filter=$_flags_filter
3638 cflags_speed=$_cflags_speed
3639 cflags_size=$_cflags_size
3640 cflags_noopt=$_cflags_noopt
3641 add_cflags $_flags $_cflags
3642 cc_ldflags=$_ldflags
3643 set_ccvars CC
3644
3645 probe_cc hostcc "$host_cc"
3646 host_cflags_filter=$_flags_filter
3647 add_host_cflags  $_flags $_cflags
3648 set_ccvars HOSTCC
3649
3650 test -n "$cc_type" && enable $cc_type ||
3651     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3652
3653 : ${as_default:=$cc}
3654 : ${dep_cc_default:=$cc}
3655 : ${ld_default:=$cc}
3656 : ${host_ld_default:=$host_cc}
3657 set_default ar as dep_cc ld host_ld windres
3658
3659 probe_cc as "$as"
3660 asflags_filter=$_flags_filter
3661 add_asflags $_flags $_cflags
3662 set_ccvars AS
3663
3664 probe_cc ld "$ld"
3665 ldflags_filter=$_flags_filter
3666 add_ldflags $_flags $_ldflags
3667 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3668 LD_O=${_ld_o-$LD_O}
3669 LD_LIB=${_ld_lib-$LD_LIB}
3670 LD_PATH=${_ld_path-$LD_PATH}
3671
3672 probe_cc hostld "$host_ld"
3673 host_ldflags_filter=$_flags_filter
3674 add_host_ldflags $_flags $_ldflags
3675 HOSTLD_O=${_ld_o-$HOSTLD_O}
3676
3677 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3678     probe_cc depcc "$dep_cc"
3679     CCDEP=${_DEPCMD:-$DEPCMD}
3680     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3681     DEPCCFLAGS=$_flags
3682 fi
3683
3684 if $ar 2>&1 | grep -q Microsoft; then
3685     arflags="-nologo"
3686     ar_o='-out:$@'
3687 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3688     arflags="rq"
3689     ar_o='$@'
3690 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3691     arflags='-Xany -r -c'
3692     ar_o='$@'
3693 elif $ar 2>&1 | grep -q "\[D\] "; then
3694     arflags="rcD"
3695     ar_o='$@'
3696 else
3697     arflags="rc"
3698     ar_o='$@'
3699 fi
3700
3701 add_cflags $extra_cflags
3702 add_cxxflags $extra_cxxflags
3703 add_asflags $extra_cflags
3704
3705 if test -n "$sysroot"; then
3706     case "$cc_type" in
3707         gcc|llvm_gcc|clang)
3708             add_cppflags --sysroot="$sysroot"
3709             add_ldflags --sysroot="$sysroot"
3710 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3711             add_cppflags -isysroot "$sysroot"
3712             add_ldflags -isysroot "$sysroot"
3713         ;;
3714         tms470)
3715             add_cppflags -I"$sysinclude"
3716             add_ldflags  --sysroot="$sysroot"
3717         ;;
3718     esac
3719 fi
3720
3721 if test "$cpu" = host; then
3722     enabled cross_compile &&
3723         die "--cpu=host makes no sense when cross-compiling."
3724
3725     case "$cc_type" in
3726         gcc|llvm_gcc)
3727             check_native(){
3728                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3729                 sed -n "/cc1.*$1=/{
3730                             s/.*$1=\\([^ ]*\\).*/\\1/
3731                             p
3732                             q
3733                         }" $TMPE
3734             }
3735             cpu=$(check_native -march || check_native -mcpu)
3736         ;;
3737     esac
3738
3739     test "${cpu:-host}" = host &&
3740         die "--cpu=host not supported with compiler $cc"
3741 fi
3742
3743 # Deal with common $arch aliases
3744 case "$arch" in
3745     aarch64|arm64)
3746         arch="aarch64"
3747     ;;
3748     arm*|iPad*|iPhone*)
3749         arch="arm"
3750     ;;
3751     mips*|IP*)
3752         arch="mips"
3753     ;;
3754     parisc*|hppa*)
3755         arch="parisc"
3756     ;;
3757     "Power Macintosh"|ppc*|powerpc*)
3758         arch="ppc"
3759     ;;
3760     s390|s390x)
3761         arch="s390"
3762     ;;
3763     sh4|sh)
3764         arch="sh4"
3765     ;;
3766     sun4u|sparc*)
3767         arch="sparc"
3768     ;;
3769     tilegx|tile-gx)
3770         arch="tilegx"
3771     ;;
3772     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3773         arch="x86"
3774     ;;
3775 esac
3776
3777 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3778 enable $arch
3779
3780 # Add processor-specific flags
3781 if enabled aarch64; then
3782
3783     case $cpu in
3784         armv*)
3785             cpuflags="-march=$cpu"
3786         ;;
3787         *)
3788             cpuflags="-mcpu=$cpu"
3789         ;;
3790     esac
3791
3792 elif enabled alpha; then
3793
3794     cpuflags="-mcpu=$cpu"
3795
3796 elif enabled arm; then
3797
3798     check_arm_arch() {
3799         check_cpp_condition stddef.h \
3800             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3801             $cpuflags
3802     }
3803
3804     probe_arm_arch() {
3805         if   check_arm_arch 4;        then echo armv4;
3806         elif check_arm_arch 4T;       then echo armv4t;
3807         elif check_arm_arch 5;        then echo armv5;
3808         elif check_arm_arch 5E;       then echo armv5e;
3809         elif check_arm_arch 5T;       then echo armv5t;
3810         elif check_arm_arch 5TE;      then echo armv5te;
3811         elif check_arm_arch 5TEJ;     then echo armv5te;
3812         elif check_arm_arch 6;        then echo armv6;
3813         elif check_arm_arch 6J;       then echo armv6j;
3814         elif check_arm_arch 6K;       then echo armv6k;
3815         elif check_arm_arch 6Z;       then echo armv6z;
3816         elif check_arm_arch 6ZK;      then echo armv6zk;
3817         elif check_arm_arch 6T2;      then echo armv6t2;
3818         elif check_arm_arch 7;        then echo armv7;
3819         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3820         elif check_arm_arch 7S;       then echo armv7-a;
3821         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3822         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3823         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3824         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3825         fi
3826     }
3827
3828     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3829
3830     case $cpu in
3831         armv*)
3832             cpuflags="-march=$cpu"
3833             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3834         ;;
3835         *)
3836             cpuflags="-mcpu=$cpu"
3837             case $cpu in
3838                 cortex-a*)                               subarch=armv7a  ;;
3839                 cortex-r*)                               subarch=armv7r  ;;
3840                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3841                 arm11*)                                  subarch=armv6   ;;
3842                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3843                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3844                 *)                             subarch=$(probe_arm_arch) ;;
3845             esac
3846         ;;
3847     esac
3848
3849     case "$subarch" in
3850         armv5t*)    enable fast_clz                ;;
3851         armv[6-8]*)
3852             enable fast_clz
3853             disabled fast_unaligned || enable fast_unaligned
3854             ;;
3855     esac
3856
3857 elif enabled avr32; then
3858
3859     case $cpu in
3860         ap7[02]0[0-2])
3861             subarch="avr32_ap"
3862             cpuflags="-mpart=$cpu"
3863         ;;
3864         ap)
3865             subarch="avr32_ap"
3866             cpuflags="-march=$cpu"
3867         ;;
3868         uc3[ab]*)
3869             subarch="avr32_uc"
3870             cpuflags="-mcpu=$cpu"
3871         ;;
3872         uc)
3873             subarch="avr32_uc"
3874             cpuflags="-march=$cpu"
3875         ;;
3876     esac
3877
3878 elif enabled bfin; then
3879
3880     cpuflags="-mcpu=$cpu"
3881
3882 elif enabled mips; then
3883
3884     cpuflags="-march=$cpu"
3885
3886     case $cpu in
3887         24kc)
3888             disable mips32r5
3889             disable mips64r6
3890             disable mipsfpu
3891             disable mipsdspr1
3892             disable mipsdspr2
3893             disable msa
3894         ;;
3895         24kf*)
3896             disable mips32r5
3897             disable mips64r6
3898             disable mipsdspr1
3899             disable mipsdspr2
3900             disable msa
3901         ;;
3902         24kec|34kc|1004kc)
3903             disable mips32r5
3904             disable mips64r6
3905             disable mipsfpu
3906             disable mipsdspr2
3907             disable msa
3908         ;;
3909         24kef*|34kf*|1004kf*)
3910             disable mips32r5
3911             disable mips64r6
3912             disable mipsdspr2
3913             disable msa
3914         ;;
3915         74kc)
3916             disable mips32r5
3917             disable mips64r6
3918             disable mipsfpu
3919             disable msa
3920         ;;
3921         74kf)
3922             disable mips32r5
3923             disable mips64r6
3924             disable msa
3925         ;;
3926         p5600)
3927             disable mips64r6
3928             disable mipsdspr1
3929             disable mipsdspr2
3930
3931             check_cflags "-mtune=p5600"
3932         ;;
3933         i6400)
3934             disable mips32r5
3935             disable mipsdspr1
3936             disable mipsdspr2
3937             disable mipsfpu
3938
3939             check_cflags "-mtune=i6400 -mabi=64"
3940             check_ldflags "-mabi=64"
3941         ;;
3942         loongson3*)
3943             disable mipsfpu
3944             disable mips32r2
3945             disable mips32r5
3946             disable mips64r6
3947             disable mipsdspr1
3948             disable mipsdspr2
3949             disable msa
3950             enable local_aligned_8 local_aligned_16
3951             enable simd_align_16
3952             enable fast_64bit
3953             enable fast_clz
3954             enable fast_cmov
3955             enable fast_unaligned
3956             disable aligned_stack
3957             cpuflags="-march=loongson3a -mhard-float"
3958         ;;
3959         generic)
3960             disable mips32r5
3961             disable mips64r6
3962             disable msa
3963         ;;
3964     esac
3965
3966 elif enabled ppc; then
3967
3968     disable ldbrx
3969     disable vsx
3970
3971     case $(tolower $cpu) in
3972         601|ppc601|powerpc601)
3973             cpuflags="-mcpu=601"
3974             disable altivec
3975         ;;
3976         603*|ppc603*|powerpc603*)
3977             cpuflags="-mcpu=603"
3978             disable altivec
3979         ;;
3980         604*|ppc604*|powerpc604*)
3981             cpuflags="-mcpu=604"
3982             disable altivec
3983         ;;
3984         g3|75*|ppc75*|powerpc75*)
3985             cpuflags="-mcpu=750"
3986             disable altivec
3987         ;;
3988         g4|745*|ppc745*|powerpc745*)
3989             cpuflags="-mcpu=7450"
3990         ;;
3991         74*|ppc74*|powerpc74*)
3992             cpuflags="-mcpu=7400"
3993         ;;
3994         g5|970|ppc970|powerpc970)
3995             cpuflags="-mcpu=970"
3996         ;;
3997         power[3-8]*)
3998             cpuflags="-mcpu=$cpu"
3999         ;;
4000         cell)
4001             cpuflags="-mcpu=cell"
4002             enable ldbrx
4003         ;;
4004         e500mc)
4005             cpuflags="-mcpu=e500mc"
4006             disable altivec
4007         ;;
4008         e500v2)
4009             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4010             disable altivec
4011             disable dcbzl
4012         ;;
4013         e500)
4014             cpuflags="-mcpu=8540 -mhard-float"
4015             disable altivec
4016             disable dcbzl
4017         ;;
4018     esac
4019
4020 elif enabled sparc; then
4021
4022     case $cpu in
4023         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4024             cpuflags="-mcpu=$cpu"
4025         ;;
4026         ultrasparc*|niagara[234])
4027             cpuflags="-mcpu=$cpu"
4028         ;;
4029     esac
4030
4031 elif enabled x86; then
4032
4033     case $cpu in
4034         i[345]86|pentium)
4035             cpuflags="-march=$cpu"
4036             disable i686
4037             disable mmx
4038         ;;
4039         # targets that do NOT support nopl and conditional mov (cmov)
4040         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4041             cpuflags="-march=$cpu"
4042             disable i686
4043         ;;
4044         # targets that do support nopl and conditional mov (cmov)
4045         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4046         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
4047             cpuflags="-march=$cpu"
4048             enable i686
4049             enable fast_cmov
4050         ;;
4051         # targets that do support conditional mov but on which it's slow
4052         pentium4|pentium4m|prescott|nocona)
4053             cpuflags="-march=$cpu"
4054             enable i686
4055             disable fast_cmov
4056         ;;
4057     esac
4058
4059 fi
4060
4061 if [ "$cpu" != generic ]; then
4062     add_cflags  $cpuflags
4063     add_asflags $cpuflags
4064 fi
4065
4066 # compiler sanity check
4067 check_exec <<EOF
4068 int main(void){ return 0; }
4069 EOF
4070 if test "$?" != 0; then
4071     echo "$cc is unable to create an executable file."
4072     if test -z "$cross_prefix" && ! enabled cross_compile ; then
4073         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4074         echo "Only do this if you know what cross compiling means."
4075     fi
4076     die "C compiler test failed."
4077 fi
4078
4079 add_cppflags -D_ISOC99_SOURCE
4080 add_cxxflags -D__STDC_CONSTANT_MACROS
4081 check_cflags -std=c99
4082 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4083 #include <stdlib.h>
4084 EOF
4085 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4086 #include <stdlib.h>
4087 EOF
4088
4089 add_host_cppflags -D_ISOC99_SOURCE
4090 check_host_cflags -std=c99
4091 check_host_cflags -Wall
4092 check_host_cflags -O3
4093
4094 check_64bit(){
4095     arch32=$1
4096     arch64=$2
4097     expr=$3
4098     check_code cc "" "int test[2*($expr) - 1]" &&
4099         subarch=$arch64 || subarch=$arch32
4100 }
4101
4102 case "$arch" in
4103     aarch64|alpha|ia64)
4104         spic=$shared
4105     ;;
4106     mips)
4107         check_64bit mips mips64 '_MIPS_SIM > 1'
4108         spic=$shared
4109     ;;
4110     parisc)
4111         check_64bit parisc parisc64 'sizeof(void *) > 4'
4112         spic=$shared
4113     ;;
4114     ppc)
4115         check_64bit ppc ppc64 'sizeof(void *) > 4'
4116         spic=$shared
4117     ;;
4118     s390)
4119         check_64bit s390 s390x 'sizeof(void *) > 4'
4120         spic=$shared
4121     ;;
4122     sparc)
4123         check_64bit sparc sparc64 'sizeof(void *) > 4'
4124         spic=$shared
4125     ;;
4126     x86)
4127         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4128         # Treat x32 as x64 for now. Note it also needs spic=$shared
4129         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4130             subarch=x86_64
4131         if test "$subarch" = "x86_64"; then
4132             spic=$shared
4133         fi
4134     ;;
4135     ppc)
4136         check_cc <<EOF && subarch="ppc64"
4137         int test[(int)sizeof(char*) - 7];
4138 EOF
4139     ;;
4140 esac
4141
4142 enable $subarch
4143 enabled spic && enable_weak pic
4144
4145 # OS specific
4146 case $target_os in
4147     aix)
4148         SHFLAGS=-shared
4149         add_cppflags '-I\$(SRC_PATH)/compat/aix'
4150         enabled shared && add_ldflags -Wl,-brtl
4151         ;;
4152     android)
4153         disable symver
4154         enable section_data_rel_ro
4155         SLIB_INSTALL_NAME='$(SLIBNAME)'
4156         SLIB_INSTALL_LINKS=
4157         # soname not set on purpose
4158         SHFLAGS=-shared
4159         ;;
4160     haiku)
4161         prefix_default="/boot/common"
4162         network_extralibs="-lnetwork"
4163         host_libs=
4164         ;;
4165     sunos)
4166         SHFLAGS='-shared -Wl,-h,$$(@F)'
4167         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4168         network_extralibs="-lsocket -lnsl"
4169         add_cppflags -D__EXTENSIONS__
4170         # When using suncc to build, the Solaris linker will mark
4171         # an executable with each instruction set encountered by
4172         # the Solaris assembler.  As our libraries contain their own
4173         # guards for processor-specific code, instead suppress
4174         # generation of the HWCAPS ELF section on Solaris x86 only.
4175         enabled_all suncc x86 &&
4176             echo "hwcap_1 = OVERRIDE;" > mapfile &&
4177             add_ldflags -Wl,-M,mapfile
4178         nm_default='nm -P -g'
4179         ;;
4180     netbsd)
4181         disable symver
4182         oss_indev_extralibs="-lossaudio"
4183         oss_outdev_extralibs="-lossaudio"
4184         enabled gcc || check_ldflags -Wl,-zmuldefs
4185         ;;
4186     openbsd|bitrig)
4187         disable symver
4188         SHFLAGS='-shared'
4189         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4190         SLIB_INSTALL_LINKS=
4191         oss_indev_extralibs="-lossaudio"
4192         oss_outdev_extralibs="-lossaudio"
4193         ;;
4194     dragonfly)
4195         disable symver
4196         ;;
4197     freebsd)
4198         ;;
4199     bsd/os)
4200         add_extralibs -lpoll -lgnugetopt
4201         strip="strip -d"
4202         ;;
4203     darwin)
4204         enabled ppc && add_asflags -force_cpusubtype_ALL
4205         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4206         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4207         strip="${strip} -x"
4208         add_ldflags -Wl,-dynamic,-search_paths_first
4209         SLIBSUF=".dylib"
4210         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4211         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4212         objformat="macho"
4213         enabled x86_64 && objformat="macho64"
4214         enabled_any pic shared x86_64 ||
4215             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4216         ;;
4217     mingw32*)
4218         if test $target_os = "mingw32ce"; then
4219             disable network
4220         else
4221             target_os=mingw32
4222         fi
4223         LIBTARGET=i386
4224         if enabled x86_64; then
4225             LIBTARGET="i386:x86-64"
4226         elif enabled arm; then
4227             LIBTARGET=arm-wince
4228         fi
4229         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4230         check_ldflags -Wl,--nxcompat
4231         check_ldflags -Wl,--dynamicbase
4232         enabled x86_32 && check_ldflags -Wl,--large-address-aware
4233         shlibdir_default="$bindir_default"
4234         SLIBPREF=""
4235         SLIBSUF=".dll"
4236         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4237         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4238         dlltool="${cross_prefix}dlltool"
4239         if check_cmd lib.exe -list; then
4240             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4241             if enabled x86_64; then
4242                 LIBTARGET=x64
4243             fi
4244         elif check_cmd $dlltool --version; then
4245             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)'
4246         fi
4247         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4248         SLIB_INSTALL_LINKS=
4249         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4250         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4251         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'
4252         objformat="win32"
4253         ranlib=:
4254         enable dos_paths
4255         ;;
4256     win32|win64)
4257         disable symver
4258         if enabled shared; then
4259             # Link to the import library instead of the normal static library
4260             # for shared libs.
4261             LD_LIB='%.lib'
4262             # Cannot build both shared and static libs with MSVC or icl.
4263             disable static
4264         fi
4265         enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4266         shlibdir_default="$bindir_default"
4267         SLIBPREF=""
4268         SLIBSUF=".dll"
4269         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4270         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4271         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4272         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4273         SLIB_INSTALL_LINKS=
4274         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4275         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4276         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4277         objformat="win32"
4278         ranlib=:
4279         enable dos_paths
4280         ;;
4281     cygwin*)
4282         target_os=cygwin
4283         shlibdir_default="$bindir_default"
4284         SLIBPREF="cyg"
4285         SLIBSUF=".dll"
4286         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4287         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4288         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4289         SLIB_INSTALL_LINKS=
4290         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4291         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4292         objformat="win32"
4293         enable dos_paths
4294         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4295         ;;
4296     *-dos|freedos|opendos)
4297         network_extralibs="-lsocket"
4298         objformat="coff"
4299         enable dos_paths
4300         add_cppflags -U__STRICT_ANSI__
4301         ;;
4302     linux)
4303         enable dv1394
4304         enable section_data_rel_ro
4305         ;;
4306     irix*)
4307         target_os=irix
4308         ranlib="echo ignoring ranlib"
4309         ;;
4310     os/2*)
4311         strip="lxlite -CS"
4312         ln_s="cp -f"
4313         objformat="aout"
4314         add_cppflags -D_GNU_SOURCE
4315         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4316         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4317         LIBSUF="_s.a"
4318         SLIBPREF=""
4319         SLIBSUF=".dll"
4320         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4321         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4322         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4323             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4324             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4325             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4326             emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4327         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4328             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4329         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4330         enable dos_paths
4331         enable_weak os2threads
4332         ;;
4333     gnu/kfreebsd)
4334         add_cppflags -D_BSD_SOURCE
4335         ;;
4336     gnu)
4337         ;;
4338     qnx)
4339         add_cppflags -D_QNX_SOURCE
4340         network_extralibs="-lsocket"
4341         ;;
4342     symbian)
4343         SLIBSUF=".dll"
4344         enable dos_paths
4345         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4346         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4347         add_ldflags -Wl,--target1-abs,--no-undefined \
4348                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4349                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4350         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4351                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4352                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4353         ;;
4354     osf1)
4355         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4356         ;;
4357     minix)
4358         ;;
4359     plan9)
4360         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
4361                      -D_REENTRANT_SOURCE        \
4362                      -D_RESEARCH_SOURCE         \
4363                      -DFD_SETSIZE=96            \
4364                      -DHAVE_SOCK_OPTS
4365         add_compat strtod.o strtod=avpriv_strtod
4366         network_extralibs='-lbsd'
4367         exeobjs=compat/plan9/main.o
4368         disable ffserver
4369         cp_f='cp'
4370         ;;
4371     none)
4372         ;;
4373     *)
4374         die "Unknown OS '$target_os'."
4375         ;;
4376 esac
4377
4378 # determine libc flavour
4379
4380 probe_libc(){
4381     pfx=$1
4382     pfx_no_=${pfx%_}
4383     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4384     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4385         eval ${pfx}libc_type=uclibc
4386         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4387     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4388         eval ${pfx}libc_type=glibc
4389         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4390     # MinGW headers can be installed on Cygwin, so check for newlib first.
4391     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4392         eval ${pfx}libc_type=newlib
4393         add_${pfx}cppflags -U__STRICT_ANSI__
4394     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4395     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4396         eval ${pfx}libc_type=mingw64
4397         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
4398             add_compat msvcrt/snprintf.o
4399             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
4400         fi
4401         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4402         eval test \$${pfx_no_}cc_type = "gcc" &&
4403             add_${pfx}cppflags -D__printf__=__gnu_printf__
4404     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4405          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4406         eval ${pfx}libc_type=mingw32
4407         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4408             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4409             die "ERROR: MinGW32 runtime version must be >= 3.15."
4410         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4411         eval test \$${pfx_no_}cc_type = "gcc" &&
4412             add_${pfx}cppflags -D__printf__=__gnu_printf__
4413     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4414         eval ${pfx}libc_type=msvcrt
4415         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4416         # 0x601 by default unless something else is set by the user.
4417         # This can easily lead to us detecting functions only present
4418         # in such new versions and producing binaries requiring windows 7.0.
4419         # Therefore explicitly set the default to XP unless the user has
4420         # set something else on the command line.
4421         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4422             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
4423     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4424         eval ${pfx}libc_type=klibc
4425     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4426         eval ${pfx}libc_type=bionic
4427     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4428         eval ${pfx}libc_type=solaris
4429         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4430     fi
4431     check_${pfx}cc <<EOF
4432 #include <time.h>
4433 void *v = localtime_r;
4434 EOF
4435 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
4436 #include <time.h>
4437 void *v = localtime_r;
4438 EOF
4439
4440 }
4441
4442 probe_libc
4443 test -n "$libc_type" && enable libc_$libc_type
4444 probe_libc host_
4445 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4446
4447 case $libc_type in
4448     bionic)
4449         add_compat strtod.o strtod=avpriv_strtod
4450         ;;
4451     msvcrt)
4452         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -le 18 ]; then
4453             add_compat strtod.o strtod=avpriv_strtod
4454             add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4455                                          _snprintf=avpriv_snprintf  \
4456                                          vsnprintf=avpriv_vsnprintf
4457         fi
4458         ;;
4459 esac
4460
4461 # hacks for compiler/libc/os combinations
4462
4463 if enabled_all tms470 libc_glibc; then
4464     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4465     add_cppflags -D__USER_LABEL_PREFIX__=
4466     add_cppflags -D__builtin_memset=memset
4467     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4468     add_cflags   -pds=48    # incompatible redefinition of macro
4469 fi
4470
4471 if enabled_all ccc libc_glibc; then
4472     add_ldflags -Wl,-z,now  # calls to libots crash without this
4473 fi
4474
4475 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4476     add_cppflags '-I\$(SRC_PATH)/compat/float'
4477
4478 esc(){
4479     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4480 }
4481
4482 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
4483
4484 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4485
4486 set_default libdir
4487 : ${shlibdir_default:="$libdir"}
4488
4489 set_default $PATHS_LIST
4490 set_default nm
4491
4492 # we need to build at least one lib type
4493 if ! enabled_any static shared; then
4494     cat <<EOF
4495 At least one library type must be built.
4496 Specify --enable-static to build the static libraries or --enable-shared to
4497 build the shared libraries as well. To only build the shared libraries specify
4498 --disable-static in addition to --enable-shared.
4499 EOF
4500     exit 1;
4501 fi
4502
4503 die_license_disabled() {
4504     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4505 }
4506
4507 die_license_disabled_gpl() {
4508     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4509 }
4510
4511 die_license_disabled gpl frei0r
4512 die_license_disabled gpl libcdio
4513 die_license_disabled gpl libsmbclient
4514 die_license_disabled gpl libutvideo
4515 die_license_disabled gpl libvidstab
4516 die_license_disabled gpl libx264
4517 die_license_disabled gpl libx265
4518 die_license_disabled gpl libxavs
4519 die_license_disabled gpl libxvid
4520 die_license_disabled gpl libzvbi
4521 die_license_disabled gpl x11grab
4522
4523 die_license_disabled nonfree libaacplus
4524 die_license_disabled nonfree libfaac
4525 die_license_disabled nonfree nvenc
4526 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4527 enabled gpl && die_license_disabled_gpl nonfree openssl
4528
4529 die_license_disabled version3 libopencore_amrnb
4530 die_license_disabled version3 libopencore_amrwb
4531 die_license_disabled version3 libsmbclient
4532 die_license_disabled version3 libvo_aacenc
4533 die_license_disabled version3 libvo_amrwbenc
4534
4535 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4536
4537 disabled optimizations || check_cflags -fomit-frame-pointer
4538
4539 enable_weak_pic() {
4540     disabled pic && return
4541     enable pic
4542     add_cppflags -DPIC
4543     case "$target_os" in
4544     mingw*|cygwin*)
4545         ;;
4546     *)
4547         add_cflags -fPIC
4548         ;;
4549     esac
4550     add_asflags  -fPIC
4551 }
4552
4553 enabled pic && enable_weak_pic
4554
4555 check_cc <<EOF || die "Symbol mangling check failed."
4556 int ff_extern;
4557 EOF
4558 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4559 extern_prefix=${sym%%ff_extern*}
4560
4561 check_cc <<EOF && enable_weak inline_asm
4562 void foo(void) { __asm__ volatile ("" ::); }
4563 EOF
4564
4565 _restrict=
4566 for restrict_keyword in restrict __restrict__ __restrict; do
4567     check_cc <<EOF && _restrict=$restrict_keyword && break
4568 void foo(char * $restrict_keyword p);
4569 EOF
4570 done
4571
4572 check_cc <<EOF && enable pragma_deprecated
4573 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4574 EOF
4575
4576 check_cc <<EOF && enable attribute_packed
4577 struct { int x; } __attribute__((packed)) x;
4578 EOF
4579
4580 check_cc <<EOF && enable attribute_may_alias
4581 union { int x; } __attribute__((may_alias)) x;
4582 EOF
4583
4584 check_cc <<EOF || die "endian test failed"
4585 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4586 EOF
4587 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4588
4589 if  [ "$cpu" = "power7" ] || [ "$cpu" = "power8" ] || enabled ppc64; then
4590     if ! enabled bigendian && enabled altivec ;then
4591         enable vsx
4592     fi
4593 fi
4594
4595 check_gas() {
4596     log "check_gas using '$as' as AS"
4597     # :vararg is used on aarch64, arm and ppc altivec
4598     check_as <<EOF || return 1
4599 .macro m n, y:vararg=0
4600 \n: .int \y
4601 .endm
4602 m x
4603 EOF
4604     # .altmacro is only used in arm asm
4605     ! enabled arm || check_as <<EOF || return 1
4606 .altmacro
4607 EOF
4608     enable gnu_as
4609     return 0
4610 }
4611
4612 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4613     nogas=:
4614     enabled_any arm aarch64 && nogas=die
4615     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
4616     as_noop=-v
4617
4618     case $as_type in
4619         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4620         gcc)  gaspp_as_type=gas ;;
4621         *)    gaspp_as_type=$as_type ;;
4622     esac
4623
4624     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4625
4626     test "${as#*gas-preprocessor.pl}" != "$as" ||
4627     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
4628         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
4629
4630     if ! check_gas ; then
4631         as=${gas:=$as}
4632         check_gas || \
4633             $nogas "GNU assembler not found, install/update gas-preprocessor"
4634     fi
4635
4636     check_as <<EOF && enable as_func
4637 .func test
4638 .endfunc
4639 EOF
4640 fi
4641
4642 check_inline_asm inline_asm_labels '"1:\n"'
4643
4644 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
4645
4646 if enabled aarch64; then
4647     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4648     # internal assembler in clang 3.3 does not support this instruction
4649     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4650     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4651
4652     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4653
4654 elif enabled alpha; then
4655
4656     check_cflags -mieee
4657
4658 elif enabled arm; then
4659
4660     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4661 float func(float a, float b){ return a+b; }
4662 EOF
4663
4664     enabled thumb && check_cflags -mthumb || check_cflags -marm
4665
4666     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4667         enable vfp_args
4668     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4669         case "${cross_prefix:-$cc}" in
4670             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4671             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4672 __asm__ (".eabi_attribute 28, 1");
4673 int main(void) { return 0; }
4674 EOF
4675         esac
4676         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4677     fi
4678
4679     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4680     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4681     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4682     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4683     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4684     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4685     enabled setend  && check_insn setend  'setend be'
4686
4687     [ $target_os = linux ] || [ $target_os = android ] ||
4688         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4689             $ARCH_EXT_LIST_ARM
4690
4691     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4692
4693     check_as <<EOF && enable as_dn_directive
4694 ra .dn d0.i16
4695 .unreq ra
4696 EOF
4697
4698     # llvm's integrated assembler supports .object_arch from llvm 3.5
4699     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4700 .object_arch armv4
4701 EOF
4702
4703     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4704
4705 elif enabled mips; then
4706
4707     # Enable minimum ISA based on selected options
4708     if enabled mips64 && (enabled mipsdspr1 || enabled mipsdspr2); then
4709         add_cflags "-mips64r2"
4710         add_asflags "-mips64r2"
4711     elif enabled mips64 && enabled mipsfpu && disabled loongson3; then
4712         add_cflags "-mips64"
4713         add_asflags "-mips64"
4714     elif enabled mipsdspr1 || enabled mipsdspr2; then
4715         add_cflags "-mips32r2 -mfp32"
4716         add_asflags "-mips32r2 -mfp32"
4717     elif enabled mips32r5 || enabled mips64r6; then
4718         check_cflags "-mfp64"
4719         check_ldflags "-mfp64"
4720     fi
4721
4722     enabled mips32r5  && check_cflags "-mips32r5 -msched-weight -mload-store-pairs -funroll-loops" &&
4723      check_ldflags "-mips32r5" &&
4724      check_inline_asm mips32r5  '"ulw $t0, ($t1)"'
4725     enabled mips64r6  && check_cflags "-mips64r6 -msched-weight -mload-store-pairs -funroll-loops" &&
4726      check_ldflags "-mips64r6" &&
4727      check_inline_asm mips64r6  '"aui $t0, $t1, 1"'
4728     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4729      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4730     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4731      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4732     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4733      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4734     enabled msa       && check_cflags "-mmsa" && check_ldflags "-mmsa" &&
4735      check_inline_asm msa       '"addvi.b $w0, $w1, 1"'
4736     enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
4737
4738     enabled mips32r5 && add_asflags "-mips32r5 -mfp64"
4739     enabled mips64r6 && add_asflags "-mips64r6 -mfp64"
4740     enabled msa && add_asflags "-mmsa"
4741
4742 elif enabled parisc; then
4743
4744     if enabled gcc; then
4745         case $($cc -dumpversion) in
4746             4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
4747         esac
4748     fi
4749
4750 elif enabled ppc; then
4751
4752     enable local_aligned_8 local_aligned_16 local_aligned_32
4753
4754     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4755     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4756     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4757     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4758
4759     # AltiVec flags: The FSF version of GCC differs from the Apple version
4760     if enabled altivec; then
4761         check_cflags -maltivec -mabi=altivec &&
4762         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4763         check_cflags -faltivec
4764
4765         # check if our compiler supports Motorola AltiVec C API
4766         check_cc <<EOF || disable altivec
4767 $inc_altivec_h
4768 int main(void) {
4769     vector signed int v1 = (vector signed int) { 0 };
4770     vector signed int v2 = (vector signed int) { 1 };
4771     v1 = vec_add(v1, v2);
4772     return 0;
4773 }
4774 EOF
4775
4776         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4777     fi
4778
4779     if enabled vsx; then
4780         check_cflags -mvsx
4781     fi
4782 elif enabled x86; then
4783
4784     check_builtin rdtsc    intrin.h   "__rdtsc()"
4785     check_builtin mm_empty mmintrin.h "_mm_empty()"
4786
4787     enable local_aligned_8 local_aligned_16 local_aligned_32
4788
4789     # check whether EBP is available on x86
4790     # As 'i' is stored on the stack, this program will crash
4791     # if the base pointer is used to access it because the
4792     # base pointer is cleared in the inline assembly code.
4793     check_exec_crash <<EOF && enable ebp_available
4794 volatile int i=0;
4795 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4796 return i;
4797 EOF
4798
4799     # check whether EBX is available on x86
4800     check_inline_asm ebx_available '""::"b"(0)' &&
4801         check_inline_asm ebx_available '"":::"%ebx"'
4802
4803     # check whether xmm clobbers are supported
4804     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4805
4806     check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
4807         check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
4808
4809     # check whether binutils is new enough to compile SSSE3/MMXEXT
4810     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4811     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4812
4813     if ! disabled_any asm mmx yasm; then
4814         if check_cmd $yasmexe --version; then
4815             enabled x86_64 && yasm_extra="-m amd64"
4816             yasm_debug="-g dwarf2"
4817         elif check_cmd nasm -v; then
4818             yasmexe=nasm
4819             yasm_debug="-g -F dwarf"
4820             if enabled x86_64; then
4821                 case "$objformat" in
4822                     elf)   objformat=elf64 ;;
4823                     win32) objformat=win64 ;;
4824                 esac
4825             fi
4826         fi
4827
4828         YASMFLAGS="-f $objformat $yasm_extra"
4829         enabled pic               && append YASMFLAGS "-DPIC"
4830         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4831         case "$objformat" in
4832             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4833         esac
4834
4835         check_yasm "movbe ecx, [5]" && enable yasm ||
4836             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4837         check_yasm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
4838         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4839         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4840         check_yasm "CPU amdnop" || disable cpunop
4841     fi
4842
4843     case "$cpu" in
4844         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4845             disable fast_clz
4846         ;;
4847     esac
4848
4849 fi
4850
4851 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4852
4853 check_ldflags -Wl,--as-needed
4854 check_ldflags -Wl,-z,noexecstack
4855
4856 if check_func dlopen; then
4857     ldl=
4858 elif check_func dlopen -ldl; then
4859     ldl=-ldl
4860 fi
4861
4862 frei0r_filter_extralibs='$ldl'
4863 frei0r_src_filter_extralibs='$ldl'
4864 ladspa_filter_extralibs='$ldl'
4865 nvenc_encoder_extralibs='$ldl'
4866
4867 if ! disabled network; then
4868     check_func getaddrinfo $network_extralibs
4869     check_func getservbyport $network_extralibs
4870     check_func inet_aton $network_extralibs
4871
4872     check_type netdb.h "struct addrinfo"
4873     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4874     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4875     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4876     check_type poll.h "struct pollfd"
4877     check_type netinet/sctp.h "struct sctp_event_subscribe"
4878     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4879     check_type netinet/in.h "struct sockaddr_in6"
4880     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4881     check_type "sys/types.h sys/socket.h" socklen_t
4882
4883     # Prefer arpa/inet.h over winsock2
4884     if check_header arpa/inet.h ; then
4885         check_func closesocket
4886     elif check_header winsock2.h ; then
4887         check_func_headers winsock2.h closesocket -lws2 &&
4888             network_extralibs="-lws2" ||
4889         { check_func_headers winsock2.h closesocket -lws2_32 &&
4890             network_extralibs="-lws2_32"; } || disable winsock2_h network
4891         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4892
4893         check_type ws2tcpip.h socklen_t
4894         check_type ws2tcpip.h "struct addrinfo"
4895         check_type ws2tcpip.h "struct group_source_req"
4896         check_type ws2tcpip.h "struct ip_mreq_source"
4897         check_type ws2tcpip.h "struct ipv6_mreq"
4898         check_type winsock2.h "struct pollfd"
4899         check_struct winsock2.h "struct sockaddr" sa_len
4900         check_type ws2tcpip.h "struct sockaddr_in6"
4901         check_type ws2tcpip.h "struct sockaddr_storage"
4902     else
4903         disable network
4904     fi
4905 fi
4906
4907 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4908 check_builtin atomic_compare_exchange "" "int *ptr, *oldval; int newval; __atomic_compare_exchange_n(ptr, oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)"
4909 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4910 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4911 check_builtin sarestart signal.h "SA_RESTART"
4912 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4913
4914 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4915 check_func  ${malloc_prefix}memalign            && enable memalign
4916 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4917
4918 check_func  access
4919 check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4920 check_func  fcntl
4921 check_func  fork
4922 check_func  gethrtime
4923 check_func  getopt
4924 check_func  getrusage
4925 check_func  gettimeofday
4926 check_func  gmtime_r
4927 check_func  isatty
4928 check_func  localtime_r
4929 check_func  mach_absolute_time
4930 check_func  mkstemp
4931 check_func  mmap
4932 check_func  mprotect
4933 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4934 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4935 check_func  sched_getaffinity
4936 check_func  setrlimit
4937 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4938 check_func  strerror_r
4939 check_func  sysconf
4940 check_func  sysctl
4941 check_func  usleep
4942
4943 check_func_headers conio.h kbhit
4944 check_func_headers io.h setmode
4945 check_func_headers lzo/lzo1x.h lzo1x_999_compress
4946 check_func_headers stdlib.h getenv
4947
4948 check_func_headers windows.h CoTaskMemFree -lole32
4949 check_func_headers windows.h GetProcessAffinityMask
4950 check_func_headers windows.h GetProcessTimes
4951 check_func_headers windows.h GetSystemTimeAsFileTime
4952 check_func_headers windows.h MapViewOfFile
4953 check_func_headers windows.h PeekNamedPipe
4954 check_func_headers windows.h SetConsoleTextAttribute
4955 check_func_headers windows.h Sleep
4956 check_func_headers windows.h VirtualAlloc
4957 check_struct windows.h "CONDITION_VARIABLE" Ptr
4958 check_func_headers glob.h glob
4959 enabled xlib &&
4960     check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4961
4962 check_header direct.h
4963 check_header dlfcn.h
4964 check_header d3d11.h
4965 check_header dxva.h
4966 check_header dxva2api.h -D_WIN32_WINNT=0x0600
4967 check_header io.h
4968 check_header libcrystalhd/libcrystalhd_if.h
4969 check_header mach/mach_time.h
4970 check_header malloc.h
4971 check_header net/udplite.h
4972 check_header poll.h
4973 check_header sys/mman.h
4974 check_header sys/param.h
4975 check_header sys/resource.h
4976 check_header sys/select.h
4977 check_header sys/time.h
4978 check_header sys/un.h
4979 check_header termios.h
4980 check_header unistd.h
4981 check_header valgrind/valgrind.h
4982 check_header vdpau/vdpau.h
4983 check_header vdpau/vdpau_x11.h
4984 check_header VideoDecodeAcceleration/VDADecoder.h
4985 check_header windows.h
4986 check_header X11/extensions/XvMClib.h
4987 check_header asm/types.h
4988
4989 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4990 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4991 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4992
4993 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4994
4995 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC"
4996 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
4997
4998 if ! disabled w32threads && ! enabled pthreads; then
4999     check_func_headers "windows.h process.h" _beginthreadex &&
5000         enable w32threads || disable w32threads
5001 fi
5002
5003 # check for some common methods of building with pthread support
5004 # do this before the optional library checks as some of them require pthreads
5005 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
5006     enable pthreads
5007     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
5008         add_cflags -pthread
5009         add_extralibs -pthread
5010     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
5011         add_cflags -pthreads
5012         add_extralibs -pthreads
5013     elif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; then
5014         add_cflags -ldl -pthread
5015         add_extralibs -ldl -pthread
5016     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
5017         add_extralibs -lpthreadGC2
5018     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
5019         :
5020     elif ! check_func pthread_join && ! check_func pthread_create; then
5021         disable pthreads
5022     fi
5023     check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
5024 fi
5025
5026
5027 if enabled pthreads; then
5028   check_func pthread_cancel
5029 fi
5030
5031 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
5032 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
5033 disabled  lzma || check_lib2  lzma.h lzma_version_number -llzma || disable lzma
5034
5035 check_lib math.h sin -lm && LIBM="-lm"
5036 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
5037
5038 atan2f_args=2
5039 ldexpf_args=2
5040 powf_args=2
5041
5042 for func in $MATH_FUNCS; do
5043     eval check_mathfunc $func \${${func}_args:-1}
5044 done
5045
5046 # these are off by default, so fail if requested and not available
5047 enabled avfoundation_indev && { check_header_oc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
5048 enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics ||
5049                                 check_lib2 ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; }
5050 enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
5051                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
5052                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
5053 enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
5054 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
5055 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
5056 enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
5057 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
5058 enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
5059 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
5060 enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
5061 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
5062 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
5063                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
5064                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
5065 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
5066 enabled libdcadec         && require_pkg_config dcadec libdcadec/dca_context.h dcadec_context_create
5067 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
5068 enabled libfdk_aac        && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
5069 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"
5070 enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
5071 enabled fontconfig        && enable libfontconfig
5072 enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
5073 enabled libfreetype       && require_libfreetype
5074 enabled libfribidi        && require_pkg_config fribidi fribidi.h fribidi_version_info
5075 enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
5076 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
5077                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
5078                                done || die "ERROR: libgsm not found"; }
5079 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
5080 enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
5081 enabled libmodplug        && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
5082 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
5083 enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
5084 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
5085 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
5086 enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
5087 enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
5088 enabled libopenjpeg       && { check_lib openjpeg.h opj_version -lopenmj2 -DOPJ_STATIC ||
5089                                check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
5090                                check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
5091                                die "ERROR: libopenjpeg not found"; }
5092 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
5093 enabled libpulse          && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new
5094 enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
5095 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
5096 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
5097 enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
5098 enabled libsmbclient      && { use_pkg_config smbclient libsmbclient.h smbc_init ||
5099                                require smbclient libsmbclient.h smbc_init -lsmbclient; }
5100 enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
5101 enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
5102 enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
5103 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
5104     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
5105     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
5106 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
5107 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
5108                              { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
5109                                die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
5110 enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
5111 enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
5112 enabled libvidstab        && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
5113 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
5114 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
5115 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
5116 enabled libvpx            && {
5117     enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
5118                                     die "ERROR: libvpx decoder version must be >=0.9.1"; }
5119     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 ||
5120                                     die "ERROR: libvpx encoder version must be >=0.9.7"; }
5121     enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
5122     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; } }
5123 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
5124 enabled libwebp           && {
5125     enabled libwebp_encoder      && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
5126     enabled libwebp_anim_encoder && { use_pkg_config "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit || disable libwebp_anim_encoder; } }
5127 enabled libx264           && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode ||
5128                                { require libx264 x264.h x264_encoder_encode -lx264 &&
5129                                  warn "using libx264 without pkg-config"; } } &&
5130                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
5131                                die "ERROR: libx264 must be installed and version must be >= 0.118."; }
5132 enabled libx265           && require_pkg_config x265 x265.h x265_encoder_encode &&
5133                              { check_cpp_condition x265.h "X265_BUILD >= 57" ||
5134                                die "ERROR: libx265 version must be >= 57."; }
5135 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
5136 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
5137 enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
5138 enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
5139 enabled mmal              && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
5140                                 { ! enabled cross_compile && {
5141                                     add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
5142                                     add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
5143                                     check_lib interface/mmal/mmal.h mmal_port_connect ; }
5144                                 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
5145                                die "ERROR: mmal not found"; }
5146 enabled nvenc             && { check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."; } &&
5147                              { check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
5148                                die "ERROR: NVENC API version 4 or older is not supported"; } &&
5149                              { [ $target_os != cygwin ] || die "ERROR: NVENC is not supported on Cygwin currently."; }
5150 enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
5151                                check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
5152                                die "ERROR: openal not found"; } &&
5153                              { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
5154                                die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
5155 enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
5156                                check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
5157                                die "ERROR: opencl not found"; } &&
5158                              { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
5159                                check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
5160                                die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
5161 enabled opengl            && { check_lib GL/glx.h glXGetProcAddress "-lGL" ||
5162                                check_lib2 windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
5163                                check_lib2 OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
5164                                check_lib2 ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
5165                                die "ERROR: opengl not found."
5166                              }
5167 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
5168                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
5169                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
5170                                die "ERROR: openssl not found"; }
5171 enabled qtkit_indev      && { check_header_oc QTKit/QTKit.h || disable qtkit_indev; }
5172
5173 if enabled gnutls; then
5174     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
5175     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
5176 fi
5177
5178 # libdc1394 check
5179 if enabled libdc1394; then
5180     { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
5181         enable libdc1394_2; } ||
5182     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
5183         enable libdc1394_1; } ||
5184     die "ERROR: No version of libdc1394 found "
5185 fi
5186 if ! disabled sdl; then
5187     SDL_CONFIG="${cross_prefix}sdl-config"
5188     if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
5189         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5190         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5191         enable sdl
5192     else
5193         if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5194             sdl_cflags=$("${SDL_CONFIG}" --cflags)
5195             sdl_libs=$("${SDL_CONFIG}" --libs)
5196             check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
5197             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5198             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5199             enable sdl
5200         elif enabled sdl ; then
5201             die "ERROR: SDL not found"
5202         else
5203             disable sdl
5204         fi
5205     fi
5206 fi
5207 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
5208
5209 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
5210 enabled makeinfo && (makeinfo --version | \
5211                      grep -q 'makeinfo (GNU texinfo) 5' > /dev/null 2>&1) \
5212     && enable makeinfo_html || disable makeinfo_html
5213 disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
5214 perl -v            > /dev/null 2>&1 && enable perl      || disable perl
5215 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
5216 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
5217
5218 check_header linux/fb.h
5219 check_header linux/videodev.h
5220 check_header linux/videodev2.h
5221 check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5222
5223 check_header sys/videoio.h
5224 check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5225
5226 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
5227 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
5228 # w32api 3.12 had it defined wrong
5229 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
5230
5231 check_type "dshow.h" IBaseFilter
5232
5233 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
5234 { check_header dev/bktr/ioctl_meteor.h &&
5235   check_header dev/bktr/ioctl_bt848.h; } ||
5236 { check_header machine/ioctl_meteor.h &&
5237   check_header machine/ioctl_bt848.h; } ||
5238 { check_header dev/video/meteor/ioctl_meteor.h &&
5239   check_header dev/video/bktr/ioctl_bt848.h; } ||
5240 check_header dev/ic/bt8xx.h
5241
5242 check_header sndio.h
5243 if check_struct sys/soundcard.h audio_buf_info bytes; then
5244     enable_safe sys/soundcard.h
5245 else
5246     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
5247     #include <sys/soundcard.h>
5248     audio_buf_info abc;
5249 EOF
5250 fi
5251 check_header soundcard.h
5252
5253 enabled_any alsa_indev alsa_outdev &&
5254     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
5255
5256 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
5257     check_func jack_port_get_latency_range -ljack
5258
5259 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
5260
5261 if enabled libcdio; then
5262     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5263     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5264     die "ERROR: No usable libcdio/cdparanoia found"
5265 fi
5266
5267 enabled xlib &&
5268     check_lib X11/Xlib.h XOpenDisplay -lX11 || disable xlib
5269
5270 if ! disabled libxcb; then
5271     check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || {
5272         enabled libxcb && die "ERROR: libxcb >= 1.4 not found";
5273     } && disable x11grab && enable libxcb
5274
5275 if enabled libxcb; then
5276     disabled libxcb_shm || {
5277         check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
5278             enabled libxcb_shm && die "ERROR: libxcb_shm not found";
5279         } && check_header sys/shm.h && enable libxcb_shm; }
5280
5281     disabled libxcb_xfixes || {
5282         check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
5283             enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
5284         } && enable libxcb_xfixes; }
5285
5286     disabled libxcb_shape || {
5287         check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || {
5288             enabled libxcb_shape && die "ERROR: libxcb_shape not found";
5289         } && enable libxcb_shape; }
5290
5291     add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags
5292     add_extralibs $xcb_libs $xcb_shm_libs $xcb_xfixes_libs $xcb_shape_libs
5293 fi
5294 fi
5295
5296 if enabled x11grab; then
5297     enabled xlib || die "ERROR: Xlib not found"
5298     require Xext X11/extensions/XShm.h XShmCreateImage -lXext
5299     require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
5300 fi
5301
5302 check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
5303
5304 enabled dxva2api_h &&
5305     check_cc <<EOF && enable dxva2api_cobj
5306 #define _WIN32_WINNT 0x0600
5307 #define COBJMACROS
5308 #include <windows.h>
5309 #include <d3d9.h>
5310 #include <dxva2api.h>
5311 int main(void) { IDirectXVideoDecoder *o = NULL; IDirectXVideoDecoder_Release(o); return 0; }
5312 EOF
5313
5314 enabled d3d11_h &&
5315     check_cc <<EOF && enable d3d11_cobj
5316 #define _WIN32_WINNT 0x0600
5317 #define COBJMACROS
5318 #include <windows.h>
5319 #include <d3d11.h>
5320 int main(void) { ID3D11VideoDecoder *o = NULL; ID3D11VideoDecoder_Release(o); return 0; }
5321 EOF
5322
5323 enabled vaapi &&
5324     check_lib va/va.h vaInitialize -lva ||
5325     disable vaapi
5326
5327 enabled vaapi && enabled xlib &&
5328     check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
5329     enable vaapi_x11
5330
5331 enabled vdpau &&
5332     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
5333     disable vdpau
5334
5335 enabled vdpau && enabled xlib &&
5336     check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
5337     prepend ffmpeg_libs $($ldflags_filter "-lvdpau") &&
5338     enable vdpau_x11
5339
5340 # Funny iconv installations are not unusual, so check it after all flags have been set
5341 disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
5342
5343 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
5344
5345 # add some useful compiler flags if supported
5346 check_cflags -Wdeclaration-after-statement
5347 check_cflags -Wall
5348 check_cflags -Wdisabled-optimization
5349 check_cflags -Wpointer-arith
5350 check_cflags -Wredundant-decls
5351 check_cflags -Wwrite-strings
5352 check_cflags -Wtype-limits
5353 check_cflags -Wundef
5354 check_cflags -Wmissing-prototypes
5355 check_cflags -Wno-pointer-to-int-cast
5356 check_cflags -Wstrict-prototypes
5357 check_cflags -Wempty-body
5358 enabled extra_warnings && check_cflags -Winline
5359
5360 check_disable_warning(){
5361     warning_flag=-W${1#-Wno-}
5362     test_cflags $warning_flag && add_cflags $1
5363 }
5364
5365 check_disable_warning -Wno-parentheses
5366 check_disable_warning -Wno-switch
5367 check_disable_warning -Wno-format-zero-length
5368 check_disable_warning -Wno-pointer-sign
5369
5370 # add some linker flags
5371 check_ldflags -Wl,--warn-common
5372 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
5373 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
5374 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
5375
5376 # add some strip flags
5377 # -wN '..@*' is more selective than -x, but not available everywhere.
5378 check_stripflags -wN \'..@*\' || check_stripflags -x
5379
5380 enabled neon_clobber_test &&
5381     check_ldflags -Wl,--wrap,avcodec_open2              \
5382                   -Wl,--wrap,avcodec_decode_audio4      \
5383                   -Wl,--wrap,avcodec_decode_video2      \
5384                   -Wl,--wrap,avcodec_decode_subtitle2   \
5385                   -Wl,--wrap,avcodec_encode_audio2      \
5386                   -Wl,--wrap,avcodec_encode_video2      \
5387                   -Wl,--wrap,avcodec_encode_subtitle    \
5388                   -Wl,--wrap,swr_convert                \
5389                   -Wl,--wrap,avresample_convert ||
5390     disable neon_clobber_test
5391
5392 enabled xmm_clobber_test &&
5393     check_ldflags -Wl,--wrap,avcodec_open2              \
5394                   -Wl,--wrap,avcodec_decode_audio4      \
5395                   -Wl,--wrap,avcodec_decode_video2      \
5396                   -Wl,--wrap,avcodec_decode_subtitle2   \
5397                   -Wl,--wrap,avcodec_encode_audio2      \
5398                   -Wl,--wrap,avcodec_encode_video       \
5399                   -Wl,--wrap,avcodec_encode_video2      \
5400                   -Wl,--wrap,avcodec_encode_subtitle    \
5401                   -Wl,--wrap,swr_convert                \
5402                   -Wl,--wrap,avresample_convert         \
5403                   -Wl,--wrap,sws_scale ||
5404     disable xmm_clobber_test
5405
5406 echo "X{};" > $TMPV
5407 if test_ldflags -Wl,--version-script,$TMPV; then
5408     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
5409     check_cc <<EOF && enable symver_asm_label
5410 void ff_foo(void) __asm__ ("av_foo@VERSION");
5411 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
5412 EOF
5413     check_cc <<EOF && enable symver_gnu_asm
5414 __asm__(".symver ff_foo,av_foo@VERSION");
5415 void ff_foo(void) {}
5416 EOF
5417 fi
5418
5419 if [ -z "$optflags" ]; then
5420     if enabled small; then
5421         optflags=$cflags_size
5422     elif enabled optimizations; then
5423         optflags=$cflags_speed
5424     else
5425         optflags=$cflags_noopt
5426     fi
5427 fi
5428
5429 check_optflags(){
5430     check_cflags "$@"
5431     enabled lto && check_ldflags "$@"
5432 }
5433
5434
5435 if enabled lto; then
5436     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
5437     check_cflags  -flto
5438     check_ldflags -flto $cpuflags
5439     disable inline_asm_direct_symbol_refs
5440 fi
5441
5442 check_optflags $optflags
5443 check_optflags -fno-math-errno
5444 check_optflags -fno-signed-zeros
5445
5446 enabled ftrapv && check_cflags -ftrapv
5447
5448 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
5449 int x;
5450 EOF
5451
5452
5453 if enabled icc; then
5454     # Just warnings, no remarks
5455     check_cflags -w1
5456     # -wd: Disable following warnings
5457     # 144, 167, 556: -Wno-pointer-sign
5458     # 188: enumerated type mixed with another type
5459     # 1292: attribute "foo" ignored
5460     # 1419: external declaration in primary source file
5461     # 10006: ignoring unknown option -fno-signed-zeros
5462     # 10148: ignoring unknown option -Wno-parentheses
5463     # 10156: ignoring option '-W'; no argument required
5464     # 13200: No EMMS instruction before call to function
5465     # 13203: No EMMS instruction before return from function
5466     check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
5467     # 11030: Warning unknown option --as-needed
5468     # 10156: ignoring option '-export'; no argument required
5469     check_ldflags -wd10156,11030
5470     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
5471     enable ebp_available
5472     # The test above does not test linking
5473     enabled lto && disable symver_asm_label
5474     if enabled x86_32; then
5475         icc_version=$($cc -dumpversion)
5476         test ${icc_version%%.*} -ge 11 &&
5477             check_cflags -falign-stack=maintain-16-byte ||
5478             disable aligned_stack
5479     fi
5480 elif enabled ccc; then
5481     # disable some annoying warnings
5482     add_cflags -msg_disable bitnotint
5483     add_cflags -msg_disable mixfuncvoid
5484     add_cflags -msg_disable nonstandcast
5485     add_cflags -msg_disable unsupieee
5486 elif enabled gcc; then
5487     check_optflags -fno-tree-vectorize
5488     check_cflags -Werror=format-security
5489     check_cflags -Werror=implicit-function-declaration
5490     check_cflags -Werror=missing-prototypes
5491     check_cflags -Werror=return-type
5492     check_cflags -Werror=vla
5493     check_cflags -Wformat
5494     check_cflags -fdiagnostics-color=auto
5495     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
5496 elif enabled llvm_gcc; then
5497     check_cflags -mllvm -stack-alignment=16
5498 elif enabled clang; then
5499     check_cflags -mllvm -stack-alignment=16
5500     check_cflags -Qunused-arguments
5501     check_cflags -Werror=implicit-function-declaration
5502     check_cflags -Werror=missing-prototypes
5503     check_cflags -Werror=return-type
5504 elif enabled cparser; then
5505     add_cflags -Wno-missing-variable-declarations
5506     add_cflags -Wno-empty-statement
5507 elif enabled armcc; then
5508     add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
5509     add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
5510     # 2523: use of inline assembly is deprecated
5511     add_cflags -W${armcc_opt},--diag_suppress=2523
5512     add_cflags -W${armcc_opt},--diag_suppress=1207
5513     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
5514     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
5515     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
5516     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
5517 elif enabled tms470; then
5518     add_cflags -pds=824 -pds=837
5519     disable inline_asm
5520 elif enabled pathscale; then
5521     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
5522 elif enabled_any msvc icl; then
5523     enabled x86_32 && disable aligned_stack
5524     enabled_all x86_32 debug && add_cflags -Oy-
5525     enabled debug && add_ldflags -debug
5526     enable pragma_deprecated
5527     if enabled icl; then
5528         # -Qansi-alias is basically -fstrict-aliasing, but does not work
5529         # (correctly) on icl 13.x.
5530         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
5531             add_cflags -Qansi-alias
5532         # Some inline asm is not compilable in debug
5533         if enabled debug; then
5534             disable ebp_available
5535             disable ebx_available
5536         fi
5537     fi
5538     # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
5539     check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
5540 fi
5541
5542 case $as_type in
5543     clang)
5544         add_asflags -Qunused-arguments
5545     ;;
5546 esac
5547
5548 case $ld_type in
5549     clang)
5550         check_ldflags -Qunused-arguments
5551     ;;
5552 esac
5553
5554 case $target_os in
5555     osf1)
5556         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
5557     ;;
5558     plan9)
5559         add_cppflags -Dmain=plan9_main
5560     ;;
5561 esac
5562
5563 enable frame_thread_encoder
5564
5565 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
5566
5567 check_deps $CONFIG_LIST       \
5568            $CONFIG_EXTRA      \
5569            $HAVE_LIST         \
5570            $ALL_COMPONENTS    \
5571
5572 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"
5573
5574
5575 if test $target_os = "haiku"; then
5576     disable memalign
5577     disable posix_memalign
5578 fi
5579
5580 enabled_all d3d11va d3d11_cobj CoTaskMemFree &&
5581     prepend ffmpeg_libs $($ldflags_filter "-lole32") &&
5582     enable d3d11va_lib
5583
5584 enabled_all dxva2 dxva2api_cobj CoTaskMemFree &&
5585     prepend ffmpeg_libs $($ldflags_filter "-lole32" "-luser32") &&
5586     enable dxva2_lib
5587
5588 ! enabled_any memalign posix_memalign aligned_malloc &&
5589     enabled simd_align_16 && enable memalign_hack
5590
5591 # add_dep lib dep
5592 # -> enable ${lib}_deps_${dep}
5593 # -> add $dep to ${lib}_deps only once
5594 add_dep() {
5595     lib=$1
5596     dep=$2
5597     enabled "${lib}_deps_${dep}" && return 0
5598     enable  "${lib}_deps_${dep}"
5599     prepend "${lib}_deps" $dep
5600 }
5601
5602 # merge deps lib components
5603 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
5604 merge_deps() {
5605     lib=$1
5606     shift
5607     for comp in $*; do
5608         enabled $comp || continue
5609         eval "dep=\"\$${comp}_deps\""
5610         for d in $dep; do
5611             add_dep $lib $d
5612         done
5613     done
5614 }
5615
5616 merge_deps libavfilter $FILTER_LIST
5617
5618 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
5619
5620 for thread in $THREADS_LIST; do
5621     if enabled $thread; then
5622         test -n "$thread_type" &&
5623             die "ERROR: Only one thread type must be selected." ||
5624             thread_type="$thread"
5625     fi
5626 done
5627
5628 enabled zlib && add_cppflags -DZLIB_CONST
5629
5630 # conditional library dependencies, in linking order
5631 enabled amovie_filter       && prepend avfilter_deps "avformat avcodec"
5632 enabled aresample_filter    && prepend avfilter_deps "swresample"
5633 enabled asyncts_filter      && prepend avfilter_deps "avresample"
5634 enabled atempo_filter       && prepend avfilter_deps "avcodec"
5635 enabled cover_rect_filter   && prepend avfilter_deps "avformat avcodec"
5636 enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
5637 enabled elbg_filter         && prepend avfilter_deps "avcodec"
5638 enabled fftfilt_filter      && prepend avfilter_deps "avcodec"
5639 enabled find_rect_filter    && prepend avfilter_deps "avformat avcodec"
5640 enabled mcdeint_filter      && prepend avfilter_deps "avcodec"
5641 enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
5642 enabled pan_filter          && prepend avfilter_deps "swresample"
5643 enabled pp_filter           && prepend avfilter_deps "postproc"
5644 enabled removelogo_filter   && prepend avfilter_deps "avformat avcodec swscale"
5645 enabled resample_filter && prepend avfilter_deps "avresample"
5646 enabled sab_filter          && prepend avfilter_deps "swscale"
5647 enabled scale_filter    && prepend avfilter_deps "swscale"
5648 enabled showspectrum_filter && prepend avfilter_deps "avcodec"
5649 enabled smartblur_filter    && prepend avfilter_deps "swscale"
5650 enabled subtitles_filter    && prepend avfilter_deps "avformat avcodec"
5651 enabled uspp_filter         && prepend avfilter_deps "avcodec"
5652
5653 enabled lavfi_indev         && prepend avdevice_deps "avfilter"
5654
5655 enabled opus_decoder    && prepend avcodec_deps "swresample"
5656
5657 expand_deps(){
5658     lib_deps=${1}_deps
5659     eval "deps=\$$lib_deps"
5660     append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
5661     unique $lib_deps
5662 }
5663
5664 #we have to remove gpl from the deps here as some code assumes all lib deps are libs
5665 postproc_deps="$(filter_out 'gpl' $postproc_deps)"
5666
5667 map 'expand_deps $v' $LIBRARY_LIST
5668
5669 echo "install prefix            $prefix"
5670 echo "source path               $source_path"
5671 echo "C compiler                $cc"
5672 echo "C library                 $libc_type"
5673 if test "$host_cc" != "$cc"; then
5674     echo "host C compiler           $host_cc"
5675     echo "host C library            $host_libc_type"
5676 fi
5677 echo "ARCH                      $arch ($cpu)"
5678 if test "$build_suffix" != ""; then
5679     echo "build suffix              $build_suffix"
5680 fi
5681 if test "$progs_suffix" != ""; then
5682     echo "progs suffix              $progs_suffix"
5683 fi
5684 if test "$extra_version" != ""; then
5685     echo "version string suffix     $extra_version"
5686 fi
5687 echo "big-endian                ${bigendian-no}"
5688 echo "runtime cpu detection     ${runtime_cpudetect-no}"
5689 if enabled x86; then
5690     echo "${yasmexe}                      ${yasm-no}"
5691     echo "MMX enabled               ${mmx-no}"
5692     echo "MMXEXT enabled            ${mmxext-no}"
5693     echo "3DNow! enabled            ${amd3dnow-no}"
5694     echo "3DNow! extended enabled   ${amd3dnowext-no}"
5695     echo "SSE enabled               ${sse-no}"
5696     echo "SSSE3 enabled             ${ssse3-no}"
5697     echo "AVX enabled               ${avx-no}"
5698     echo "XOP enabled               ${xop-no}"
5699     echo "FMA3 enabled              ${fma3-no}"
5700     echo "FMA4 enabled              ${fma4-no}"
5701     echo "i686 features enabled     ${i686-no}"
5702     echo "CMOV is fast              ${fast_cmov-no}"
5703     echo "EBX available             ${ebx_available-no}"
5704     echo "EBP available             ${ebp_available-no}"
5705 fi
5706 if enabled aarch64; then
5707     echo "NEON enabled              ${neon-no}"
5708     echo "VFP enabled               ${vfp-no}"
5709 fi
5710 if enabled arm; then
5711     echo "ARMv5TE enabled           ${armv5te-no}"
5712     echo "ARMv6 enabled             ${armv6-no}"
5713     echo "ARMv6T2 enabled           ${armv6t2-no}"
5714     echo "VFP enabled               ${vfp-no}"
5715     echo "NEON enabled              ${neon-no}"
5716     echo "THUMB enabled             ${thumb-no}"
5717 fi
5718 if enabled mips; then
5719     echo "MIPS FPU enabled          ${mipsfpu-no}"
5720     echo "MIPS32R5 enabled          ${mips32r5-no}"
5721     echo "MIPS64R6 enabled          ${mips64r6-no}"
5722     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
5723     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
5724     echo "MIPS MSA enabled          ${msa-no}"
5725     echo "LOONGSON3 enabled         ${loongson3-no}"
5726 fi
5727 if enabled ppc; then
5728     echo "AltiVec enabled           ${altivec-no}"
5729     echo "PPC 4xx optimizations     ${ppc4xx-no}"
5730     echo "PPC VSX optimizations     ${vsx-no}"
5731     echo "dcbzl available           ${dcbzl-no}"
5732 fi
5733 echo "debug symbols             ${debug-no}"
5734 echo "strip symbols             ${stripping-no}"
5735 echo "optimize for size         ${small-no}"
5736 echo "optimizations             ${optimizations-no}"
5737 echo "static                    ${static-no}"
5738 echo "shared                    ${shared-no}"
5739 echo "postprocessing support    ${postproc-no}"
5740 echo "new filter support        ${avfilter-no}"
5741 echo "network support           ${network-no}"
5742 echo "threading support         ${thread_type-no}"
5743 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
5744 echo "SDL support               ${sdl-no}"
5745 echo "opencl enabled            ${opencl-no}"
5746 echo "texi2html enabled         ${texi2html-no}"
5747 echo "perl enabled              ${perl-no}"
5748 echo "pod2man enabled           ${pod2man-no}"
5749 echo "makeinfo enabled          ${makeinfo-no}"
5750 echo "makeinfo supports HTML    ${makeinfo_html-no}"
5751 test -n "$random_seed" &&
5752     echo "random seed               ${random_seed}"
5753 echo
5754
5755 echo "External libraries:"
5756 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
5757 echo
5758
5759 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
5760     echo "Enabled ${type}s:"
5761     eval list=\$$(toupper $type)_LIST
5762     print_enabled '_*' $list | print_3_columns
5763     echo
5764 done
5765
5766 license="LGPL version 2.1 or later"
5767 if enabled nonfree; then
5768     license="nonfree and unredistributable"
5769 elif enabled gplv3; then
5770     license="GPL version 3 or later"
5771 elif enabled lgplv3; then
5772     license="LGPL version 3 or later"
5773 elif enabled gpl; then
5774     license="GPL version 2 or later"
5775 fi
5776
5777 echo "License: $license"
5778
5779 echo "Creating config.mak, config.h, and doc/config.texi..."
5780
5781 test -e Makefile || echo "include $source_path/Makefile" > Makefile
5782
5783 enabled stripping || strip="echo skipping strip"
5784
5785 config_files="$TMPH config.mak doc/config.texi"
5786
5787 cat > config.mak <<EOF
5788 # Automatically generated by configure - do not modify!
5789 ifndef FFMPEG_CONFIG_MAK
5790 FFMPEG_CONFIG_MAK=1
5791 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
5792 prefix=$prefix
5793 LIBDIR=\$(DESTDIR)$libdir
5794 SHLIBDIR=\$(DESTDIR)$shlibdir
5795 INCDIR=\$(DESTDIR)$incdir
5796 BINDIR=\$(DESTDIR)$bindir
5797 DATADIR=\$(DESTDIR)$datadir
5798 DOCDIR=\$(DESTDIR)$docdir
5799 MANDIR=\$(DESTDIR)$mandir
5800 SRC_PATH=$source_path
5801 ifndef MAIN_MAKEFILE
5802 SRC_PATH:=\$(SRC_PATH:.%=..%)
5803 endif
5804 CC_IDENT=$cc_ident
5805 ARCH=$arch
5806 INTRINSICS=$intrinsics
5807 CC=$cc
5808 CXX=$cxx
5809 AS=$as
5810 LD=$ld
5811 DEPCC=$dep_cc
5812 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
5813 DEPAS=$as
5814 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
5815 YASM=$yasmexe
5816 DEPYASM=$yasmexe
5817 AR=$ar
5818 ARFLAGS=$arflags
5819 AR_O=$ar_o
5820 RANLIB=$ranlib
5821 STRIP=$strip
5822 CP=cp -p
5823 LN_S=$ln_s
5824 CPPFLAGS=$CPPFLAGS
5825 CFLAGS=$CFLAGS
5826 CXXFLAGS=$CXXFLAGS
5827 ASFLAGS=$ASFLAGS
5828 AS_C=$AS_C
5829 AS_O=$AS_O
5830 CC_C=$CC_C
5831 CC_E=$CC_E
5832 CC_O=$CC_O
5833 CXX_C=$CXX_C
5834 CXX_O=$CXX_O
5835 LD_O=$LD_O
5836 LD_LIB=$LD_LIB
5837 LD_PATH=$LD_PATH
5838 DLLTOOL=$dlltool
5839 WINDRES=$windres
5840 DEPWINDRES=$dep_cc
5841 DOXYGEN=$doxygen
5842 LDFLAGS=$LDFLAGS
5843 LDEXEFLAGS=$LDEXEFLAGS
5844 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
5845 ASMSTRIPFLAGS=$ASMSTRIPFLAGS
5846 YASMFLAGS=$YASMFLAGS
5847 BUILDSUF=$build_suffix
5848 PROGSSUF=$progs_suffix
5849 FULLNAME=$FULLNAME
5850 LIBPREF=$LIBPREF
5851 LIBSUF=$LIBSUF
5852 LIBNAME=$LIBNAME
5853 SLIBPREF=$SLIBPREF
5854 SLIBSUF=$SLIBSUF
5855 EXESUF=$EXESUF
5856 EXTRA_VERSION=$extra_version
5857 CCDEP=$CCDEP
5858 CXXDEP=$CXXDEP
5859 CCDEP_FLAGS=$CCDEP_FLAGS
5860 ASDEP=$ASDEP
5861 ASDEP_FLAGS=$ASDEP_FLAGS
5862 CC_DEPFLAGS=$CC_DEPFLAGS
5863 AS_DEPFLAGS=$AS_DEPFLAGS
5864 HOSTCC=$host_cc
5865 HOSTLD=$host_ld
5866 HOSTCFLAGS=$host_cflags
5867 HOSTCPPFLAGS=$host_cppflags
5868 HOSTEXESUF=$HOSTEXESUF
5869 HOSTLDFLAGS=$host_ldflags
5870 HOSTLIBS=$host_libs
5871 DEPHOSTCC=$host_cc
5872 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
5873 HOSTCCDEP=$HOSTCCDEP
5874 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
5875 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
5876 HOSTCC_C=$HOSTCC_C
5877 HOSTCC_O=$HOSTCC_O
5878 HOSTLD_O=$HOSTLD_O
5879 TARGET_EXEC=$target_exec $target_exec_args
5880 TARGET_PATH=$target_path
5881 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
5882 CFLAGS-ffplay=$sdl_cflags
5883 ZLIB=$($ldflags_filter -lz)
5884 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
5885 EXTRALIBS=$extralibs
5886 COMPAT_OBJS=$compat_objs
5887 EXEOBJS=$exeobjs
5888 INSTALL=$install
5889 LIBTARGET=${LIBTARGET}
5890 SLIBNAME=${SLIBNAME}
5891 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
5892 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
5893 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
5894 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
5895 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
5896 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
5897 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
5898 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
5899 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
5900 NOREDZONE_FLAGS=$noredzone_flags
5901 EOF
5902
5903 get_version(){
5904     lcname=lib${1}
5905     name=$(toupper $lcname)
5906     file=$source_path/$lcname/version.h
5907     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
5908     enabled raise_major && eval ${name}_VERSION_MAJOR=$((${name}_VERSION_MAJOR+100))
5909     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
5910     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
5911     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
5912     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
5913 }
5914
5915 map 'get_version $v' $LIBRARY_LIST
5916
5917 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
5918
5919 print_program_libs(){
5920     eval "program_libs=\$${1}_libs"
5921     eval echo "LIBS-${1}=${program_libs}" >> config.mak
5922 }
5923
5924 map 'print_program_libs $v' $PROGRAM_LIST
5925
5926 cat > $TMPH <<EOF
5927 /* Automatically generated by configure - do not modify! */
5928 #ifndef FFMPEG_CONFIG_H
5929 #define FFMPEG_CONFIG_H
5930 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
5931 #define FFMPEG_LICENSE "$(c_escape $license)"
5932 #define CONFIG_THIS_YEAR 2015
5933 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
5934 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
5935 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
5936 #define av_restrict $_restrict
5937 #define EXTERN_PREFIX "${extern_prefix}"
5938 #define EXTERN_ASM ${extern_prefix}
5939 #define BUILDSUF "$build_suffix"
5940 #define SLIBSUF "$SLIBSUF"
5941 #define HAVE_MMX2 HAVE_MMXEXT
5942 #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
5943 EOF
5944
5945 test -n "$assert_level" &&
5946     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
5947
5948 test -n "$malloc_prefix" &&
5949     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
5950
5951 if enabled yasm; then
5952     append config_files $TMPASM
5953     printf '' >$TMPASM
5954 fi
5955
5956 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
5957
5958
5959 mkdir -p doc
5960 mkdir -p tests
5961 echo "@c auto-generated by configure" > doc/config.texi
5962
5963 print_config ARCH_   "$config_files" $ARCH_LIST
5964 print_config HAVE_   "$config_files" $HAVE_LIST
5965 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
5966                                      $CONFIG_EXTRA      \
5967                                      $ALL_COMPONENTS    \
5968
5969 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
5970 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
5971
5972 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
5973 cp_if_changed $TMPH config.h
5974 touch .config
5975
5976 enabled yasm && cp_if_changed $TMPASM config.asm
5977
5978 cat > $TMPH <<EOF
5979 /* Generated by ffconf */
5980 #ifndef AVUTIL_AVCONFIG_H
5981 #define AVUTIL_AVCONFIG_H
5982 EOF
5983
5984 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
5985
5986 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
5987
5988 cp_if_changed $TMPH libavutil/avconfig.h
5989
5990 if test -n "$WARNINGS"; then
5991     printf "\n$WARNINGS"
5992     enabled fatal_warnings && exit 1
5993 fi
5994
5995 # build pkg-config files
5996
5997 lib_version(){
5998     eval printf "\"lib${1}${build_suffix} >= \$LIB$(toupper ${1})_VERSION, \""
5999 }
6000
6001 pkgconfig_generate(){
6002     name=$1
6003     shortname=${name#lib}${build_suffix}
6004     comment=$2
6005     version=$3
6006     libs=$4
6007     requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
6008     requires=${requires%, }
6009     enabled ${name#lib} || return 0
6010     mkdir -p $name
6011     cat <<EOF > $name/$name${build_suffix}.pc
6012 prefix=$prefix
6013 exec_prefix=\${prefix}
6014 libdir=$libdir
6015 includedir=$incdir
6016
6017 Name: $name
6018 Description: $comment
6019 Version: $version
6020 Requires: $(enabled shared || echo $requires)
6021 Requires.private: $(enabled shared && echo $requires)
6022 Conflicts:
6023 Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs)
6024 Libs.private: $(enabled shared && echo $libs)
6025 Cflags: -I\${includedir}
6026 EOF
6027
6028 mkdir -p doc/examples/pc-uninstalled
6029 includedir=${source_path}
6030 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
6031     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
6032 prefix=
6033 exec_prefix=
6034 libdir=\${pcfiledir}/../../../$name
6035 includedir=${includedir}
6036
6037 Name: $name
6038 Description: $comment
6039 Version: $version
6040 Requires: $requires
6041 Conflicts:
6042 Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
6043 Cflags: -I\${includedir}
6044 EOF
6045 }
6046
6047 pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBRT $LIBM"
6048 pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs"
6049 pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs"
6050 pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs"
6051 pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs"
6052 pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""
6053 pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$LIBM"
6054 pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"
6055 pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM"