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