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