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