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